基于以太坊智能合约编程语⾔Solidity实现⼀个简单的智能合约众筹项⽬ 以下采⽤以太坊智能合约编程语⾔:Solidity实现⼀个简单的智能合约众筹项⽬。(智能合约即部署在以太坊区块链上的⼀段代码) 详细的代码注释已写在代码中。
pragma solidity ^0.4.0;
//部署在以太坊区块链上的众筹智能合约
contract CrowdFunding{
//捐赠者
struct funder{
address FunderADDress;//捐赠者的账户地址
uint money;//捐赠者捐赠的钱
}
//受益⼈
struct needer{
address NeederAddress;//受益⼈地址
uint goal;//需要筹集到的⽬标⾦额
uint amount;//当前已经筹集到的⾦额
uint funderID;//记录捐赠者的ID
mapping(uint => funder) map;//捐赠者的ID => 捐赠者信息
}
uint neederID;//记录受益⼈的ID
mapping(uint => needer) needmap;//受益⼈ID => 受益⼈信息
//_goal:筹款的⽬标⾦额
function NewNeeder(uint _goal){
neederID++;
//对于结构体⾥⾯定义的mapping类型,在初始化新结构体时可以忽略该项的初始化
needmap[neederID]=needer(msg.sender, _goal,0,0);
}
//_neederID:受益⼈ID
function Contribute(uint _neederID) payable{
needer storage _needer = needmap[_neederID];//这⾥相当于创建了⼀个_needer指针指向needmap[_neederID]
_needer.amount += msg.value;//受益⼈账户余额加上捐赠者捐赠的钱
_needer.funderID++;
_needer.map[_needer.funderID]=funder(msg.sender, msg.value);//在受益⼈⾥记录捐赠者的信息
}
//判断是否达到众筹的⽬标⾦额(根据受益⼈ID)
function IsFinish(uint _neederID) payable{
needer storage _needer = needmap[_neederID];
//若达到或超过众筹的⽬标⾦额,把筹集到的⾦额发送给受益⼈账户地址_needer.NeederAddress
if(_needer.amount >= _al){
_ansfer(_needer.amount);
}
}
}
 编译器采⽤Remix在线编译器。
 在编译上述代码⽆误后,选择第⼀个账户作为合约的部署账户,⼀开始每个账户有100个以太币,如下图所⽰:
 部署后,输⼊需要众筹的⽬标⾦额为10000 wei(wei:以太币的最⼩单位。1 ether = 10^18 wei),然后点击NewNeeder创建⼀个众筹项⽬(即将第⼀个账户作为受益⼈)。
solidity
 创建完众筹项⽬后我们可以看到,第⼀个账户的余额如下,⼩数点后有17位,原应为18位,所以最后⼀位0省略了。
 我们选⽤第⼆个账户作为捐赠者,输⼊需要的捐赠⾦额为:20000 wei。然后在下⾯contribute处输⼊1代表为受益⼈ID为1的账户捐赠。(在这⾥即向第⼀个账户捐赠)
 在IsFinish处输⼊1,查看受益⼈ID为1的筹集是否达到⽬标⾦额,若达到,则将该众筹智能合约中收到的筹款打给受益⼈(即第⼀个账户)。
 从下图,第⼀个账户的⾦额可以看到:这⾥⼩数点后位17位,所以最后⼀位应该有个0,对⽐上⾯可以看到,多了20000 wei 以太币。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。