クラウドファンディングのためのSolidityコードの解説と例


  1. スマートコントラクトの基本構造:
pragma solidity ^0.8.0;
contract Crowdfunding {
    address payable public projectCreator;
    uint public deadline;
    uint public goalAmount;
    uint public currentAmount;
    constructor(uint _duration, uint _goal) {
        projectCreator = payable(msg.sender);
        deadline = block.timestamp + _duration;
        goalAmount = _goal;
        currentAmount = 0;
    }
    modifier onlyCreator() {
        require(msg.sender == projectCreator, "Only the project creator can call this function.");
        _;
    }
    function contribute() public payable {
        require(block.timestamp < deadline, "The deadline has passed.");
        require(currentAmount + msg.value <= goalAmount, "The goal amount has already been reached.");
        currentAmount += msg.value;
    }
    function getRefund() public {
        require(block.timestamp >= deadline, "The deadline has not yet passed.");
        require(currentAmount < goalAmount, "The goal amount has been reached.");
        require(msg.sender != projectCreator, "The project creator cannot get a refund.");
        payable(msg.sender).transfer(address(this).balance);
    }
    function withdrawFunds() public onlyCreator {
        require(block.timestamp >= deadline, "The deadline has not yet passed.");
        require(currentAmount >= goalAmount, "The goal amount has not been reached.");
        payable(projectCreator).transfer(address(this).balance);
    }
}
  1. スマートコントラクトの説明:

    • Crowdfundingという名前のスマートコントラクトを作成します。
    • projectCreatorはプロジェクト作成者のアドレスを格納します。
    • deadlineはクラウドファンディングの締め切り日時を格納します。
    • goalAmountは目標金額を格納します。
    • currentAmountは現在の寄付総額を格納します。
  2. スマートコントラクトの主な関数:

    • contribute(): ユーザーが寄付を行うための関数です。締め切り前かつ目標金額に達していない場合にのみ寄付が受け付けられます。
    • getRefund(): 締め切り後であり、目標金額に達していない場合に、ユーザーが寄付金を返金するための関数です。プロジェクト作成者はこの関数を呼び出すことはできません。
    • withdrawFunds(): 締め切り後であり、目標金額に達している場合に、プロジェクト作成者が寄付金を引き出すための関数です。

以上がクラウドファンディングのためのSolidityコードの基本的な例です。このコードを使用することで、ブロックチェーン上で透明かつ安全なクラウドファンディングプラットフォームを構築することができます。