区块链学习日志(第二章)搭建一个简单的智能合约

第一步 :打开安装了MetaMask插件的Chrome浏览器,访问Remix IDE的网址https://remix.ethereum.org

这里是演示代码,我们可以直接去里面复制出来放到我们的编辑器里面https://github.com/ethereumbook/ethereumbook      代码目录: code/Solidity/Faucet.sol

第二步:代码讲解:

pragma solidity 0.6.4;

// Our first contract is a faucet!
contract Faucet {
    // Accept any incoming amount
    receive() external payable {}

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

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

第一行是注释: // Our first contract is a faucet! 注释是供人类阅读的,不会被包括在EVM的字节码中。我们通常把注释放在需要解释的代码之前, 有时也会放在代码的同一行。注释由两个斜线开始,斜线之后的内容,直到这一行结束,都被视为空 行,并且会被编译器忽略。

第二行是实际合约代码的开始: contract Faucet { 这一行声明了一个contract对象,类似于其他面向对象编程语言中声明的class。合约的定义包括花括 号{}之间的所有行,这是一个定义域,类似其他编程语言中使用的花括号。 接着,我们声明了Faucet合约的第一个函数: function withdraw(uint withdraw_amount) public { 这个函数的名称是withdraw,它接收一个名为withdraw_amount、类型为无符号整型(uint)的参数。 这个函数被声明为公开函数,这意味着它可以被其他合约调用。这个函数的定义在接下来的花括号之 间。首先是设定提币的上限: require(withdraw_amount <= 100000000000000000); 它使用内置的Solidity函数require来测试一个前提条件,即withdraw_amount小于或等于 100000000000000000 wei,这是以太币的基本单位(见表2-1),相当于0.1 ether。如果使用大于该数量的 withdraw_amount调用withdraw函数,则此处的require函数将导致合约执行停止并因异常而失败。请注 意,语句在Solidity中需要以分号结束。 这部分合约代码是测试币发放合约的主要逻辑。它通过设定每次提币的上限来控制合约支付的数 量。这是一个非常简单的控制,但是可以为你勾勒出大概的印象:可编程区块链的威力在于可以用去中 心化的软件来控制资产! 接下来是实际的提币行为: msg.sender.transfer(withdraw_amount); 这里有几件有趣的事情。msg对象是一个所有合约都可以访问的输入,它代表触发这个合约执行的交 易。sender属性就是发起这个交易的发起方地址。transfer函数是一个内置的函数,用来把以太币从合约转 账到调用这个合约的交易地址。反过来看,这就是说将以太币转给触发这个合约执行的交易消息的发送 地址。transfer函数只接收一个数额参数。我们把之前定义的withdraw_amount这个变量的值作为参数传递 给withdraw函数。 紧接着的花括号意味着withdraw方法定义的结束。 接着我们又定义了一个函数: function () public payable {} 这个函数称为回退函数或默认函数,它会在一些特殊的情况下被调用,比如触发这个合约的交易没 有指定调用哪一个具体函数,或者合约本身没有定义任何函数,再或者交易没有包含任何数据。合约可 以有一个这样的默认函数(没有名字),通常也使用这个函数来接收以太币。这也是为什么这个函数的 定义包含public和payable属性,这意味着这个合约可以接收以太币。如函数声明的空花括号所显示的,除 了接收以太币,这个合约什么也不会做。如果我们发起一个针对合约地址的交易,就像是把合约地址当 作钱包使用,这个函数就会处理。 接着默认函数的是一个花括号,它代表整个合约定义的结束。就是这么简单!

第三步:发布合约

选择以后他会自动连接到我们的小狐狸,需要我们确认手续费。

运行完成以后我们我们需要等待10-60秒,这是区块链决定的,所以我们急也没用。当他成功以后我们会在小狐狸钱包里面看到合约部署,并且可以看到我们支付的燃油费等等。

到此我们就已经部署了一个简单的智能合约了。

总结

        我们来总结一下目前学到的内容:以太坊合约是用来控制以太币的程序,它运行在名为EVM的虚拟 机之内。合约由特殊的交易创建,这个过程就是把合约的字节码保存到区块链上。在区块链上完成创建 以后,合约会有一个以太坊地址,就如同钱包一样。任何时候,如果有人向这个合约地址发送交易,都 会触发合约在EVM中被执行。这个交易本身,就是程序执行的输入参数。发送给合约的交易可以包括以 太币或者数据,也可以同时包括这两者。如果交易包含以太币,就等于把以太币存入了合约的账户。如 果交易包含数据,这个数据用来指定合约的具体函数并通过传递参数来调用它。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值