DeFi单双币流动性质押挖矿系统模式开发(源码案例详情)规则解析

DeFi单双币流动性质押挖矿系统模式开发(源码案例详情)规则解析

通过将PI和USDT两种货币同时质押到指定的矿池中,双币质押挖矿是一种新型的数字货币挖矿方式,参与挖矿活动,获得相应的收益。
简单的代码示例,可以帮助您理解PI双币质押挖矿的实现方式:
ini复制代码scssCopy codepragma solidity ^0.8.0;

struct Staker {
    uint256 piAmount;
    uint256 usdtAmount;
    uint256 lastUpdateTime;
    uint256 rewardEarned;
}    mapping(address => Staker) public stakers;
uint256 public totalStakedPi;
uint256 public totalStakedUsdt;
uint256 public rewardRate = 10; // 每日收益率

constructor(address _piToken, address _usdtToken) {
    piToken = IERC20(_piToken);
    usdtToken = IERC20(_usdtToken);
}

function stake(uint256 _piAmount, uint256 _usdtAmount) external {
        require(_piAmount > 0 || _usdtAmount > 0, "Invalid amount");
                updateReward(msg.sender);


function claimReward() external {
        updateReward(msg.sender);

    uint256 reward = stakers[msg.sender].rewardEarned;
    stakers[msg.sender].rewardEarned = 0;
    piToken.transfer(msg.sender, reward);
}

function updateReward(address _account) internal {
    uint256 rewardPerToken = getRewardPerToken();
    stakers[_account].rewardEarned += getRewardEarned(_account, rewardPerToken);
    stakers[_account].lastUpdateTime = block.timestamp;【更全面的开发源码搭建可V我昵称】
}

function getRewardPerToken() internal view returns (uint256) {
    uint256 totalStaked = totalStakedPi + totalStakedUsdt;
    if (totalStaked


    if (_piAmount > 0) {
        piToken.transferFrom(msg.sender, address(this), _piAmount);
        stakers[msg.sender].piAmount += _piAmount;
        totalStakedPi += _piAmount;
    }

    if (_usdtAmount > 0) {
        usdtToken.transferFrom(msg.sender, address(this), _usdtAmount);
        stakers[msg.sender].usdtAmount += _usdtAmount;
        totalStakedUsdt += _usdtAmount;
    }
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Proudly powered by WordPress | Theme: HoneyWaves by SpiceThemes