编译器
0.8.18+commit.87f61d96
文件 1 的 3:IBrrrXpAmplifier.sol
pragma solidity 0.8.18;
interface IBrrrXpAmplifier {
event BrrrXpAmplifier_LiquidityLocked(address indexed user, uint256 indexed index, uint256 indexed amount);
event BrrrXpAmplifier_LiquidityUnlocked(address indexed user, uint256 indexed index);
event BrrrXpAmplifier_RewardsClaimed(address indexed user, uint256 indexed tokenAmount, uint256 indexed xpAmount);
struct Position {
uint256 depositAmount;
uint8 tier;
uint256 lockedAt;
uint256 unlockDate;
address owner;
uint256 multiplier;
}
function rewardTracker() external view returns (address);
function stakeTransferrer() external view returns (address);
function weth() external view returns (address);
function positions(address user, uint256 index) external view returns (Position memory);
function userPositionIds(address user) external view returns (uint256[] memory);
function lockedAmount(address user) external view returns (uint256);
function totalXpEarned(address user) external view returns (uint256);
function claimableReward(address user) external view returns (uint256);
function cumulativeRewards(address user) external view returns (uint256);
function xpPerSecond() external view returns (uint256);
function gov() external view returns (address);
function setGov(address newGov) external;
function recoverTokens(address token) external;
function updateXpPerSecond(uint256 val) external;
function updateSeasonEnd(uint256 _newSeasonEnd) external;
function lockLiquidity(uint8 tier, uint256 amount) external;
function unlockLiquidity(uint256 index) external;
function claimPendingRewards(address user) external;
function claimRewardsForAccount(address _account) external returns (uint256, uint256);
function getClaimableTokenRewards(address user) external view returns (uint256);
function getClaimableXpRewards(address user) external view returns (uint256);
function getRemainingLockDuration(address user, uint256 index) external view returns (uint256);
function getUserPositionIds(address user) external view returns (uint256[] memory);
}
文件 2 的 3:IRewardTracker.sol
pragma solidity 0.8.18;
interface IRewardTracker {
function depositBalances(address _account, address _depositToken) external view returns (uint256);
function stakedAmounts(address _account) external view returns (uint256);
function updateRewards() external;
function stake(address _depositToken, uint256 _amount) external;
function stakeForAccount(address _fundingAccount, address _account, address _depositToken, uint256 _amount)
external;
function unstake(address _depositToken, uint256 _amount) external;
function unstakeForAccount(address _account, address _depositToken, uint256 _amount, address _receiver) external;
function tokensPerInterval() external view returns (uint256);
function claim(address _receiver) external returns (uint256);
function claimForAccount(address _account, address _receiver) external returns (uint256);
function claimable(address _account) external view returns (uint256);
function averageStakedAmounts(address _account) external view returns (uint256);
function cumulativeRewards(address _account) external view returns (uint256);
function setInPrivateTransferMode(bool _inPrivateTransferMode) external;
function setInPrivateStakingMode(bool _inPrivateStakingMode) external;
function setInPrivateClaimingMode(bool _inPrivateClaimingMode) external;
}
文件 3 的 3:RewardClaimer.sol
pragma solidity 0.8.18;
import {IBrrrXpAmplifier} from "./interfaces/IBrrrXpAmplifier.sol";
import {IRewardTracker} from "./interfaces/IRewardTracker.sol";
contract RewardClaimer {
event RewardsClaimed(address indexed user, uint256 indexed tokenAmount, uint256 indexed xpAmount);
IBrrrXpAmplifier public immutable brrrXpAmplifier;
IRewardTracker public immutable rewardTracker;
constructor(address _amplifier, address _tracker) {
brrrXpAmplifier = IBrrrXpAmplifier(_amplifier);
rewardTracker = IRewardTracker(_tracker);
}
function claimAllPendingRewards() external returns (uint256, uint256) {
uint256 stakedRewards = rewardTracker.claimForAccount(msg.sender, msg.sender);
(uint256 lockedRewards, uint256 xpRewards) = brrrXpAmplifier.claimRewardsForAccount(msg.sender);
emit RewardsClaimed(msg.sender, stakedRewards + lockedRewards, xpRewards);
return (stakedRewards + lockedRewards, xpRewards);
}
}
{
"compilationTarget": {
"src/staking/RewardClaimer.sol": "RewardClaimer"
},
"evmVersion": "paris",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": [
":@chainlink/contracts/=lib/chainlink/contracts/src/v0.6/",
":chainlink/=lib/chainlink/",
":ds-test/=lib/forge-std/lib/ds-test/src/",
":erc4626-tests/=lib/chainlink/contracts/foundry-lib/openzeppelin-contracts/lib/erc4626-tests/",
":forge-std/=lib/forge-std/src/"
]
}
[{"inputs":[{"internalType":"address","name":"_amplifier","type":"address"},{"internalType":"address","name":"_tracker","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"xpAmount","type":"uint256"}],"name":"RewardsClaimed","type":"event"},{"inputs":[],"name":"brrrXpAmplifier","outputs":[{"internalType":"contract IBrrrXpAmplifier","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimAllPendingRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardTracker","outputs":[{"internalType":"contract IRewardTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"}]