比特币地址里的钱|手把手教你使用 Remix 部署以太坊智能合约
上手以太坊智能合约开发,五步学会用 Remix 部署合约。
原文标题:《部署你的第一个以太坊智能合约》
撰文:谈国鹏,Ownbit 创始人
以太坊智能合约的学习需要理论和实践相结合。最近有不少留言问如何学习智能合约,我觉得上手实践是学些智能合约最有效的方法。
前期准备
我们将在以太坊主网上部署属于你的第一个智能合约,所以你需要一个 ETH 账号,并且拥有一定的 ETH,和一个可以部署合约的以太坊钱包。
本文以使用 Ownbit 钱包为例讲解。
编写合约
我们编写一个非常简答的合约:MyFirst。它是一个简单的合约账户,可以接收和发送 ETH。初学者可以使用 Remix 工具编写合约,它具有丰富的编译调试功能。
pragma solidity ^0.4.26; // This is the Ownbit 5.0 Contract account. // copyright @2020 ownbit.io contract MyFirst { address private owner; // An event sent when funds are received. event Funded(uint new_balance); // An event sent when a spend is triggered to the given address. event Withdrawn(address to, uint transfer); constructor() public payable { owner = msg.sender; } // The fallback function for this contract. function() public payable { emit Funded(address(this).balance); } modifier onlyOwner() { require(msg.sender == owner, "Operation only for the owner!"); _; } //get the current owner address function getOwner() public view returns(address) { return owner; } //withdraw ETH to the destination function withdraw(address destination, uint256 value) public onlyOwner { //check amount require(address(this).balance >= value && address(this).balance > 0, "balance or widthdraw value invalid"); //value 0 means withdraw all if (value == 0) { value = address(this).balance; } //transfer will throw if fails destination.transfer(value); emit Withdrawn(destination, value); } //destroy this contract and release some gas function destroyContract() public onlyOwner { //transfer ether if any if(address(this).balance >0) { owner.transfer(address(this).balance); } selfdestruct(owner); } }
一些解释:
modifier 是方法的修饰,其中_;表示执行该方法。如果未能执行_;那么整个方法体不会被执行;
view 表示是只读方法,不修改状态;
require 表示验证,如果验证不通过则 revert。详见 技术|Revert(), Assert() 和 Require() 的使用。
编译合约
在 Remix 中点击“Compile first.sol”对源码进行编译:
编译完成后点击“Compilation Details”可以查看该合约的二进制代码(BYTECODE)和 ABI (Application Binary Interface)。
部署合约
向以太坊主网发送一条交易,让 to 为空,data 填写上一步得到的 bytecode,即可创建合约。具体步骤如下:
1. 在 Ownbit 中选择发送 ETH 交易,接收方填写:deploy-contract
2. 金额处填写 0.01 ETH,我们发送一些 ETH 给新创建的合约,如果该步骤不想发送 ETH,也可以填写 0。
3. 在高级选项中将上一步得到的 bytecode 粘贴进去,并且调整 Gas Limit 至 1,000,000 左右。
4. 输入密码,交易发送成功。
5. 交易确认后,进入 etherscan 查询,确认合约已成功创建。
至此,合约已成功部署至以太坊主网,并且我们得到了新创建的合约账号。例子中为:0x164ce3a1d29355e803a0bed9c9e7f8cbbac25139。
和合约互动
我们在部署合约的时候给新建的合约转账了 0.01 ETH,因此新合约拥有该数量的余额。下面我们将该余额转移至另外一个账户。这就要调用合约的方法。在我们的例子中 MyFirst.sol 提供了 withdraw 方法,允许我们将合约的 ETH 余额向任意地址转移。
因为安全的考虑,我们限制了只有合约的创建者(owner)才可以调用 widthraw 方法。所以以下步骤必须仍然使用部署合约的地址进行操作:
1. 在 Remix 中获取 widthdraw 方法的方法哈希(function hash),本例子中该哈希为 : f3fef3a3。
2. 在 Ownbit 中使用 owner 地址发送 ETH 交易,接收方地址填写该合约地址:
3. 发送金额填写 0,在高级选项中填入以下 HEX 字符串(去掉解释和回车空行),Gas Limit 填写适当较大(如 50 万):
0xf3fef3a3 --> 方法哈希 00000000000000000000000097B65aD59C8c96F2dD786751e6279a1A6D34A481 --> 接收方地址,补齐 64 位 0000000000000000000000000000000000000000000000000000000000000000 --> 0 表示发送所有
4. 交易确认后,进入 etherscan 查询,看到成功调用的记录:
5. 可以在 etherscan 中查看该笔交易发送参数的细节:
以上和合约互动(调用)的例子是以解释原理为主,从而采用了手动封装参数的方法。你也可以利用 web3 js 以及 Remix 中的 ABI 直接编写程序调用合约,而无需手动封装参数。
结语
以上详解了自己部署一个合约账户,并且和它互动的详细过程。通过实践,有了感官认识,再补充理论知识,则可事半功倍!
本文例子 合约地址。
至于哪些地方学习理论,google 一下会有很多。这里跟大家简单推荐两处:
- 《Solidity docs》
- 《Mastering Ethereum》
- 免责声明
- 世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
- 风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
- 世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。