EpochBasedTokenClaim
Contract to claim rewards based on epoch and merkle tree (used for Arbitrum STIP trading incentives)
rewardToken
contract IERC20 rewardTokenmanager
address managerepochRoots
mapping(uint256 => bytes32) epochRootsepochCids
mapping(uint256 => string) epochCidsepochTraderClaimed
mapping(uint256 => mapping(address => bool)) epochTraderClaimedManagerUpdated
event ManagerUpdated(address newManager)TokensWithdrawn
event TokensWithdrawn()EpochMerkleRootSet
event EpochMerkleRootSet(uint256 epoch, bytes32 root, uint256 totalRewards, string cid)TokensClaimed
event TokensClaimed(uint256 epoch, address user, uint256 rewardAmount)TokensClaimed
event TokensClaimed(uint256[] epochs, address user, uint256 rewardAmount)AddressZero
error AddressZero()NotManager
error NotManager()RootAlreadySet
error RootAlreadySet()RootZero
error RootZero()RewardsZero
error RewardsZero()CidZero
error CidZero()InvalidEpochs
error InvalidEpochs()ArrayLengthMismatch
error ArrayLengthMismatch()EpochNotSet
error EpochNotSet()NotEnoughBalance
error NotEnoughBalance()AlreadyClaimed
error AlreadyClaimed()InvalidProof
error InvalidProof()constructor
constructor(contract IERC20 _rewardToken, address _owner, address _manager) publiconlyManager
modifier onlyManager()setManager
function setManager(address _manager) externalSets manager address to _manager. Only callable by owner() (multisig)
setRoot
function setRoot(uint256 _epoch, bytes32 _root, uint256 _totalRewards, string _cid) external_Sets Merkle Tree _root and 'cid' for an _epoch and transfers _totalRewards from the owner() (multisig) to this contract. Only callable by manager.
withdrawTokens
function withdrawTokens() externalPrevents stuck tokens in case of misconfiguration; Only owner() (multisig) can claim the tokens back
claimRewards
function claimRewards(uint256 _epoch, uint256 _rewardAmount, bytes32[] _proof) externalClaims trader rewards for a specific _epoch
claimMultipleRewards
function claimMultipleRewards(uint256[] _epochs, uint256[] _rewardAmounts, bytes32[][] _proofs) externalClaims trader rewards for multiple _epochs
_hashLeaf
function _hashLeaf(address _user, uint256 _amount) internal pure returns (bytes32)Returns a hashed leaf of _user + _amount
_validateClaim
function _validateClaim(uint256 _epoch, address _trader, uint256 _rewardAmount, bytes32[] _proof) internal view_Validates that:
The
_epochmerkle tree root is setThere are enough token rewards in the contract
Rewards for leaf are unclaimed
The
leafand_proofvalidate againstepochRoot_
Was this helpful?