solidity案例詳解(二)眾籌合約

BSN研习社發表於2024-02-07

本系列會詳細解釋智慧合約案例,供大家感受solidity語言的魅力。

要求如下:要有受益人和資助者,且可以檢視合約狀態。

solidity案例詳解(二)眾籌合約

一、分步驟解釋

// SPDX-License-Identifier: MIT
pragma solidity ^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 陣列中,用於記錄所有捐款者的地址
            
        }}
      
    }

三、演示

solidity案例詳解(二)眾籌合約

solidity案例詳解(二)眾籌合約

solidity案例詳解(二)眾籌合約

solidity案例詳解(二)眾籌合約

文章來源:CSDN博主「發呆...」

文章原標題:《solidity案例詳解(二)眾籌合約》

旨在傳播區塊鏈相關技術,如有侵權請與我們聯絡刪除。


來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70012206/viewspace-3006550/,如需轉載,請註明出處,否則將追究法律責任。

相關文章