超級稀有(Super Rare)系統合約開發技術丨dapp丨Defi

I76搭2o72建9II9發表於2023-04-07

使用者可以使用ETH或其他相容的代幣向該合約傳送貢獻。一旦質押了足夠的Super Rare代幣,使用者就可以開始挖礦並領取他們的獎勵。在挖礦期結束後,使用者可以從合約中撤回他們之前質押的代幣和任何未領取的獎勵。


srAddress 變數:

用於定義Super Rare代幣的地址。


poolSize 變數:

用於定義可供質押的代幣數量。


miningReward 變數:

用於定義挖礦獎勵的總量。


miningStep 變數:

用於定義每塊的挖礦獎勵數量。


startDate 變數:

用於定義挖礦和質押開始日期。


endDate 變數:

用於定義挖礦和質押結束日期。


minimumStake 變數:

用於定義最小質押金額。


stake() 函式:

用於讓使用者向合約中質押代幣,並將其餘額新增到其賬戶餘額中。


withdraw() 函式:

用於讓使用者從合約中撤回他們之前質押的代幣。


claimReward() 函式:

用於讓使用者領取他們透過挖礦獲得的獎勵。


function stake(uint256 amount) public {

        require(block.timestamp >= startDate && block.timestamp < endDate, "Staking period has ended");

        require(amount >= minimumStake, "Amount is below minimum stake");

        require(stakedAmount[msg.sender] == 0, "You have already staked");


        IERC20(srAddress).transferFrom(msg.sender, address(this), amount);


        stakedAmount[msg.sender] = amount;

        lastClaim[msg.sender] = block.number;


        emit Staked(msg.sender, amount);

    }


    function withdraw() public {

        require(block.timestamp >= endDate, "Withdrawal period has not started");

        require(stakedAmount[msg.sender] > 0, "You have not staked");


        uint256 amount = stakedAmount[msg.sender];

        stakedAmount[msg.sender] = 0;


        IERC20(srAddress).transfer(msg.sender, amount);


        emit Withdrawn(msg.sender, amount);

    }


    function claimReward() public {

        require(block.timestamp >= endDate, "Claim period has not started");

        require(stakedAmount[msg.sender] > 0, "You have not staked");


        uint256 blocksSinceLastClaim = block.number - lastClaim[msg.sender];

        uint256 reward =

            (stakingBalance[msg.sender] * miningReward * blocksSinceLastClaim) / miningStep;


        lastClaim[msg.sender] = block.number;


        IERC20(srAddress).transfer(msg.sender, reward);

        emit RewardPaid(msg.sender, reward);

    }

}


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

相關文章