solidity智能合约实例开发(1)(解释+注释)——捐款与取款

项目总要求
* 允许任何用户像这个合约里捐款
* 允许合约部署者把用户捐的款给提走
* 可以看到每个用户捐款多少
* 设定一个最小金额 小于这个金额 则捐款失败


运行环境:remix (0.8.13版本)

FundMe.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

contract FundMe{

    address public  owner;
    uint public  donation;
    uint minimumUSD = 100;

//做一个合约的动态地址 记录每个捐款者的地址
    address[]  public  fundes;

    //定义一个mapping方法定义每一个地址捐款多少钱
    mapping (address => uint) public  Fund_address;

    constructor() {
        owner = msg.sender;
    }

    function Fund() public  payable {
        require(msg.value > 500 ,"too little must than 50wei");
        fundes.push(msg.sender);
        Fund_address[msg.sender] = msg.value;
    }

    function getFund() public  view returns (address[] memory){
        return (fundes);
    }
    //定义一个函数把合约创建的地址修改给其他地址
    function setAddress(address _newOwner) public onlyOwner{
        owner = _newOwner;
    } 

    modifier onlyOwner {
        require(msg.sender == owner,"you are not deployer");
        _;
    }

    //防止有人直接转钱给合约不通过function
    receive() external payable {
        Fund();
    }

    fallback() external payable {
        Fund();
    }
 
    function withdrawl() public onlyOwner{
        // require(msg.sender == owner, "you are not deployer");

        for (uint i ; i < fundes.length;i++){
            Fund_address[fundes[i]] = 0;
        }

        (bool cassSuccess,bytes memory data) =  payable (msg.sender).call{value:address(this).balance}("");
        require(cassSuccess,"transaction failed");

//将funders这个地址元组回到初始化
        fundes = new  address[](0);
    }
}

有不懂的可以直接评论区留言,必回

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值