如何寫個眾籌合約
編寫眾籌合約涉及使用 Solidity 語言來定義智慧合約。以下是一個簡單的眾籌合約示例,基於以太坊的 ERC-20 代幣標準。請注意,這只是一個基礎示例,實際應用中可能需要更多的安全性和功能。
```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
contract Crowdfunding {
address public owner;
IERC20 public token; // 使用的代幣合約地址
uint256 public goal; // 眾籌目標
uint256 public deadline; // 截止日期
uint256 public raisedAmount; // 已籌集金額
mapping(address => uint256) public contributions; // 參與者的貢獻記錄
bool public fundingGoalReached = false; // 眾籌目標是否達成
bool public crowdsaleClosed = false; // 眾籌是否關閉
event Contribution(address indexed contributor, uint256 amount);
event FundingGoalReached(uint256 amountRaised);
event CrowdsaleClosed();
modifier onlyOwner() {
require(msg.sender == owner, "Only the owner can call this function");
_;
}
modifier notClosed() {
require(!crowdsaleClosed, "Crowdsale is closed");
_;
}
modifier afterDeadline() {
require(block.timestamp >= deadline, "Crowdsale deadline has not passed");
_;
}
constructor(
address _token,
uint256 _goal,
uint256 _durationInMinutes
) {
owner = msg.sender;
token = IERC20(_token);
goal = _goal;
deadline = block.timestamp + _durationInMinutes * 1 minutes;
}
function contribute(uint256 _amount) external notClosed {
require(block.timestamp < deadline, "Crowdsale has ended");
require(raisedAmount + _amount <= goal, "Contribution exceeds the goal");
token.transferFrom(msg.sender, address(this), _amount);
contributions[msg.sender] += _amount;
raisedAmount += _amount;
emit Contribution(msg.sender, _amount);
if (raisedAmount >= goal) {
fundingGoalReached = true;
emit FundingGoalReached(raisedAmount);
}
}
function withdraw() external afterDeadline {
require(fundingGoalReached, "Funding goal not reached");
uint256 amount = contributions[msg.sender];
contributions[msg.sender] = 0;
token.transfer(msg.sender, amount);
}
function closeCrowdsale() external onlyOwner {
require(!crowdsaleClosed, "Crowdsale already closed");
crowdsaleClosed = true;
emit CrowdsaleClosed();
}
}
```
上述合約使用了 OpenZeppelin 的 ERC20 合約庫,確保了在代幣互動方面的安全性。在實際使用中,你需要引入相關的庫檔案,可以透過 [OpenZeppelin GitHub]() 獲取。
此眾籌合約支援以下功能:
1. 設定眾籌目標、截止日期和代幣。
2. 參與者可以透過 `contribute` 函式貢獻代幣。
3. 在達到眾籌目標後,參與者可以透過 `withdraw` 函式提取代幣。
4. 合約擁有者可以透過 `closeCrowdsale` 函式關閉眾籌。
請確保在實際使用前仔細測試和審查合約,以確保其符合專案需求並且安全可靠。
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70035240/viewspace-3006971/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- solidity案例詳解(二)眾籌合約Solid
- 3.25 實戰智慧合約眾籌1
- 3.26 實戰智慧合約眾籌2
- DAPP眾籌智慧合約系統開發原理丨眾籌模式分析丨dapp眾籌系統APP模式
- 阿凡達(泰山眾籌)智慧合約DAPP系統開發詳情 | DAPP智慧合約眾籌系統原始碼邏輯規則APP原始碼
- 第九課 如何除錯以太坊官網的智慧合約眾籌案例除錯
- 泰山眾籌智慧合約軟體開發技術方案
- 互助眾籌FDF迴圈模式開發智慧合約搭建模式
- 互助眾籌智慧合約平臺開發方案(原始碼示例)原始碼
- DisruptDEX合約眾籌池挖礦系統開發(技術方案)
- 合約眾籌質押挖礦系統開發DAPP技術分析APP
- AVATAR阿凡達眾籌系統開發說明合約技術
- FDF智慧合約眾籌迴圈互助遊戲系統開發demo遊戲
- 泰山眾籌4.0合約系統開發|泰山DAPP開發搭建技術APP
- sun泰山眾籌(智慧合約)系統程式設計開發技術分析程式設計
- DAPP智慧合約眾籌互助質押挖礦分紅系統開發APP
- 如何編寫一個可升級的智慧合約
- Defi/nft泰山眾籌財系統合約開發丨NFT丨Defi丨NFT
- 新泰山眾籌sun4.0dapp系統開發合約部署流程介紹APP
- 區塊鏈眾籌互助商城dapp系統開發合約技術詳情區塊鏈APP
- 馬蹄鏈佛薩奇/泰山眾籌阿凡達/眾籌互助/智慧合約流動性挖礦分紅系統開發技術案例
- 泰山眾籌APP開發,泰山眾籌商城開發,泰山眾籌是什麼模式?APP模式
- 編寫一個簡單的智慧合約
- 泰山眾籌系統Dapp開發/泰山眾籌原始碼/泰山眾籌矩陣開發方案APP原始碼矩陣
- 如何用 C# 編寫 NEO 智慧合約C#
- 泰山眾籌Defi理財合約系統技術開發丨Solidity程式設計程式碼Solid程式設計
- NFT股權分割拆分眾籌dapp系統開發智慧合約部署詳細功能介紹APP
- 智慧合約眾籌迴圈互助遊戲系統開發(DAPP開發)丨案例原始碼遊戲APP原始碼
- Avater阿凡達泰山眾籌5.0dapp系統開發智慧合約底層邏輯APP
- 編寫智慧合約
- 泰山眾籌商城開發、泰山眾籌DAPP系統開發、泰山眾籌原始碼部署開發APP原始碼
- 尚籌網(眾籌專案實戰)
- 泰山眾籌系統丨及泰山眾籌系統開發原始碼部署(技術開發流程)泰山眾籌原始碼
- 以太坊中如何獲取另外一個智慧合約部署的合約地址?
- Sun(泰山眾籌)系統開發|眾籌DAPP開發搭建技術APP
- 眾籌app商城開發詳細,眾籌app商城系統開發(原始碼部署),眾籌商城系統原始碼功能APP原始碼
- 2.09 java編寫智慧合約Java
- 關於泰山眾籌4.0/阿凡達眾籌系統/技術開發