主页 > imtoken钱包下载官网 > 如何通过以太坊智能合约进行众筹(ICO)

如何通过以太坊智能合约进行众筹(ICO)

imtoken钱包下载官网 2023-01-17 01:09:50

在上一篇文章中,我们写了如何二次发行代币。 今天我们就来说说如何使用代币公开募集资金,也就是写一个募资合约。

写在前面

本文中提到的代币是使用以太坊智能合约创建的。 在阅读本文之前,您应该对以太坊和智能合约有一定的了解。 如果你还不知道,我建议你读一读以太坊是什么

众筹

我简单说一下众筹的概念:一般来说,我有一个很好的idea,但是我没有钱去做,所以我把这个idea发给大家,说:我需要500块钱来做这个。 万,你有兴趣投资一些钱吗? 如果30天内大家投资500万,我就开始。 到时候大家都是原股东。 募集金额低于500万的,将返还大家投入的资金。 为了每一个。

现在ICO众筹已经被各种大佬割韭菜了,已经烂尾了(不管达不达标,钱都拿走了)。

事实上以太坊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;   // 募资额度

以太坊2014众筹价_sitesina.com.cn 以太坊ico_以太坊ico众筹

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,

以太坊2014众筹价_sitesina.com.cn 以太坊ico_以太坊ico众筹

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 合约的地址来创建实例 } /** * 无函数名的Fallback函数, * 在向合约转账时,这个函数会被调用 */ 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);

以太坊2014众筹价_以太坊ico众筹_sitesina.com.cn 以太坊ico

} /** * 定义函数修改器modifier(作用和Python的装饰器很相似) * 用于在函数执行前检查某种前置条件(判断通过之后才会继续执行该方法) * _ 表示继续执行之后的代码 **/ modifier afterDeadline() { if (now >= deadline) _; } /** * 判断众筹是否完成融资目标, 这个方法使用了afterDeadline函数修改器 * */ function checkGoalReached() afterDeadline { if (amountRaised >= fundingGoal) { fundingGoalReached = true; GoalReached(beneficiary, amountRaised); } crowdsaleClosed = true; } /**

以太坊2014众筹价_以太坊ico众筹_sitesina.com.cn 以太坊ico

* 完成融资目标时,融资款发送到收款方 * 未完成融资目标时,执行退款 * */ 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

以太坊ico众筹_以太坊2014众筹价_sitesina.com.cn 以太坊ico

fundingGoalReached = false; } } } }

部署和说明

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

创建众筹合约,我们需要提供以下参数: ifSuccessfulSendTo:众筹成功后的收款人(其实这里可以默认为合约创建者) fundingGoalInEthers:筹款金额,为了方便,我们只筹集了3个etherdurationInMinutes:筹款time finneyCostOfEachToken 每个token的价格,这里为了方便使用单位finney,取值为:1(1 ether = 1000 finney) addressOfTokenUsedAsReward:Token合约地址。 如:

币合约地址

本文使用的参数为:

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

参与者在投资时实际购买的是众筹合约代币,因此需要先在合约中存入代币。 代币数量为:筹款金额/代币价格,这里是:3 * 1000/1 = 3000(有条件的也可以大于3000)。 预存代币到合约,可以使用钱包,或者在remix中重新加载代币合约,执行代币合约的tranfer()函数进行代币转账。 转账地址就是我们创建合约的地址。 如果使用myetherwallet转账如图:

使用myetherwallet转账

投资人向众筹合约转账(发送Ether),参与众筹行为。 转账时,会执行Fallback函数(即无名函数),将相应的代币返还到自己的账户中。

safeWithdrawl() 可以由参与者或受益人调用。 融资不达标的,参与方可收回前期投资资金。 如果融资达标,受益人可以获得全部融资资金。

扩张

以上是一份非常正式的募捐合同。 下面我就说一下这两个筹款合约的延期,无限筹款合约和割韭菜合约是如何实现的。这部分内容独家发表在我的区块链技术小专栏

另外安利几个视频课程给大家:

通过代币(Token)学习以太坊智能合约开发 以太坊智能合约语言深入讲解 Solidity 以太坊DAPP开发实战-轻松学DAPP开发

如果你在学习中遇到问题以太坊ico众筹,欢迎到我的知识星球提问。 作为星球会员权益,会员可以加入区块链技术付费交流群。

参考文件

如果您在学习过程中遇到任何问题,欢迎到区块链技术问答提问,这里有专家为您解答。浅谈区块链-优质区块链技术博客+问答社区,区块链学习双助力