blockchain_smart_contract
ethereum smart contract的编写
智能合约讲解
Demo来自solidity的官网,制定了一个带有委托功能的投票(选举)智能合约。
逐行讲解代码,以便大家了解solidity语法和合约功能。
|
|
从最简单开始
合约地址
|
|
打开合约在线编译地址,把上面的合约复制进去,点击右侧的“Start to compile”
如果所示,编译成功。
我们点击Detail,打开编译的详情。我们需要的部分如下:
我们copy WEB3DEPLOY中的内容(2个JS变量),粘贴在geth的命令行中。
粘贴后提示先解锁账户,我们解锁账户0。
之后又有报错:Error: exceeds block gas limit undefined,我们采用文档的说法把gas:’4700000’改为gas:’3000000’
结果如下:
得到了两个值
- 交易哈希:
fullhash=0x9b1b99ad03b577839547127304c7e149eaa50d5deb932c5f25b285005ea8edbc - 合约地址:
contract=0xEd9F8F66fFac7FF317b4f10d48721d36E111a308
现在需要挖矿把合约写到区块链中。
看到Contract mined!,表示合约已经写到链上了。
调用一次合约:
调用合约中的set方法,把值设置为1106,这笔操作的gas费用从acc0账户出。执行成功后,得到”0x945de4c8424e1c2675d90e1f03f13ad56fd329460d32f988b3cbf0c6ff9270b7”这个hash值,是交易的哈希。
现在要继续挖矿,把这次的结果写入链中,才能看到生效。
挖矿成功后:
刚才的数据已经set成功。get属于constant类型,不改变状态,所以不消耗gas。
找回合约
如果把geth关掉了,怎么找回合约呢?
我们刚才使用的是WEB3DEPLOY中内容,现在使用另一个ABI的值。
|
|
geth中执行(把回车符去除,否则会截断报错)
0xEd9F8F66fFac7FF317b4f10d48721d36E111a308是上文记录的合约地址。
这样就把合约再次创建出来了。
我们之前操作的结果还在。
|
|