主页 > imtoken安全下载 > 部署你的第一个以太坊智能合约

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

imtoken安全下载 2023-03-25 05:50:18

以太坊智能合约的研究需要理论与实践相结合。 最近有很多留言询问如何学习智能合约。 我认为入门是学习智能合约最有效的方法。

一、前期准备

我们将在以太坊主网上部署您的第一个智能合约,因此您需要一个拥有一定数量ETH的ETH账户,以及一个可以部署该合约的以太坊钱包。

本文以Ownbit钱包为例进行讲解。

2. 写合同

我们写一个非常简单的合约: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。 详情请见。

3.编译合约

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

以太坊合约交易怎么玩_合约以太坊_以太坊合约地址是什么

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

4.部署合约

以太坊合约交易怎么玩_合约以太坊_以太坊合约地址是什么

向以太坊主网发送交易合约以太坊,让为空,数据填写上一步得到的字节码,创建合约。 具体步骤如下:

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

以太坊合约交易怎么玩_合约以太坊_以太坊合约地址是什么

2. 金额填写0.01 ETH合约以太坊,我们会发送一些ETH给新建的合约,如果这一步不想发送ETH,也可以填写0。

以太坊合约地址是什么_以太坊合约交易怎么玩_合约以太坊

3.在高级选项中粘贴上一步得到的字节码,将Gas Limit调整为1,000,000左右。

合约以太坊_以太坊合约地址是什么_以太坊合约交易怎么玩

合约以太坊_以太坊合约地址是什么_以太坊合约交易怎么玩

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

以太坊合约地址是什么_以太坊合约交易怎么玩_合约以太坊

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

以太坊合约地址是什么_以太坊合约交易怎么玩_合约以太坊

至此,合约已经成功部署到以太坊主网,我们也获得了新建的合约账户。 在示例中:0x164ce3a1d29355e803a0bed9c9e7f8cbbac25139。

5.与合约交互

当我们部署合约时,我们将 0.01 ETH 转移到新创建的合约中,因此新合约具有该金额的余额。 接下来我们将余额转移到另一个帐户。 这调用了合约的方法。 在我们的示例中,MyFirst.sol 提供了一个 withdraw 方法,允许我们将合约的 ETH 余额转移到任何地址。

以太坊合约交易怎么玩_以太坊合约地址是什么_合约以太坊

出于安全原因,我们限制只有合约的创建者(所有者)才能调用 widthraw 方法。 因此,仍然必须使用部署合约的地址执行以下步骤:

1、获取Remix中widthdraw方法的函数hash。 在这个例子中,散列是:f3fef3a3。

合约以太坊_以太坊合约交易怎么玩_以太坊合约地址是什么

2.使用所有者地址在Ownbit发送ETH交易,收件人地址填写合约地址:

合约以太坊_以太坊合约地址是什么_以太坊合约交易怎么玩

3、发送金额填0,在高级选项中填入如下HEX字符串(去掉解释填空行),Gas Limit填入适当大一些(如500,000):

0xf3fef3a3  --> 方法哈希00000000000000000000000097B65aD59C8c96F2dD786751e6279a1A6D34A481  --> 接收方地址,补齐640000000000000000000000000000000000000000000000000000000000000000  --> 0 表示发送所有

以太坊合约地址是什么_以太坊合约交易怎么玩_合约以太坊

以太坊合约交易怎么玩_合约以太坊_以太坊合约地址是什么

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

以太坊合约交易怎么玩_合约以太坊_以太坊合约地址是什么

5、可以在etherscan中查看交易发送参数详情:

合约以太坊_以太坊合约交易怎么玩_以太坊合约地址是什么

上述与合约交互(调用)的例子是基于讲解原理,因此采用了手动封装参数的方式。 也可以使用web3 js和Remix中的ABI直接编写程序调用合约,无需手动封装参数。

结语

以上详细介绍了部署合约账户并与之交互的详细过程。 通过实践,以感官认识,辅以理论知识,可以事半功倍!

本文示例合约地址为:

至于去哪里学理论,可以google一大堆。 这里有两个简单的建议给你: