泰山众筹模式源码搭建
。
pragma solidity ^0.4.17;
contract Faucet {
function withdraw(uint amount) public {
require(amount <= 1000000000000000000);
msg.sender.transfer(amount);
}
function() public payable{}
}
这是一个模拟水龙头(Faucet)工作的智能合约。也就是用户在以太坊的测试网,通过水龙头领取测试币的过程。下面来详解这段合约的每一行:
第一行
pragma solidity ^0.4.17;
所有的 Solidity 源码都必须冠以 "version pragma" — 标明 Solidity 编译器的版本. 以避免将来新的编译器可能破坏你的代码。
当前的版本是Solidity 0.4.17
第二行
contract Faucet { }
contract 合约
Faucet 合约名称(可自定义)
{ }里面包含的内容,就是一份合约的基本模块。
Solidity 的代码都包裹在合约里面. 一份合约就是以太应币应用的基本模块, 所有的变量和函数都属于一份合约, 它是你所有应用的起点.
第三行
function withdraw(uint amount) public {
function 函数
withdraw(uint amount) 定义一个名称为withdraw的函数名,参数为unit(无符号整数类型)的amount
public 此函数是公开可见的,可以从外部调用
{ }里面是函数的内容
第四行
require(amount <= 1000000000000000000);
require 条件判断语句,如果语句为真(True)则执行,语句为假(False),则不执行。
amount <= 1000000000000000000 这里的amount表示以太币的数量,单位为wei。与比特币一样,以太币也不是无限可分的,以太币的最小单位是Wei。
第五行
msg.sender.transfer(amount);
msg.sender表示当前合约调用的地址
transfer(amount) 表示转账的数量
第六行
function() public payable{}
这是一个回退函数(Fallback Function)
一个合约可以有一个匿名函数。此函数不能有参数,不能返回任何值。如果没有其他函数与给定的函数标识符匹配,或者如果根本没有提供数据,将执行一个合约的调用。
此外,每当合同接收没有数据的纯Ether时,会执行回退函数。此外,为了接收Ether,回退函数必须标记为payable。如果没有这样的函数,合约不能通过常规transactions接收Ether。
通俗地讲,我们部署这个水龙头合约,是不需要转账ETH的,只需要花费gas。如果没有回退函数,合约不能通过常规transactions接收Ether。