okx

比特币地址里的钱|Remix教你使用以太坊智能合约

时间:2023-08-12|浏览:181

上手以太坊智能合约开发,五步学会用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.01ETH,我们发送一些ETH给新创建的合约,如果该步骤不想发送ETH,也可以填写0。 3. 在高级选项中将上一步得到的bytecode粘贴进去,并且调整Gas Limit至1,000,000左右。 4. 输入密码,交易发送成功。 5. 交易确认后,进入etherscan查询,确认合约已成功创建。 至此,合约已成功部署至以太坊主网,并且我们得到了新创建的合约账号。例子中为:0x164ce3a1d29355e803a0bed9c9e7f8cbbac25139。

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

因为安全的考虑,我们限制了只有合约的创建者(owner)才可以调用withdraw方法。所以以下步骤必须仍然使用部署合约的地址进行操作: 1. 在Remix中获取withdraw方法的方法哈希(function hash),本例子中该哈希为:f3fef3a3。 2. 在Ownbit中使用owner地址发送ETH交易,接收方地址填写该合约地址: 3. 发送金额填写0,在高级选项中填入以下HEX字符串(去掉解释和回车空行),Gas Limit填写适当较大(如50万): 0xf3fef3a3 --> 方法哈希 00000000000000000000000097B65aD59C8c96F2dD786751e6279a1A6D34A481 --> 接收方地址,补齐64位 0000000000000000000000000000000000000000000000000000000000000000 --> 0表示发送所有 4. 交易确认后,进入etherscan查询,看到成功调用的记录: 5. 可以在etherscan中查看该笔交易发送参数的细节:

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

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

本文例子合约地址。

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

热点:以太 以太坊 太坊 智能合约 比特币 比特币地址 特币

欧易

欧易(OKX)

用戶喜愛的交易所

币安

币安(Binance)

已有账号登陆后会弹出下载

« 上一条| 下一条 »
区块链交流群
数藏交流群

合作伙伴

非小号交易所排名-专业的交易行情资讯门户网站,提供区块链比特币行情查询、比特币价格、比特币钱包、比特币智能合约、比特币量化交易策略分析,狗狗币以太坊以太币玩客币雷达币波场环保币柚子币莱特币瑞波币公信宝等虚拟加密电子数字货币价格查询汇率换算,币看比特儿火币网币安网欧易虎符抹茶XMEX合约交易所APP,比特币挖矿金色财经巴比特范非小号资讯平台。
非小号行情 yonghaoka.cn 飞鸟用好卡 ©2020-2024版权所有 桂ICP备18005582号-1