實現一個好的idea常常需要付出巨大的努力,并且需要大量的資金。我們可以尋求用戶捐贈,或者尋求投資機構投資,但這往往很難。對于捐贈,國內的風氣不太好,資金去向往往不了了之,捐贈者對于當前的捐贈形式早已失去了信心。而風險投資,對于沒有人脈的創業者來說,非常困難。 區塊鏈提供了一種眾籌的新形式——眾籌智能合約。募資人通過眾籌合約設定好眾籌目標,以及完成時間,設定不同眾籌結果所對應的操作(例如目標失敗退回全款、目標成功時受益人獲得加密代幣或ETH)。由于區塊鏈不可篡改的特性,眾籌合約會是一個非常吻合的應用場景。
這個例子中我們將通過解決兩個重要的問題進行更好的眾籌:
如何管理資金,保證流動性;
籌集資金后如何花錢。
區塊鏈出現之前的眾籌項目一般缺少流動性,投資人一旦錯過眾籌截止時間將無法參與眾籌;一旦參與眾籌,投資人也不能中途退出。智能合約通過發行代幣的形式來記錄投資額,并提供了類似股票市場的流動性。投資人可以選擇交易或者繼續持有。項目成功后投資者可以使用代幣交換實物或者產品服務。項目失敗的話投資者可以按照原先的約定退出,并且繼續持有代幣以表紀念。
同樣,當前眾籌項目也存在資金去向不明的問題。在這個項目中,我們使用DAO(分布式自治組織)記錄每一筆資金去向。
先放上代碼,然后再一步步解讀。
pragmasolidity^0.4.16;interfacetoken{functiontransfer(addressreceiver,uintamount);}contractCrowdsale{addresspublicbeneficiary;uintpublicfundingGoal;uintpublicamountRaised;uintpublicdeadline;uintpublicprice;tokenpublictokenReward;mapping(address=>uint256)publicbalanceOf;boolfundingGoalReached=false;boolcrowdsaleClosed=false;eventGoalReached(addressrecipient,uinttotalAmountRaised);eventFundTransfer(addressbacker,uintamount,boolisContribution);/***Constrctorfunction**Setuptheowner*/functionCrowdsale(addressifSuccessfulSendTo,uintfundingGoalInEthers,uintdurationInMinutes,uintetherCostOfEachToken,addressaddressOfTokenUsedAsReward){beneficiary=ifSuccessfulSendTo;fundingGoal=fundingGoalInEthers*1ether;deadline=now+durationInMinutes*1minutes;price=etherCostOfEachToken*1ether;tokenReward=token(addressOfTokenUsedAsReward);}/***Fallbackfunction**Thefunctionwithoutnameisthedefaultfunctionthatiscalledwheneveranyonesendsfundstoacontract*/function()payable{require(!crowdsaleClosed);uintamount=msg.value;balanceOf[msg.sender]+=amount;amountRaised+=amount;tokenReward.transfer(msg.sender,amount/price);FundTransfer(msg.sender,amount,true);}modifierafterDeadline(){if(now>=deadline)_;}/***Checkifgoalwasreached**Checksifthegoalortimelimithasbeenreachedandendsthecampaign*/functioncheckGoalReached()afterDeadline{if(amountRaised>=fundingGoal){fundingGoalReached=true;GoalReached(beneficiary,amountRaised);}crowdsaleClosed=true;}/***Withdrawthefunds**Checkstoseeifgoalortimelimithasbeenreached,andifso,andthefundinggoalwasreached,*sendstheentireamounttothebeneficiary.Ifgoalwasnotreached,eachcontributorcanwithdraw*theamounttheycontributed.*/functionsafeWithdrawal()afterDeadline{if(!fundingGoalReached){uintamount=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{//Ifwefailtosendthefundstobeneficiary,unlockfundersbalancefundingGoalReached=false;}}}}
構造函數中
fundingGoal=fundingGoalInEthers*1ether;deadline=now+durationInMinutes*1minutes;
ether和minutes是以太坊預留的關鍵字,1 ether == 1000 finney , 2 days == 48 hours。日期類型的關鍵字有seconds,minutes,hours, days,weeks,years,以太幣單位預留的關鍵字有wei,finney,szabo,ether。1 finney == 1000 szabo,1 szabo == 10^12 wei。now也是以太坊預留的關鍵字,代表當前時間。
接下來我們實例化了一個合約:
tokenReward=token(addressOfTokenUsedAsReward);token的定義在代碼開頭:interfacetoken{functiontransfer(addressreceiver,uintamount){}}
這里我們并未實現token合約,只是告訴編譯器我們的token是一個合約,具有一個transfer()函數,并且在給定的地址上有這個合約。
接下來我們看看合約如何接收資金,相關代碼如下:
function(){require(!crowdsaleClosed);uintamount=msg.value;//...
這個函數很特別,它沒有名字,在solidity中我們稱之為回退函數(Fallback function),回退函數沒有參數,也沒有返回值。如果合約接收ether,則必須明確定義回退函數,否則會觸發異常,并返回ether。接收ether的函數必須帶有關鍵字payable,否則會報錯。
require語句先判斷眾籌是否結束,如果眾籌已經結束,錢將退回給主叫方,避免主叫方出現不必要的損失。
部署通過之后可以用自己的測試賬戶向合約地址轉賬,這樣就可以參與眾籌了。
眾籌成功后,如果繼續往合約地址轉賬,錢將會退回你的賬戶。
到此,相信大家對“以太坊眾籌智能合約怎么實現”有了更深的了解,不妨來實際操作一番吧!這里是本站網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
標準普爾,也就是大家俗稱的標普,是一家世界權威金融分析機構,總部在美國紐約。標普專為全球資本市場提供獨立信用評級、指數服務、風險評估、投資研究和數據服務??梢哉f,標普是全球金融基礎建構的重要一員,在業內一向處于領先地位。標普評級有十個級別,分別是AAA級、AA級、A級、BBB級、 BB級、 B級、CCC級、CC級、C級和D級。標準普爾公司對于各種上市公司的股票進行信用等級劃分,主要是從最高到最低排...
周鴻祎不知道畢業生工資多少什么情況?周鴻祎不知道畢業生工資是來源于360公司的校招會上,周鴻祎表示已經不清楚應屆生的月工資了,甚至問有沒有幾萬塊錢。“幾萬塊錢?一個月?”現場的同學們只能用笑聲來回應。在校招會上還表示自己剛畢業的時候找工作也會對比哪一個工資比較高,之后就去找到這個工作。為了強調工資的重要性,周鴻祎舉了個例子,“你說你在我面前扔一張100塊錢的紙幣...
另類投資市場是什么意思?英文 Alternative Investment Market的縮寫,指英國為那些不夠資格在倫敦股票交易所正式上市的公司所設的市場,這些公司通常是規模較小或高風險的企業。另類投資的投資范圍有哪些?另類投資包括房地產、證券化資產、對沖基金、私人股本基金、大宗商品、藝術品。另類投資是指投資于傳統的股票、債券和現金之外的金融和實物資產,其中證券化資產就包括了次級房貸為基礎的債券...