ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

智能合约测试

2020-04-22 20:01:45  阅读:461  来源: 互联网

标签:retreive web3 storage Storage contract 智能 测试 eth 合约


前言

本文章使用的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编程

remix在线ide

不过网站有时打开特别慢

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

标签:retreive,web3,storage,Storage,contract,智能,测试,eth,合约
来源: https://www.cnblogs.com/jackden/p/12755524.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有