如何通过以太坊智能合约来进行众筹?

如果你有一个很好的项目想法,但是缺少资金和其他资源无法启动,你能找到帮助吗?无资金链支持的互联网宣传是十分低效,不单止互联网,甚至在其他渠道也是如此。

以太坊,一个分散式平台,可以运行智能合约:应用程序按照既定的程序运行,不会出现停机,审查,欺诈或第三方干扰的可能性(去中心化)

通过使用以太坊我们可以创建一个合同,合同内容当然是你的项目,支持者给你资金,直到你的日期和目标达到。而且我们不需要经过平台,交易所等等被扣掉一部分资源。一般我们会构建三种模式的众筹项目:预售产品、以区块链组织的虚拟股票数量有限的物品

首先–我们要在以太坊钱包中建立一个数字标记(使用代码和特定架构设定的代币)

以太坊中所有生态系统中的代币都市有价值,并且可以进行交易的。

然后我们利用智能合约创造一个Crowdsale(众募),在合约代码中加入变量。

例如加入目标数量众筹时间,众筹金额等。

当有支持着加入时,智能合约会根据Crowdsale内容发送相关的数字标记。然后支持者会根据数字标记发送资金。

当资金达到目标时,合约便会完成。但如果Crowdsale已经结束,或者合同没有达到足够的标记,合同程序将停止执行,并且所有数字标记将被回收。

众筹

先简单说下众筹的概念:一般是这样的,我一个非常好的想法,但是我没有钱来做这事,于是我把这个想法发给到底看,说:我做这件事需要5百万,到底有没有兴趣投些钱,如果到底在30天内投够了5百万我就开始做,到时到底都是原始股东,如果募资额不到5百万,到底投的钱就还给到底。

现在ICO众筹已经被各路大佬拿来割韭菜而被玩坏了(不管有无达标,都把钱卷走)。

其实区块链技术本事非常适合解决众筹的信任问题,借助于智能合约,可以实现当募资额完成时,募资款自动打到指定账户,当募资额未完成时,可退款。这个过程不需要看众筹大佬的人品,不用依靠第三方平台信用担保。

代币

传统的众筹在参与之后通常不容易交易(参与之后无法转给其他人),而通过用代币来参与众筹,则很容易进行交易,众筹的参与人可随时进行买卖,待众筹项目实施完成的时候,完全根据代币持有量进行回馈。

举个例子说明下,到底会更容易理解,有这一个众筹:A有技术做一个能监测健康的指环,为此向公众募资200百万,募资时100块对应一个代币,约定在指环上市之后,代币的持有人可以用一个代币来兑换一个指环。而指环的研发周期是一年,因此在指环还未上市的一年里,众筹的参与人可以随时交易所持有的代币。

众筹智能合约代码

接下来就看看讲解实现一个众筹智能合约。

pragma solidity ^0.4.16;

interface token {

function transfer(address receiver, uint amount);

}

contract Crowdsale {

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

uint public fundingGoal; // 募资额度

uint public amountRaised; // 参与数量

uint public deadline; // 募资截止期

uint public price; // token 与以太坊的汇率 , token卖多少钱

token public tokenReward; // 要卖的token

mapping(address=> uint256) public balanceOf;

bool fundingGoalReached=false; // 众筹是否达到目标

bool crowdsaleClosed=false; // 众筹是否结束

event GoalReached(address recipient, uint totalAmountRaised);

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

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); // 传入已发布的 token
合约的地址来创建实例

}

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);

}

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 {

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

fundingGoalReached=false;

}

}

}

}

部署及说明

在部署这个合约之前,我们需要先部署一个代币合约,请参考一步步教你创建自己的数字货币。

创建众筹合约我们需要提供一下几个参数: ifSuccessfulSendTo: 募资成功后的收款方(其实这里可以默认为合约创建者)
fundingGoalInEthers: 募资额度, 为了方便我们仅募3个ether durationInMinutes: 募资时间
finneyCostOfEachToken 每个代币的价格, 这里为了方便使用了单位finney及值为:1 (1 ether=1000 finney)
addressOfTokenUsedAsReward: 代币合约地址。 如:

本文使用的参数为:

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

参与人投资的时候实际购买众筹合约代币,所以需要先向合约预存代币,代币的数量为:募资额度 / 代币的价格 , 这里为:3 * 1000/1=3000
(当能也可以大于3000)。

向合约预存代币可以使用myetherwallet钱包,或在remix中重新加载代币合约,执行代币合约tranfer()函数进行代币转账。如使用myetherwallet转账如图:

参与人投资就是向众筹合约转以太币,转账时,会执行Fallback回退函数(即无名函数)向其账户打回相应的代币。

safeWithdrawl() 可以被参与人或收益人执行,如果融资不达标参与人可收回之前投资款,如果融资达标收益人可以拿到所有的融资款。

扩展

上面是一个很正规的募资合约。接下来讲两个募资合约的扩展,讲解实现无限募资合约及割韭菜合约。

无限募资合约

上面合约中,募资额度和相应的代币都是固定的,一旦达到募资目标后,就无法再继续投资。

如果我们想实现一个可无限募资(指募资达标后,仍然可以继续募资,不是指可一直募资)的合约,步骤如下:

先参考实现一个可管理、增发、兑换、冻结等高级功能的代币,部署一个可增发代币合约

更改Fallback函数:

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

//修改为:

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

在无限募资合约部署之后,调用高级代币合约的transferOwnership,把无限募资合约设置为代币合约的Owner,以便合约能执行mintToken()函数。

割韭菜合约

在上面的合约中,如果募资未达标,参与人则能够取回自己的投资,这是想割韭菜的大佬们不愿看到的。

他们会这样改合约:

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);

// 当有人付款直接取走资金

beneficiary.send(amount);

}

本文部分内容来自互联网,如有疑问请与我们联系。

发布者:币侠,转转请注明出处:https://www.yfhhf.com/btc/130016.html

(0)
上一篇 2023年 1月 29日 上午12:05
下一篇 2023年 1月 29日 上午12:26

相关推荐

  • 币圈牛市(币圈牛市还在吗)

    大家好,今天币侠网https://www.yfhhf.com来为大家关于币圈牛市(币圈牛市还在吗)很多人还不知道,现在让我们一起来看看吧 1.不会有了。 2.在2017年的牛市中,比特币的上行天数达到惊人的267天。 3.与此同时,只有98天在下行。 4.会。 5.上涨为牛市,下跌为熊市,2021年比特币先跌后涨,先熊后牛,熊牛交替。 6.涨不会一直涨,跌也…

    2023年 3月 29日
    2070
  • 国家禁止虚拟货币交易公告(国家禁止虚拟货币交易公告是真的吗)

    大家好。今天币侠网(Yfhhf.com)在这里宣布国家禁止虚拟货币交易(国家禁止虚拟货币交易是真的吗?)很多人还不知道。现在让我们来看看。 1.法律分析:以下法律依据是国家禁止虚拟货币交易的公告。你可以自己去查。 2.没有禁止。 3.中国没有禁止虚拟货币买卖的政策,虚拟货币交易在中国是合法的。 虚拟货币在中国是合法的,但利用虚拟货币从事非法活动是违法的。 5…

    2022年 12月 28日
    3570
  • 欧易是正规的交易平台吗(v6.1.19)_欧意返佣链接

    欧易是正规的交易平台吗? 近年来,金融市场有了空前的发展和改革,与此同时,交易平台也如雨后春笋般涌现,其中欧易就是其中一家备受欢迎的平台。但是,在使用平台前,许多投资者都十分关心,欧易是正规的交易平台吗?本文将详细分析欧易的合法性及其返佣链接相关知识点,以便读者更好地了解该平台。 欧易是一家正规的交易平台 从官网公布的信息来看,欧易是一家经过授权和监管的正规…

    比特币行情 2023年 5月 10日
    2100
  • 比特币今日最新价格(以太坊今日最新价格)

    大家好,今天币侠网(Yfhhf.com)来为大家关于比特币今日最新价格(以太坊今日最新价格)很多人还不知道,现在让我们一起来看看吧 1.昨日,币行以太坊开盘价1565.00,最高价1604.69,最低价1330.00,收盘报于1399.51.截止收盘下跌10.49%,振幅20.65%。 2.今日以太坊开盘价1399.51,平开。 3.无论是以太坊的这个挖矿逐…

    2023年 1月 1日
    2220
  • luna社区(luna社区投票)

    大家好。今天,币侠网https://www.yfhhf.com在这里告诉你关于露娜社区(露娜社区投票)。很多人还不知道。现在让我们来看看。 1 .露娜不会抄底。 2.luna硬币与ust脱钩。 3.目前好像是露娜社区在投票。 4.这一点非常重要。只要主播没断,露娜后面还会继续发更多的股。 5.货币价格将继续暴跌。 6.相信了解的人都知道,Luna2.0的投票…

    2023年 4月 18日
    3010

联系我们

不接风险内容

在线咨询: QQ交谈

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信