用Go来做以太坊开发④智能合约
在这个章节中我们会介绍如何用Go来编译,部署,写入和读取智能合约。
与智能合约交互,我们要先生成相应智能合约的应用二进制接口ABI(application binary interface),并把ABI编译成我们可以在Go应用中调用的格式。
第一步是安装 Solidity编译器 ( solc ).
Solc 在Ubuntu上有snapcraft包。
Solc在macOS上有Homebrew的包。
其他的平台或者从源码编译的教程请查阅官方solidity文档 install guide .
我们还得安装一个叫 abigen 的工具,来从solidity智能合约生成ABI。
假设您已经在计算机上设置了Go,只需运行以下命令即可安装 abigen 工具。
我们将创建一个简单的智能合约来测试。 学习更复杂的智能合约,或者智能合约的开发的内容则超出了本书的范围。 我强烈建议您查看 truffle framework 来学习开发和测试智能合约。
这里只是一个简单的合约,就是一个键/值存储,只有一个外部方法来设置任何人的键/值对。 我们还在设置值后添加了要发出的事件。
虽然这个智能合约很简单,但它将适用于这个例子。
现在我们可以从一个solidity文件生成ABI。
它会将其写入名为“Store_sol_Store.abi”的文件中
现在让我们用 abigen 将ABI转换为我们可以导入的Go文件。 这个新文件将包含我们可以用来与Go应用程序中的智能合约进行交互的所有可用方法。
为了从Go部署智能合约,我们还需要将solidity智能合约编译为EVM字节码。 EVM字节码将在事务的数据字段中发送。 在Go文件上生成部署方法需要bin文件。
现在我们编译Go合约文件,其中包括deploy方法,因为我们包含了bin文件。
在接下来的课程中,我们将学习如何部署智能合约,然后与之交互。
Commands
Store.sol
solc version used for these examples
如果你还没看之前的章节,请先学习 编译智能合约的章节 因为这节内容,需要先了解如何将智能合约编译为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 属性,并使用私钥对其进行签名。 结果将是一个已签名的事务对象。
现在我就可以看到交易已经成功被发送到了以太坊网络了:
要验证键/值是否已设置,我们可以读取智能合约中的值。
搞定!
Commands
Store.sol
contract_write.go
solc version used for these examples
有时您需要读取已部署的智能合约的字节码。 由于所有智能合约字节码都存在于区块链中,因此我们可以轻松获取它。
首先设置客户端和要读取的字节码的智能合约地址。
现在你需要调用客户端的 codeAt 方法。 codeAt 方法接受智能合约地址和可选的块编号,并以字节格式返回字节码。
你也可以在etherscan上查询16进制格式的字节码
contract_bytecode.go
首先创建一个ERC20智能合约interface。 这只是与您可以调用的函数的函数定义的契约。
然后将interface智能合约编译为JSON ABI,并使用 abigen 从ABI创建Go包。
假设我们已经像往常一样设置了以太坊客户端,我们现在可以将新的 token 包导入我们的应用程序并实例化它。这个例子里我们用 Golem 代币的地址.
我们现在可以调用任何ERC20的方法。 例如,我们可以查询用户的代币余额。
我们还可以读ERC20智能合约的公共变量。
我们可以做一些简单的数学运算将余额转换为可读的十进制格式。
同样的信息也可以在etherscan上查询:
Commands
erc20.sol
contract_read_erc20.go
solc version used for these examples
以太坊钱包账户怎么登录
下载钱包登录。
1、下载钱包:打开以太坊官网,找到最新版本的下载链接进行下载。2、安装钱包:把下载的压缩包解压(找个磁盘可用空间大一点的盘),假设解压后路径为D:\Ethereum-Wallet-win64-0-9-3。3、进入钱包:双击运行D:\Ethereum-Wallet-win64-0-9-3\win-unpacked\EthereumWallet。exe。选择USETHEMAINNETWORK。选择SKIP。输入密码,点击NEXT,提示你务必备份好密钥文件夹和密码,点击确定。如果你有比特币,可以点击DEPOSITUSINGBITCOIN,使用比特币兑换以太币。如果此时可以看到LAUNCHAPPLICATION就点击进入钱包,如果看不到,就稍等一下。
以太坊(英文Ethereum)是一个开源的有智能合约功能的公共区块链平台,通过其专用加密货币以太币(Ether,简称“ETH”)提供去中心化的以太虚拟机(EthereumVirtualMachine)来处理点对点合约。
怎么接以太坊公链
建立连接以接儒以太坊公链。
一、1、以太坊客户端下载,注意:需翻墙,下载版本为1.8.23-stable,否则可能出现与以太坊钱包客户端存在不匹配问题。
2、以太坊钱包客户端下载。
3、安装以太坊客户端。
二、私有链创建:创建创世区块。
三、安装并启动以太坊钱包客户端。
怎么安装EVM(以太坊虚拟机)?
就按说明书上的要求接,先测量一下红绿线是不是对应接口的L1;黄黑线是不是对应L2,如果是,则肯定是正确的接线。电话线虽然有正负极之分,但接线端上可以随便接入,因此电话机内部有个整流定向电路。 即使将L1、L2线接错,也不会烧坏设备,所以可以放心大胆的测试。
linux下ethtool的安装方法!!
1.下载安装包:ethtool-3.15.tar.gz,将其放入自己的路径下,解压:tar zxvf ethtool-3.15.tar.gz
2.编译安装:
cd ethtool-3.15
sudo ./configure
sudo make
sudo make install
3.ethtool -s ethX [speed 10|100|1000]\ //设置网口速率10/100/1000M
[duplex half|full]\ //设置网口半/全双工
[autoneg on|off]\ //设置网口是否自协商
例如:ethtool -s eth0 speed 100 duplex full autoneg off
Docker 搭建以太坊私有链
首先需要安装 Docker,Docker 的安装和使用可以参看阮一峰老师的 《Docker 入门教程》 。
Ethereum 官方是支持 docker 的,可以参看 官方文档 。
centOS
其中 -v /home/linshan/works/block-chain/ethereum:/root 是把我们当前的 ethereum 目录,挂到了docker 的 /root 下。
在 Windows 环境下使用 -v /home/linshan/works/block-chain/ethereum:/root 不能启动容器,原因不明,所以在 Windows 下先不要使用目录挂载。
各字段具体用途参看 官方文档 。
Windows
Windows 不必创建 start-ethereum.sh 文件, genesis.json 也可以在 Docker 容器启动后创建。
centOS
Windows
运行成功后执行
进入 docker 容器命令行
因为 Windows 没有挂载共享目录,所以 root 目录下没有 genesis.json 文件,我们要在这里手动创建 genesis.json 文件,内容要和 centOS 的一致。
data 用来存放区块数据
geth 的参数参看 以太坊客户端Geth命令用法-参数详解
启动私有节点后进入 geth 命令行执行:
输出的内容就是节点信息,我们在手动连接节点是会用到,注意要把“0.0.0.0“换成你自己的IP,然后将这个信息发送给其他节点。手动连接节点有两种方式:
当然不管使用哪种方法连接节点都要保证创世区块文件 genesis.json 一致,还有在启动时 networkid 也要一致。
至此以太坊私有链已搭建完毕。
geth命令
docker命令
以上文章内容就是对以太坊安装教程和以太坊中文安装教程的介绍到此就结束了,希望能够帮助到大家?如果你还想了解更多这方面的信息,记得收藏关注本站。
标签: 以太坊安装教程