主页 > 什么是imtoken钱包 > 如何通过以太坊智能合约进行众筹(ICO)

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

什么是imtoken钱包 2023-03-21 05:50:47

想知道更多关于区块链技术知识,请百度【链客区块链技术问答社区】
链客,有问必答!

众筹

简单说一下众筹的概念:一般是这样的,我有一个很好的想法,但是我没有钱去做,所以我把这个想法发给大家说:我会做这个我需要500万。你有兴趣投资一些钱吗?如果你在 30 天内投资了足够的 500 万,我会开始做。到时候,大家都是原股东。如果筹款金额低于500万,大家都会投资。这笔钱将退还给所有人。

现在ICO众筹被各种大佬用来割韭菜,玩的很烂(不管达标不达标,钱都被拿走)。

其实区块链技术非常适合解决众筹的信任问题。借助智能合约,当筹款金额完成后以太坊ico多少钱以太坊ico多少钱,筹款资金可自动转入指定账户。退款。这个过程不需要看众筹老板的人品,也不需要依赖第三方平台的信用担保。

代币

以太坊ico多少钱

传统的众筹通常在参与后不易交易(参与后不能转让给他人),但通过代币参与众筹,很容易进行交易,众筹参与者可以任意买卖时间,当众筹项目实施完成后,奖励将完全以代币持有量为准。

比如大家比较容易理解,有这个众筹:A有技术做一个可以监测健康的戒指,为此向公众募了2亿,100元对应一个代 约定,环上币后,代币持有者可以用一个代币换一个环。指环的研发周期为一年,所以在指环上市的前一年,众筹的参与者可以随时兑换所持有的代币。

众筹智能合约代码

让我们看看如何实现众筹智能合约。

pragma solidity ^0.4.16;

接口令牌{

以太坊ico多少钱

函数传递(地址接收者,单位数量);

}

合约众筹{

地址公共受益人; // 筹款成功后的收件人

uint 公共资金目标; // 筹款金额

uint public amountRaised; // 参与数量

以太坊ico多少钱

uint 公共截止日期; // 筹款截止日期

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 合约的地址来创建实例
}
/**
 * 无函数名的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);
}
/**
*  定义函数修改器modifier(作用和Python的装饰器很相似)
* 用于在函数执行前检查某种前置条件(判断通过之后才会继续执行该方法)
* _ 表示继续执行之后的代码
**/
modifier afterDeadline() { if (now >= deadline) _; }
/**
 * 判断众筹是否完成融资目标, 这个方法使用了afterDeadline函数修改器
 *
 */
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;
        }
    }
}

}

部署和说明

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

1.要创建众筹合约,我们需要提供以下参数:

以太坊ico多少钱

ifSuccessfulSendTo:筹款成功后的接收方(其实这里可以默认合约创建者)

fundingGoalInEthers:筹款金额,为方便起见,我们只筹集 3 个以太币

durationInMinutes:筹款时间

finneyCostOfEachToken 每个代币的价格,这里为了方便使用单位finney,取值为:1(1 ether = 1000 finney)

addressOfTokenUsedAsReward:代币合约地址。

例子:

以太坊ico多少钱

本文使用的参数有:

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

2.参与者实际在投资时购买众筹合约代币,都需要在合约中预存代币。代币数量为:筹款金额/代币价格,这里:3 * 1000/1 = 3000(也可以大于3000)。

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

3.参与者的投资行为是向众筹合约转账。转账时会执行Fallback函数(无名函数),将对应的代币返还给自己的账户。

4.safeWithdrawl() 可以由参与者或受益人执行。如果融资不达标,参与者可以收回之前的投资,如果融资达标,受益人可以获得全部融资。

未经许可请勿转载。文章来自