美文网首页
2024-02-27 solidity写一个众筹合约

2024-02-27 solidity写一个众筹合约

作者: gdlooker | 来源:发表于2024-02-26 15:59 被阅读0次

众筹合约示例代码如下:

// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.0;

contract CrowFund {
    //首先定义一个变量用来专门统计 多少个人 需要 捐款
    uint256 public neederAmount = 0; //用来统计多少人的
    //这里肯定有一个键值对map用来存粹 a b  c  d等收款地址
    mapping(address => Needer) public neederMap; //a的收款地址  有哪些人捐款 分别捐款多少钱
    address public owner;
  //定义一个结构体
    struct Needer {
        address neederUserAddress; // 需要接受捐款的收款地址
        uint256 goalMoney; //目标本个人 需要捐款多少钱 计划需要别人捐款多少钱
        uint256 alreadyMoney; //本格收款地址下已经捐款多少钱
        uint256 funderAcount; // 这个收款地址有多少人捐款
    }

    constructor() {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }
  
    //传入用户地址  统计数据 +1 目标要捐款多少钱
    function newNeeder(address _neederUserAddress, uint256 _goalMoney) external onlyOwner {
        //每产生一个需要捐款的地址工程
        Needer memory neederStruct = Needer({
            neederUserAddress: _neederUserAddress,
            goalMoney: _goalMoney,
            alreadyMoney: 0,
            funderAcount: 0
        });
        neederMap[_neederUserAddress] = neederStruct;
        neederAmount++;
    }
    //开始捐款
    function startHelpMoney(address _to) external payable {
          //payable(_to).transfer(msg.value);
          // send all Ether to owner
          (bool success, ) = _to.call{value: msg.value}("");
          require(success, "Failed to send Ether");
          //msg.sender捐款给谁捐款多少
           neederMap[_to].alreadyMoney+=msg.value;
    } 
}

捐款逻辑如下:
1.合约的部署者才可以调用newNeeder方法构建 需要捐款的地址
2.每个用户可以发起捐款到目标地址.
实例效果如下:
部署的账号地址:0x1D99d05a9616973Ba67751e7DD3600aBB29d9698
部署合约的合约地:0x86277FbD8403B1907269775e01100FbE198319c8
第一步调用newNeeder方法 只有合约的部署者可以调用该方法,效果如下


构建需要捐款者跟目标金额.png
查询map数据结构.png

发起捐款给谁这里是给0x1D99d05a9616973Ba67751e7DD3600aBB29d9698这个地址捐款
效果如下:


发起捐款.png

相关文章

网友评论

      本文标题:2024-02-27 solidity写一个众筹合约

      本文链接:https://www.haomeiwen.com/subject/xtbzadtx.html