基于区块链的DAPP众筹系统开发设计与实现

DApp是DecentralizedApplication的缩写,中文直译为去中心化应用,也可以理解为分布式应用。去中心化应用是基于区块链底层开发平台建立的。比如以太坊和EOS,DApp与底层平台的关系就好比APP与ios和安卓系统。一个真正的DApp应用需要同时满足以下几个条件:应用必须完全开

DApp是Decentralized Application的缩写,中文直译为去中心化应用,也可以理解为分布式应用。去中心化应用是基于区块链底层开发平台建立的。比如以太坊和EOS,DApp与底层平台的关系就好比APP与ios和安卓系统。

一个真正的DApp应用需要同时满足以下几个条件:应用必须完全开源自治,且只有一个实体控制着该应用超51%token,该应用必须能够根据用户的反馈及技术要求进行升级,且应用升级必须由大部分用户意见达成一致之后方可进行;应用的数据必须加密后存储在公开的区块链上,应用必须拥有token机制,可用基于相同底层区块链平台的通用代币或自行发行新币,矿工对应用维护节点需要得到代币奖励;应用代币的产生必须依据标准的加密算法,有价值的节点可以根据该算法获取应用的代币奖励。

【170软件2006开发5093】

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 public fundingGoalReached = false;  // 众筹是否达到目标
bool public crowdsaleClosed = false;   //  众筹是否结束

/**
* 事件可以用来跟踪信息
**/
event GoalReached(address recipient, uint totalAmountRaised);
event FundTransfer(address backer, uint amount, bool isContribution);
event LogAmount(uint amount);

/**
 * 构造函数, 设置相关属性
 */
function Crowdsale(
    address ifSuccessfulSendTo,
    uint fundingGoalInEthers,
    uint durationInMinutes,
    uint weiCostOfEachToken,
    address addressOfTokenUsedAsReward) {
        beneficiary = ifSuccessfulSendTo;
        fundingGoal = fundingGoalInEthers * 1 ether;
        deadline = now + durationInMinutes * 1 minutes;
        /*一个TOKEN等同于1个以太坊ETH太贵了,修改官网代码,变为一个TOKEN等同于1个wei*/
        /*price = etherCostOfEachToken * 1 ether;*/
        price = weiCostOfEachToken * 1 wei;
        tokenReward = token(addressOfTokenUsedAsReward);   // 传入已发布的 token 合约的地址来创建实例
}

/**
 * 无函数名的Fallback函数,
 * 在向合约转账时,这个函数会被调用
 */
function () payable {
    require(!crowdsaleClosed);
    uint amount = msg.value;
    balanceOf[msg.sender] += amount;
    amountRaised += amount;
    LogAmount(amount);/*打款3个ETH,判断此处是3还是3*10^18*/
    /*官网这个代码有问题,导致打回的币的数量会非常小,此处*1000倍,表示
      1个ETH等于1000个TOKEN/
    /*tokenReward.transfer(msg.sender, amount / price);*/
    tokenReward.transfer(msg.sender, 1000 * (amount / price));
    /*msg.sender对应的是当前运行的外部账号的地址*/
    FundTransfer(msg.sender, amount, true);
}
点赞 0
收藏 0
分享

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
V/TG[CH3NGUANG]
V/TG[CH3NGUANG]
江湖只有他的大名,没有他的介绍。