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);
    }
}

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

猜你喜欢

转载自blog.csdn.net/m0_72435337/article/details/131614391