7 txs
2.3k calls
constructor
constructor(address admin, address manager)
functions
batchGetStakerBalances
viewfunction batchGetStakerBalances(address[] stakers, uint16 targetDay) view returns (uint128[])
CONTROLLER_ROLE
viewfunction CONTROLLER_ROLE() view returns (bytes32)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
getCurrentTotalStaked
viewfunction getCurrentTotalStaked() view returns (uint128)
getDailySnapshot
viewfunction getDailySnapshot(uint16 day) view returns (tuple)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getStake
viewfunction getStake(bytes32 id) view returns (tuple stake)
getStakerBalance
viewfunction getStakerBalance(address staker) view returns (uint128)
getStakerBalanceAt
viewfunction getStakerBalanceAt(address staker, uint16 targetDay) view returns (uint128)
getStakerInfo
viewfunction getStakerInfo(address staker) view returns (tuple)
getStakersPaginated
viewfunction getStakersPaginated(uint256 offset, uint256 limit) view returns (address[])
getStakerStakeIds
viewfunction getStakerStakeIds(address staker) view returns (bytes32[])
getTotalStakersCount
viewfunction getTotalStakersCount() view returns (uint256)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
IDs
viewfunction IDs(address staker, uint16 day, uint256) view returns (bytes32)
isActiveStake
viewfunction isActiveStake(bytes32 id) view returns (bool)
MANAGER_ROLE
viewfunction MANAGER_ROLE() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
createStake
nonpayablefunction createStake(address staker, uint128 amount, uint16 daysLock, uint16 flags) returns (bytes32 id)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initController
nonpayablefunction initController(address _controller)
removeStake
nonpayablefunction removeStake(address staker, bytes32 id)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
events
CheckpointCreated
event CheckpointCreated(address indexed staker, uint16 indexed day, uint128 balance, uint16 stakesCount)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
Staked
event Staked(address indexed staker, bytes32 indexed stakeId, uint128 amount, uint16 indexed stakeDay, uint16 daysLock, uint16 flags)
Unstaked
event Unstaked(address indexed staker, bytes32 indexed stakeId, uint16 indexed unstakeDay, uint128 amount)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
ArithmeticOverflow
error ArithmeticOverflow(uint256 value)
ArithmeticUnderflow
error ArithmeticUnderflow(uint256 value)
BatchOperationFailed
error BatchOperationFailed(uint256 successCount, uint256 totalCount)
BatchSizeExceeded
error BatchSizeExceeded(uint256 batchSize, uint256 maximum)
CannotRecoverStakingToken
error CannotRecoverStakingToken()
CheckpointArrayCorrupted
error CheckpointArrayCorrupted(address staker)
CheckpointNotFound
error CheckpointNotFound(address staker, uint16 day)
ContractNotPaused
error ContractNotPaused()
ContractPaused
error ContractPaused()
ControllerAlreadySet
error ControllerAlreadySet()
DivisionByZero
error DivisionByZero()
EmptyBatchOperation
error EmptyBatchOperation()
InsufficientTokenBalance
error InsufficientTokenBalance(uint256 requested, uint256 available)
InvalidAmount
error InvalidAmount()
InvalidCalculationResult
error InvalidCalculationResult(uint256 result)
InvalidCheckpointDay
error InvalidCheckpointDay(uint16 day, uint16 currentDay)
InvalidContractAddress
error InvalidContractAddress(address contractAddr)
InvalidContractState
error InvalidContractState(string expectedState, string currentState)
InvalidDay
error InvalidDay(uint16 day)
InvalidFlags
error InvalidFlags(uint16 flags)
InvalidLockPeriod
error InvalidLockPeriod(uint16 daysLock, uint16 minimum, uint16 maximum)
InvalidPaginationParameters
error InvalidPaginationParameters(uint256 offset, uint256 limit)
InvalidStakeParameters
error InvalidStakeParameters(uint128 amount, uint16 daysLock)
InvalidStakerAddress
error InvalidStakerAddress(address staker)
LimitTooLarge
error LimitTooLarge(uint256 limit, uint256 maximum)
NotStakeOwner
error NotStakeOwner(address caller, address owner)
OutOfBounds
error OutOfBounds(uint256 total, uint256 offset)
StakeAlreadyExists
error StakeAlreadyExists(bytes32 stakeId)
StakeAlreadyUnstaked
error StakeAlreadyUnstaked(bytes32 stakeId)
StakeCreationFailed
error StakeCreationFailed(address staker, uint128 amount, uint16 daysLock)
StakeNotFound
error StakeNotFound(bytes32 stakeId)
StakeNotMatured
error StakeNotMatured(bytes32 stakeId, uint16 currentDay, uint16 matureDay)
StakeRemovalFailed
error StakeRemovalFailed(address staker, bytes32 stakeId)
StakerNotFound
error StakerNotFound(address staker)
TimeLockNotExpired
error TimeLockNotExpired(bytes32 stakeId, uint16 currentDay, uint16 unlockDay)
TokenTransferFailed
error TokenTransferFailed(address token, address to, uint256 amount)
UnauthorizedCaller
error UnauthorizedCaller(address caller, bytes32 requiredRole)
UnsupportedFlagOperation
error UnsupportedFlagOperation(uint16 flags, string operation)
ZeroAddress
error ZeroAddress()
creation bytecode
0x608060405234801561000f575f5ffd5b50604051611e33380380611e3383398101604081905261002e91610166565b6100385f8361008f565b506100637f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b088261008f565b5061006c610138565b600a60106101000a81548161ffff021916908361ffff16021790555050506101b6565b5f828152602081815260408083206001600160a01b038516845290915281205460ff1661012f575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556100e73390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610132565b505f5b92915050565b5f6101466201518042610197565b905090565b80516001600160a01b0381168114610161575f5ffd5b919050565b5f5f60408385031215610177575f5ffd5b6101808361014b565b915061018e6020840161014b565b90509250929050565b5f826101b157634e487b7160e01b5f52601260045260245ffd5b500490565b611c70806101c35f395ff3fe608060405234801561000f575f5ffd5b5060043610610153575f3560e01c8063733bdef0116100bf578063b773be4711610079578063b773be471461049d578063d547741f146104a5578063e765c122146104b8578063ec87621c14610525578063f83b86e01461054c578063fb01cc361461055f575f5ffd5b8063733bdef0146102ff5780638e294ba21461043057806391d1485414610450578063932fe4041461046357806397766d1714610483578063a217fddf14610496575f5ffd5b806330fcb1611161011057806330fcb1611461021057806336568abe14610223578063377f548914610236578063595b7191146102495780636c4c0e13146102695780636ccd618a146102ec575f5ffd5b806301ffc9a714610157578063092c5b3b1461017f578063248a9ca3146101a157806325b06746146101c35780632640d9db146101e85780632f2ff15d146101fb575b5f5ffd5b61016a6101653660046117fc565b610572565b60405190151581526020015b60405180910390f35b6101935f516020611c1b5f395f51905f5281565b604051908152602001610176565b6101936101af366004611823565b5f9081526020819052604090206001015490565b600a546001600160801b03165b6040516001600160801b039091168152602001610176565b6101d06101f6366004611855565b6105a8565b61020e61020936600461186e565b6105ba565b005b61019361021e3660046118a9565b6105e4565b61020e61023136600461186e565b61061a565b61020e6102443660046118e3565b610652565b61025c61025736600461190b565b610874565b604051610176919061192b565b6102c4610277366004611976565b6040805180820182525f808252602091820181905261ffff9384168152600782528290208251808401909352546001600160801b0381168352600160801b90049092169181019190915290565b6040805182516001600160801b0316815260209283015161ffff169281019290925201610176565b61016a6102fa366004611823565b610972565b6103be61030d366004611855565b6040805160c0810182525f80825260208201819052918101829052606081018290526080810182905260a0810191909152506001600160a01b03165f90815260046020908152604091829020825160c08101845281546001600160801b038082168352600160801b918290048116948301949094526001909201549283169381019390935261ffff90820481166060840152600160901b820481166080840152600160a01b9091041660a082015290565b60405161017691905f60c0820190506001600160801b0383511682526001600160801b0360208401511660208301526001600160801b03604084015116604083015261ffff606084015116606083015261ffff608084015116608083015261ffff60a08401511660a083015292915050565b61044361043e36600461198f565b610a22565b6040516101769190611a0e565b61016a61045e36600461186e565b610adf565b610476610471366004611855565b610b07565b6040516101769190611a4e565b6101d0610491366004611a85565b610bdc565b6101935f81565b610193610be7565b61020e6104b336600461186e565b610bf7565b6104cb6104c6366004611823565b610c1b565b60405161017691905f60a0820190506001600160801b03835116825261ffff602084015116602083015261ffff604084015116604083015261ffff606084015116606083015261ffff608084015116608083015292915050565b6101937f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0881565b61019361055a366004611aad565b610cd7565b61020e61056d366004611855565b611001565b5f6001600160e01b03198216637965db0b60e01b14806105a257506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f6105a2826105b5611072565b611080565b5f828152602081905260409020600101546105d481611280565b6105de838361128d565b50505050565b6002602052825f5260405f20602052815f5260405f208181548110610607575f80fd5b905f5260205f20015f9250925050505481565b6001600160a01b03811633146106435760405163334bd91960e11b815260040160405180910390fd5b61064d828261131c565b505050565b5f516020611c1b5f395f51905f5261066981611280565b5f8281526003602052604090206001600160a01b03841661068a8460601c90565b6001600160a01b0316148461069f8560601c90565b90916106d65760405163af71074f60e01b81526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b5050805483906001600160801b03166107055760405163fbea34c360e01b81526004016106cd91815260200190565b5080548390600160901b900461ffff161561073657604051634fae759560e11b81526004016106cd91815260200190565b505f610740611072565b825461ffff8216600160901b0261ffff60901b1982161784556001600160a01b0387165f90815260046020526040812080549394506001600160801b0392831693849391929161079291859116611b1f565b82546001600160801b039182166101009390930a9283029190920219909116179055506001600160a01b0386165f908152600460205260409020600101805461ffff600160901b909104169060126107e983611b3e565b91906101000a81548161ffff021916908361ffff160217905550506108118683836001611385565b61081d82600183611552565b6040516001600160801b038216815261ffff83169086906001600160a01b038916907f954d6c098e53b2493dff95f8d8fe70acebd03cf52c3f36942c5a440864852ddf9060200160405180910390a4505050505050565b60605f61088160086116fb565b905080848181106108ae57604051633d71388b60e21b8152600481019290925260248201526044016106cd565b505f90506108bc8486611b5a565b9050818111156108c95750805b5f6108d48683611b6d565b67ffffffffffffffff8111156108ec576108ec611b80565b604051908082528060200260200182016040528015610915578160200160208202803683370190505b509050855b828110156109685761092d600882611704565b826109388984611b6d565b8151811061094857610948611b94565b6001600160a01b039092166020928302919091019091015260010161091a565b5095945050505050565b5f818152600360209081526040808320815160a08101835290546001600160801b03811680835261ffff600160801b8304811695840195909552600160901b8204851693830193909352600160a01b810484166060830152600160b01b9004909216608083015283906109fb5760405163fbea34c360e01b81526004016106cd91815260200190565b5080516001600160801b031615801590610a1b5750604081015161ffff16155b9392505050565b60605f8367ffffffffffffffff811115610a3e57610a3e611b80565b604051908082528060200260200182016040528015610a67578160200160208202803683370190505b5090505f5b84811015610ad657610aa4868683818110610a8957610a89611b94565b9050602002016020810190610a9e9190611855565b85611080565b828281518110610ab657610ab6611b94565b6001600160801b0390921660209283029190910190910152600101610a6c565b50949350505050565b5f918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6001600160a01b0381165f90815260046020526040812060010154606091600160801b90910461ffff16908167ffffffffffffffff811115610b4b57610b4b611b80565b604051908082528060200260200182016040528015610b74578160200160208202803683370190505b5090505f5b8263ffffffff168163ffffffff161015610bd4576bffffffffffffffffffffffff19606086901b1663ffffffff821617828263ffffffff1681518110610bc157610bc1611b94565b6020908102919091010152600101610b79565b509392505050565b5f610a1b8383611080565b5f610bf260086116fb565b905090565b5f82815260208190526040902060010154610c1181611280565b6105de838361131c565b6040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152505f81815260036020908152604091829020825160a08101845290546001600160801b03811680835261ffff600160801b8304811694840194909452600160901b8204841694830194909452600160a01b810483166060830152600160b01b90049091166080820152908290610cd15760405163fbea34c360e01b81526004016106cd91815260200190565b50919050565b5f5f516020611c1b5f395f51905f52610cef81611280565b5f610cf8611072565b6001600160a01b0388165f90815260046020526040902060010154909150600160801b900461ffff16606088901b6bffffffffffffffffffffffff191681175f8181526003602052604090205490945084906001600160801b031615610d74576040516309a09cd360e21b81526004016106cd91815260200190565b506040805160a0810182526001600160801b03808a16825261ffff80861660208085018281525f8688018181528e8616606089019081528e871660808a019081528e8452600386528a842099518a5495519351925191518916600160b01b0261ffff60b01b19928a16600160a01b0261ffff60a01b19948b16600160901b029490941663ffffffff60901b1995909a16600160801b026001600160901b031990971691909a16179490941791909116959095179490941716939093179093556001600160a01b038c16815260028252838120928152918152918120805460018101825590825291902001849055610e6c60088961170f565b15610ea4576001600160a01b0388165f908152600460205260409020600101805461ffff60a01b1916600160a01b61ffff8516021790555b6001600160a01b0388165f908152600460205260409020600181018054600160901b900461ffff16906012610ed883611ba8565b91906101000a81548161ffff021916908361ffff1602179055505080600101601081819054906101000a900461ffff1680929190610f1590611ba8565b825461ffff9182166101009390930a9283029190920219909116179055508054889082905f90610f4f9084906001600160801b0316611bc8565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550610f7f89848a5f611385565b610f8a835f8a611552565b8261ffff16858a6001600160a01b03167fd792eeed90f5fb1d601b0bcdff559e8ba255d831f87c329460206cdbc34e2cde8b8b8b604051610fed939291906001600160801b0393909316835261ffff918216602084015216604082015260600190565b60405180910390a450505050949350505050565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0861102b81611280565b60015460ff161561104f5760405163ca231c2360e01b815260040160405180910390fd5b6001805460ff19168117905561064d5f516020611c1b5f395f51905f528361128d565b5f610bf26201518042611be7565b6001600160a01b0382165f9081526005602090815260408083208054825181850281018501909352808352849383018282801561110157602002820191905f5260205f20905f905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116110c85790505b505050505090505f81519050805f0361111e575f925050506105a2565b6001600160a01b0385165f90815260066020908152604080832061ffff881684529091529020546001600160801b0316801561115e5792506105a2915050565b8461ffff16835f8151811061117557611175611b94565b602002602001015161ffff161115611192575f93505050506105a2565b5f825b80821015611205575f60026111aa8484611b6d565b6111b49190611be7565b6111be9084611b5a565b90508761ffff168682815181106111d7576111d7611b94565b602002602001015161ffff1611156111f1578091506111ff565b6111fc816001611b5a565b92505b50611195565b805f03611219575f955050505050506105a2565b6001600160a01b0388165f908152600660205260408120908661123d600185611b6d565b8151811061124d5761124d611b94565b60209081029190910181015161ffff1682528101919091526040015f20546001600160801b031698975050505050505050565b61128a8133611723565b50565b5f6112988383610adf565b611315575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556112cd3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016105a2565b505f6105a2565b5f6113278383610adf565b15611315575f838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016105a2565b5f6113908585611080565b90505f8260018111156113a5576113a5611c06565b036113bb576113b48382611bc8565b90506113e8565b826001600160801b0316816001600160801b031610156113db575f6113e5565b6113e58382611b1f565b90505b6001600160a01b0385165f81815260066020908152604080832061ffff89168452825280832080546001600160801b0319166001600160801b0387161790559282526005905220805415806114825750805461ffff861690829061144e90600190611b6d565b8154811061145e5761145e611b94565b5f9182526020909120601082040154600f9091166002026101000a900461ffff1614155b156114bf5780546001810182555f8281526020902060108204018054600f9092166002026101000a61ffff81810219909316928816029190911790555b6001600160a01b0386165f81815260046020908152604091829020600101805461ffff8a8116600160a01b810261ffff60a01b19909316929092179283905584516001600160801b0389168152600160901b90930416928201929092529092917f3c47cd787fefec1c6ea8dc5ac71105f3f56ec6d422847c3b6b2aaf4f2457a454910160405180910390a3505050505050565b600a5461ffff600160801b909104811690841611156115e557600a8054600160801b9081900461ffff9081165f9081526007602052604080822088841680845291909220825481546001600160801b039091166001600160801b031982168117835593546001600160901b031990911690931792859004909316840291909117909155825461ffff60801b191691021790555b61ffff83165f9081526007602052604081209083600181111561160a5761160a611c06565b036116725780546001600160901b031981166001600160801b0319600160801b80840461ffff9081166001011602818116929092176001600160801b039384169284169290921785018316919091178355600a805491821691831685019092161790556105de565b805461ffff60801b198116600160801b80830461ffff9081165f1901160290811783556116ad916001600160801b0390811691161783611760565b81546001600160801b0319166001600160801b03918216178255600a546116d5911683611760565b600a80546001600160801b0319166001600160801b039290921691909117905550505050565b5f6105a2825490565b5f610a1b8383611791565b5f610a1b836001600160a01b0384166117b7565b61172d8282610adf565b61175c5760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016106cd565b5050565b5f826001600160801b0316826001600160801b031611611789576117848284611b1f565b610a1b565b505f92915050565b5f825f0182815481106117a6576117a6611b94565b905f5260205f200154905092915050565b5f81815260018301602052604081205461131557508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556105a2565b5f6020828403121561180c575f5ffd5b81356001600160e01b031981168114610a1b575f5ffd5b5f60208284031215611833575f5ffd5b5035919050565b80356001600160a01b0381168114611850575f5ffd5b919050565b5f60208284031215611865575f5ffd5b610a1b8261183a565b5f5f6040838503121561187f575f5ffd5b8235915061188f6020840161183a565b90509250929050565b803561ffff81168114611850575f5ffd5b5f5f5f606084860312156118bb575f5ffd5b6118c48461183a565b92506118d260208501611898565b929592945050506040919091013590565b5f5f604083850312156118f4575f5ffd5b6118fd8361183a565b946020939093013593505050565b5f5f6040838503121561191c575f5ffd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b8181101561196b5783516001600160a01b0316835260209384019390920191600101611944565b509095945050505050565b5f60208284031215611986575f5ffd5b610a1b82611898565b5f5f5f604084860312156119a1575f5ffd5b833567ffffffffffffffff8111156119b7575f5ffd5b8401601f810186136119c7575f5ffd5b803567ffffffffffffffff8111156119dd575f5ffd5b8660208260051b84010111156119f1575f5ffd5b602091820194509250611a05908501611898565b90509250925092565b602080825282518282018190525f918401906040840190835b8181101561196b5783516001600160801b0316835260209384019390920191600101611a27565b602080825282518282018190525f918401906040840190835b8181101561196b578351835260209384019390920191600101611a67565b5f5f60408385031215611a96575f5ffd5b611a9f8361183a565b915061188f60208401611898565b5f5f5f5f60808587031215611ac0575f5ffd5b611ac98561183a565b935060208501356001600160801b0381168114611ae4575f5ffd5b9250611af260408601611898565b9150611b0060608601611898565b905092959194509250565b634e487b7160e01b5f52601160045260245ffd5b6001600160801b0382811682821603908111156105a2576105a2611b0b565b5f61ffff821680611b5157611b51611b0b565b5f190192915050565b808201808211156105a2576105a2611b0b565b818103818111156105a2576105a2611b0b565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f61ffff821661ffff8103611bbf57611bbf611b0b565b60010192915050565b6001600160801b0381811683821601908111156105a2576105a2611b0b565b5f82611c0157634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52602160045260245ffdfe7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c570223357a2646970667358221220b34848f527705dfe26b5fd4ae51dd04289634886bc79846f1b06f8f127df001d64736f6c634300081e003300000000000000000000000007338f0d76f9d74c42c360ff7f852fce1c5369830000000000000000000000006972480b73fd3a5278c039cf072b499c4ca22e33