使用Solidity编写第一个合约

 合约代码:

// SPDX-License-Identifier: CC-BY-SA-4.0

// Version of Solidity compiler this program was written for
pragma solidity 0.6.4;

contract Faucet {
    //Purpose:receive ETH coin 
    receive() external payable {}


    // Give out ether to anyone who asks
    function withdraw(uint withdraw_amount) public {
        // Limit withdrawal amount  0.1eth => 100000000000000000 wei
        require(withdraw_amount <= 100000000000000000);

        // Send the amount to the address that requested it
        msg.sender.transfer(withdraw_amount);
    }
}

编译合约:

  使用RemixIDE将合约编译成EVM字节码

注册合约:

    将合约注册到区块链网络上需要一个特殊的交易,这个交易的目标地址是0x00000000000000000,也被称为零地址,这是一个特殊的地址,用来告诉以太坊,区块链用户希望通过这样的交易来注册合约RemixIDE会自动处理这些细节,并且把生成的交易发送给MetaMask。
    切换到DEPLOY&RUN TRANSCATIONS标签页,ENVIRONMENT选择Injected Web3,建立MetaMask钱包和RemixIDE之间的连接,并且进而通过MetaMask连接到Ropsten测试网络。

向合约地址充值ETH

充值ETH过程过于简单不再赘述(详情查看MetaMask使用教程)

从合约地址中提取0.1eth(以太坊内部所有币值单位都是用wei,0.1ETH = 100000000000000000wei)

合约地址交易账单:

合约地址:0x3CfFb89465d0eC6ed9a94D3c3D73a6Bf41f49Bed

使用测试交互的钱包地址:0x4ea691c9400dCfA6B2e3eECF22B088a6CF3822C5

三次交易分别解释如下:

  • 44mins ago 注册合约地址到区块链测试网上 可以看到接收方是Contract Creation 这步是RemixIDE帮我们做的
  • 41mins ago 从我的钱包地址发送给合约地址4个ETH(为什么显示的是3.99986,因为eth交易需要收取手续费)
  • 18 mins ago 从合约地址提取0.1个eth到我的钱包账户,但是这里的value显示的是0,这是因为这0.1ETH的转账是由合约发起的,所以这类交易称为内部交易(也称为消息)


 

总结:

  1. 使用RemixIDE编写简单合约
  2. 注册合约到区块链网络中
  3. 钱包地址 ->转账-> 合约地址
  4. 操作合约代码->转账->钱包地址

对知识的幻想:

修改合约代码后,需要重新部署到区块链上

  • 旧合约代码对应旧的合约地址
  • 新合约代码对应新的合约地址

我在新合约代码中去除了提款限制,并重新发布在链上,旧合约代码中是限制在0.1eth

后续我从钱包中向新合约地址转了1eth,用于后续测试提取

测试一次性提取1个eth,0.1ETH = 100000000000000000wei 1eth=1000000000000000000wei(此处增加了一个0,搞不懂以太坊作者为什么要用那么小的单位,数0都半天)

OK,失败了, 不知道为什么后续测试了提取0.2~0.9数额的ETH都无法成功,一次性只能提取0.1eth,我明明去除了限制数额的代码呀,我还是继续往后读书吧~不折腾了

猜你喜欢

转载自blog.csdn.net/claysystem/article/details/118050834
今日推荐