利用Go开发以太坊④智能合约本章将介绍如何用Go编译、部署、编写和读取智能合约。
为了与智能合约交互,我们需要创建相应智能合约的应用程序二进制接口(ABI ),并将ABI编译成我们可以在Go应用程序中调用的格式。
第一步是安装Solidity编译器(solc)。
Solc在Ubuntu上有snapcraft包。
Solc在macOS上有Homebrew的包。
其他平台或源代码编译的教程,请参考solidity官方文档。
我们还需要安装一个名为abigen的工具来从solidity Smart Contract生成ABI。
假设您已经在计算机上安装了Go,只需运行以下命令来安装abigen工具。
我们将创建一个简单的智能契约进行测试。学习更复杂的智能合约或开发智能合约超出了本书的范围。我强烈建议您查看truffle框架,了解如何开发和测试智能合约。
这只是一个简单的契约,即一个键/值存储,只有一个外部方法来设置任何人的键/值对。我们还添加了设置值后要发出的事件。
虽然这个智能契约很简单,但它将适用于这个示例。
现在我们可以从实体文件中生成ABI。
它会将其写入一个名为“Store_sol_Store.abi”的文件中。
现在让我们使用abigen将ABI转换成一个可以导入的Go文件。这个新文件将包含我们可以用来在Go应用程序中与智能合约交互的所有可用方法。
为了从Go部署智能合约,我们还需要将solidity智能合约编译成EVM字节码。EVM字节码将在事务的数据字段中发送。在Go文件上生成部署方法需要Bin文件。
现在我们编译Go契约文件,包括部署方法,因为我们包含了bin文件。
在下一课中,我们将学习如何部署智能合约,然后与它们进行交互。
命令
Store.sol
这些示例使用的solc版本
如果你没有看过前面的章节,请先学习编译智能合约。因为这一节,你需要先知道如何把智能合约编译成Go文件。
假设您已经导入了从abigen生成的新创建的Go包文件,并设置ethclient来加载您的私钥。下一步是用配置密钥创建一个tansactor发送方。首先从go-ethereum导入accounts/abi/bind包,然后调用传入私钥的NewKeyedTransactor。然后设置常用的属性,比如nonce,气价,气上限,ETH值。
如果您还记得上一章,我们创建了一个非常简单的“存储”契约来设置和存储键/值对。生成的Go合同文件提供了部署方法。部署方法名称总是以单词deploy开头,后跟协定名称,在本例中是Store。
deploy函数接受任何输入参数,这些参数可以被带有键、ethclient和智能契约构造函数的事务处理器接受。我们测试的智能协定接受带有版本号的字符串参数。该函数将返回新部署的契约地址、事务对象、我们可以与之交互的契约实例以及错误(如果有的话)。
就这么简单:)可以使用交易hash在Etherscan上查询合同的部署状态:
命令
Store.sol
contract_deploy.go
这些示例使用的solc版本
本章需要了解如何将智能合约的ABI编译到Go的合约文件中。如果你还没看,那就看之前的最后一章。
一旦使用abigen工具将智能合约的ABI编译成Go包,下一步就是调用“New”方法,其格式为“Newcontractname style = & # 8221框大小:边框-框;字体大小:16px-ms-text-size-adjust:auto;-WebKit-tap-高亮-颜色:透明;”"所以如果你在我们的例子中考虑它,它将是NewStore。此初始化方法接收智能协定的地址,并返回您可以开始与之交互的协定实例。/合同名称
命令
Store.sol
合同_加载. go
这些示例使用的solc版本
本章需要了解如何将智能合约的ABI编译到Go的合约文件中。如果你还没看,那就看之前的最后一章。
在上一章中,我们学习了如何在Go应用程序中初始化契约实例。现在,我们将使用新契约实例提供的方法来读取智能契约。如果您还记得,我们在部署期间设置的契约中有一个名为version的全局变量。因为它们是公共的,这意味着它们将成为我们自动创建的getter函数。常量和视图函数也接受绑定。胼胝作为第一个参数。了解可用的具体选项取决于相应类的文档。一般情况下,我们可以使用nil。
命令
Store.sol
合同_read.go
这些示例使用的solc版本
本章需要了解如何将智能合约的ABI编译到Go的合约文件中。如果你还没看,那就看之前的最后一章。
编写智能合同要求我们用私钥签署交易。
我们还需要先检查现时和汽油价格。
接下来,我们创建一个新的键控交易器,它接收私钥。
然后我们需要设置键控交易者的标准交易选项。
现在,我们加载一个智能合约的实例。如果您还记得上一章,我们创建了一个名为Store的契约,并使用abigen工具生成一个Go文件。要初始化它,我们只需要调用契约包的New方法,并提供智能契约地址和ethclient,后者返回我们可以使用的契约实例。
我们创建的智能契约有一个名为SetItem的外部方法,它接受solidity“bytes 32”格式的两个参数(key,value)。这意味着Go契约包要求我们传递一个长度为32字节的字节数组。调用SetItem方法需要我们传递之前创建的auth对象。在后台,该方法将使用其参数对该函数调用进行编码,将其设置为事务的数据属性,并用私钥对其进行签名。结果将是一个签名的事务对象。
现在我可以看到交易已成功发送到以太坊网络:
为了验证是否已经设置了键/值,我们可以读取智能合约中的值。
搞定了。
命令
Store.sol
contract_write.go
这些示例使用的solc版本
有时,您需要读取部署的智能契约的字节码。因为所有智能契约字节码都存在于区块链中,所以我们可以很容易地获得它们。
首先,设置客户机的智能契约地址和要读取的字节码。
现在您需要调用客户端的codeAt方法。CodeAt方法接受智能协定地址和可选的块号,并以字节格式返回字节码。
您还可以在etherscan上查找十六进制格式的字节码。
contract_bytecode.go
首先,创建一个ERC20智能合约界面。这只是一个你可以调用的函数的函数定义的契约。
然后将接口智能合约编译成ON ABI,并使用abigen创建来自ABI的Go包。
假设我们已经像往常一样设置了以太坊客户端,我们现在可以将新的令牌包导入到我们的应用程序中,并实例化它。在这个例子中,我们使用假人令牌的地址。
我们现在可以调用ERC20的任何方法。比如我们可以查询用户的代币余额。
我们还可以读取ERC20智能合约的公共变量。
我们可以做一些简单的数学运算,将天平转换成可读的十进制格式。
同样的信息也可以在etherscan上找到:
命令
erc20.sol
contract_read_erc20.go
这些示例使用的solc版本
如何登录以太坊钱包账号?下载钱包登录。
1.下载钱包:打开以太坊官网,找到最新版本的下载链接进行下载。2.安装钱包:解压下载的压缩包(找一个有更大磁盘可用的磁盘空),假设解压后的路径是D: \以太坊-钱包-win 64-0-9-3。3.进入钱包:双击运行D: \以太坊-钱包-win64-0-9-3 \ win-unpacked \以太坊钱包。exe .选择使用主网络。选择跳过。输入密码,单击下一步,提示您备份密钥文件夹和密码,然后单击确定。如果你有比特币,可以点击存款使用比特币将比特币兑换成以太坊。如果此时可以看到LAUNCHAPPLICATION,点击进入钱包。如果看不到,就等一下。
以太坊(英文)是一个具有智能合约功能的开源公共区块链平台,它提供了一个去中心化的以太网虚拟机(Ether Virtual Machine),通过其专用的加密货币Ether来处理点对点合约。
如何连接以太坊公链建立连接连接儒以太坊公链?
1.注意:下载版本为1 . 8 . 23-稳定,否则可能与以太坊钱包客户端不匹配。
2、以太坊钱包客户端下载。
3.安装以太网客户端。
二、创建私链:创建创建块。
3.安装并启动以太坊钱包客户端。
如何安装EVM(以太坊虚拟机)?根据手册中的要求进行连接。首先,测量红线和绿线是否对应接口的L1。黄黑线对应L2吗?如果是这样,那一定是接线正确。电话线虽然有正负极,但端子可以随意接入,所以电话内部有整流定向电路。即使L1线和L2线接错了,设备也不会烧坏,你可以放心大胆的测试。
linux下ethtool的安装方法!!1.下载安装包:ethtool-3.15.tar.gz,放在自己的路径下,解压:tarzxvfethtool-3.15.tar.gz。
2.编译并安装:
cdethtool-3.15
须藤。/配置
sudomake
sudomakeinstall
3.ethtool-sethx[speed 10 | 100 | 1000]\//将网络端口速度设置为10/100/1000M。
[duplestueff | full]\//设置网络端口的半双工/全双工。
[autonegon|off]\//设置网络接口是否自行协商。
示例:eth tool-Seth 0 speed 100 duplex fullautoneoff
Docker要构建以太坊的私有链,需要先安装Docker。Docker的安装和使用请参考阮一峰老师对Docker的介绍。
以太坊官方支持docker。请参考官方文档。
摘录
其中-v/home/Lin shan/works/block-chain/以太坊:/root将我们当前的以太坊目录挂在docker的/root下。
在Windows环境下使用-v/home/Lin shan/works/block-chain/ether eum:/root无法启动容器,原因不明,暂时不要在Windows中使用目录挂载。
每个字段的具体用途请参考官方文档。
Windows操作系统
Windows不一定要创建start-ethereum.sh文件,也可以在Docker容器启动后创建genesis.json。
摘录
Windows操作系统
操作成功后执行。
输入docker容器命令行
因为Windows不挂载共享目录,所以根目录中没有genesis.json文件。我们需要在这里手动创建genesis.json文件,内容要和centOS一致。
数据用于存储块数据。
geth的参数请参考以太坊客户端Geth命令的用法-参数详解。
启动私有节点后,输入geth命令行来执行:
输出内容是节点信息,在手动连接节点时我们会用到它。注意把“0.0.0.0”替换成自己的IP,然后把这个信息发给其他节点。有两种方法可以手动连接节点:
当然,无论用哪种方法连接节点,创建块文件genesis.json都要一致,启动时networkid也要一致。
至此,以太坊的私有链已经建成。
Geth命令
Docker命令
以上文章内容是以太坊安装教程和以太坊中文安装教程的介绍。希望能帮到你?如果你想了解更多这方面的内容,记得关注这个网站。
本网站声明:网站内容来源于网络。如有侵权,请联系我们,我们会及时处理。
温馨提示:注:内容来源均采集于互联网,不要轻信任何,后果自负,本站不承担任何责任。若本站收录的信息无意侵犯了贵司版权,请给我们来信,我们会及时处理和回复。
免责声明:本文为转载,非本网原创内容,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
如有疑问请发送邮件至:goldenhorseconnect@gmail.com