智能合约测试

前言

本文章使用的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()

当时调用部署好的合约的方法的时候

一直报地址错误

大家的博客也没提到这个

发现defaultAccountundefined

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

http://remix.ethereum.org/

可以快速编译、部署

还能随意切换版本

这样就可以提高学习效率

能够专心的学习solidity编程

智能合约测试

不过网站有时打开特别慢

网上也有下载离线的教程。

上一篇:配置交换机Trunk接口流量本地优先转发(集群/堆叠)


下一篇:以太坊智能合约项目开发——Web3.py库安装及错误解决方案