部署你的第一个以太坊智能合约

详解了自己部署一个合约账户,并且和它互动的详细过程

以太坊智能合约的学习需要理论和实践相结合。最近有不少留言问如何学习智能合约,我觉得上手实践是学些智能合约最有效的方法。 ## 1. 前期准备 我们将在以太坊主网上部署属于你的第一个智能合约,所以你需要一个 ETH 账号,并且拥有一定的 ETH,和一个可以部署合约的以太坊钱包。 本文以使用 Ownbit 钱包为例讲解。 ## 2. 编写合约 我们编写一个非常简答的合约:MyFirst。它是一个简单的合约账户,可以接收和发送 ETH。初学者可以使用 Remix 工具编写合约,它具有丰富的编译调试功能。网址:https://remix.ethereum.org/ ``` pragma solidity ^0.4.26; ``` **一些解释:** modifier 是方法的修饰,其中**_;** 表示执行该方法。如果未能执行 _;那么整个方法体不会被执行; view 表示是只读方法,不修改状态; require 表示验证,如果验证不通过则 revert。详见 [技术|Revert(), Assert()和Require()的使用](http://mp.weixin.qq.com/s?__biz=MzI3MzU5NjczOQ==&mid=2247484427&idx=1&sn=d656f82366b57897ace12f3584c339db&chksm=eb21ac27dc5625317e58618caa5ca0a240af419ad511016edfd7834642ea9a710861bc24c375&scene=21#wechat_redirect)。 ## 3. 编译合约 在 Remix 中点击“Compile first.sol”对源码进行编译: ![](https://img.learnblockchain.cn/2020/12/10/16075711141035.jpg) 编译完成后点击“Compilation Details”可以查看该合约的二进制代码(BYTECODE)和 ABI(Application Binary Interface)。 ## 4. 部署合约 向以太坊主网发送一条交易,让 to 为空,data 填写上一步得到的 bytecode,即可创建合约。具体步骤如下: 1. 在 Ownbit 中选择发送 ETH 交易,接收方填写:**deploy-contract** ![](https://img.learnblockchain.cn/2020/12/10/16075711502820.jpg) 2. 金额处填写 0.01 ETH,我们发送一些 ETH 给新创建的合约,如果该步骤不想发送 ETH,也可以填写 0。 ![](https://img.learnblockchain.cn/2020/12/10/16075711646669.jpg) 3. 在高级选项中将上一步得到的 bytecode 粘贴进去,并且调整Gas Limit至 1,000,000 左右。 ![](https://img.learnblockchain.cn/2020/12/10/16075711772571.jpg) 4. 输入密码,交易发送成功。 ![](https://img.learnblockchain.cn/2020/12/10/16075711868975.jpg) 5. 交易确认后,进入 etherscan 查询,确认合约已成功创建。 ![](https://img.learnblockchain.cn/2020/12/10/16075711966703.jpg) 至此,合约已成功部署至以太坊主网,并且我们得到了新创建的合约账号。例子中为:0x164ce3a1d29355e803a0bed9c9e7f8cbbac25139。 ## 5. 和合约互动 我们在部署合约的时候给新建的合约转账了 0.01 ETH,因此新合约拥有该数量的余额。下面我们将该余额转移至另外一个账户。这就要调用合约的方法。在我们的例子中 MyFirst.sol 提供了 withdraw 方法,允许我们将合约的 ETH 余额向任意地址转移。 因为安全的考虑,我们限制了只有合约的创建者(owner)才可以调用 widthraw 方法。所以以下步骤必须仍然使用部署合约的地址进行操作: 1. 在 Remix 中获取 widthdraw 方法的方法哈希(function hash),本例子中该哈希为: f3fef3a3。 ![](https://img.learnblockchain.cn/2020/12/10/16075713103529.jpg) 2. 在 Ownbit 中使用 owner 地址发送 ETH 交易,接收方地址填写该合约地址: ![](https://img.learnblockchain.cn/2020/12/10/16075713244716.jpg) 3. 发送金额填写 0,在高级选项中填入以下HEX字符串(去掉解释和回车空行),Gas Limit 填写适当较大(如 50万): ``` 0xf3fef3a3 --> 方法哈希 00000000000000000000000097B65aD59C8c96F2dD786751e6279a1A6D34A481 --> 接收方地址,补齐64位 0000000000000000000000000000000000000000000000000000000000000000 --> 0 表示发送所有 ``` ![](https://img.learnblockchain.cn/2020/12/10/16075713630447.jpg) 4. 交易确认后,进入 etherscan 查询,看到成功调用的记录: ![](https://img.learnblockchain.cn/2020/12/10/16075713789882.jpg) 5. 可以在 etherscan 中查看该笔交易发送参数的细节: ![](https://img.learnblockchain.cn/2020/12/10/16075713897340.jpg) 以上和合约互动(调用)的例子是以解释原理为主,从而采用了手动封装参数的方法。你也可以利用 web3 js 以及 Remix 中的ABI直接编写程序调用合约,而无需手动封装参数。 ## 结语 以上详解了自己部署一个合约账户,并且和它互动的详细过程。通过实践,有了感官认识,再补充理论知识,则可事半功倍! 本文例子合约地址为: https://cn.etherscan.com/address/0x164ce3a1d29355e803a0bed9c9e7f8cbbac25139 至于哪些地方学习理论,google 一下会有很多。这里跟大家简单推荐两处: **推荐阅读:** [Solidity中文文档](https://learnblockchain.cn/docs/solidity/) [Mastering Ethereum](https://github.com/ethereumbook/ethereumbook) 首发于公众号:谈谈区块链 , 链接:https://mp.weixin.qq.com/s/_fnR7n16iEKDMGi1JLqwUQ

以太坊智能合约的学习需要理论和实践相结合。最近有不少留言问如何学习智能合约,我觉得上手实践是学些智能合约最有效的方法。

1. 前期准备

我们将在以太坊主网上部署属于你的第一个智能合约,所以你需要一个 ETH 账号,并且拥有一定的 ETH,和一个可以部署合约的以太坊钱包。

本文以使用 Ownbit 钱包为例讲解。

2. 编写合约

我们编写一个非常简答的合约:MyFirst。它是一个简单的合约账户,可以接收和发送 ETH。初学者可以使用 Remix 工具编写合约,它具有丰富的编译调试功能。网址:https://remix.ethereum.org/

pragma solidity ^0.4.26;

一些解释:

modifier 是方法的修饰,其中_; 表示执行该方法。如果未能执行 _;那么整个方法体不会被执行;

view 表示是只读方法,不修改状态;

require 表示验证,如果验证不通过则 revert。详见 技术|Revert(), Assert()和Require()的使用。

3. 编译合约

在 Remix 中点击“Compile first.sol”对源码进行编译:

编译完成后点击“Compilation Details”可以查看该合约的二进制代码(BYTECODE)和 ABI(Application Binary Interface)。

4. 部署合约

向以太坊主网发送一条交易,让 to 为空,data 填写上一步得到的 bytecode,即可创建合约。具体步骤如下:

  1. 在 Ownbit 中选择发送 ETH 交易,接收方填写:deploy-contract

  1. 金额处填写 0.01 ETH,我们发送一些 ETH 给新创建的合约,如果该步骤不想发送 ETH,也可以填写 0。

  1. 在高级选项中将上一步得到的 bytecode 粘贴进去,并且调整Gas Limit至 1,000,000 左右。

  2. 输入密码,交易发送成功。

  1. 交易确认后,进入 etherscan 查询,确认合约已成功创建。

至此,合约已成功部署至以太坊主网,并且我们得到了新创建的合约账号。例子中为:0x164ce3a1d29355e803a0bed9c9e7f8cbbac25139。

5. 和合约互动

我们在部署合约的时候给新建的合约转账了 0.01 ETH,因此新合约拥有该数量的余额。下面我们将该余额转移至另外一个账户。这就要调用合约的方法。在我们的例子中 MyFirst.sol 提供了 withdraw 方法,允许我们将合约的 ETH 余额向任意地址转移。

因为安全的考虑,我们限制了只有合约的创建者(owner)才可以调用 widthraw 方法。所以以下步骤必须仍然使用部署合约的地址进行操作:

  1. 在 Remix 中获取 widthdraw 方法的方法哈希(function hash),本例子中该哈希为: f3fef3a3。

  1. 在 Ownbit 中使用 owner 地址发送 ETH 交易,接收方地址填写该合约地址:

  1. 发送金额填写 0,在高级选项中填入以下HEX字符串(去掉解释和回车空行),Gas Limit 填写适当较大(如 50万):
0xf3fef3a3  --> 方法哈希
00000000000000000000000097B65aD59C8c96F2dD786751e6279a1A6D34A481  --> 接收方地址,补齐64位
0000000000000000000000000000000000000000000000000000000000000000  --> 0 表示发送所有

  1. 交易确认后,进入 etherscan 查询,看到成功调用的记录:

  1. 可以在 etherscan 中查看该笔交易发送参数的细节:

以上和合约互动(调用)的例子是以解释原理为主,从而采用了手动封装参数的方法。你也可以利用 web3 js 以及 Remix 中的ABI直接编写程序调用合约,而无需手动封装参数。

结语

以上详解了自己部署一个合约账户,并且和它互动的详细过程。通过实践,有了感官认识,再补充理论知识,则可事半功倍!

本文例子合约地址为:

https://cn.etherscan.com/address/0x164ce3a1d29355e803a0bed9c9e7f8cbbac25139

至于哪些地方学习理论,google 一下会有很多。这里跟大家简单推荐两处:

推荐阅读:

Solidity中文文档 Mastering Ethereum

首发于公众号:谈谈区块链 , 链接:https://mp.weixin.qq.com/s/_fnR7n16iEKDMGi1JLqwUQ

区块链技术网。

  • 发表于 2020-12-10 11:40
  • 阅读 ( 1111 )
  • 学分 ( 6 )
  • 分类:智能合约

评论