Source Code
Latest 25 from a total of 2,077 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Redeem | 5665287 | 782 days ago | IN | 0 MOVR | 0.0001011 | ||||
| Redeem | 5665283 | 782 days ago | IN | 0 MOVR | 0.00024339 | ||||
| Claim | 5665272 | 782 days ago | IN | 0 MOVR | 0.00017458 | ||||
| Redeem | 2806745 | 1193 days ago | IN | 0 MOVR | 0.00011659 | ||||
| Redeem | 2495528 | 1239 days ago | IN | 0 MOVR | 0.00016435 | ||||
| Claim | 1788925 | 1358 days ago | IN | 0 MOVR | 0.00015141 | ||||
| Redeem | 1778099 | 1361 days ago | IN | 0 MOVR | 0.00021909 | ||||
| Claim | 1778099 | 1361 days ago | IN | 0 MOVR | 0.00015141 | ||||
| Redeem | 1698419 | 1383 days ago | IN | 0 MOVR | 0.00007774 | ||||
| Claim | 1698411 | 1383 days ago | IN | 0 MOVR | 0.00010754 | ||||
| Redeem | 1698395 | 1383 days ago | IN | 0 MOVR | 0.00013681 | ||||
| Redeem | 1586430 | 1413 days ago | IN | 0 MOVR | 0.00021913 | ||||
| Claim | 1586424 | 1413 days ago | IN | 0 MOVR | 0.00015141 | ||||
| Redeem | 1515307 | 1431 days ago | IN | 0 MOVR | 0.00016435 | ||||
| Claim | 1515306 | 1431 days ago | IN | 0 MOVR | 0.00011356 | ||||
| Claim | 1453803 | 1447 days ago | IN | 0 MOVR | 0.00006185 | ||||
| Redeem | 1429697 | 1451 days ago | IN | 0 MOVR | 0.00007407 | ||||
| Redeem | 1374797 | 1459 days ago | IN | 0 MOVR | 0.0001316 | ||||
| Claim | 1374768 | 1459 days ago | IN | 0 MOVR | 0.00011945 | ||||
| Redeem | 1296913 | 1470 days ago | IN | 0 MOVR | 0.00013163 | ||||
| Redeem | 1294367 | 1471 days ago | IN | 0 MOVR | 0.0001316 | ||||
| Claim | 1294363 | 1471 days ago | IN | 0 MOVR | 0.00006185 | ||||
| Claim | 1276746 | 1473 days ago | IN | 0 MOVR | 0.00002061 | ||||
| Redeem | 1276731 | 1473 days ago | IN | 0 MOVR | 0.00004386 | ||||
| Redeem | 1274767 | 1474 days ago | IN | 0 MOVR | 0.0001316 |
View more zero value Internal Transactions in Advanced View mode
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Stake
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at moonriver.moonscan.io on 2022-04-11
*/
// File: @openzeppelin/contracts/security/ReentrancyGuard.sol
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and make it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
// File: contracts/libraries/AdminUpgradeable.sol
pragma solidity >=0.8.0;
abstract contract AdminUpgradeable {
address public admin;
address public adminCandidate;
function _initializeAdmin(address _admin) internal {
require(admin == address(0), "admin already set");
admin = _admin;
}
function candidateConfirm() external {
require(msg.sender == adminCandidate, "not Candidate");
emit AdminChanged(admin, adminCandidate);
admin = adminCandidate;
adminCandidate = address(0);
}
function setAdminCandidate(address _candidate) external onlyAdmin {
adminCandidate = _candidate;
emit Candidate(_candidate);
}
modifier onlyAdmin {
require(msg.sender == admin, "not admin");
_;
}
event Candidate(address indexed newAdmin);
event AdminChanged(address indexed oldAdmin, address indexed newAdmin);
}
// File: contracts/core/interfaces/IFactory.sol
pragma solidity >=0.8.0;
interface IFactory {
event PairCreated(
address indexed token0,
address indexed token1,
address pair,
uint256
);
event PairCreateLocked(
address indexed caller
);
event PairCreateUnlocked(
address indexed caller
);
event BootstrapSetted(
address indexed tokenA,
address indexed tokenB,
address indexed bootstrap
);
event FeetoUpdated(
address indexed feeto
);
event FeeBasePointUpdated(
uint8 basePoint
);
function feeto() external view returns (address);
function feeBasePoint() external view returns (uint8);
function lockForPairCreate() external view returns (bool);
function getPair(address tokenA, address tokenB)
external
view
returns (address pair);
function getBootstrap(address tokenA, address tokenB)
external
view
returns (address bootstrap);
function allPairs(uint256) external view returns (address pair);
function allPairsLength() external view returns (uint256);
function createPair(address tokenA, address tokenB)
external
returns (address pair);
}
// File: contracts/core/interfaces/IPair.sol
pragma solidity >=0.8.0;
interface IPair {
event Mint(address indexed sender, uint256 amount0, uint256 amount1);
event Burn(
address indexed sender,
uint256 amount0,
uint256 amount1,
address indexed to
);
event Swap(
address indexed sender,
uint256 amount0In,
uint256 amount1In,
uint256 amount0Out,
uint256 amount1Out,
address indexed to
);
function MINIMUM_LIQUIDITY() external pure returns (uint256);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves()
external
view
returns (uint112 reserve0, uint112 reserve1);
function mint(address to) external returns (uint256 liquidity);
function burn(address to)
external
returns (uint256 amount0, uint256 amount1);
function swap(
uint256 amount0Out,
uint256 amount1Out,
address to
) external;
function initialize(address, address) external;
}
// File: contracts/libraries/Math.sol
pragma solidity >=0.8.0;
// a library for performing various math operations
library Math {
function min(uint256 x, uint256 y) internal pure returns (uint256 z) {
z = x < y ? x : y;
}
// babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method)
function sqrt(uint256 y) internal pure returns (uint256 z) {
if (y > 3) {
z = y;
uint256 x = y / 2 + 1;
while (x < z) {
z = x;
x = (y / x + x) / 2;
}
} else if (y != 0) {
z = 1;
}
}
function add(uint256 x, uint256 y) internal pure returns (uint256 z) {
require((z = x + y) >= x, "ds-math-add-overflow");
}
function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {
require((z = x - y) <= x, "ds-math-sub-underflow");
}
function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {
require(y == 0 || (z = x * y) / y == x, "ds-math-mul-overflow");
}
}
// File: contracts/libraries/Helper.sol
pragma solidity >=0.8.0;
library Helper {
using Math for uint256;
function sortTokens(address tokenA, address tokenB)
internal
pure
returns (address token0, address token1)
{
require(tokenA != tokenB, "Helper: IDENTICAL_ADDRESSES");
(token0, token1) = tokenA < tokenB
? (tokenA, tokenB)
: (tokenB, tokenA);
require(token0 != address(0), "Helper: ZERO_ADDRESS");
}
function pairFor(
address factory,
address tokenA,
address tokenB
) internal view returns (address pair) {
return IFactory(factory).getPair(tokenA, tokenB);
}
function quote(
uint256 amountA,
uint256 reserveA,
uint256 reserveB
) internal pure returns (uint256 amountB) {
require(amountA > 0, "INSUFFICIENT_AMOUNT");
require(reserveA > 0 && reserveB > 0, "INSUFFICIENT_LIQUIDITY");
amountB = amountA.mul(reserveB) / reserveA;
}
function getReserves(
address factory,
address tokenA,
address tokenB
) internal view returns (uint256 reserveA, uint256 reserveB) {
(address token0, ) = sortTokens(tokenA, tokenB);
(uint256 reserve0, uint256 reserve1) = IPair(
pairFor(factory, tokenA, tokenB)
).getReserves();
(reserveA, reserveB) = tokenA == token0
? (reserve0, reserve1)
: (reserve1, reserve0);
}
function safeTransferFrom(
address token,
address from,
address to,
uint256 value
) internal {
// bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
(bool success, bytes memory data) = token.call(
abi.encodeWithSelector(0x23b872dd, from, to, value)
);
require(
success && (data.length == 0 || abi.decode(data, (bool))),
"TransferHelper::transferFrom: transferFrom failed"
);
}
function safeTransfer(
address token,
address to,
uint256 value
) internal {
// bytes4(keccak256(bytes('transfer(address,uint256)')));
(bool success, bytes memory data) = token.call(
abi.encodeWithSelector(0xa9059cbb, to, value)
);
require(
success && (data.length == 0 || abi.decode(data, (bool))),
"TransferHelper::safeTransfer: transfer failed"
);
}
function safeTransferNativeCurrency(address to, uint256 value) internal {
(bool success, ) = to.call{value: value}(new bytes(0));
require(
success,
"TransferHelper::safeTransferNativeCurrency: NativeCurrency transfer failed"
);
}
// given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset
function getAmountOut(
uint256 amountIn,
uint256 reserveIn,
uint256 reserveOut
) internal pure returns (uint256 amountOut) {
require(amountIn > 0, "Helper: INSUFFICIENT_INPUT_AMOUNT");
require(
reserveIn > 0 && reserveOut > 0,
"Helper: INSUFFICIENT_LIQUIDITY"
);
uint256 amountInWithFee = amountIn.mul(997);
uint256 numerator = amountInWithFee.mul(reserveOut);
uint256 denominator = reserveIn.mul(1000).add(amountInWithFee);
amountOut = numerator / denominator;
}
// given an output amount of an asset and pair reserves, returns a required input amount of the other asset
function getAmountIn(
uint256 amountOut,
uint256 reserveIn,
uint256 reserveOut
) internal pure returns (uint256 amountIn) {
require(amountOut > 0, "Helper: INSUFFICIENT_OUTPUT_AMOUNT");
require(
reserveIn > 0 && reserveOut > 0,
"Helper: INSUFFICIENT_LIQUIDITY"
);
uint256 numerator = reserveIn.mul(amountOut).mul(1000);
uint256 denominator = reserveOut.sub(amountOut).mul(997);
amountIn = (numerator / denominator).add(1);
}
// performs chained getAmountOut calculations on any number of pairs
function getAmountsOut(
address factory,
uint256 amountIn,
address[] memory path
) internal view returns (uint256[] memory amounts) {
require(path.length >= 2, "Helper: INVALID_PATH");
amounts = new uint256[](path.length);
amounts[0] = amountIn;
for (uint256 i; i < path.length - 1; i++) {
(uint256 reserveIn, uint256 reserveOut) = getReserves(
factory,
path[i],
path[i + 1]
);
amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut);
}
}
function getAmountsIn(
address factory,
uint256 amountOut,
address[] memory path
) internal view returns (uint256[] memory amounts) {
require(path.length >= 2, "Helper: INVALID_PATH");
amounts = new uint256[](path.length);
amounts[amounts.length - 1] = amountOut;
for (uint256 i = path.length - 1; i > 0; i--) {
(uint256 reserveIn, uint256 reserveOut) = getReserves(
factory,
path[i - 1],
path[i]
);
amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);
}
}
}
// File: contracts/periphery/Stake.sol
pragma solidity >=0.8.0;
contract Stake is ReentrancyGuard, AdminUpgradeable {
using Math for uint256;
// Info of each staker
struct StakerInfo {
uint256 stakedAmount; // How many stake tokens the user has provided
uint256 lastUpdatedBlock; // Last block number that user behavior occurs
uint256 accInterest; // Accumulated interest the user has owned
}
// The STAKED TOKEN
address public immutable STAKED_TOKEN;
// The REWARD TOKEN
address public immutable REWARD_TOKEN;
// The block when stake starts
uint256 public immutable START_BLOCK;
// The block when stake ends
uint256 public immutable END_BLOCK;
// The total interest of whole stake
uint256 public totalInterest;
// The total staked amount of whole stake
uint256 public totalStakedAmount;
// The total reward amount of whole stake
uint256 public totalRewardAmount;
// Is stake paused
bool private _stakePaused;
// Info of each staker that stakes token
mapping(address => StakerInfo) private _stakerInfos;
event Staked(address indexed user, uint256 amount, uint256 interest);
event Redeem(address indexed user, uint256 redeemAmount, uint256 interest);
event RewardsClaimed(address indexed to, uint256 amount);
event WithdrawExtraFunds(address indexed token, address indexed to, uint256 amount);
event StakePaused(address indexed caller);
event StakeUnpaused(address indexed caller);
constructor(
address _stakeToken,
address _rewardToken,
uint256 _startBlock,
uint256 _endBlock
) {
require(_startBlock >= block.number, 'INVALID_START_BLOCK');
require(_endBlock > _startBlock, 'INVALID_STAKE_PERIOD');
_initializeAdmin(msg.sender);
STAKED_TOKEN = _stakeToken;
REWARD_TOKEN = _rewardToken;
START_BLOCK = _startBlock;
END_BLOCK = _endBlock;
totalRewardAmount = IERC20(_rewardToken).balanceOf(address(this));
_stakePaused = false;
}
modifier beforeEndPeriod() {
require(block.number < END_BLOCK, "OVER_PERIOD");
_;
}
modifier whenStakeNotPaused() {
require(!_stakePaused, "STAKE_PAUSED");
_;
}
/**
* @dev add reward amount by admin
**/
function addReward(uint256 amount) external onlyAdmin beforeEndPeriod {
Helper.safeTransferFrom(
REWARD_TOKEN,
msg.sender,
address(this),
amount
);
totalRewardAmount = totalRewardAmount.add(amount);
}
/**
* @dev remove reward amount by admin
**/
function removeReward(uint256 amount) external onlyAdmin beforeEndPeriod {
require(amount <= totalRewardAmount, 'INSUFFICIENT_REWARD_AMOUNT');
Helper.safeTransfer(REWARD_TOKEN, msg.sender, amount);
totalRewardAmount = totalRewardAmount.sub(amount);
}
/**
* @dev Return funds directly transfered to this contract, will not affect the portion of the amount
* that participated in stake using `stake` function
**/
function withdrawExtraFunds(address token, address to, uint256 amount) external onlyAdmin {
if (token == STAKED_TOKEN) {
uint256 stakedBalance = IERC20(STAKED_TOKEN).balanceOf(address(this));
require(stakedBalance.sub(amount) >= totalStakedAmount, 'INSUFFICIENT_STAKED_BALANCE');
}
if (token == REWARD_TOKEN) {
uint256 rewardBalance = IERC20(REWARD_TOKEN).balanceOf(address(this));
require(rewardBalance.sub(amount) >= totalRewardAmount, 'INSUFFICIENT_REWARD_BALANCE');
}
Helper.safeTransfer(token, to, amount);
emit WithdrawExtraFunds(token, to, amount);
}
function getStakerInfo(address staker)
external
view
returns (uint256 stakedAmount, uint256 accInterest)
{
StakerInfo memory stakerInfo = _stakerInfos[staker];
stakedAmount = stakerInfo.stakedAmount;
accInterest = stakerInfo.accInterest;
}
function pauseStake() external onlyAdmin {
require(!_stakePaused, 'STAKE_PAUSED');
_stakePaused = true;
emit StakePaused(msg.sender);
}
function unpauseStake() external onlyAdmin {
require(_stakePaused, 'STAKE_UNPAUSED');
_stakePaused = false;
emit StakeUnpaused(msg.sender);
}
/**
* @dev Stakes tokens
* @param amount Amount to stake
**/
function stake(uint256 amount) external beforeEndPeriod nonReentrant whenStakeNotPaused {
require(amount > 0, 'INVALID_ZERO_AMOUNT');
StakerInfo storage stakerInfo = _stakerInfos[msg.sender];
Helper.safeTransferFrom(
STAKED_TOKEN,
msg.sender,
address(this),
amount
);
stakerInfo.lastUpdatedBlock = stakerInfo.lastUpdatedBlock < START_BLOCK
? START_BLOCK
: block.number;
uint256 addedInterest = amount.mul(END_BLOCK.sub(stakerInfo.lastUpdatedBlock));
totalInterest = totalInterest.add(addedInterest);
totalStakedAmount = totalStakedAmount.add(amount);
stakerInfo.stakedAmount = stakerInfo.stakedAmount.add(amount);
stakerInfo.accInterest = stakerInfo.accInterest.add(addedInterest);
emit Staked(msg.sender, amount, addedInterest);
}
/**
* @dev Redeems staked tokens
* @param amount Amount to redeem
**/
function redeem(uint256 amount) external nonReentrant {
require(amount > 0, 'INVALID_ZERO_AMOUNT');
require(block.number > START_BLOCK, "STAKE_NOT_STARTED");
StakerInfo storage stakerInfo = _stakerInfos[msg.sender];
require(amount <= totalStakedAmount, 'INSUFFICIENT_TOTAL_STAKED_AMOUNT');
require(amount <= stakerInfo.stakedAmount, 'INSUFFICIENT_STAKED_AMOUNT');
stakerInfo.lastUpdatedBlock = block.number < END_BLOCK ? block.number : END_BLOCK;
uint256 removedInterest = amount.mul(END_BLOCK.sub(stakerInfo.lastUpdatedBlock));
totalInterest = totalInterest.sub(removedInterest);
totalStakedAmount = totalStakedAmount.sub(amount);
stakerInfo.stakedAmount = stakerInfo.stakedAmount.sub(amount);
stakerInfo.accInterest = stakerInfo.accInterest.sub(removedInterest);
Helper.safeTransfer(STAKED_TOKEN, msg.sender, amount);
emit Redeem(msg.sender, amount, removedInterest);
}
/**
* @dev Return the total amount of estimated rewards from an staker
* @param staker The staker address
* @return The rewards
*/
function getEstimatedRewardsBalance(address staker) external view returns (uint256) {
StakerInfo memory stakerInfo = _stakerInfos[staker];
if (totalInterest != 0) {
return totalRewardAmount.mul(stakerInfo.accInterest) / totalInterest;
}
return 0;
}
/**
* @dev Claims all amount of `REWARD_TOKEN` calculated from staker interest
**/
function claim() external nonReentrant {
require(block.number > END_BLOCK, "STAKE_NOT_FINISHED");
require(totalInterest > 0, 'INVALID_ZERO_TOTAL_INTEREST');
StakerInfo storage stakerInfo = _stakerInfos[msg.sender];
require(stakerInfo.accInterest > 0, "INSUFFICIENT_ACCUMULATED_INTEREST");
uint256 claimRewardAmount = totalRewardAmount.mul(stakerInfo.accInterest) / totalInterest;
stakerInfo.accInterest = 0;
stakerInfo.lastUpdatedBlock = block.number;
Helper.safeTransfer(REWARD_TOKEN, msg.sender, claimRewardAmount);
emit RewardsClaimed(msg.sender, claimRewardAmount);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_stakeToken","type":"address"},{"internalType":"address","name":"_rewardToken","type":"address"},{"internalType":"uint256","name":"_startBlock","type":"uint256"},{"internalType":"uint256","name":"_endBlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":true,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAdmin","type":"address"}],"name":"Candidate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"redeemAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"interest","type":"uint256"}],"name":"Redeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"}],"name":"StakePaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"}],"name":"StakeUnpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"interest","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawExtraFunds","type":"event"},{"inputs":[],"name":"END_BLOCK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARD_TOKEN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKED_TOKEN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"START_BLOCK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adminCandidate","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"candidateConfirm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getEstimatedRewardsBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getStakerInfo","outputs":[{"internalType":"uint256","name":"stakedAmount","type":"uint256"},{"internalType":"uint256","name":"accInterest","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"removeReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_candidate","type":"address"}],"name":"setAdminCandidate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalInterest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewardAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpauseStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawExtraFunds","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
6101006040523480156200001257600080fd5b5060405162001ac338038062001ac3833981016040819052620000359162000231565b600160005543821015620000905760405162461bcd60e51b815260206004820152601360248201527f494e56414c49445f53544152545f424c4f434b0000000000000000000000000060448201526064015b60405180910390fd5b818111620000e15760405162461bcd60e51b815260206004820152601460248201527f494e56414c49445f5354414b455f504552494f44000000000000000000000000604482015260640162000087565b620000ec33620001a3565b6001600160601b0319606085811b821660805284901b1660a05260c082905260e08190526040516370a0823160e01b81523060048201526001600160a01b038416906370a082319060240160206040518083038186803b1580156200015057600080fd5b505afa15801562000165573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018b919062000279565b60055550506006805460ff1916905550620002939050565b6001546001600160a01b031615620001f25760405162461bcd60e51b815260206004820152601160248201527018591b5a5b88185b1c9958591e481cd95d607a1b604482015260640162000087565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b80516001600160a01b03811681146200022c57600080fd5b919050565b600080600080608085870312156200024857600080fd5b620002538562000214565b9350620002636020860162000214565b6040860151606090960151949790965092505050565b6000602082840312156200028c57600080fd5b5051919050565b60805160601c60a05160601c60c05160e0516117646200035f600039600081816103080152818161086801528181610ac301528181610bb501528181610d4601528181610e29015281816110720152818161109901526110d301526000818161018501528181610ce101528181610d120152610f5d0152600081816102b20152818161060b0152818161065b015281816109c201528181610b050152610ebd015260008181610141015281816104d70152818161052701528181610cb8015261114201526117646000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063733bdef0116100b8578063a694fc3a1161007c578063a694fc3a146102d4578063bc7a36d6146102e7578063c553173f146102f0578063cd3ec1d614610303578063db006a751461032a578063f851a4401461033d57600080fd5b8063733bdef01461021957806374de4ec41461027e5780638e73064f1461029157806396de7aa01461029a57806399248ea7146102ad57600080fd5b80634b7e9963116100ff5780634b7e9963146101da5780634c524dcf146101ed5780634e71d92d146101f5578063567e98f9146101fd5780637169d7171461020657600080fd5b8063312f6b831461013c57806339b3e826146101805780633accfa6c146101b55780633f023230146101c857806342810967146101d2575b600080fd5b6101637f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6101a77f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610177565b600254610163906001600160a01b031681565b6101d0610350565b005b6101d0610405565b6101d06101e836600461155e565b6104ab565b6101d061079a565b6101d061083e565b6101a760045481565b6101a7610214366004611543565b610a26565b610269610227366004611543565b6001600160a01b031660009081526007602090815260409182902082516060810184528154808252600183015493820193909352600290910154920182905291565b60408051928352602083019190915201610177565b6101d061028c3660046115bc565b610a97565b6101a760055481565b6101d06102a8366004611543565b610b3f565b6101637f000000000000000000000000000000000000000000000000000000000000000081565b6101d06102e23660046115bc565b610bb3565b6101a760035481565b6101d06102fe3660046115bc565b610dfd565b6101a77f000000000000000000000000000000000000000000000000000000000000000081565b6101d06103383660046115bc565b610ef0565b600154610163906001600160a01b031681565b6002546001600160a01b0316331461039f5760405162461bcd60e51b815260206004820152600d60248201526c6e6f742043616e64696461746560981b60448201526064015b60405180910390fd5b6002546001546040516001600160a01b0392831692909116907f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f90600090a360028054600180546001600160a01b03199081166001600160a01b03841617909155169055565b6001546001600160a01b0316331461042f5760405162461bcd60e51b81526004016103969061164e565b60065460ff16156104715760405162461bcd60e51b815260206004820152600c60248201526b14d51052d157d4105554d15160a21b6044820152606401610396565b6006805460ff1916600117905560405133907f68b4302d64f7ec1111df43865129a25b3996015e6a08cc2b75ee38a03859e98390600090a2565b6001546001600160a01b031633146104d55760405162461bcd60e51b81526004016103969061164e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161415610609576040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561057157600080fd5b505afa158015610585573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a991906115d5565b6004549091506105b982846111a0565b10156106075760405162461bcd60e51b815260206004820152601b60248201527f494e53554646494349454e545f5354414b45445f42414c414e434500000000006044820152606401610396565b505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316141561073d576040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b1580156106a557600080fd5b505afa1580156106b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106dd91906115d5565b6005549091506106ed82846111a0565b101561073b5760405162461bcd60e51b815260206004820152601b60248201527f494e53554646494349454e545f5245574152445f42414c414e434500000000006044820152606401610396565b505b6107488383836111fc565b816001600160a01b0316836001600160a01b03167f8a6c315eda8825d8ef1d7fa12189135a387f6aabdea9f7004b793532e80fc3528360405161078d91815260200190565b60405180910390a3505050565b6001546001600160a01b031633146107c45760405162461bcd60e51b81526004016103969061164e565b60065460ff166108075760405162461bcd60e51b815260206004820152600e60248201526d14d51052d157d55394105554d15160921b6044820152606401610396565b6006805460ff1916905560405133907fe6d1c89472d5b65159eb01bddaac9591566f6c294d3b605f02d8cc3d43ede01590600090a2565b600260005414156108615760405162461bcd60e51b815260040161039690611671565b60026000557f000000000000000000000000000000000000000000000000000000000000000043116108ca5760405162461bcd60e51b815260206004820152601260248201527114d51052d157d393d517d192539254d2115160721b6044820152606401610396565b60006003541161091c5760405162461bcd60e51b815260206004820152601b60248201527f494e56414c49445f5a45524f5f544f54414c5f494e54455245535400000000006044820152606401610396565b33600090815260076020526040902060028101546109865760405162461bcd60e51b815260206004820152602160248201527f494e53554646494349454e545f414343554d554c415445445f494e54455245536044820152601560fa1b6064820152608401610396565b60006003546109a4836002015460055461132d90919063ffffffff16565b6109ae91906116c0565b6000600284015543600184015590506109e87f000000000000000000000000000000000000000000000000000000000000000033836111fc565b60405181815233907ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe9060200160405180910390a250506001600055565b6001600160a01b0381166000908152600760209081526040808320815160608101835281548152600182015493810193909352600201549082015260035415610a8e576003546040820151600554610a7d9161132d565b610a8791906116c0565b9392505050565b50600092915050565b6001546001600160a01b03163314610ac15760405162461bcd60e51b81526004016103969061164e565b7f00000000000000000000000000000000000000000000000000000000000000004310610b005760405162461bcd60e51b815260040161039690611629565b610b2c7f0000000000000000000000000000000000000000000000000000000000000000333084611394565b600554610b3990826114d2565b60055550565b6001546001600160a01b03163314610b695760405162461bcd60e51b81526004016103969061164e565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f8cc40b9abca4a505a92028908f9d913d621d18112c69412806506f02333f26b490600090a250565b7f00000000000000000000000000000000000000000000000000000000000000004310610bf25760405162461bcd60e51b815260040161039690611629565b60026000541415610c155760405162461bcd60e51b815260040161039690611671565b600260005560065460ff1615610c5c5760405162461bcd60e51b815260206004820152600c60248201526b14d51052d157d4105554d15160a21b6044820152606401610396565b60008111610ca25760405162461bcd60e51b81526020600482015260136024820152721253959053125117d6915493d7d05353d55395606a1b6044820152606401610396565b33600081815260076020526040902090610cdf907f0000000000000000000000000000000000000000000000000000000000000000903085611394565b7f0000000000000000000000000000000000000000000000000000000000000000816001015410610d105743610d32565b7f00000000000000000000000000000000000000000000000000000000000000005b60018201819055600090610d7290610d6b907f0000000000000000000000000000000000000000000000000000000000000000906111a0565b849061132d565b600354909150610d8290826114d2565b600355600454610d9290846114d2565b6004558154610da190846114d2565b82556002820154610db290826114d2565b6002830155604080518481526020810183905233917f1449c6dd7851abc30abf37f57715f492010519147cc2652fbc38202c18a6ee9091015b60405180910390a25050600160005550565b6001546001600160a01b03163314610e275760405162461bcd60e51b81526004016103969061164e565b7f00000000000000000000000000000000000000000000000000000000000000004310610e665760405162461bcd60e51b815260040161039690611629565b600554811115610eb85760405162461bcd60e51b815260206004820152601a60248201527f494e53554646494349454e545f5245574152445f414d4f554e540000000000006044820152606401610396565b610ee37f000000000000000000000000000000000000000000000000000000000000000033836111fc565b600554610b3990826111a0565b60026000541415610f135760405162461bcd60e51b815260040161039690611671565b600260005580610f5b5760405162461bcd60e51b81526020600482015260136024820152721253959053125117d6915493d7d05353d55395606a1b6044820152606401610396565b7f00000000000000000000000000000000000000000000000000000000000000004311610fbe5760405162461bcd60e51b815260206004820152601160248201527014d51052d157d393d517d4d51054951151607a1b6044820152606401610396565b33600090815260076020526040902060045482111561101f5760405162461bcd60e51b815260206004820181905260248201527f494e53554646494349454e545f544f54414c5f5354414b45445f414d4f554e546044820152606401610396565b80548211156110705760405162461bcd60e51b815260206004820152601a60248201527f494e53554646494349454e545f5354414b45445f414d4f554e540000000000006044820152606401610396565b7f000000000000000000000000000000000000000000000000000000000000000043106110bd577f00000000000000000000000000000000000000000000000000000000000000006110bf565b435b600182018190556000906110f890610d6b907f0000000000000000000000000000000000000000000000000000000000000000906111a0565b60035490915061110890826111a0565b60035560045461111890846111a0565b600455815461112790846111a0565b8255600282015461113890826111a0565b60028301556111687f000000000000000000000000000000000000000000000000000000000000000033856111fc565b604080518481526020810183905233917fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a9299101610deb565b6000826111ad8382611701565b91508111156111f65760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b6044820152606401610396565b92915050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161125891906115ee565b6000604051808303816000865af19150503d8060008114611295576040519150601f19603f3d011682016040523d82523d6000602084013e61129a565b606091505b50915091508180156112c45750805115806112c45750808060200190518101906112c4919061159a565b6113265760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b6064820152608401610396565b5050505050565b60008115806113515750828261134381836116e2565b925061134f90836116c0565b145b6111f65760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b6044820152606401610396565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916113f891906115ee565b6000604051808303816000865af19150503d8060008114611435576040519150601f19603f3d011682016040523d82523d6000602084013e61143a565b606091505b5091509150818015611464575080511580611464575080806020019051810190611464919061159a565b6114ca5760405162461bcd60e51b815260206004820152603160248201527f5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472604482015270185b9cd9995c919c9bdb4819985a5b1959607a1b6064820152608401610396565b505050505050565b6000826114df83826116a8565b91508110156111f65760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b6044820152606401610396565b80356001600160a01b038116811461153e57600080fd5b919050565b60006020828403121561155557600080fd5b610a8782611527565b60008060006060848603121561157357600080fd5b61157c84611527565b925061158a60208501611527565b9150604084013590509250925092565b6000602082840312156115ac57600080fd5b81518015158114610a8757600080fd5b6000602082840312156115ce57600080fd5b5035919050565b6000602082840312156115e757600080fd5b5051919050565b6000825160005b8181101561160f57602081860181015185830152016115f5565b8181111561161e576000828501525b509190910192915050565b6020808252600b908201526a13d5915497d411549253d160aa1b604082015260600190565b6020808252600990820152683737ba1030b236b4b760b91b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b600082198211156116bb576116bb611718565b500190565b6000826116dd57634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156116fc576116fc611718565b500290565b60008282101561171357611713611718565b500390565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220f97ba5fe3497bdbc657087b189fcb8137fd88c48eaef805c926cf7d45b37865964736f6c6343000807003300000000000000000000000098878b06940ae243284ca214f92bb71a2b032b8a0000000000000000000000000f47ba9d9bde3442b42175e51d6a367928a1173b00000000000000000000000000000000000000000000000000000000000e1aa700000000000000000000000000000000000000000000000000000000000f230c
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101375760003560e01c8063733bdef0116100b8578063a694fc3a1161007c578063a694fc3a146102d4578063bc7a36d6146102e7578063c553173f146102f0578063cd3ec1d614610303578063db006a751461032a578063f851a4401461033d57600080fd5b8063733bdef01461021957806374de4ec41461027e5780638e73064f1461029157806396de7aa01461029a57806399248ea7146102ad57600080fd5b80634b7e9963116100ff5780634b7e9963146101da5780634c524dcf146101ed5780634e71d92d146101f5578063567e98f9146101fd5780637169d7171461020657600080fd5b8063312f6b831461013c57806339b3e826146101805780633accfa6c146101b55780633f023230146101c857806342810967146101d2575b600080fd5b6101637f00000000000000000000000098878b06940ae243284ca214f92bb71a2b032b8a81565b6040516001600160a01b0390911681526020015b60405180910390f35b6101a77f00000000000000000000000000000000000000000000000000000000000e1aa781565b604051908152602001610177565b600254610163906001600160a01b031681565b6101d0610350565b005b6101d0610405565b6101d06101e836600461155e565b6104ab565b6101d061079a565b6101d061083e565b6101a760045481565b6101a7610214366004611543565b610a26565b610269610227366004611543565b6001600160a01b031660009081526007602090815260409182902082516060810184528154808252600183015493820193909352600290910154920182905291565b60408051928352602083019190915201610177565b6101d061028c3660046115bc565b610a97565b6101a760055481565b6101d06102a8366004611543565b610b3f565b6101637f0000000000000000000000000f47ba9d9bde3442b42175e51d6a367928a1173b81565b6101d06102e23660046115bc565b610bb3565b6101a760035481565b6101d06102fe3660046115bc565b610dfd565b6101a77f00000000000000000000000000000000000000000000000000000000000f230c81565b6101d06103383660046115bc565b610ef0565b600154610163906001600160a01b031681565b6002546001600160a01b0316331461039f5760405162461bcd60e51b815260206004820152600d60248201526c6e6f742043616e64696461746560981b60448201526064015b60405180910390fd5b6002546001546040516001600160a01b0392831692909116907f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f90600090a360028054600180546001600160a01b03199081166001600160a01b03841617909155169055565b6001546001600160a01b0316331461042f5760405162461bcd60e51b81526004016103969061164e565b60065460ff16156104715760405162461bcd60e51b815260206004820152600c60248201526b14d51052d157d4105554d15160a21b6044820152606401610396565b6006805460ff1916600117905560405133907f68b4302d64f7ec1111df43865129a25b3996015e6a08cc2b75ee38a03859e98390600090a2565b6001546001600160a01b031633146104d55760405162461bcd60e51b81526004016103969061164e565b7f00000000000000000000000098878b06940ae243284ca214f92bb71a2b032b8a6001600160a01b0316836001600160a01b03161415610609576040516370a0823160e01b81523060048201526000907f00000000000000000000000098878b06940ae243284ca214f92bb71a2b032b8a6001600160a01b0316906370a082319060240160206040518083038186803b15801561057157600080fd5b505afa158015610585573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a991906115d5565b6004549091506105b982846111a0565b10156106075760405162461bcd60e51b815260206004820152601b60248201527f494e53554646494349454e545f5354414b45445f42414c414e434500000000006044820152606401610396565b505b7f0000000000000000000000000f47ba9d9bde3442b42175e51d6a367928a1173b6001600160a01b0316836001600160a01b0316141561073d576040516370a0823160e01b81523060048201526000907f0000000000000000000000000f47ba9d9bde3442b42175e51d6a367928a1173b6001600160a01b0316906370a082319060240160206040518083038186803b1580156106a557600080fd5b505afa1580156106b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106dd91906115d5565b6005549091506106ed82846111a0565b101561073b5760405162461bcd60e51b815260206004820152601b60248201527f494e53554646494349454e545f5245574152445f42414c414e434500000000006044820152606401610396565b505b6107488383836111fc565b816001600160a01b0316836001600160a01b03167f8a6c315eda8825d8ef1d7fa12189135a387f6aabdea9f7004b793532e80fc3528360405161078d91815260200190565b60405180910390a3505050565b6001546001600160a01b031633146107c45760405162461bcd60e51b81526004016103969061164e565b60065460ff166108075760405162461bcd60e51b815260206004820152600e60248201526d14d51052d157d55394105554d15160921b6044820152606401610396565b6006805460ff1916905560405133907fe6d1c89472d5b65159eb01bddaac9591566f6c294d3b605f02d8cc3d43ede01590600090a2565b600260005414156108615760405162461bcd60e51b815260040161039690611671565b60026000557f00000000000000000000000000000000000000000000000000000000000f230c43116108ca5760405162461bcd60e51b815260206004820152601260248201527114d51052d157d393d517d192539254d2115160721b6044820152606401610396565b60006003541161091c5760405162461bcd60e51b815260206004820152601b60248201527f494e56414c49445f5a45524f5f544f54414c5f494e54455245535400000000006044820152606401610396565b33600090815260076020526040902060028101546109865760405162461bcd60e51b815260206004820152602160248201527f494e53554646494349454e545f414343554d554c415445445f494e54455245536044820152601560fa1b6064820152608401610396565b60006003546109a4836002015460055461132d90919063ffffffff16565b6109ae91906116c0565b6000600284015543600184015590506109e87f0000000000000000000000000f47ba9d9bde3442b42175e51d6a367928a1173b33836111fc565b60405181815233907ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe9060200160405180910390a250506001600055565b6001600160a01b0381166000908152600760209081526040808320815160608101835281548152600182015493810193909352600201549082015260035415610a8e576003546040820151600554610a7d9161132d565b610a8791906116c0565b9392505050565b50600092915050565b6001546001600160a01b03163314610ac15760405162461bcd60e51b81526004016103969061164e565b7f00000000000000000000000000000000000000000000000000000000000f230c4310610b005760405162461bcd60e51b815260040161039690611629565b610b2c7f0000000000000000000000000f47ba9d9bde3442b42175e51d6a367928a1173b333084611394565b600554610b3990826114d2565b60055550565b6001546001600160a01b03163314610b695760405162461bcd60e51b81526004016103969061164e565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f8cc40b9abca4a505a92028908f9d913d621d18112c69412806506f02333f26b490600090a250565b7f00000000000000000000000000000000000000000000000000000000000f230c4310610bf25760405162461bcd60e51b815260040161039690611629565b60026000541415610c155760405162461bcd60e51b815260040161039690611671565b600260005560065460ff1615610c5c5760405162461bcd60e51b815260206004820152600c60248201526b14d51052d157d4105554d15160a21b6044820152606401610396565b60008111610ca25760405162461bcd60e51b81526020600482015260136024820152721253959053125117d6915493d7d05353d55395606a1b6044820152606401610396565b33600081815260076020526040902090610cdf907f00000000000000000000000098878b06940ae243284ca214f92bb71a2b032b8a903085611394565b7f00000000000000000000000000000000000000000000000000000000000e1aa7816001015410610d105743610d32565b7f00000000000000000000000000000000000000000000000000000000000e1aa75b60018201819055600090610d7290610d6b907f00000000000000000000000000000000000000000000000000000000000f230c906111a0565b849061132d565b600354909150610d8290826114d2565b600355600454610d9290846114d2565b6004558154610da190846114d2565b82556002820154610db290826114d2565b6002830155604080518481526020810183905233917f1449c6dd7851abc30abf37f57715f492010519147cc2652fbc38202c18a6ee9091015b60405180910390a25050600160005550565b6001546001600160a01b03163314610e275760405162461bcd60e51b81526004016103969061164e565b7f00000000000000000000000000000000000000000000000000000000000f230c4310610e665760405162461bcd60e51b815260040161039690611629565b600554811115610eb85760405162461bcd60e51b815260206004820152601a60248201527f494e53554646494349454e545f5245574152445f414d4f554e540000000000006044820152606401610396565b610ee37f0000000000000000000000000f47ba9d9bde3442b42175e51d6a367928a1173b33836111fc565b600554610b3990826111a0565b60026000541415610f135760405162461bcd60e51b815260040161039690611671565b600260005580610f5b5760405162461bcd60e51b81526020600482015260136024820152721253959053125117d6915493d7d05353d55395606a1b6044820152606401610396565b7f00000000000000000000000000000000000000000000000000000000000e1aa74311610fbe5760405162461bcd60e51b815260206004820152601160248201527014d51052d157d393d517d4d51054951151607a1b6044820152606401610396565b33600090815260076020526040902060045482111561101f5760405162461bcd60e51b815260206004820181905260248201527f494e53554646494349454e545f544f54414c5f5354414b45445f414d4f554e546044820152606401610396565b80548211156110705760405162461bcd60e51b815260206004820152601a60248201527f494e53554646494349454e545f5354414b45445f414d4f554e540000000000006044820152606401610396565b7f00000000000000000000000000000000000000000000000000000000000f230c43106110bd577f00000000000000000000000000000000000000000000000000000000000f230c6110bf565b435b600182018190556000906110f890610d6b907f00000000000000000000000000000000000000000000000000000000000f230c906111a0565b60035490915061110890826111a0565b60035560045461111890846111a0565b600455815461112790846111a0565b8255600282015461113890826111a0565b60028301556111687f00000000000000000000000098878b06940ae243284ca214f92bb71a2b032b8a33856111fc565b604080518481526020810183905233917fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a9299101610deb565b6000826111ad8382611701565b91508111156111f65760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b6044820152606401610396565b92915050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161125891906115ee565b6000604051808303816000865af19150503d8060008114611295576040519150601f19603f3d011682016040523d82523d6000602084013e61129a565b606091505b50915091508180156112c45750805115806112c45750808060200190518101906112c4919061159a565b6113265760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b6064820152608401610396565b5050505050565b60008115806113515750828261134381836116e2565b925061134f90836116c0565b145b6111f65760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b6044820152606401610396565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916113f891906115ee565b6000604051808303816000865af19150503d8060008114611435576040519150601f19603f3d011682016040523d82523d6000602084013e61143a565b606091505b5091509150818015611464575080511580611464575080806020019051810190611464919061159a565b6114ca5760405162461bcd60e51b815260206004820152603160248201527f5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472604482015270185b9cd9995c919c9bdb4819985a5b1959607a1b6064820152608401610396565b505050505050565b6000826114df83826116a8565b91508110156111f65760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b6044820152606401610396565b80356001600160a01b038116811461153e57600080fd5b919050565b60006020828403121561155557600080fd5b610a8782611527565b60008060006060848603121561157357600080fd5b61157c84611527565b925061158a60208501611527565b9150604084013590509250925092565b6000602082840312156115ac57600080fd5b81518015158114610a8757600080fd5b6000602082840312156115ce57600080fd5b5035919050565b6000602082840312156115e757600080fd5b5051919050565b6000825160005b8181101561160f57602081860181015185830152016115f5565b8181111561161e576000828501525b509190910192915050565b6020808252600b908201526a13d5915497d411549253d160aa1b604082015260600190565b6020808252600990820152683737ba1030b236b4b760b91b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b600082198211156116bb576116bb611718565b500190565b6000826116dd57634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156116fc576116fc611718565b500290565b60008282101561171357611713611718565b500390565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220f97ba5fe3497bdbc657087b189fcb8137fd88c48eaef805c926cf7d45b37865964736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000098878b06940ae243284ca214f92bb71a2b032b8a0000000000000000000000000f47ba9d9bde3442b42175e51d6a367928a1173b00000000000000000000000000000000000000000000000000000000000e1aa700000000000000000000000000000000000000000000000000000000000f230c
-----Decoded View---------------
Arg [0] : _stakeToken (address): 0x98878B06940aE243284CA214f92Bb71a2b032B8A
Arg [1] : _rewardToken (address): 0x0f47ba9d9Bde3442b42175e51d6A367928A1173B
Arg [2] : _startBlock (uint256): 924327
Arg [3] : _endBlock (uint256): 992012
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000098878b06940ae243284ca214f92bb71a2b032b8a
Arg [1] : 0000000000000000000000000f47ba9d9bde3442b42175e51d6a367928a1173b
Arg [2] : 00000000000000000000000000000000000000000000000000000000000e1aa7
Arg [3] : 00000000000000000000000000000000000000000000000000000000000f230c
Deployed Bytecode Sourcemap
15880:7945:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16302:37;;;;;;;;-1:-1:-1;;;;;1967:32:1;;;1949:51;;1937:2;1922:18;16302:37:0;;;;;;;;16451:36;;;;;;;;10341:25:1;;;10329:2;10314:18;16451:36:0;10195:177:1;5683:29:0;;;;;-1:-1:-1;;;;;5683:29:0;;;5875:234;;;:::i;:::-;;20100:167;;;:::i;19098:670::-;;;;;;:::i;:::-;;:::i;20275:173::-;;;:::i;23157:665::-;;;:::i;16693:32::-;;;;;;22747:302;;;;;;:::i;:::-;;:::i;19780:308::-;;;;;;:::i;:::-;-1:-1:-1;;;;;19964:20:0;19872;19964;;;:12;:20;;;;;;;;;19933:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19780:308;;;;;10551:25:1;;;10607:2;10592:18;;10585:34;;;;10524:18;19780:308:0;10377:248:1;18265:284:0;;;;;;:::i;:::-;;:::i;16779:32::-;;;;;;6117:149;;;;;;:::i;:::-;;:::i;16371:37::-;;;;;20540:933;;;;;;:::i;:::-;;:::i;16611:28::-;;;;;;18619:282;;;;;;:::i;:::-;;:::i;16528:34::-;;;;;21574:1005;;;;;;:::i;:::-;;:::i;5656:20::-;;;;;-1:-1:-1;;;;;5656:20:0;;;5875:234;5945:14;;-1:-1:-1;;;;;5945:14:0;5931:10;:28;5923:54;;;;-1:-1:-1;;;5923:54:0;;6824:2:1;5923:54:0;;;6806:21:1;6863:2;6843:18;;;6836:30;-1:-1:-1;;;6882:18:1;;;6875:43;6935:18;;5923:54:0;;;;;;;;;6013:14;;;6006:5;5993:35;;-1:-1:-1;;;;;6013:14:0;;;;6006:5;;;;5993:35;;6013:14;;5993:35;6049:14;;;;6041:22;;-1:-1:-1;;;;;;6041:22:0;;;-1:-1:-1;;;;;6049:14:0;;6041:22;;;;6074:27;;;5875:234::o;20100:167::-;6326:5;;-1:-1:-1;;;;;6326:5:0;6312:10;:19;6304:41;;;;-1:-1:-1;;;6304:41:0;;;;;;;:::i;:::-;20161:12:::1;::::0;::::1;;20160:13;20152:38;;;::::0;-1:-1:-1;;;20152:38:0;;5784:2:1;20152:38:0::1;::::0;::::1;5766:21:1::0;5823:2;5803:18;;;5796:30;-1:-1:-1;;;5842:18:1;;;5835:42;5894:18;;20152:38:0::1;5582:336:1::0;20152:38:0::1;20201:12;:19:::0;;-1:-1:-1;;20201:19:0::1;20216:4;20201:19;::::0;;20236:23:::1;::::0;20248:10:::1;::::0;20236:23:::1;::::0;20201:12:::1;::::0;20236:23:::1;20100:167::o:0;19098:670::-;6326:5;;-1:-1:-1;;;;;6326:5:0;6312:10;:19;6304:41;;;;-1:-1:-1;;;6304:41:0;;;;;;;:::i;:::-;19212:12:::1;-1:-1:-1::0;;;;;19203:21:0::1;:5;-1:-1:-1::0;;;;;19203:21:0::1;;19199:224;;;19265:45;::::0;-1:-1:-1;;;19265:45:0;;19304:4:::1;19265:45;::::0;::::1;1949:51:1::0;19241:21:0::1;::::0;19272:12:::1;-1:-1:-1::0;;;;;19265:30:0::1;::::0;::::1;::::0;1922:18:1;;19265:45:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19362:17;::::0;19241:69;;-1:-1:-1;19333:25:0::1;19241:69:::0;19351:6;19333:17:::1;:25::i;:::-;:46;;19325:86;;;::::0;-1:-1:-1;;;19325:86:0;;6125:2:1;19325:86:0::1;::::0;::::1;6107:21:1::0;6164:2;6144:18;;;6137:30;6203:29;6183:18;;;6176:57;6250:18;;19325:86:0::1;5923:351:1::0;19325:86:0::1;19226:197;19199:224;19446:12;-1:-1:-1::0;;;;;19437:21:0::1;:5;-1:-1:-1::0;;;;;19437:21:0::1;;19433:224;;;19499:45;::::0;-1:-1:-1;;;19499:45:0;;19538:4:::1;19499:45;::::0;::::1;1949:51:1::0;19475:21:0::1;::::0;19506:12:::1;-1:-1:-1::0;;;;;19499:30:0::1;::::0;::::1;::::0;1922:18:1;;19499:45:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19596:17;::::0;19475:69;;-1:-1:-1;19567:25:0::1;19475:69:::0;19585:6;19567:17:::1;:25::i;:::-;:46;;19559:86;;;::::0;-1:-1:-1;;;19559:86:0;;10041:2:1;19559:86:0::1;::::0;::::1;10023:21:1::0;10080:2;10060:18;;;10053:30;10119:29;10099:18;;;10092:57;10166:18;;19559:86:0::1;9839:351:1::0;19559:86:0::1;19460:197;19433:224;19667:38;19687:5;19694:2;19698:6;19667:19;:38::i;:::-;19749:2;-1:-1:-1::0;;;;;19723:37:0::1;19742:5;-1:-1:-1::0;;;;;19723:37:0::1;;19753:6;19723:37;;;;10341:25:1::0;;10329:2;10314:18;;10195:177;19723:37:0::1;;;;;;;;19098:670:::0;;;:::o;20275:173::-;6326:5;;-1:-1:-1;;;;;6326:5:0;6312:10;:19;6304:41;;;;-1:-1:-1;;;6304:41:0;;;;;;;:::i;:::-;20337:12:::1;::::0;::::1;;20329:39;;;::::0;-1:-1:-1;;;20329:39:0;;6481:2:1;20329:39:0::1;::::0;::::1;6463:21:1::0;6520:2;6500:18;;;6493:30;-1:-1:-1;;;6539:18:1;;;6532:44;6593:18;;20329:39:0::1;6279:338:1::0;20329:39:0::1;20379:12;:20:::0;;-1:-1:-1;;20379:20:0::1;::::0;;20415:25:::1;::::0;20429:10:::1;::::0;20415:25:::1;::::0;20394:5:::1;::::0;20415:25:::1;20275:173::o:0;23157:665::-;1747:1;2343:7;;:19;;2335:63;;;;-1:-1:-1;;;2335:63:0;;;;;;;:::i;:::-;1747:1;2476:7;:18;23230:9:::1;23215:12;:24;23207:55;;;::::0;-1:-1:-1;;;23207:55:0;;7935:2:1;23207:55:0::1;::::0;::::1;7917:21:1::0;7974:2;7954:18;;;7947:30;-1:-1:-1;;;7993:18:1;;;7986:48;8051:18;;23207:55:0::1;7733:342:1::0;23207:55:0::1;23297:1;23281:13;;:17;23273:57;;;::::0;-1:-1:-1;;;23273:57:0;;4686:2:1;23273:57:0::1;::::0;::::1;4668:21:1::0;4725:2;4705:18;;;4698:30;4764:29;4744:18;;;4737:57;4811:18;;23273:57:0::1;4484:351:1::0;23273:57:0::1;23388:10;23343:29;23375:24:::0;;;:12:::1;:24;::::0;;;;23418:22:::1;::::0;::::1;::::0;23410:72:::1;;;::::0;-1:-1:-1;;;23410:72:0;;5042:2:1;23410:72:0::1;::::0;::::1;5024:21:1::0;5081:2;5061:18;;;5054:30;5120:34;5100:18;;;5093:62;-1:-1:-1;;;5171:18:1;;;5164:31;5212:19;;23410:72:0::1;4840:397:1::0;23410:72:0::1;23495:25;23571:13;;23523:45;23545:10;:22;;;23523:17;;:21;;:45;;;;:::i;:::-;:61;;;;:::i;:::-;23622:1;23597:22;::::0;::::1;:26:::0;23664:12:::1;23634:27;::::0;::::1;:42:::0;23495:89;-1:-1:-1;23689:64:0::1;23709:12;23723:10;23495:89:::0;23689:19:::1;:64::i;:::-;23769:45;::::0;10341:25:1;;;23784:10:0::1;::::0;23769:45:::1;::::0;10329:2:1;10314:18;23769:45:0::1;;;;;;;-1:-1:-1::0;;1703:1:0;2655:7;:22;23157:665::o;22747:302::-;-1:-1:-1;;;;;22873:20:0;;22822:7;22873:20;;;:12;:20;;;;;;;;22842:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22908:13;;:18;22904:119;;22998:13;;22972:22;;;;22950:17;;:45;;:21;:45::i;:::-;:61;;;;:::i;:::-;22943:68;22747:302;-1:-1:-1;;;22747:302:0:o;22904:119::-;-1:-1:-1;23040:1:0;;22747:302;-1:-1:-1;;22747:302:0:o;18265:284::-;6326:5;;-1:-1:-1;;;;;6326:5:0;6312:10;:19;6304:41;;;;-1:-1:-1;;;6304:41:0;;;;;;;:::i;:::-;18046:9:::1;18031:12;:24;18023:48;;;;-1:-1:-1::0;;;18023:48:0::1;;;;;;;:::i;:::-;18346:135:::2;18384:12;18411:10;18444:4;18464:6;18346:23;:135::i;:::-;18512:17;::::0;:29:::2;::::0;18534:6;18512:21:::2;:29::i;:::-;18492:17;:49:::0;-1:-1:-1;18265:284:0:o;6117:149::-;6326:5;;-1:-1:-1;;;;;6326:5:0;6312:10;:19;6304:41;;;;-1:-1:-1;;;6304:41:0;;;;;;;:::i;:::-;6194:14:::1;:27:::0;;-1:-1:-1;;;;;;6194:27:0::1;-1:-1:-1::0;;;;;6194:27:0;::::1;::::0;;::::1;::::0;;;6237:21:::1;::::0;::::1;::::0;-1:-1:-1;;6237:21:0::1;6117:149:::0;:::o;20540:933::-;18046:9;18031:12;:24;18023:48;;;;-1:-1:-1;;;18023:48:0;;;;;;;:::i;:::-;1747:1:::1;2343:7;;:19;;2335:63;;;;-1:-1:-1::0;;;2335:63:0::1;;;;;;;:::i;:::-;1747:1;2476:7;:18:::0;18149:12:::2;::::0;::::2;;18148:13;18140:38;;;::::0;-1:-1:-1;;;18140:38:0;;5784:2:1;18140:38:0::2;::::0;::::2;5766:21:1::0;5823:2;5803:18;;;5796:30;-1:-1:-1;;;5842:18:1;;;5835:42;5894:18;;18140:38:0::2;5582:336:1::0;18140:38:0::2;20656:1:::3;20647:6;:10;20639:42;;;::::0;-1:-1:-1;;;20639:42:0;;3571:2:1;20639:42:0::3;::::0;::::3;3553:21:1::0;3610:2;3590:18;;;3583:30;-1:-1:-1;;;3629:18:1;;;3622:49;3688:18;;20639:42:0::3;3369:343:1::0;20639:42:0::3;20737:10;20692:29;20724:24:::0;;;:12:::3;:24;::::0;;;;;20761:135:::3;::::0;20799:12:::3;::::0;20859:4:::3;20879:6:::0;20761:23:::3;:135::i;:::-;20969:11;20939:10;:27;;;:41;:96;;21023:12;20939:96;;;20996:11;20939:96;20909:27;::::0;::::3;:126:::0;;;21048:21:::3;::::0;21072:54:::3;::::0;21083:42:::3;::::0;:9:::3;::::0;:13:::3;:42::i;:::-;21072:6:::0;;:10:::3;:54::i;:::-;21155:13;::::0;21048:78;;-1:-1:-1;21155:32:0::3;::::0;21048:78;21155:17:::3;:32::i;:::-;21139:13;:48:::0;21218:17:::3;::::0;:29:::3;::::0;21240:6;21218:21:::3;:29::i;:::-;21198:17;:49:::0;21286:23;;:35:::3;::::0;21314:6;21286:27:::3;:35::i;:::-;21260:61:::0;;21357:22:::3;::::0;::::3;::::0;:41:::3;::::0;21384:13;21357:26:::3;:41::i;:::-;21332:22;::::0;::::3;:66:::0;21424:41:::3;::::0;;10551:25:1;;;10607:2;10592:18;;10585:34;;;21431:10:0::3;::::0;21424:41:::3;::::0;10524:18:1;21424:41:0::3;;;;;;;;-1:-1:-1::0;;1703:1:0::1;2655:7;:22:::0;-1:-1:-1;20540:933:0:o;18619:282::-;6326:5;;-1:-1:-1;;;;;6326:5:0;6312:10;:19;6304:41;;;;-1:-1:-1;;;6304:41:0;;;;;;;:::i;:::-;18046:9:::1;18031:12;:24;18023:48;;;;-1:-1:-1::0;;;18023:48:0::1;;;;;;;:::i;:::-;18721:17:::2;;18711:6;:27;;18703:66;;;::::0;-1:-1:-1;;;18703:66:0;;8619:2:1;18703:66:0::2;::::0;::::2;8601:21:1::0;8658:2;8638:18;;;8631:30;8697:28;8677:18;;;8670:56;8743:18;;18703:66:0::2;8417:350:1::0;18703:66:0::2;18780:53;18800:12;18814:10;18826:6;18780:19;:53::i;:::-;18864:17;::::0;:29:::2;::::0;18886:6;18864:21:::2;:29::i;21574:1005::-:0;1747:1;2343:7;;:19;;2335:63;;;;-1:-1:-1;;;2335:63:0;;;;;;;:::i;:::-;1747:1;2476:7;:18;21647:10;21639:42:::1;;;::::0;-1:-1:-1;;;21639:42:0;;3571:2:1;21639:42:0::1;::::0;::::1;3553:21:1::0;3610:2;3590:18;;;3583:30;-1:-1:-1;;;3629:18:1;;;3622:49;3688:18;;21639:42:0::1;3369:343:1::0;21639:42:0::1;21715:11;21700:12;:26;21692:56;;;::::0;-1:-1:-1;;;21692:56:0;;9335:2:1;21692:56:0::1;::::0;::::1;9317:21:1::0;9374:2;9354:18;;;9347:30;-1:-1:-1;;;9393:18:1;;;9386:47;9450:18;;21692:56:0::1;9133:341:1::0;21692:56:0::1;21806:10;21761:29;21793:24:::0;;;:12:::1;:24;::::0;;;;21846:17:::1;::::0;21836:27;::::1;;21828:72;;;::::0;-1:-1:-1;;;21828:72:0;;8974:2:1;21828:72:0::1;::::0;::::1;8956:21:1::0;;;8993:18;;;8986:30;9052:34;9032:18;;;9025:62;9104:18;;21828:72:0::1;8772:356:1::0;21828:72:0::1;21929:23:::0;;21919:33;::::1;;21911:72;;;::::0;-1:-1:-1;;;21911:72:0;;7166:2:1;21911:72:0::1;::::0;::::1;7148:21:1::0;7205:2;7185:18;;;7178:30;7244:28;7224:18;;;7217:56;7290:18;;21911:72:0::1;6964:350:1::0;21911:72:0::1;22041:9;22026:12;:24;:51;;22068:9;22026:51;;;22053:12;22026:51;21996:27;::::0;::::1;:81:::0;;;22090:23:::1;::::0;22116:54:::1;::::0;22127:42:::1;::::0;:9:::1;::::0;:13:::1;:42::i;22116:54::-;22199:13;::::0;22090:80;;-1:-1:-1;22199:34:0::1;::::0;22090:80;22199:17:::1;:34::i;:::-;22183:13;:50:::0;22264:17:::1;::::0;:29:::1;::::0;22286:6;22264:21:::1;:29::i;:::-;22244:17;:49:::0;22332:23;;:35:::1;::::0;22360:6;22332:27:::1;:35::i;:::-;22306:61:::0;;22403:22:::1;::::0;::::1;::::0;:43:::1;::::0;22430:15;22403:26:::1;:43::i;:::-;22378:22;::::0;::::1;:68:::0;22459:53:::1;22479:12;22493:10;22505:6:::0;22459:19:::1;:53::i;:::-;22528:43;::::0;;10551:25:1;;;10607:2;10592:18;;10585:34;;;22535:10:0::1;::::0;22528:43:::1;::::0;10524:18:1;22528:43:0::1;10377:248:1::0;9901:138:0;9959:9;10004:1;9994:5;9998:1;10004;9994:5;:::i;:::-;9990:9;;;9989:16;;9981:50;;;;-1:-1:-1;;;9981:50:0;;2872:2:1;9981:50:0;;;2854:21:1;2911:2;2891:18;;;2884:30;-1:-1:-1;;;2930:18:1;;;2923:51;2991:18;;9981:50:0;2670:345:1;9981:50:0;9901:138;;;;:::o;12301:473::-;12547:45;;;-1:-1:-1;;;;;2583:32:1;;;12547:45:0;;;2565:51:1;2632:18;;;;2625:34;;;12547:45:0;;;;;;;;;;2538:18:1;;;;12547:45:0;;;;;;;-1:-1:-1;;;;;12547:45:0;-1:-1:-1;;;12547:45:0;;;12522:81;;-1:-1:-1;;;;12522:10:0;;;;:81;;12547:45;12522:81;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12486:117;;;;12636:7;:57;;;;-1:-1:-1;12648:11:0;;:16;;:44;;;12679:4;12668:24;;;;;;;;;;;;:::i;:::-;12614:152;;;;-1:-1:-1;;;12614:152:0;;7521:2:1;12614:152:0;;;7503:21:1;7560:2;7540:18;;;7533:30;7599:34;7579:18;;;7572:62;-1:-1:-1;;;7650:18:1;;;7643:43;7703:19;;12614:152:0;7319:409:1;12614:152:0;12408:366;;12301:473;;;:::o;10047:151::-;10105:9;10135:6;;;:30;;-1:-1:-1;10164:1:0;10159;10150:5;10159:1;10164;10150:5;:::i;:::-;10146:9;-1:-1:-1;10145:15:0;;10146:9;10145:15;:::i;:::-;:20;10135:30;10127:63;;;;-1:-1:-1;;;10127:63:0;;3222:2:1;10127:63:0;;;3204:21:1;3261:2;3241:18;;;3234:30;-1:-1:-1;;;3280:18:1;;;3273:50;3340:18;;10127:63:0;3020:344:1;11771:522:0;12056:51;;;-1:-1:-1;;;;;2269:15:1;;;12056:51:0;;;2251:34:1;2321:15;;;2301:18;;;2294:43;2353:18;;;;2346:34;;;12056:51:0;;;;;;;;;;2186:18:1;;;;12056:51:0;;;;;;;-1:-1:-1;;;;;12056:51:0;-1:-1:-1;;;12056:51:0;;;12031:87;;-1:-1:-1;;;;12031:10:0;;;;:87;;12056:51;12031:87;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11995:123;;;;12151:7;:57;;;;-1:-1:-1;12163:11:0;;:16;;:44;;;12194:4;12183:24;;;;;;;;;;;;:::i;:::-;12129:156;;;;-1:-1:-1;;;12129:156:0;;4268:2:1;12129:156:0;;;4250:21:1;4307:2;4287:18;;;4280:30;4346:34;4326:18;;;4319:62;-1:-1:-1;;;4397:18:1;;;4390:47;4454:19;;12129:156:0;4066:413:1;12129:156:0;11905:388;;11771:522;;;;:::o;9756:137::-;9814:9;9859:1;9849:5;9853:1;9859;9849:5;:::i;:::-;9845:9;;;9844:16;;9836:49;;;;-1:-1:-1;;;9836:49:0;;3919:2:1;9836:49:0;;;3901:21:1;3958:2;3938:18;;;3931:30;-1:-1:-1;;;3977:18:1;;;3970:50;4037:18;;9836:49:0;3717:344:1;14:173;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;383:328::-;460:6;468;476;529:2;517:9;508:7;504:23;500:32;497:52;;;545:1;542;535:12;497:52;568:29;587:9;568:29;:::i;:::-;558:39;;616:38;650:2;639:9;635:18;616:38;:::i;:::-;606:48;;701:2;690:9;686:18;673:32;663:42;;383:328;;;;;:::o;716:277::-;783:6;836:2;824:9;815:7;811:23;807:32;804:52;;;852:1;849;842:12;804:52;884:9;878:16;937:5;930:13;923:21;916:5;913:32;903:60;;959:1;956;949:12;998:180;1057:6;1110:2;1098:9;1089:7;1085:23;1081:32;1078:52;;;1126:1;1123;1116:12;1078:52;-1:-1:-1;1149:23:1;;998:180;-1:-1:-1;998:180:1:o;1183:184::-;1253:6;1306:2;1294:9;1285:7;1281:23;1277:32;1274:52;;;1322:1;1319;1312:12;1274:52;-1:-1:-1;1345:16:1;;1183:184;-1:-1:-1;1183:184:1:o;1372:426::-;1501:3;1539:6;1533:13;1564:1;1574:129;1588:6;1585:1;1582:13;1574:129;;;1686:4;1670:14;;;1666:25;;1660:32;1647:11;;;1640:53;1603:12;1574:129;;;1721:6;1718:1;1715:13;1712:48;;;1756:1;1747:6;1742:3;1738:16;1731:27;1712:48;-1:-1:-1;1776:16:1;;;;;1372:426;-1:-1:-1;;1372:426:1:o;5242:335::-;5444:2;5426:21;;;5483:2;5463:18;;;5456:30;-1:-1:-1;;;5517:2:1;5502:18;;5495:41;5568:2;5553:18;;5242:335::o;8080:332::-;8282:2;8264:21;;;8321:1;8301:18;;;8294:29;-1:-1:-1;;;8354:2:1;8339:18;;8332:39;8403:2;8388:18;;8080:332::o;9479:355::-;9681:2;9663:21;;;9720:2;9700:18;;;9693:30;9759:33;9754:2;9739:18;;9732:61;9825:2;9810:18;;9479:355::o;10630:128::-;10670:3;10701:1;10697:6;10694:1;10691:13;10688:39;;;10707:18;;:::i;:::-;-1:-1:-1;10743:9:1;;10630:128::o;10763:217::-;10803:1;10829;10819:132;;10873:10;10868:3;10864:20;10861:1;10854:31;10908:4;10905:1;10898:15;10936:4;10933:1;10926:15;10819:132;-1:-1:-1;10965:9:1;;10763:217::o;10985:168::-;11025:7;11091:1;11087;11083:6;11079:14;11076:1;11073:21;11068:1;11061:9;11054:17;11050:45;11047:71;;;11098:18;;:::i;:::-;-1:-1:-1;11138:9:1;;10985:168::o;11158:125::-;11198:4;11226:1;11223;11220:8;11217:34;;;11231:18;;:::i;:::-;-1:-1:-1;11268:9:1;;11158:125::o;11288:127::-;11349:10;11344:3;11340:20;11337:1;11330:31;11380:4;11377:1;11370:15;11404:4;11401:1;11394:15
Swarm Source
ipfs://f97ba5fe3497bdbc657087b189fcb8137fd88c48eaef805c926cf7d45b378659
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.