- スマートコントラクトの基本構造:
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);
}
}
-
スマートコントラクトの説明:
Crowdfunding
という名前のスマートコントラクトを作成します。projectCreator
はプロジェクト作成者のアドレスを格納します。deadline
はクラウドファンディングの締め切り日時を格納します。goalAmount
は目標金額を格納します。currentAmount
は現在の寄付総額を格納します。
-
スマートコントラクトの主な関数:
contribute()
: ユーザーが寄付を行うための関数です。締め切り前かつ目標金額に達していない場合にのみ寄付が受け付けられます。getRefund()
: 締め切り後であり、目標金額に達していない場合に、ユーザーが寄付金を返金するための関数です。プロジェクト作成者はこの関数を呼び出すことはできません。withdrawFunds()
: 締め切り後であり、目標金額に達している場合に、プロジェクト作成者が寄付金を引き出すための関数です。
以上がクラウドファンディングのためのSolidityコードの基本的な例です。このコードを使用することで、ブロックチェーン上で透明かつ安全なクラウドファンディングプラットフォームを構築することができます。