以太坊go语言源码 以太坊源码是什么语言( 五 )


假设你已经导入从 abigen 生成的新创建的Go包文件,并设置ethclient,加载您的私钥,下一步是创建一个有配置密匙的交易发送器(tansactor) 。首先从go-ethereum导入 accounts/abi/bind 包,然后调用传入私钥的 NewKeyedTransactor。然后设置通常的属性,如nonce,燃气价格,燃气上线限制和ETH值 。
如果你还记得上个章节的内容, 我们创建了一个非常简单的“Store”合约,用于设置和存储键/值对 。生成的Go合约文件提供了部署方法 。部署方法名称始终以单词 Deploy 开头,后跟合约名称 , 在本例中为 Store。
deploy函数接受有密匙的事务处理器,ethclient,以及智能合约构造函数可能接受的任何输入参数 。我们测试的智能合约接受一个版本号的字符串参数 。此函数将返回新部署的合约地址,事务对象,我们可以交互的合约实例,还有错误(如果有) 。
就这么简单:)你可以用事务哈希来在Etherscan上查询合约的部署状态:
Commands
Store.sol
contract_deploy.go
solc version used for these examples
这写章节需要了解如何将智能合约的ABI编译成Go的合约文件 。如果你还没看,前先读 上一个章节。
一旦使用 abigen 工具将智能合约的ABI编译为Go包,下一步就是调用“New”方法,其格式为“Newcontractname style="box-sizing: border-box; font-size: 16px; -ms-text-size-adjust: auto; -webkit-tap-highlight-color: transparent;"”,所以在我们的例子中如果你 回想一下它将是 NewStore。此初始化方法接收智能合约的地址,并返回可以开始与之交互的合约实例 。/contractname
Commands
Store.sol
contract_load.go
solc version used for these examples
这写章节需要了解如何将智能合约的ABI编译成Go的合约文件 。如果你还没看,前先读 上一个章节。
在上个章节我们学习了如何在Go应用程序中初始化合约实例 。现在我们将使用新合约实例提供的方法来阅读智能合约 。如果你还记得我们在部署过程中设置的合约中有一个名为 version 的全局变量 。因为它是公开的,这意味着它们将成为我们自动创建的getter函数 。常量和view函数也接受 bind.CallOpts 作为第一个参数 。了解可用的具体选项要看相应类的 文档一般情况下我们可以用nil。
Commands
Store.sol
contract_read.go
solc version used for these examples
这写章节需要了解如何将智能合约的ABI编译成Go的合约文件 。如果你还没看,前先读 上一个章节。
写入智能合约需要我们用私钥来对交易事务进行签名 。
我们还需要先查到nonce和燃气价格 。
接下来,我们创建一个新的keyed transactor,它接收私钥 。
然后我们需要设置keyed transactor的标准交易选项 。
现在我们加载一个智能合约的实例 。如果你还记得 上个章节我们创建一个名为 Store 的合约,并使用 abigen 工具生成一个Go文件 。要初始化它,我们只需调用合约包的 New 方法,并提供智能合约地址和ethclient,它返回我们可以使用的合约实例 。
我们创建的智能合约有一个名为 SetItem 的外部方法,它接受solidity“bytes32”格式的两个参数(key,value) 。这意味着Go合约包要求我们传递一个长度为32个字节的字节数组 。调用 SetItem 方法需要我们传递我们之前创建的 auth 对象(keyed transactor) 。在幕后,此方法将使用它的参数对此函数调用进行编码,将其设置为事务的 data 属性 , 并使用私钥对其进行签名 。结果将是一个已签名的事务对象 。
现在我就可以看到交易已经成功被发送到了以太坊网络了:
要验证键/值是否已设置 , 我们可以读取智能合约中的值 。

推荐阅读