3.25 實戰智慧合約眾籌1
這次我們來看看怎麼實現以太坊的眾籌智慧合約案例,首先我們瞭解一下下面的概念
1、什麼是ICO?
ICO是以初始產生的數字加密貨幣作為投資回報的一種籌措資金的方式,它的概念源自證券界的Initial Public Offering(IPO,首次公開發行)。
相較於傳統意義上的IPO,ICO具有可以縮短投融資鏈、降低投融資門檻、流動性佳、全球性投資等優勢。常見的ICO裡,數字貨幣和區塊鏈專案向早期愛好者出售專案代幣。專案團隊通過ICO獲取技術開發和市場擴充資金;而專案愛好者通過ICO支援專案,同時也可在對應代幣進入交易市場後選擇交易退出。
當你有一個好的想法,需要大家的資金來資助你。你可以使用眾籌合約來發起請求捐款。眾籌合約的基本思路是,你設定一個眾籌目標,在達到目標的最後期限時,如果沒有完成眾籌,所有的捐款將被退回,因此減少了捐贈者的風險。由於程式碼是開放的,可被審計的,也就不需要一個集中的、可信的平臺來擔保,每個捐款的人,只需要支付一定的gas。
2、眾籌的獎勵-代幣
一般來說,那些籌集資金的人在資金籌集和資金管理不善之後,根本就不能說這筆錢是如何使用的,這常常導致專案根本無法交付任何東西。這時我們可以使用智慧合適中投票的方式來做決定,這樣對所有人都是公平的。(這個例子不在本文中介紹,可以參考連結)
在下面的例子裡,我們在眾籌中,主要解決兩個重要的問題:如何管理和儲存用於獎勵的代幣;籌集獎金後如何使用。
傳統的眾籌或獎勵記錄通常有一箇中央資料庫,來儲存、跟蹤所有捐助者的過程:誰錯過了眾籌的最後期限了,誰在眾籌過程中捐贈了多少等。與之相反,在區塊鏈中我們將以分散的方式來做這件事,只需建立一個標記來記錄眾籌的每一條記錄、獎勵了多少代幣,後面每個捐贈者都可以得到一個他們可以交易、出售或保留的代幣。如果要給予實物獎勵,生產者只需要交換實物產品的代幣。捐贈者也可以將代幣做為紀念品保留,不管這個眾籌專案有沒有達到它的目標,都可以收藏。
3、 接下來看看程式碼實現
pragma solidity ^0.4.18;
interface token {
function transfer(address receiver, uint amount);
}
contract Crowdsale {
/*儲存結構*/
uint public fundingGoal; // 眾籌目標
address public beneficiary; // 收款人地址
uint public deadline; // 眾籌截至時間
uint public amountRaised; // 參與數量
uint public price; // 眾籌發放的代幣與以太坊的兌換比例
token public tokenReward; // 要賣的token
// 狀態
// 1 判斷是否已經達成眾籌目標
bool public fundingGoalReached = false;
// 2 判斷截至時間到了沒有
bool public crowdsaleClosed = false;
// 地址對應餘額
mapping(address => uint) public balanceOf;
/*事件*/
event LogAmount(uint amount);
// 達成眾籌目標需要觸發的時間
event GoalReached(address recipient, uint totalAmountRaised);
event FundTransfer(address backer, uint amount, bool isContribution);
/*功能函式*/
// 建構函式
function Crowdsale(
// 收款人地址
address ifSuccessfulSendTo,
// 眾籌目標
uint fundingGoalInEthers,
// 持續時間
uint durationInMinites,
// 相對於以太坊的價值
uint weiCostOfEtchToken,
// 傳入已經發布的合約地址,來建立例項
address addressOfTokenUsedAsReward
){
ifSuccessfulSendTo = beneficiary;
fundingGoal = fundingGoalInEthers * 1 ether;
deadline = now + durationInMinites * 1 minutes;
price = weiCostOfEtchToken * 1 wei;
tokenReward = token(addressOfTokenUsedAsReward);
}
// 收款的合約必須包含有payable的回退函式
function() payable {
require(!crowdsaleClosed); // 確保眾籌還沒關閉
uint amount = msg.value;
amountRaised += amount; // 更新已經得到的眾籌額度
balanceOf[msg.sender] += amount;
LogAmount(amount);
tokenReward.transfer(msg.sender, 1000*(amount/price)); // 轉賬
FundTransfer(msg.sender, amount, true);
}
// 修改器
modifier afterDeadline(){
if(now > deadline) _; // 檢查眾籌是否已經截至
}
// 判斷眾籌是否完成了融資的目標
function checkGoalReached() afterDeadline {
if(amountRaised >= fundingGoal){
fundingGoalReached = true;
GoalReached(beneficiary, amountRaised); // 觸發目標達成事件
}
crowdsaleClosed = true;
}
/*
完成融資之後,款項需要傳送到收款方,如果沒達標,退款
*/
function safeWithdrawal() afterDeadline() {
// 沒達標,退款
if(!fundingGoalReached) {
uint amount = balanceOf[msg.sender];
balanceOf[msg.sender] = 0;
if(amount > 0) {
if(msg.sender.send(amount)) {
FundTransfer(msg.sender, amount, false);
} else {
balanceOf[msg.sender] = amount;// 如果傳送失敗,把金額村回去
}
}
}
// 如果眾籌達標而且受益人是當前賬號
if(fundingGoalReached && beneficiary == msg.sender ){
if(beneficiary.send(amountRaised)) {
FundTransfer(beneficiary, amountRaised, false);
} else {
fundingGoalReached = false;
}
}
}
}
-
學院Go語言視訊主頁
https://edu.csdn.net/lecturer/1928 -
掃碼獲取海量視訊及原始碼 QQ群:721929980
相關文章
- 3.26 實戰智慧合約眾籌2
- DAPP眾籌智慧合約系統開發原理丨眾籌模式分析丨dapp眾籌系統APP模式
- 如何寫個眾籌合約
- 阿凡達(泰山眾籌)智慧合約DAPP系統開發詳情 | DAPP智慧合約眾籌系統原始碼邏輯規則APP原始碼
- 泰山眾籌智慧合約軟體開發技術方案
- 互助眾籌FDF迴圈模式開發智慧合約搭建模式
- solidity案例詳解(二)眾籌合約Solid
- 互助眾籌智慧合約平臺開發方案(原始碼示例)原始碼
- 尚籌網(眾籌專案實戰)
- FDF智慧合約眾籌迴圈互助遊戲系統開發demo遊戲
- 第九課 如何除錯以太坊官網的智慧合約眾籌案例除錯
- DAPP智慧合約眾籌互助質押挖礦分紅系統開發APP
- sun泰山眾籌(智慧合約)系統程式設計開發技術分析程式設計
- DisruptDEX合約眾籌池挖礦系統開發(技術方案)
- Web3與智慧合約互動實戰Web
- 馬蹄鏈佛薩奇/泰山眾籌阿凡達/眾籌互助/智慧合約流動性挖礦分紅系統開發技術案例
- 智慧合約眾籌迴圈互助遊戲系統開發(DAPP開發)丨案例原始碼遊戲APP原始碼
- NFT股權分割拆分眾籌dapp系統開發智慧合約部署詳細功能介紹APP
- Avater阿凡達泰山眾籌5.0dapp系統開發智慧合約底層邏輯APP
- 合約眾籌質押挖礦系統開發DAPP技術分析APP
- AVATAR阿凡達眾籌系統開發說明合約技術
- 如何實施智慧合約?
- 泰山眾籌4.0合約系統開發|泰山DAPP開發搭建技術APP
- Defi/nft泰山眾籌財系統合約開發丨NFT丨Defi丨NFT
- 區塊鏈眾籌互助商城dapp系統開發合約技術詳情區塊鏈APP
- 新泰山眾籌sun4.0dapp系統開發合約部署流程介紹APP
- DAPP/FDF智慧合約眾籌迴圈互助遊戲系統開發(詳情及邏輯)丨技術分析APP遊戲
- 【區塊鏈】實戰·以太坊智慧合約程式設計引導區塊鏈程式設計
- 3.10 EOS智慧合約案例實踐
- 以太坊智慧合約開發第四篇:實現Hello World智慧合約
- 泰山眾籌APP開發,泰山眾籌商城開發,泰山眾籌是什麼模式?APP模式
- 【許曉笛】 EOS智慧合約案例解析(1)
- 智慧配送系統的運籌最佳化實戰
- 泰山眾籌系統Dapp開發/泰山眾籌原始碼/泰山眾籌矩陣開發方案APP原始碼矩陣
- 泰山眾籌Defi理財合約系統技術開發丨Solidity程式設計程式碼Solid程式設計
- 泰山眾籌商城開發、泰山眾籌DAPP系統開發、泰山眾籌原始碼部署開發APP原始碼
- 智慧合約從入門到精通:智慧合約的前世今生
- 大繼的基礎級業務實戰設計記錄(二),眾籌