前言
本文章使用的geth.exe
版本为1.5.9-stable
使用的solc.exe
版本为0.4.9
被坑了好久查了好多资料
版本问题会导致各种报错!
版本问题会导致各种报错!
版本问题会导致各种报错!
solc
编译器下载地址
https://github.com/ethereum/solidity/releases
有一个小知识点
web3.eth.defaultAccount
属性记录了默认地址,在以下方法中如果没有指定from
属性, 将使用该属性的值作为默认的from
属性值。web3.eth.sendTransaction()
web3.eth.call()
new web3.eth.Contract() -> myContract.methods.myMethod().call()
new web3.eth.Contract() -> myContract.methods.myMethod().send()
当时调用部署好的合约的方法的时候
一直报地址错误
大家的博客也没提到这个
发现defaultAccount
为undefined
给defaultAccount
赋值个账户地址就不报错了
web3.eth.defaultAccount = web3.eth.coinbase;
编写合约代码
使用喜欢的文本编辑器编写solidity
代码
pragam solidity ^0.4.4;//说明本段代码的版本约束
/**
* @title Storage
* @测试存储和读取变量的值
*/
contract Storage {
uint256 number;
function store(unint256 num) public {
number = num;
}
function retreive() public constant returns (uint256) {
return number;
}
}
将这段代码保存为Storage.sol
编译
可以在Storage.sol
文件同目录下
新建一个build
文件夹
用来保存编译好的文件
solc -o build --bin --abi --overwrite Storage.sol
执行命令后发现
build
文件夹下多了两个文件
Storage.bin
为编译后的字节码文件
Storage.abi
为接口文件
部署
生成的abi
文件的用途
var storageContract = web3.eth.contract(Storage.abi文件中的内容,不用加引号);
生成的bin
文件的用途
var storage = storageContract.new(
{
from: '账户地址',
data: 'Storage.bin文件中的内容,要在前面加0x,并要加引号',
gas: '200000'
},
function (e, contract){
console.log(e, contract);
if (typeof contract.address !== 'undefined') {
console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
}
}
);
之后挖矿
将合约部署到区块链上。
miner.start();
运行
使用storage.retreive()
可以运行retreive
函数
使用storage.store()
可以运行store
函数
不过store
需要改变区块链上的值
所以需要花钱
会发起交易
有交易
就要挖矿
挖矿
完成后
再使用storage.retreive()
查看
可以发现返回值已经发生改变
> storage.retreive()
> 0
> storage.store(100)
> '0xa2……8b'
> miner.start();
> true
> miner.stop();
> true
> storage.retreive()
> 100
总结
现在知道了智能合约怎么部署到我们的私链上
但是如果想学习智能合约编程
这样每次改动代码都要编译、部署、测试
特别麻烦
所以找到了个在线的IDE
可以快速编译、部署
还能随意切换版本
这样就可以提高学习效率
能够专心的学习solidity
编程
不过网站有时打开特别慢
网上也有下载离线的教程。