在线无码中文破解|日本影院一区二区三区|五月激情Av在线|国产香蕉视频一区|国产老熟女AAAA|云霸高清91视频|久久久www视频|在线熟女网站无码视频|国产精品 国产|韩日精品中文字幕

風(fēng)險(xiǎn)提示:理性看待區(qū)塊鏈,提高風(fēng)險(xiǎn)意識(shí)!

如何通過以太坊智能合約來進(jìn)行眾籌?

2個(gè)回答

黑喵7星評(píng)價(jià)

2020-05-08 14:22:22

如何通過以太坊智能合約來進(jìn)行眾籌?

如果你有一個(gè)很好的項(xiàng)目想法,但是缺少資金和其他資源無法啟動(dòng),你能找到幫助嗎?無資金鏈支持的互聯(lián)網(wǎng)宣傳是十分低效,不單止互聯(lián)網(wǎng),甚至在其他渠道也是如此。

以太坊,一個(gè)分散式平臺(tái),可以運(yùn)行智能合約:應(yīng)用程序按照既定的程序運(yùn)行,不會(huì)出現(xiàn)停機(jī),審查,欺詐或第三方干擾的可能性(去中心化)。

通過使用以太坊我們可以創(chuàng)建一個(gè)合同,合同內(nèi)容當(dāng)然是你的項(xiàng)目,支持者給你資金,直到你的日期和目標(biāo)達(dá)到。而且我們不需要經(jīng)過平臺(tái),交易所等等被扣掉一部分資源。一般我們會(huì)構(gòu)建三種模式的眾籌項(xiàng)目:預(yù)售產(chǎn)品、以區(qū)塊鏈組織的虛擬股票數(shù)量有限的物品。

首先--我們要在以太坊錢包中建立一個(gè)數(shù)字標(biāo)記(使用代碼和特定架構(gòu)設(shè)定的代幣)

以太坊中所有生態(tài)系統(tǒng)中的代幣都市有價(jià)值,并且可以進(jìn)行交易的。

然后我們利用智能合約創(chuàng)造一個(gè)Crowdsale(眾募),在合約代碼中加入變量。

例如加入目標(biāo)數(shù)量,眾籌時(shí)間,眾籌金額等。

當(dāng)有支持著加入時(shí),智能合約會(huì)根據(jù)Crowdsale內(nèi)容發(fā)送相關(guān)的數(shù)字標(biāo)記。然后支持者會(huì)根據(jù)數(shù)字標(biāo)記發(fā)送資金。

當(dāng)資金達(dá)到目標(biāo)時(shí),合約便會(huì)完成。但如果Crowdsale已經(jīng)結(jié)束,或者合同沒有達(dá)到足夠的標(biāo)記,合同程序?qū)⑼V箞?zhí)行,并且所有數(shù)字標(biāo)記將被回收。

虛擬貨幣礦工1星評(píng)價(jià)

2020-05-08 14:25:43

眾籌

先簡(jiǎn)單說下眾籌的概念:一般是這樣的,我一個(gè)非常好的想法,但是我沒有錢來做這事,于是我把這個(gè)想法發(fā)給大家看,說:我做這件事需要5百萬,大家有沒有興趣投些錢,如果大家在30天內(nèi)投夠了5百萬我就開始做,到時(shí)大家都是原始股東,如果募資額不到5百萬,大家投的錢就還給大家。

現(xiàn)在ICO眾籌已經(jīng)被各路大佬拿來割韭菜而被玩壞了(不管有無達(dá)標(biāo),都把錢卷走)。

其實(shí)區(qū)塊鏈技術(shù)本事非常適合解決眾籌的信任問題,借助于智能合約,可以實(shí)現(xiàn)當(dāng)募資額完成時(shí),募資款自動(dòng)打到指定賬戶,當(dāng)募資額未完成時(shí),可退款。這個(gè)過程不需要看眾籌大佬的人品,不用依靠第三方平臺(tái)信用擔(dān)保。

代幣

傳統(tǒng)的眾籌在參與之后通常不容易交易(參與之后無法轉(zhuǎn)給其他人),而通過用代幣來參與眾籌,則很容易進(jìn)行交易,眾籌的參與人可隨時(shí)進(jìn)行買賣,待眾籌項(xiàng)目實(shí)施完成的時(shí)候,完全根據(jù)代幣持有量進(jìn)行回饋。

舉個(gè)例子說明下,大家會(huì)更容易理解,有這一個(gè)眾籌:A有技術(shù)做一個(gè)能監(jiān)測(cè)健康的指環(huán),為此向公眾募資200百萬,募資時(shí)100塊對(duì)應(yīng)一個(gè)代幣,約定在指環(huán)上市之后,代幣的持有人可以用一個(gè)代幣來兌換一個(gè)指環(huán)。而指環(huán)的研發(fā)周期是一年,因此在指環(huán)還未上市的一年里,眾籌的參與人可以隨時(shí)交易所持有的代幣。

眾籌智能合約代碼

接下來就看看如何實(shí)現(xiàn)一個(gè)眾籌智能合約。

pragma solidity ^0.4.16;

interface token {

function transfer(address receiver, uint amount);

}

contract Crowdsale {

address public beneficiary; // 募資成功后的收款方

uint public fundingGoal; // 募資額度

uint public amountRaised; // 參與數(shù)量

uint public deadline; // 募資截止期

uint public price; // token 與以太坊的匯率 , token賣多少錢

token public tokenReward; // 要賣的token

mapping(address => uint256) public balanceOf;

bool fundingGoalReached = false; // 眾籌是否達(dá)到目標(biāo)

bool crowdsaleClosed = false; // 眾籌是否結(jié)束

/**

* 事件可以用來跟蹤信息

**/

event GoalReached(address recipient, uint totalAmountRaised);

event FundTransfer(address backer, uint amount, bool isContribution);

/**

* 構(gòu)造函數(shù), 設(shè)置相關(guān)屬性

*/

function Crowdsale(

address ifSuccessfulSendTo,

uint fundingGoalInEthers,

uint durationInMinutes,

uint finneyCostOfEachToken,

address addressOfTokenUsedAsReward) {

beneficiary = ifSuccessfulSendTo;

fundingGoal = fundingGoalInEthers * 1 ether;

deadline = now + durationInMinutes * 1 minutes;

price = finneyCostOfEachToken * 1 finney;

tokenReward = token(addressOfTokenUsedAsReward); // 傳入已發(fā)布的 token 合約的地址來創(chuàng)建實(shí)例

}

/**

* 無函數(shù)名的Fallback函數(shù),

* 在向合約轉(zhuǎn)賬時(shí),這個(gè)函數(shù)會(huì)被調(diào)用

*/

function () payable {

require(!crowdsaleClosed);

uint amount = msg.value;

balanceOf[msg.sender] += amount;

amountRaised += amount;

tokenReward.transfer(msg.sender, amount / price);

FundTransfer(msg.sender, amount, true);

}

/**

* 定義函數(shù)修改器modifier(作用和Python的裝飾器很相似)

* 用于在函數(shù)執(zhí)行前檢查某種前置條件(判斷通過之后才會(huì)繼續(xù)執(zhí)行該方法)

* _ 表示繼續(xù)執(zhí)行之后的代碼

**/

modifier afterDeadline() { if (now >= deadline) _; }

/**

* 判斷眾籌是否完成融資目標(biāo), 這個(gè)方法使用了afterDeadline函數(shù)修改器

*

*/

function checkGoalReached() afterDeadline {

if (amountRaised >= fundingGoal) {

fundingGoalReached = true;

GoalReached(beneficiary, amountRaised);

}

crowdsaleClosed = true;

}

/**

* 完成融資目標(biāo)時(shí),融資款發(fā)送到收款方

* 未完成融資目標(biāo)時(shí),執(zhí)行退款

*

*/

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 {

//If we fail to send the funds to beneficiary, unlock funders balance

fundingGoalReached = false;

}

}

}

}

部署及說明

在部署這個(gè)合約之前,我們需要先部署一個(gè)代幣合約,請(qǐng)參考一步步教你創(chuàng)建自己的數(shù)字貨幣。

創(chuàng)建眾籌合約我們需要提供一下幾個(gè)參數(shù): ifSuccessfulSendTo: 募資成功后的收款方(其實(shí)這里可以默認(rèn)為合約創(chuàng)建者) fundingGoalInEthers: 募資額度, 為了方便我們僅募3個(gè)ether durationInMinutes: 募資時(shí)間 finneyCostOfEachToken 每個(gè)代幣的價(jià)格, 這里為了方便使用了單位finney及值為:1 (1 ether = 1000 finney) addressOfTokenUsedAsReward: 代幣合約地址。 如:

本文使用的參數(shù)為:

"0xc6f9ea59d424733e8e1902c7837ea75e20abfb49",3, 100, 1,"0xad8972e2b583f580fc52f737b98327eb65d08f8c"

參與人投資的時(shí)候?qū)嶋H購(gòu)買眾籌合約代幣,所以需要先向合約預(yù)存代幣,代幣的數(shù)量為:募資額度 / 代幣的價(jià)格 , 這里為:3 * 1000/1 = 3000 (當(dāng)能也可以大于3000)。

向合約預(yù)存代幣可以使用myetherwallet錢包,或在remix中重新加載代幣合約,執(zhí)行代幣合約tranfer()函數(shù)進(jìn)行代幣轉(zhuǎn)賬。如使用myetherwallet轉(zhuǎn)賬如圖:

參與人投資就是向眾籌合約轉(zhuǎn)以太幣,轉(zhuǎn)賬時(shí),會(huì)執(zhí)行Fallback回退函數(shù)(即無名函數(shù))向其賬戶打回相應(yīng)的代幣。

safeWithdrawl() 可以被參與人或收益人執(zhí)行,如果融資不達(dá)標(biāo)參與人可收回之前投資款,如果融資達(dá)標(biāo)收益人可以拿到所有的融資款。

擴(kuò)展

上面是一個(gè)很正規(guī)的募資合約。接下來講兩個(gè)募資合約的擴(kuò)展,如何實(shí)現(xiàn)無限募資合約及割韭菜合約。

無限募資合約

上面合約中,募資額度和相應(yīng)的代幣都是固定的,一旦達(dá)到募資目標(biāo)后,就無法再繼續(xù)投資。

如果我們想實(shí)現(xiàn)一個(gè)可無限募資(指募資達(dá)標(biāo)后,仍然可以繼續(xù)募資,不是指可一直募資)的合約,步驟如下:

先參考實(shí)現(xiàn)一個(gè)可管理、增發(fā)、兌換、凍結(jié)等高級(jí)功能的代幣,部署一個(gè)可增發(fā)代幣合約

更改Fallback函數(shù):

tokenReward.transfer(msg.sender, amount / price);

//修改為:

tokenReward.mintToken(msg.sender, amount / price);

在無限募資合約部署之后,調(diào)用高級(jí)代幣合約的transferOwnership,把無限募資合約設(shè)置為代幣合約的Owner,以便合約能執(zhí)行mintToken()函數(shù)。

割韭菜合約

在上面的合約中,如果募資未達(dá)標(biāo),參與人則能夠取回自己的投資,這是想割韭菜的大佬們不愿看到的。

他們會(huì)這樣改合約:

function () payable {

require(!crowdsaleClosed);

uint amount = msg.value;

balanceOf[msg.sender] += amount;

amountRaised += amount;

tokenReward.transfer(msg.sender, amount / price);

FundTransfer(msg.sender, amount, true);

// 當(dāng)有人付款直接取走資金

beneficiary.send(amount);

}