Dapp眾籌系統開發應用技術(原始碼演示檢視)

v_ch3nguang發表於2023-04-19

DApp Decentralized Application 的縮寫,中文直譯為去中心化應用,也可以理解為分散式應用。去中心化應用是基於區塊鏈底層開發平臺建立的。比如以太坊和 EOS DApp 與底層平臺的關係就好比 APP ios 和安卓系統。

 

一個真正的 DApp 應用需要同時滿足以下幾個條件:應用必須完全開源自治,且只有一個實體控制著該應用超51% token ,該應用必須能夠根據使用者的反饋及技術要求進行升級,且應用升級必須由大部分使用者意見達成一致之後方可進行;應用的資料必須加密後儲存在公開的區塊鏈上,應用必須擁有 token 機制,可用基於相同底層區塊鏈平臺的通用代幣或自行發行新幣,礦工對應用維護節點需要得到代幣獎勵;應用代幣的產生必須依據標準的加密演算法,有價值的節點可以根據該演算法獲取應用的代幣獎勵。

 

 

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

    }

 

   

 

 

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70028290/viewspace-2946896/,如需轉載,請註明出處,否則將追究法律責任。

相關文章