调用智能合约
我们已经创建了合约的实例,接下来围绕着该合约实例,我们就可以发送交易(消息)来通讯并且设置合约中的存储值了。
下面我们来获取 Vault 合约中的 vault 存储值。由于get方法并不会修改区块链上的存储区,所以呼叫这个方法是在 Geth 节点上通过查询立即实施的,并不会产生交易。
> myContractInstance.get.call() 0
此时 vault 值为 0 。我们来通过发送交易修改该值。我们调用合约的set方法。
> myContractInstance.set.sendTransaction(17, { from: eth.accounts[0], gas: 1000000}) "0x983d92b8ca0d3fc7b2e26ed3c0b6a93221adaa032dd6fe02a5b00378b190a898"
交易签名成功!函数调用返回了我们一个交易的哈希值,该交易已经发出。
当矿工成功接到交易后,会显示如下的日志,打包成功后,存储区被改变了。
INFO [09-16|23:19:01.430] Submitted transaction fullhash=0x983d92b8ca0d3fc7b2e26ed3c0b6a93221adaa032dd6fe02a5b00378b190a898 recipient=0x1f0723b71f5824567E9aCc1f1079E91FCd958a50
我们再来调用一次get方法来验证一下存储区。
> myContractInstance.get.call() 17
至此,我们已经对一个简单的智能合约进行了部署和调用。麻雀虽小、五脏俱全,任何复杂的智能合约在读取和写入操作时候不外乎也是由工具在幕后执行了上述的操作。读者可以领会到 bin和 ABI 两者在部署和调用过程中分别起到了实体和“说明书”的角色,bin 是实际运行在以太坊虚拟机中的二进制合约代码,而 ABI 则供调用者去寻找合约方法的参数和位置,方便使用者进行准确的调用。
下一章:以太坊虚拟机
想必读者已经对以太坊的全局结构有一个清晰的了解,也部署了一份简单的智能合约。在以太坊上最重要的活动除了转账以外,就是编译、运行智能合约(Smart Contract)。智能合约代表了一个以太坊世界里的独立管家。它按照自身代码指 ...