标签: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()
当时调用部署好的合约的方法的时候
一直报地址错误
大家的博客也没提到这个
发现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
编程
不过网站有时打开特别慢
网上也有下载离线的教程。
标签:retreive,web3,storage,Storage,contract,智能,测试,eth,合约 来源: https://www.cnblogs.com/jackden/p/12755524.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。