Crowdsales on Ethereum with OpenZeppelin

這篇是寫給開發者,在為您的加密項目進行眾籌(Initial Coin Offering ,ICO)時,除了要寫一個代幣的智能合約之外還要寫一個眾籌的智能合約,而在OpenZeppelin中有許多不同種的合約,所以了解哪種類型的眾包符合您的需求非常重要。

當需要實施您的眾籌以分發您的ERC20 Token並籌集資金時,您可能會對有多少種不同類型的眾籌募資感到驚訝,如果不知道請接洽我,我將會解釋不同眾籌募資的用途,而這篇是寫給開發者了解。為了確保您的眾包中的最大安全性,無疑就是會使用OpenZeppelin的智能合約庫,您會注意到有不同眾籌合約界面。此篇將嘗試為您解釋不同眾籌合約的用途。

名詞解釋: Token是有不同的名稱,就像是各國有自己的法定貨幣(簡稱法幣),例如在新加坡用的幣稱為新加坡幣或新幣 (SGD),在中國的法幣則稱人民幣。Token這個英文名稱在不同文章大多被翻譯成代幣,在此文章裡我將稱Token代幣

Image for post
Image for post

Crowdsale

您可能實施的任何眾籌將與Crowdsale繼承的合同。如文檔所述,它以“最基本的形式實現安全的眾籌邏輯,並且可以擴展以提供額外的功能”。它定義了要出售的ERC20 代幣,發送資金的錢包,銷售率以及出售所籌集的額外數量。在最基本的形式中,當它收到購買代幣的請求時,它會對買方進行一些驗證,然後計算請求滿足的代幣數量,最後將這些代幣交給買方,並將資金交給定義的錢包。

雖然這份合同涵蓋了所需的所有基本行為,但還是有一些人們可能想要的其他理想品質。例如,可能會有一個可退款的眾包,這可能對投資者更具吸引力,或者是您的類型代幣可能需要的鑄造眾籌。

在Crowdsale資料夾下有distribution, emission, price 和validation四個子資料夾,我將為您詳細介紹它們。

Validation

此類別中的眾包將提供一種機制來定義投資者可以購買代幣的情況或條件。這會約制代幣的 分配,因此我們稍後將在Distribution下討論的合同將繼承Validation合同中的屬性。

CappedCrowdsale

具有此的眾籌將可對總分配代幣具有設定上限。也就是說,需要確定在眾籌中接受多少wei的上限,這將是您在此眾籌基金中獲得的最大資金額度。

IndividuallyCappedCrowdsale

與CappedCrowdsale類似,但是對於CappedCrowdsale,理論上單個人可以按照上限定義購買所有可用的代幣。使用IndividualuallyCappedCrowdsale,您可以限制他們能夠提出的個人或一組個人的資金數額。使用此功能的一個優點可能是,如果您根據購買的代幣數量提供獎勵等級,因為提供了查看個人貢獻的方法。這個合同要注意的一點是它也繼承了Ownable,這意味著只有眾籌的所有者可以決定誰被限制以及加多少。

TimedCrowdsale

您可以在TimedCrowdsale中設定眾籌開始和眾籌結束時間,並檢查銷售是否已關閉成為驗證過程的一部分,而不是限制資金數量。

WhitelistedCrowdsale

WhitelistedCrowdsale提供白名單,並且只能接受來自此白名單中的人的資金。提供的功能有以將個人和個人組添加到白名單,以及在需要時移除個人。與IndividuallyCappedCrowdsale一樣,它也繼承了Ownable,並且只允許所有者決定將誰添加到白名單中/從白名單中刪除。

Distribution

本標題下的眾籌涉及合同與投資者之間轉移代幣的機制。這可以是對代幣移動的限制,或者允許代幣的進一步移動。

FinalizableCrowdsale

此銷售合同的延期允許所有者在銷售完成後進行額外的工作(意指眾籌想要做的事,在程式員的用語就是要"覆寫override")。 FinalizableCrowdsale繼承自TimedCrowdsale,因此在此上下文中“已完成”表示銷售的結束時間已過。提供函數finalize(),並且應該在銷售達到關閉時間時調用,然後在宣布銷售完成之前執行額外工作,不再允許此額外工作再次發生。額外工作的一個例子可能是重置下一輪資金的開始和結束時間,例如,如果你知道你想要另一個時間框架來賣出更多的代幣,但是對於後來者來說會有不同的利率。此合約再次繼承Ownable,因此只有所有者才能調用finalize()函數。

PostDeliveryCrowdsale

另一個繼承自TimedCrowdsale的擴展,PostDeliveryCrowdsale提供了從撤銷到銷售完成之前鎖定代幣的功能。這意味著投資者資金仍然直接從基本的Crowdsale合約直接轉到指定的錢包,但是在眾籌結束之前他們不能使用、交易或轉賣他們的代幣。

RefundableCrowdsale

這是繼承驗證分配合同邏輯的驗證合同的另一個範例。 RefundableCrowdsale允許定義融資目標,如果在銷售結束時間內未達到此目標,則投資者將獲得投資退款,而在眾籌期間會使用RefundVault作為眾籌的金庫來儲存所有募款資金。它繼承自TimedCrowdsale以定義何時發出退款,並繼承自FinalizableCrowdsale以將退款啟用定義為所有者要完成的最終“額外工作”。投資者資金保存在一個名為RefundVault的單獨的實用合同中,該合同會執行退款流程或向業主基金錢包的提款流程。這個決定是在RefundableCrowdsale的“額外工作”功能中做出的。

Emission

這類眾包合同提供了關於如何將代幣引入眾籌過程的約束。也就是說,代幣來自哪里以及如何獲得買家。散發( Emission)分配( Distribution)之間的關鍵區別在於散發涉及代幣本身的屬性,而分配涉及代幣的整體移動。

AllowanceCrowdsale

這種類型的散發合同定義了錢幣來自的錢包,並批准了對眾籌的限制。雖然在較高的水平上這聽起來類似於CappedCrowdsale,但這是一個很好的例子來突出散發( Emission)分配( Distribution)之間的差異。在CappedCrowdsale中,“津貼”來自要籌集的資金數量,這是對代幣移動的限制,簡單來說就是募資的總數。在AllowanceCrowdsale中,“津貼”直接由希望出售的代幣數量來定義,簡單來說就是募資者可以允許賣多少代幣。

MintedCrowdsale

MintedCrowdsale要求銷售的ERC20代幣是MintableToken,這意味著代幣的總供應量不一定是固定的,並且通過“鑄造( minting)”它們並通過鑄造的令牌數量增加總供應來引入新令牌。 MintedCrowdsale意味著當眾籌合同要向投資者交付代幣時,代幣才會交付時被鑄造,更白話講是當我付錢時我才製作"錢幣"來付,所以平時時我是沒有錢的。

Price

此標題下只有一個眾籌合約,但此標題下的任何合約最終將涉及控制銷售期間出售代幣的比率。

IncreasingPriceCrowdsale

繼承此擴展的眾包將允許定義銷售代幣的初始和最終費率,並且將使用TimedCrowdsale功能隨時間線性地增加代幣的價格(降低費率)。提供了函數getCurrentRate(),當投資者發出購買代幣的請求時,應該調用該函數來確定訂單應該滿足的匯率。如果您希望獎勵早期投資的“早鳥”並希望以這種方式眾籌您的資金,那麼這種類型的眾籌可能會很有用。

如果您想安排諮詢有關眾籌(Initial Coin Offering ,ICO),或想聘請我開發定制的區塊鏈解決方案,請訪問我的網站並與我聯繫。

Written by

撰寫任何事情,O型水瓶混魔羯,咖啡愛好者,Full stack/blockchain developer,Founder of Blockchain&Dapps meetup and DeFi-Decentralized-Finance-SG meetup,Udemy teacher。

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store