本系列会详细解释智能合约案例,供大家感受solidity语言的魅力。
要求如下:要有受益人和资助者,且可以查看合约状态。
一、分步骤解释
// SPDX-License-Identifier: MIT
pragma solidi服务器托管网ty ^0.8.11;
contract CrowFunding {
1.
address public immutable beneficiary;
uint256 public immutable fundingGoal;
创建受益者和募集目标,immutable为不可改变
2.
uint256 public fundingAmount;
mapping(address=>uint256) public funders
通过映射,表示每个地址对应的筹款金额。
mapping(address=>bool) private fundersInserted;
address[] public fundersKey;
每个地址是否已插入到fundersKey数组中。
bool public AVAILABLED =true;
3.
//合约的初始状态是AVAILABLED(真),表示合约当前可用。
constructor(address beneficiary_,uint256 goal_){
beneficiary =beneficiary_;
fundingGoal = goal_;
}
初始化受益者的地址和募集目标。
4.
function contribute() external payable{
require(AVAILABLED,"crowFounding is closed");
定义函数contribute,判断募集是否关闭。
funders[msg.服务器托管网sender]+= msg.value;
fundingAmount += msg.value;
//增加捐款金额
5.
if(!fundersInserted[msg.sender]){
//是否有捐款者的地址
fundersInserted[msg.sender] = true;
fundersKey.push(msg.sender); }}
}
//将捐款者的地址添加到fundersKey数组中,用于记录所有捐款者的地址
}}
}
二、完整代码
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;
contract CrowFunding {
address public immutable beneficiary;
uint256 public immutable fundingGoal;
//创建受益者和募集目标
uint256 public fundingAmount;
mapping(address=>uint256) public funders;
mapping(address=>bool) private fundersInserted;
address[] public fundersKey;
bool public AVAILABLED =true;
//合约的初始状态是AVAILABLED(真),表示合约当前可用。
constructor(address beneficiary_,uint256 goal_){
beneficiary =beneficiary_;
fundingGoal = goal_;
}
function contribute() external payable{
require(AVAILABLED,"crowFounding is closed");
funders[msg.sender]+= msg.value;
fundingAmount += msg.value;
//增加捐款金额
if(!fundersInserted[msg.sender]){
//是否有捐款者的地址
fundersInserted[msg.sender] = true;
fundersKey.push(msg.sender);
//将捐款者的地址添加到 fundersKey 数组中,用于记录所有捐款者的地址
}}
}
三、演示
文章来源:CSDN博主「发呆…」
文章原标题:《solidity案例详解(二)众筹合约》
旨在传播区块链相关技术,如有侵权请与我们联系删除。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
相关推荐: 盘点Java集合(容器)概览,Collection和Map在开发中谁用的最多?
写在开头 在Java的世界里万物皆对象。但我认为是万物皆数据,世界由各种各样数据构建起来,我们通过程序去实现数据的增删改查、转入转出、加减乘除等等,不同语言的实现方式殊途同归。由此可见,数据对于程序语言的重要性。 这段话是在写数据类型那篇博客时说的,当时是为了…