Disrupt DEX迪斯克眾籌質押DAPP系統開發詳情原始碼丨技術框架

Lyr96246466發表於2023-05-09

智慧合約是一種特殊協議,旨在提供、開發+181公鏈2591合約開發3365微電-+驗證及執行合約。具體來說,智慧合約是區塊鏈

被稱之為“去中心化的”重要原因,它允許我們在不需要第三方的情況下,執行可追溯、不可逆轉和安全的交易。


  智慧合約是儲存在區塊鏈節點中的一段程式碼,程式碼的邏輯定義了合約的規則


  智慧合約執行在分享的、複製的賬本上,可以處理資訊,接收、儲存和傳送價值


  區塊鏈儲存的是狀態,智慧合約是區塊鏈用於狀態轉換的方式

每個交易對建立流動性。


function mint(address to) external lock returns (uint liquidity) {

因為在呼叫mint函式之前,在addLiquidity函式已經完成了轉賬,所以,從這個函式的角度,兩種代幣數量的計算方式如下


        uint balance0 = IERC20(token0).balanceOf(address(this));

        uint balance1 = IERC20(token1).balanceOf(address(this));

        uint amount0 = balance0.sub(_reserve0);

        uint amount1 = balance1.sub(_reserve1);

當前的balance是當前的reserve加上注入的流動性的代幣數量。


        uint _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee

        if (_totalSupply == 0) {

            liquidity = Math.sqrt(amount0.mul(amount1)).sub(MINIMUM_LIQUIDITY);

          _mint(address(0), MINIMUM_LIQUIDITY); // permanently lock the first MINIMUM_LIQUIDITY tokens

        } else {

            liquidity = Math.min(amount0.mul(_totalSupply) / _reserve0, amount1.mul(_totalSupply) / _reserve1);

        }

        _mint(to, liquidity);

  智慧合約的作用


  智慧合約並不只是一個可以自動執行的計算機程式,也是一個系統參與者,它可以對接收到的資訊進行回應,可以接收和儲存價值,也可以向外傳送資訊和價值。


  智慧合約就像一個可以被信任的人,可以臨時儲存資產,總是按照事先的規則執行操作。


  智慧合約被部署在分享的、複製的賬本上,可以維持自己的狀態,控制自己的資產和對接收到的外界資訊或者資產進行回

應。


   

    /**

    * @dev Tells the address of the implementation where every call will be delegated.

    * @return address of the implementation to which it will be delegated

    */

    function implementation() public view returns (address);


    /**

    * @dev Fallback function allowing to perform a delegatecall to the given implementation.

    * This function will return whatever the implementation call returns

    */

    function() external payable {

        address _impl = implementation();

        require(_impl != address(0), "implementation contract not set");

        

        assembly {

            let ptr := mload(0x40)

            calldatacopy(ptr, 0, calldatasize)

            let result := delegatecall(gas, _impl, ptr, calldatasize, 0, 0)

            let size := returndatasize

            returndatacopy(ptr, 0, size)


            switch result

            case 0 { revert(ptr, size) }

            default { return(ptr, size) }

        }

    }


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

相關文章