defi質押挖礦代幣分紅dapp系統開發案例智慧合約模式定製

nice1022發表於2023-03-06

質押挖礦是一種挖礦方式,這種挖礦方式不需要使用大量計算機算力來獲取數字貨幣,而是質押一定數量的數字貨幣,執行一段時間後就能產生新的數字貨幣,新產生的數字貨幣就是獲得的收益。


智慧合約開發I34-合約I633-部署53I9,根據邏輯來編寫和運作。只要滿足輸入要求,也就是說只要程式碼編寫的要求被滿足,合約中的義務將在安全和去信任的網路中得到執行。

 using SafeMath for uint256;
    using Address for address;
    struct Balance {
        uint256 value;
        uint256 exchangeRate;
    }
    uint256 constant RATE_SCALE = 10**18;
    uint256 constant DECIMAL_SCALE = 10**18;
    IERC1820Registry internal _erc1820 = IERC1820Registry(0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24);
    mapping(address => Balance) internal _balances;
    uint256 internal _totalSupply;
    uint256 internal _exchangeRate;
    string internal _name;
    string internal _symbol;
    uint8 internal _decimals;    // We inline the result of the following hashes because Solidity doesn't resolve them at compile time.
    // See 
    // keccak256("ERC777TokensSender")
    bytes32 constant internal TOKENS_SENDER_INTERFACE_HASH =        0x29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe895;    // keccak256("ERC777TokensRecipient")
    bytes32 constant internal TOKENS_RECIPIENT_INTERFACE_HASH =        0xb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b;    //Empty, This is only used to respond the defaultOperators query.
    address[] internal _defaultOperatorsArray;    // For each account, a mapping of its operators and revoked default operators.
    mapping(address => mapping(address => bool)) internal _operators;    // ERC20-allowances
    mapping (address => mapping (address => uint256)) internal _allowances;    constructor(
        string memory symbol,
        string memory name,
        uint8 decimals
    ) public {        require(decimals <= 18, "decimals must be less or equal than 18");
        _name = name;
        _symbol = symbol;
        _decimals = decimals;
        _exchangeRate = 10**18;        // register interfaces
        _erc1820.setInterfaceImplementer(address(this), keccak256("ERC777Token"), address(this));
        _erc1820.setInterfaceImplementer(address(this), keccak256("ERC20Token"), address(this));
    }    /**
     * @dev See `IERC777.name`.
     */
    function name() external view returns (string memory) {        return _name;
    }    /**
     * @dev See `IERC777.symbol`.
     */
    function symbol() external view returns (string memory) {        return _symbol;
    }    /**
     * @dev See `ERC20Detailed.decimals`.
     *
     * Always returns 18, as per the
     * [ERC777 EIP]().
     */
    function decimals() external view returns (uint8) {        return _decimals;
    }    /**
     * @dev See `IERC777.granularity`.
     *
     * This implementation always returns `1`.
     */
    function granularity() external view returns (uint256) {        return 1;
    }    /**
     * @dev See `IERC777.totalSupply`.
     */
    function totalSupply() external view returns (uint256) {        return _totalSupply.div(DECIMAL_SCALE);
    }    /**
     * @dev Returns the amount of tokens owned by an account (`tokenHolder`).
     */
    function balanceOf(address who) external view returns (uint256) {        return _balanceOf(who);
    }    function _balanceOf(address who) internal view returns (uint256) {        return _getBalance(who).value.div(DECIMAL_SCALE);
    }    function accuracyBalanceOf(address who) external view returns (uint256) {        return _getBalance(who).value ;
    }    /**
     * @dev See `IERC777.send`.
     *
     * Also emits a `Transfer` event for ERC20 compatibility.
     */
    function send(address recipient, uint256 amount, bytes calldata data) external {
        _send(msg.sender, msg.sender, recipient, amount, data, "", true);
    }


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

相關文章