Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 1 from a total of 1 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer Ownersh... | 23355865 | 60 days ago | IN | 0 ETH | 0.00004874 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
StakingInfo
Compiler Version
v0.5.17+commit.d19bba13
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2023-08-07
*/
pragma solidity ^0.5.2;
interface IGovernance {
function update(address target, bytes calldata data) external;
}
contract Governable {
IGovernance public governance;
constructor(address _governance) public {
governance = IGovernance(_governance);
}
modifier onlyGovernance() {
_assertGovernance();
_;
}
function _assertGovernance() private view {
require(
msg.sender == address(governance),
"Only governance contract is authorized"
);
}
}
contract IWithdrawManager {
function createExitQueue(address token) external;
function verifyInclusion(
bytes calldata data,
uint8 offset,
bool verifyTxInclusion
) external view returns (uint256 age);
function addExitToQueue(
address exitor,
address childToken,
address rootToken,
uint256 exitAmountOrTokenId,
bytes32 txHash,
bool isRegularExit,
uint256 priority
) external;
function addInput(
uint256 exitId,
uint256 age,
address utxoOwner,
address token
) external;
function challengeExit(
uint256 exitId,
uint256 inputId,
bytes calldata challengeData,
address adjudicatorPredicate
) external;
}
contract Registry is Governable {
// @todo hardcode constants
bytes32 private constant WETH_TOKEN = keccak256("wethToken");
bytes32 private constant DEPOSIT_MANAGER = keccak256("depositManager");
bytes32 private constant STAKE_MANAGER = keccak256("stakeManager");
bytes32 private constant VALIDATOR_SHARE = keccak256("validatorShare");
bytes32 private constant WITHDRAW_MANAGER = keccak256("withdrawManager");
bytes32 private constant CHILD_CHAIN = keccak256("childChain");
bytes32 private constant STATE_SENDER = keccak256("stateSender");
bytes32 private constant SLASHING_MANAGER = keccak256("slashingManager");
address public erc20Predicate;
address public erc721Predicate;
mapping(bytes32 => address) public contractMap;
mapping(address => address) public rootToChildToken;
mapping(address => address) public childToRootToken;
mapping(address => bool) public proofValidatorContracts;
mapping(address => bool) public isERC721;
enum Type {Invalid, ERC20, ERC721, Custom}
struct Predicate {
Type _type;
}
mapping(address => Predicate) public predicates;
event TokenMapped(address indexed rootToken, address indexed childToken);
event ProofValidatorAdded(address indexed validator, address indexed from);
event ProofValidatorRemoved(address indexed validator, address indexed from);
event PredicateAdded(address indexed predicate, address indexed from);
event PredicateRemoved(address indexed predicate, address indexed from);
event ContractMapUpdated(bytes32 indexed key, address indexed previousContract, address indexed newContract);
constructor(address _governance) public Governable(_governance) {}
function updateContractMap(bytes32 _key, address _address) external onlyGovernance {
emit ContractMapUpdated(_key, contractMap[_key], _address);
contractMap[_key] = _address;
}
/**
* @dev Map root token to child token
* @param _rootToken Token address on the root chain
* @param _childToken Token address on the child chain
* @param _isERC721 Is the token being mapped ERC721
*/
function mapToken(
address _rootToken,
address _childToken,
bool _isERC721
) external onlyGovernance {
require(_rootToken != address(0x0) && _childToken != address(0x0), "INVALID_TOKEN_ADDRESS");
rootToChildToken[_rootToken] = _childToken;
childToRootToken[_childToken] = _rootToken;
isERC721[_rootToken] = _isERC721;
IWithdrawManager(contractMap[WITHDRAW_MANAGER]).createExitQueue(_rootToken);
emit TokenMapped(_rootToken, _childToken);
}
function addErc20Predicate(address predicate) public onlyGovernance {
require(predicate != address(0x0), "Can not add null address as predicate");
erc20Predicate = predicate;
addPredicate(predicate, Type.ERC20);
}
function addErc721Predicate(address predicate) public onlyGovernance {
erc721Predicate = predicate;
addPredicate(predicate, Type.ERC721);
}
function addPredicate(address predicate, Type _type) public onlyGovernance {
require(predicates[predicate]._type == Type.Invalid, "Predicate already added");
predicates[predicate]._type = _type;
emit PredicateAdded(predicate, msg.sender);
}
function removePredicate(address predicate) public onlyGovernance {
require(predicates[predicate]._type != Type.Invalid, "Predicate does not exist");
delete predicates[predicate];
emit PredicateRemoved(predicate, msg.sender);
}
function getValidatorShareAddress() public view returns (address) {
return contractMap[VALIDATOR_SHARE];
}
function getWethTokenAddress() public view returns (address) {
return contractMap[WETH_TOKEN];
}
function getDepositManagerAddress() public view returns (address) {
return contractMap[DEPOSIT_MANAGER];
}
function getStakeManagerAddress() public view returns (address) {
return contractMap[STAKE_MANAGER];
}
function getSlashingManagerAddress() public view returns (address) {
return contractMap[SLASHING_MANAGER];
}
function getWithdrawManagerAddress() public view returns (address) {
return contractMap[WITHDRAW_MANAGER];
}
function getChildChainAndStateSender() public view returns (address, address) {
return (contractMap[CHILD_CHAIN], contractMap[STATE_SENDER]);
}
function isTokenMapped(address _token) public view returns (bool) {
return rootToChildToken[_token] != address(0x0);
}
function isTokenMappedAndIsErc721(address _token) public view returns (bool) {
require(isTokenMapped(_token), "TOKEN_NOT_MAPPED");
return isERC721[_token];
}
function isTokenMappedAndGetPredicate(address _token) public view returns (address) {
if (isTokenMappedAndIsErc721(_token)) {
return erc721Predicate;
}
return erc20Predicate;
}
function isChildTokenErc721(address childToken) public view returns (bool) {
address rootToken = childToRootToken[childToken];
require(rootToken != address(0x0), "Child token is not mapped");
return isERC721[rootToken];
}
}
/**
* @title SafeMath
* @dev Unsigned math operations with safety checks that revert on error
*/
library SafeMath {
/**
* @dev Multiplies two unsigned integers, reverts on overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b);
return c;
}
/**
* @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// Solidity only automatically asserts when dividing by 0
require(b > 0);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
require(b <= a);
uint256 c = a - b;
return c;
}
/**
* @dev Adds two unsigned integers, reverts on overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a);
return c;
}
/**
* @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),
* reverts when dividing by zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
require(b != 0);
return a % b;
}
}
/**
* @title Ownable
* @dev The Ownable contract has an owner address, and provides basic authorization control
* functions, this simplifies the implementation of "user permissions".
*/
contract Ownable {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev The Ownable constructor sets the original `owner` of the contract to the sender
* account.
*/
constructor () internal {
_owner = msg.sender;
emit OwnershipTransferred(address(0), _owner);
}
/**
* @return the address of the owner.
*/
function owner() public view returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(isOwner());
_;
}
/**
* @return true if `msg.sender` is the owner of the contract.
*/
function isOwner() public view returns (bool) {
return msg.sender == _owner;
}
/**
* @dev Allows the current owner to relinquish control of the contract.
* It will not be possible to call the functions with the `onlyOwner`
* modifier anymore.
* @notice Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
/**
* @dev Allows the current owner to transfer control of the contract to a newOwner.
* @param newOwner The address to transfer ownership to.
*/
function transferOwnership(address newOwner) public onlyOwner {
_transferOwnership(newOwner);
}
/**
* @dev Transfers control of the contract to a newOwner.
* @param newOwner The address to transfer ownership to.
*/
function _transferOwnership(address newOwner) internal {
require(newOwner != address(0));
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
// dummy interface to avoid cyclic dependency
contract IStakeManagerLocal {
enum Status {Inactive, Active, Locked, Unstaked}
struct Validator {
uint256 amount;
uint256 reward;
uint256 activationEpoch;
uint256 deactivationEpoch;
uint256 jailTime;
address signer;
address contractAddress;
Status status;
}
mapping(uint256 => Validator) public validators;
bytes32 public accountStateRoot;
uint256 public activeAmount; // delegation amount from validator contract
uint256 public validatorRewards;
function currentValidatorSetTotalStake() public view returns (uint256);
// signer to Validator mapping
function signerToValidator(address validatorAddress)
public
view
returns (uint256);
function isValidator(uint256 validatorId) public view returns (bool);
}
contract StakingInfo is Ownable {
using SafeMath for uint256;
mapping(uint256 => uint256) public validatorNonce;
/// @dev Emitted when validator stakes in '_stakeFor()' in StakeManager.
/// @param signer validator address.
/// @param validatorId unique integer to identify a validator.
/// @param nonce to synchronize the events in heimdal.
/// @param activationEpoch validator's first epoch as proposer.
/// @param amount staking amount.
/// @param total total staking amount.
/// @param signerPubkey public key of the validator
event Staked(
address indexed signer,
uint256 indexed validatorId,
uint256 nonce,
uint256 indexed activationEpoch,
uint256 amount,
uint256 total,
bytes signerPubkey
);
/// @dev Emitted when validator unstakes in 'unstakeClaim()'
/// @param user address of the validator.
/// @param validatorId unique integer to identify a validator.
/// @param amount staking amount.
/// @param total total staking amount.
event Unstaked(
address indexed user,
uint256 indexed validatorId,
uint256 amount,
uint256 total
);
/// @dev Emitted when validator unstakes in '_unstake()'.
/// @param user address of the validator.
/// @param validatorId unique integer to identify a validator.
/// @param nonce to synchronize the events in heimdal.
/// @param deactivationEpoch last epoch for validator.
/// @param amount staking amount.
event UnstakeInit(
address indexed user,
uint256 indexed validatorId,
uint256 nonce,
uint256 deactivationEpoch,
uint256 indexed amount
);
/// @dev Emitted when the validator public key is updated in 'updateSigner()'.
/// @param validatorId unique integer to identify a validator.
/// @param nonce to synchronize the events in heimdal.
/// @param oldSigner old address of the validator.
/// @param newSigner new address of the validator.
/// @param signerPubkey public key of the validator.
event SignerChange(
uint256 indexed validatorId,
uint256 nonce,
address indexed oldSigner,
address indexed newSigner,
bytes signerPubkey
);
event Restaked(uint256 indexed validatorId, uint256 amount, uint256 total);
event Jailed(
uint256 indexed validatorId,
uint256 indexed exitEpoch,
address indexed signer
);
event UnJailed(uint256 indexed validatorId, address indexed signer);
event Slashed(uint256 indexed nonce, uint256 indexed amount);
event ThresholdChange(uint256 newThreshold, uint256 oldThreshold);
event DynastyValueChange(uint256 newDynasty, uint256 oldDynasty);
event ProposerBonusChange(
uint256 newProposerBonus,
uint256 oldProposerBonus
);
event RewardUpdate(uint256 newReward, uint256 oldReward);
/// @dev Emitted when validator confirms the auction bid and at the time of restaking in confirmAuctionBid() and restake().
/// @param validatorId unique integer to identify a validator.
/// @param nonce to synchronize the events in heimdal.
/// @param newAmount the updated stake amount.
event StakeUpdate(
uint256 indexed validatorId,
uint256 indexed nonce,
uint256 indexed newAmount
);
event ClaimRewards(
uint256 indexed validatorId,
uint256 indexed amount,
uint256 indexed totalAmount
);
event StartAuction(
uint256 indexed validatorId,
uint256 indexed amount,
uint256 indexed auctionAmount
);
event ConfirmAuction(
uint256 indexed newValidatorId,
uint256 indexed oldValidatorId,
uint256 indexed amount
);
event TopUpFee(address indexed user, uint256 indexed fee);
event ClaimFee(address indexed user, uint256 indexed fee);
// Delegator events
event ShareMinted(
uint256 indexed validatorId,
address indexed user,
uint256 indexed amount,
uint256 tokens
);
event ShareBurned(
uint256 indexed validatorId,
address indexed user,
uint256 indexed amount,
uint256 tokens
);
event DelegatorClaimedRewards(
uint256 indexed validatorId,
address indexed user,
uint256 indexed rewards
);
event DelegatorRestaked(
uint256 indexed validatorId,
address indexed user,
uint256 indexed totalStaked
);
event DelegatorUnstaked(
uint256 indexed validatorId,
address indexed user,
uint256 amount
);
event UpdateCommissionRate(
uint256 indexed validatorId,
uint256 indexed newCommissionRate,
uint256 indexed oldCommissionRate
);
Registry public registry;
modifier onlyValidatorContract(uint256 validatorId) {
address _contract;
(, , , , , , _contract, ) = IStakeManagerLocal(
registry.getStakeManagerAddress()
)
.validators(validatorId);
require(_contract == msg.sender,
"Invalid sender, not validator");
_;
}
modifier StakeManagerOrValidatorContract(uint256 validatorId) {
address _contract;
address _stakeManager = registry.getStakeManagerAddress();
(, , , , , , _contract, ) = IStakeManagerLocal(_stakeManager).validators(
validatorId
);
require(_contract == msg.sender || _stakeManager == msg.sender,
"Invalid sender, not stake manager or validator contract");
_;
}
modifier onlyStakeManager() {
require(registry.getStakeManagerAddress() == msg.sender,
"Invalid sender, not stake manager");
_;
}
modifier onlySlashingManager() {
require(registry.getSlashingManagerAddress() == msg.sender,
"Invalid sender, not slashing manager");
_;
}
constructor(address _registry) public {
registry = Registry(_registry);
}
function updateNonce(
uint256[] calldata validatorIds,
uint256[] calldata nonces
) external onlyOwner {
require(validatorIds.length == nonces.length, "args length mismatch");
for (uint256 i = 0; i < validatorIds.length; ++i) {
validatorNonce[validatorIds[i]] = nonces[i];
}
}
function logStaked(
address signer,
bytes memory signerPubkey,
uint256 validatorId,
uint256 activationEpoch,
uint256 amount,
uint256 total
) public onlyStakeManager {
validatorNonce[validatorId] = validatorNonce[validatorId].add(1);
emit Staked(
signer,
validatorId,
validatorNonce[validatorId],
activationEpoch,
amount,
total,
signerPubkey
);
}
function logUnstaked(
address user,
uint256 validatorId,
uint256 amount,
uint256 total
) public onlyStakeManager {
emit Unstaked(user, validatorId, amount, total);
}
function logUnstakeInit(
address user,
uint256 validatorId,
uint256 deactivationEpoch,
uint256 amount
) public onlyStakeManager {
validatorNonce[validatorId] = validatorNonce[validatorId].add(1);
emit UnstakeInit(
user,
validatorId,
validatorNonce[validatorId],
deactivationEpoch,
amount
);
}
function logSignerChange(
uint256 validatorId,
address oldSigner,
address newSigner,
bytes memory signerPubkey
) public onlyStakeManager {
validatorNonce[validatorId] = validatorNonce[validatorId].add(1);
emit SignerChange(
validatorId,
validatorNonce[validatorId],
oldSigner,
newSigner,
signerPubkey
);
}
function logRestaked(uint256 validatorId, uint256 amount, uint256 total)
public
onlyStakeManager
{
emit Restaked(validatorId, amount, total);
}
function logJailed(uint256 validatorId, uint256 exitEpoch, address signer)
public
onlyStakeManager
{
emit Jailed(validatorId, exitEpoch, signer);
}
function logUnjailed(uint256 validatorId, address signer)
public
onlyStakeManager
{
emit UnJailed(validatorId, signer);
}
function logSlashed(uint256 nonce, uint256 amount)
public
onlySlashingManager
{
emit Slashed(nonce, amount);
}
function logThresholdChange(uint256 newThreshold, uint256 oldThreshold)
public
onlyStakeManager
{
emit ThresholdChange(newThreshold, oldThreshold);
}
function logDynastyValueChange(uint256 newDynasty, uint256 oldDynasty)
public
onlyStakeManager
{
emit DynastyValueChange(newDynasty, oldDynasty);
}
function logProposerBonusChange(
uint256 newProposerBonus,
uint256 oldProposerBonus
) public onlyStakeManager {
emit ProposerBonusChange(newProposerBonus, oldProposerBonus);
}
function logRewardUpdate(uint256 newReward, uint256 oldReward)
public
onlyStakeManager
{
emit RewardUpdate(newReward, oldReward);
}
function logStakeUpdate(uint256 validatorId)
public
StakeManagerOrValidatorContract(validatorId)
{
validatorNonce[validatorId] = validatorNonce[validatorId].add(1);
emit StakeUpdate(
validatorId,
validatorNonce[validatorId],
totalValidatorStake(validatorId)
);
}
function logClaimRewards(
uint256 validatorId,
uint256 amount,
uint256 totalAmount
) public onlyStakeManager {
emit ClaimRewards(validatorId, amount, totalAmount);
}
function logStartAuction(
uint256 validatorId,
uint256 amount,
uint256 auctionAmount
) public onlyStakeManager {
emit StartAuction(validatorId, amount, auctionAmount);
}
function logConfirmAuction(
uint256 newValidatorId,
uint256 oldValidatorId,
uint256 amount
) public onlyStakeManager {
emit ConfirmAuction(newValidatorId, oldValidatorId, amount);
}
function logTopUpFee(address user, uint256 fee) public onlyStakeManager {
emit TopUpFee(user, fee);
}
function logClaimFee(address user, uint256 fee) public onlyStakeManager {
emit ClaimFee(user, fee);
}
function getStakerDetails(uint256 validatorId)
public
view
returns (
uint256 amount,
uint256 reward,
uint256 activationEpoch,
uint256 deactivationEpoch,
address signer,
uint256 _status
)
{
IStakeManagerLocal stakeManager = IStakeManagerLocal(
registry.getStakeManagerAddress()
);
address _contract;
IStakeManagerLocal.Status status;
(
amount,
reward,
activationEpoch,
deactivationEpoch,
,
signer,
_contract,
status
) = stakeManager.validators(validatorId);
_status = uint256(status);
if (_contract != address(0x0)) {
reward += IStakeManagerLocal(_contract).validatorRewards();
}
}
function totalValidatorStake(uint256 validatorId)
public
view
returns (uint256 validatorStake)
{
address contractAddress;
(validatorStake, , , , , , contractAddress, ) = IStakeManagerLocal(
registry.getStakeManagerAddress()
)
.validators(validatorId);
if (contractAddress != address(0x0)) {
validatorStake += IStakeManagerLocal(contractAddress).activeAmount();
}
}
function getAccountStateRoot()
public
view
returns (bytes32 accountStateRoot)
{
accountStateRoot = IStakeManagerLocal(registry.getStakeManagerAddress())
.accountStateRoot();
}
function getValidatorContractAddress(uint256 validatorId)
public
view
returns (address ValidatorContract)
{
(, , , , , , ValidatorContract, ) = IStakeManagerLocal(
registry.getStakeManagerAddress()
)
.validators(validatorId);
}
// validator Share contract logging func
function logShareMinted(
uint256 validatorId,
address user,
uint256 amount,
uint256 tokens
) public onlyValidatorContract(validatorId) {
emit ShareMinted(validatorId, user, amount, tokens);
}
function logShareBurned(
uint256 validatorId,
address user,
uint256 amount,
uint256 tokens
) public onlyValidatorContract(validatorId) {
emit ShareBurned(validatorId, user, amount, tokens);
}
function logDelegatorClaimRewards(
uint256 validatorId,
address user,
uint256 rewards
) public onlyValidatorContract(validatorId) {
emit DelegatorClaimedRewards(validatorId, user, rewards);
}
function logDelegatorRestaked(
uint256 validatorId,
address user,
uint256 totalStaked
) public onlyValidatorContract(validatorId) {
emit DelegatorRestaked(validatorId, user, totalStaked);
}
function logDelegatorUnstaked(uint256 validatorId, address user, uint256 amount)
public
onlyValidatorContract(validatorId)
{
emit DelegatorUnstaked(validatorId, user, amount);
}
// deprecated
function logUpdateCommissionRate(
uint256 validatorId,
uint256 newCommissionRate,
uint256 oldCommissionRate
) public onlyValidatorContract(validatorId) {
emit UpdateCommissionRate(
validatorId,
newCommissionRate,
oldCommissionRate
);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_registry","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"ClaimFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"validatorId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"totalAmount","type":"uint256"}],"name":"ClaimRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValidatorId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValidatorId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ConfirmAuction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"validatorId","type":"uint256"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"rewards","type":"uint256"}],"name":"DelegatorClaimedRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"validatorId","type":"uint256"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"totalStaked","type":"uint256"}],"name":"DelegatorRestaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"validatorId","type":"uint256"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DelegatorUnstaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newDynasty","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldDynasty","type":"uint256"}],"name":"DynastyValueChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"validatorId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"exitEpoch","type":"uint256"},{"indexed":true,"internalType":"address","name":"signer","type":"address"}],"name":"Jailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newProposerBonus","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldProposerBonus","type":"uint256"}],"name":"ProposerBonusChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"validatorId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"}],"name":"Restaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newReward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldReward","type":"uint256"}],"name":"RewardUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"validatorId","type":"uint256"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"ShareBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"validatorId","type":"uint256"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"ShareMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"validatorId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":true,"internalType":"address","name":"oldSigner","type":"address"},{"indexed":true,"internalType":"address","name":"newSigner","type":"address"},{"indexed":false,"internalType":"bytes","name":"signerPubkey","type":"bytes"}],"name":"SignerChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Slashed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"validatorId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"StakeUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"signer","type":"address"},{"indexed":true,"internalType":"uint256","name":"validatorId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"activationEpoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"signerPubkey","type":"bytes"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"validatorId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"auctionAmount","type":"uint256"}],"name":"StartAuction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newThreshold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldThreshold","type":"uint256"}],"name":"ThresholdChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"TopUpFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"validatorId","type":"uint256"},{"indexed":true,"internalType":"address","name":"signer","type":"address"}],"name":"UnJailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"validatorId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"deactivationEpoch","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UnstakeInit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"validatorId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"}],"name":"Unstaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"validatorId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"newCommissionRate","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldCommissionRate","type":"uint256"}],"name":"UpdateCommissionRate","type":"event"},{"constant":true,"inputs":[],"name":"getAccountStateRoot","outputs":[{"internalType":"bytes32","name":"accountStateRoot","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"validatorId","type":"uint256"}],"name":"getStakerDetails","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"activationEpoch","type":"uint256"},{"internalType":"uint256","name":"deactivationEpoch","type":"uint256"},{"internalType":"address","name":"signer","type":"address"},{"internalType":"uint256","name":"_status","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"validatorId","type":"uint256"}],"name":"getValidatorContractAddress","outputs":[{"internalType":"address","name":"ValidatorContract","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"logClaimFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"validatorId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"totalAmount","type":"uint256"}],"name":"logClaimRewards","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newValidatorId","type":"uint256"},{"internalType":"uint256","name":"oldValidatorId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"logConfirmAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"validatorId","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"rewards","type":"uint256"}],"name":"logDelegatorClaimRewards","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"validatorId","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"totalStaked","type":"uint256"}],"name":"logDelegatorRestaked","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"validatorId","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"logDelegatorUnstaked","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newDynasty","type":"uint256"},{"internalType":"uint256","name":"oldDynasty","type":"uint256"}],"name":"logDynastyValueChange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"validatorId","type":"uint256"},{"internalType":"uint256","name":"exitEpoch","type":"uint256"},{"internalType":"address","name":"signer","type":"address"}],"name":"logJailed","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newProposerBonus","type":"uint256"},{"internalType":"uint256","name":"oldProposerBonus","type":"uint256"}],"name":"logProposerBonusChange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"validatorId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"total","type":"uint256"}],"name":"logRestaked","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newReward","type":"uint256"},{"internalType":"uint256","name":"oldReward","type":"uint256"}],"name":"logRewardUpdate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"validatorId","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"logShareBurned","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"validatorId","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"logShareMinted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"validatorId","type":"uint256"},{"internalType":"address","name":"oldSigner","type":"address"},{"internalType":"address","name":"newSigner","type":"address"},{"internalType":"bytes","name":"signerPubkey","type":"bytes"}],"name":"logSignerChange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"logSlashed","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"validatorId","type":"uint256"}],"name":"logStakeUpdate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"bytes","name":"signerPubkey","type":"bytes"},{"internalType":"uint256","name":"validatorId","type":"uint256"},{"internalType":"uint256","name":"activationEpoch","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"total","type":"uint256"}],"name":"logStaked","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"validatorId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"auctionAmount","type":"uint256"}],"name":"logStartAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newThreshold","type":"uint256"},{"internalType":"uint256","name":"oldThreshold","type":"uint256"}],"name":"logThresholdChange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"logTopUpFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"validatorId","type":"uint256"},{"internalType":"address","name":"signer","type":"address"}],"name":"logUnjailed","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"validatorId","type":"uint256"},{"internalType":"uint256","name":"deactivationEpoch","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"logUnstakeInit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"validatorId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"total","type":"uint256"}],"name":"logUnstaked","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"validatorId","type":"uint256"},{"internalType":"uint256","name":"newCommissionRate","type":"uint256"},{"internalType":"uint256","name":"oldCommissionRate","type":"uint256"}],"name":"logUpdateCommissionRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"registry","outputs":[{"internalType":"contract Registry","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"validatorId","type":"uint256"}],"name":"totalValidatorStake","outputs":[{"internalType":"uint256","name":"validatorStake","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256[]","name":"validatorIds","type":"uint256[]"},{"internalType":"uint256[]","name":"nonces","type":"uint256[]"}],"name":"updateNonce","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"validatorNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b50604051612eb3380380612eb38339818101604052602081101561003357600080fd5b5051600080546001600160a01b03191633178082556040516001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600280546001600160a01b0319166001600160a01b0392909216919091179055612e06806100ad6000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c8063a3b1d8cb11610125578063ca7d34b6116100ad578063f1382b531161007c578063f1382b5314610894578063f1980a50146108cc578063f2fde38b146108ef578063f92ec5af14610915578063fb77c94e1461094157610211565b8063ca7d34b614610773578063e12ab1af14610790578063eae3f749146107b9578063ebde9f931461087757610211565b8063b6fa74c4116100f4578063b6fa74c4146105f9578063b7721d2d1461061c578063b80fbce51461064e578063c69d057314610712578063c98cc0021461074a57610211565b8063a3b1d8cb14610549578063a449d7951461056c578063ae2e26b114610598578063b685b26a146105d057610211565b8063605be9be116101a85780637f88a957116101775780637f88a9571461049e57806381dc101b146104d05780638da5cb5b146105025780638f32d59b1461050a578063a0e300a61461052657610211565b8063605be9be14610403578063715018a61461043557806378daaf691461043d5780637b1039991461049657610211565b80634b6b87ce116101e45780634b6b87ce1461036b578063532e19a9146103855780635616a7cc146103a25780635e04d483146103cb57610211565b80630934a6df14610216578063122b648114610241578063178d46aa1461026d57806333a8383c146102a6575b600080fd5b61023f6004803603606081101561022c57600080fd5b5080359060208101359060400135610964565b005b61023f6004803603604081101561025757600080fd5b506001600160a01b038135169060200135610a4d565b61028a6004803603602081101561028357600080fd5b5035610b3c565b604080516001600160a01b039092168252519081900360200190f35b61023f600480360360c08110156102bc57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156102e657600080fd5b8201836020820111156102f857600080fd5b803590602001918460018302840111600160201b8311171561031957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505082359350505060208101359060408101359060600135610c2d565b610373610df2565b60408051918252519081900360200190f35b61023f6004803603602081101561039b57600080fd5b5035610ed6565b61023f600480360360608110156103b857600080fd5b50803590602081013590604001356110a5565b61023f600480360360808110156103e157600080fd5b506001600160a01b038135169060208101359060408101359060600135611199565b61023f6004803603606081101561041957600080fd5b508035906001600160a01b0360208201351690604001356112cf565b61023f61145a565b61045a6004803603602081101561045357600080fd5b50356114b5565b6040805196875260208701959095528585019390935260608501919091526001600160a01b0316608084015260a0830152519081900360c00190f35b61028a61167e565b61023f600480360360608110156104b457600080fd5b508035906001600160a01b03602082013516906040013561168d565b61023f600480360360608110156104e657600080fd5b50803590602081013590604001356001600160a01b0316611810565b61028a611902565b610512611911565b604080519115158252519081900360200190f35b61023f6004803603604081101561053c57600080fd5b5080359060200135611922565b61023f6004803603604081101561055f57600080fd5b5080359060200135611a16565b61023f6004803603604081101561058257600080fd5b506001600160a01b038135169060200135611b0a565b61023f600480360360808110156105ae57600080fd5b506001600160a01b038135169060208101359060408101359060600135611bf9565b61023f600480360360608110156105e657600080fd5b5080359060208101359060400135611cfe565b61023f6004803603604081101561060f57600080fd5b5080359060200135611de7565b61023f6004803603606081101561063257600080fd5b508035906001600160a01b036020820135169060400135611edb565b61023f6004803603608081101561066457600080fd5b8135916001600160a01b03602082013581169260408301359091169190810190608081016060820135600160201b81111561069e57600080fd5b8201836020820111156106b057600080fd5b803590602001918460018302840111600160201b831117156106d157600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061205e945050505050565b61023f6004803603608081101561072857600080fd5b508035906001600160a01b036020820135169060408101359060600135612202565b61023f6004803603606081101561076057600080fd5b5080359060208101359060400135612391565b6103736004803603602081101561078957600080fd5b503561250b565b61023f600480360360608110156107a657600080fd5b508035906020810135906040013561268b565b61023f600480360360408110156107cf57600080fd5b810190602081018135600160201b8111156107e957600080fd5b8201836020820111156107fb57600080fd5b803590602001918460208302840111600160201b8311171561081c57600080fd5b919390929091602081019035600160201b81111561083957600080fd5b82018360208201111561084b57600080fd5b803590602001918460208302840111600160201b8311171561086c57600080fd5b509092509050612774565b6103736004803603602081101561088d57600080fd5b5035612827565b61023f600480360360808110156108aa57600080fd5b508035906001600160a01b036020820135169060408101359060600135612839565b61023f600480360360408110156108e257600080fd5b50803590602001356129c8565b61023f6004803603602081101561090557600080fd5b50356001600160a01b0316612abc565b61023f6004803603604081101561092b57600080fd5b50803590602001356001600160a01b0316612ad9565b61023f6004803603604081101561095757600080fd5b5080359060200135612bc8565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b1580156109a857600080fd5b505afa1580156109bc573d6000803e3d6000fd5b505050506040513d60208110156109d257600080fd5b50516001600160a01b031614610a195760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b8082847f683d0f47c7fa11331f4e9563b3f5a7fdc3d3c5b75c600357a91d991f5a13a43760405160405180910390a4505050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015610a9157600080fd5b505afa158015610aa5573d6000803e3d6000fd5b505050506040513d6020811015610abb57600080fd5b50516001600160a01b031614610b025760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b60405181906001600160a01b038416907ff40b9ca28516abde647ef8ed0e7b155e16347eb4d8dd6eb29989ed2c0c3d27e890600090a35050565b60025460408051630a1ef8f960e21b815290516000926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015610b8157600080fd5b505afa158015610b95573d6000803e3d6000fd5b505050506040513d6020811015610bab57600080fd5b505160408051630d6a8b9160e21b81526004810185905290516001600160a01b03909216916335aa2e449160248082019261010092909190829003018186803b158015610bf757600080fd5b505afa158015610c0b573d6000803e3d6000fd5b505050506040513d610100811015610c2257600080fd5b5060c0015192915050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015610c7157600080fd5b505afa158015610c85573d6000803e3d6000fd5b505050506040513d6020811015610c9b57600080fd5b50516001600160a01b031614610ce25760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b600084815260016020819052604090912054610d039163ffffffff612cae16565b60016000868152602001908152602001600020819055508284876001600160a01b03167f68c13e4125b983d7e2d6114246f443e567ec6c4ee5b4d4a7ef6100b1402bfd84600160008981526020019081526020016000205486868b6040518085815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610dad578181015183820152602001610d95565b50505050905090810190601f168015610dda5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a4505050505050565b60025460408051630a1ef8f960e21b815290516000926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015610e3757600080fd5b505afa158015610e4b573d6000803e3d6000fd5b505050506040513d6020811015610e6157600080fd5b50516040805163017c2b9160e41b815290516001600160a01b03909216916317c2b91091600480820192602092909190829003018186803b158015610ea557600080fd5b505afa158015610eb9573d6000803e3d6000fd5b505050506040513d6020811015610ecf57600080fd5b5051919050565b80600080600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2857600080fd5b505afa158015610f3c573d6000803e3d6000fd5b505050506040513d6020811015610f5257600080fd5b505160408051630d6a8b9160e21b81526004810186905290519192506001600160a01b038316916335aa2e449160248082019261010092909190829003018186803b158015610fa057600080fd5b505afa158015610fb4573d6000803e3d6000fd5b505050506040513d610100811015610fcb57600080fd5b5060c0015191506001600160a01b038216331480610ff157506001600160a01b03811633145b61102c5760405162461bcd60e51b8152600401808060200182810382526037815260200180612d5a6037913960400191505060405180910390fd5b60008481526001602081905260409091205461104d9163ffffffff612cae16565b6000858152600160205260409020556110658461250b565b600085815260016020526040808220549051909187917f35af9eea1f0e7b300b0a14fae90139a072470e44daa3f14b5069bebbc1265bda9190a450505050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b1580156110e957600080fd5b505afa1580156110fd573d6000803e3d6000fd5b505050506040513d602081101561111357600080fd5b50516001600160a01b03161461115a5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b6040805183815260208101839052815185927f09b24121f82c610c13909ec63bd0843468819a45f6eda5838c3a80568c2046a8928290030190a2505050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b1580156111dd57600080fd5b505afa1580156111f1573d6000803e3d6000fd5b505050506040513d602081101561120757600080fd5b50516001600160a01b03161461124e5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b60008381526001602081905260409091205461126f9163ffffffff612cae16565b600084815260016020908152604091829020839055815192835282018490528051839286926001600160a01b038916927f69b288bb79cd5386c9fe0af060f650e823bcdfa96a44cdc07f862db060f571209281900390910190a450505050565b826000600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b15801561132057600080fd5b505afa158015611334573d6000803e3d6000fd5b505050506040513d602081101561134a57600080fd5b505160408051630d6a8b9160e21b81526004810185905290516001600160a01b03909216916335aa2e449160248082019261010092909190829003018186803b15801561139657600080fd5b505afa1580156113aa573d6000803e3d6000fd5b505050506040513d6101008110156113c157600080fd5b5060c0015190506001600160a01b0381163314611413576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d91833981519152604482015290519081900360640190fd5b6040805184815290516001600160a01b0386169187917f770c7c7d8e20347e5080e2ac70e8519793bedaff621f044396fd8d6d052c4aa89181900360200190a35050505050565b611462611911565b61146b57600080fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000806000806000806000600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b15801561150e57600080fd5b505afa158015611522573d6000803e3d6000fd5b505050506040513d602081101561153857600080fd5b505160408051630d6a8b9160e21b8152600481018b9052905191925060009182916001600160a01b038516916335aa2e449160248082019261010092909190829003018186803b15801561158b57600080fd5b505afa15801561159f573d6000803e3d6000fd5b505050506040513d6101008110156115b657600080fd5b50805160208201516040830151606084015160a085015160c086015160e090960151949e50929c50909a509850965090925090508060038111156115f657fe5b93506001600160a01b0382161561167257816001600160a01b0316635d1e36166040518163ffffffff1660e01b815260040160206040518083038186803b15801561164057600080fd5b505afa158015611654573d6000803e3d6000fd5b505050506040513d602081101561166a57600080fd5b505197909701965b50505091939550919395565b6002546001600160a01b031681565b826000600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b1580156116de57600080fd5b505afa1580156116f2573d6000803e3d6000fd5b505050506040513d602081101561170857600080fd5b505160408051630d6a8b9160e21b81526004810185905290516001600160a01b03909216916335aa2e449160248082019261010092909190829003018186803b15801561175457600080fd5b505afa158015611768573d6000803e3d6000fd5b505050506040513d61010081101561177f57600080fd5b5060c0015190506001600160a01b03811633146117d1576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d91833981519152604482015290519081900360640190fd5b82846001600160a01b0316867f0f9ccdda16b467e719059c85ebd8383fcb7f8ffa5576629fe3b842836e04dad160405160405180910390a45050505050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b15801561185457600080fd5b505afa158015611868573d6000803e3d6000fd5b505050506040513d602081101561187e57600080fd5b50516001600160a01b0316146118c55760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b806001600160a01b031682847ff6566d8fbe8f23227826ba3da2ecc1ec48698c5be051a829965e3358fd5b965860405160405180910390a4505050565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b15801561196657600080fd5b505afa15801561197a573d6000803e3d6000fd5b505050506040513d602081101561199057600080fd5b50516001600160a01b0316146119d75760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b604080518381526020810183905281517f9444bfcfa6aed72a15da73de1220dcc07d7864119c44abfec0037bbcacefda98929181900390910190a15050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015611a5a57600080fd5b505afa158015611a6e573d6000803e3d6000fd5b505050506040513d6020811015611a8457600080fd5b50516001600160a01b031614611acb5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b604080518381526020810183905281517f4a501a9c4d5cce5c32415945bbc8973764f31b844e3e8fd4c15f51f315ac8792929181900390910190a15050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015611b4e57600080fd5b505afa158015611b62573d6000803e3d6000fd5b505050506040513d6020811015611b7857600080fd5b50516001600160a01b031614611bbf5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b60405181906001600160a01b038416907f2c3bb5458e3dd671c31974c4ca8e8ebc2cdd892ae8602374d9a6f789b00c6b9490600090a35050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015611c3d57600080fd5b505afa158015611c51573d6000803e3d6000fd5b505050506040513d6020811015611c6757600080fd5b50516001600160a01b031614611cae5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b82846001600160a01b03167f204fccf0d92ed8d48f204adb39b2e81e92bad0dedb93f5716ca9478cfb57de008484604051808381526020018281526020019250505060405180910390a350505050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015611d4257600080fd5b505afa158015611d56573d6000803e3d6000fd5b505050506040513d6020811015611d6c57600080fd5b50516001600160a01b031614611db35760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b8082847f41e5e4590cfcde2f03ee9281c54d03acad8adffb83f8310d66b894532470ba3560405160405180910390a4505050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015611e2b57600080fd5b505afa158015611e3f573d6000803e3d6000fd5b505050506040513d6020811015611e5557600080fd5b50516001600160a01b031614611e9c5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b604080518381526020810183905281517ff67f33e8589d3ea0356303c0f9a8e764873692159f777ff79e4fc523d389dfcd929181900390910190a15050565b826000600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b158015611f2c57600080fd5b505afa158015611f40573d6000803e3d6000fd5b505050506040513d6020811015611f5657600080fd5b505160408051630d6a8b9160e21b81526004810185905290516001600160a01b03909216916335aa2e449160248082019261010092909190829003018186803b158015611fa257600080fd5b505afa158015611fb6573d6000803e3d6000fd5b505050506040513d610100811015611fcd57600080fd5b5060c0015190506001600160a01b038116331461201f576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d91833981519152604482015290519081900360640190fd5b82846001600160a01b0316867f31d1715032654fde9867c0f095aecce1113049e30b9f4ecbaa6954ed6c63b8df60405160405180910390a45050505050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b1580156120a257600080fd5b505afa1580156120b6573d6000803e3d6000fd5b505050506040513d60208110156120cc57600080fd5b50516001600160a01b0316146121135760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b6000848152600160208190526040909120546121349163ffffffff612cae16565b6000858152600160209081526040808320849055805184815280830182815286519282019290925285516001600160a01b0380891696908a16958b957f086044c0612a8c965d4cccd907f0d588e40ad68438bd4c1274cac60f4c3a9d1f9592948a949093926060850192860191908190849084905b838110156121c15781810151838201526020016121a9565b50505050905090810190601f1680156121ee5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a450505050565b836000600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b15801561225357600080fd5b505afa158015612267573d6000803e3d6000fd5b505050506040513d602081101561227d57600080fd5b505160408051630d6a8b9160e21b81526004810185905290516001600160a01b03909216916335aa2e449160248082019261010092909190829003018186803b1580156122c957600080fd5b505afa1580156122dd573d6000803e3d6000fd5b505050506040513d6101008110156122f457600080fd5b5060c0015190506001600160a01b0381163314612346576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d91833981519152604482015290519081900360640190fd5b83856001600160a01b0316877fc9afff0972d33d68c8d330fe0ebd0e9f54491ad8c59ae17330a9206f280f0865866040518082815260200191505060405180910390a4505050505050565b826000600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b1580156123e257600080fd5b505afa1580156123f6573d6000803e3d6000fd5b505050506040513d602081101561240c57600080fd5b505160408051630d6a8b9160e21b81526004810185905290516001600160a01b03909216916335aa2e449160248082019261010092909190829003018186803b15801561245857600080fd5b505afa15801561246c573d6000803e3d6000fd5b505050506040513d61010081101561248357600080fd5b5060c0015190506001600160a01b03811633146124d5576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d91833981519152604482015290519081900360640190fd5b8284867f7d5da5ece9d43013d62ab966f4704ca376b92be29ca6fbb958154baf1c0dc17e60405160405180910390a45050505050565b600080600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b15801561255c57600080fd5b505afa158015612570573d6000803e3d6000fd5b505050506040513d602081101561258657600080fd5b505160408051630d6a8b9160e21b81526004810186905290516001600160a01b03909216916335aa2e449160248082019261010092909190829003018186803b1580156125d257600080fd5b505afa1580156125e6573d6000803e3d6000fd5b505050506040513d6101008110156125fd57600080fd5b50805160c09091015190925090506001600160a01b0381161561268557806001600160a01b0316633a09bf446040518163ffffffff1660e01b815260040160206040518083038186803b15801561265357600080fd5b505afa158015612667573d6000803e3d6000fd5b505050506040513d602081101561267d57600080fd5b505191909101905b50919050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b1580156126cf57600080fd5b505afa1580156126e3573d6000803e3d6000fd5b505050506040513d60208110156126f957600080fd5b50516001600160a01b0316146127405760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b8082847f1002381ecf76700f6f0ab4c90b9f523e39df7b0482b71ec63cf62cf85412047060405160405180910390a4505050565b61277c611911565b61278557600080fd5b8281146127d0576040805162461bcd60e51b81526020600482015260146024820152730c2e4cee640d8cadccee8d040dad2e6dac2e8c6d60631b604482015290519081900360640190fd5b60005b83811015612820578282828181106127e757fe5b90506020020135600160008787858181106127fe57fe5b60209081029290920135835250810191909152604001600020556001016127d3565b5050505050565b60016020526000908152604090205481565b836000600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b15801561288a57600080fd5b505afa15801561289e573d6000803e3d6000fd5b505050506040513d60208110156128b457600080fd5b505160408051630d6a8b9160e21b81526004810185905290516001600160a01b03909216916335aa2e449160248082019261010092909190829003018186803b15801561290057600080fd5b505afa158015612914573d6000803e3d6000fd5b505050506040513d61010081101561292b57600080fd5b5060c0015190506001600160a01b038116331461297d576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d91833981519152604482015290519081900360640190fd5b83856001600160a01b0316877f7e86625aa6e668407f095af342e0cc237809c4c5086b4d665a0067de122980a9866040518082815260200191505060405180910390a4505050505050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015612a0c57600080fd5b505afa158015612a20573d6000803e3d6000fd5b505050506040513d6020811015612a3657600080fd5b50516001600160a01b031614612a7d5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b604080518381526020810183905281517f5d16a900896e1160c2033bc940e6b072d3dc3b6a996fefb9b3b9b9678841824c929181900390910190a15050565b612ac4611911565b612acd57600080fd5b612ad681612cc7565b50565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015612b1d57600080fd5b505afa158015612b31573d6000803e3d6000fd5b505050506040513d6020811015612b4757600080fd5b50516001600160a01b031614612b8e5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b6040516001600160a01b0382169083907fd3cb87a9c75a0d21336afc0f79f7e398f06748db5ce1815af01d315c7c135c0b90600090a35050565b60025460408051631ab0168360e31b8152905133926001600160a01b03169163d580b418916004808301926020929190829003018186803b158015612c0c57600080fd5b505afa158015612c20573d6000803e3d6000fd5b505050506040513d6020811015612c3657600080fd5b50516001600160a01b031614612c7d5760405162461bcd60e51b8152600401808060200182810382526024815260200180612d366024913960400191505060405180910390fd5b604051819083907f4f5f38ee30b01a960b4dfdcd520a3ca59c1a664a32dcfe5418ca79b0de6b723690600090a35050565b600082820183811015612cc057600080fd5b9392505050565b6001600160a01b038116612cda57600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b039290921691909117905556fe496e76616c69642073656e6465722c206e6f7420736c617368696e67206d616e61676572496e76616c69642073656e6465722c206e6f74207374616b65206d616e61676572206f722076616c696461746f7220636f6e7472616374496e76616c69642073656e6465722c206e6f742076616c696461746f72000000496e76616c69642073656e6465722c206e6f74207374616b65206d616e61676572a265627a7a72315820a8b60a07375e1ae5b19246d449ea17da038b46fdbc4a7f116e246ced08eed27a64736f6c63430005110032000000000000000000000000f486e3b6a432bdd6edaae85a565cd7682a7862bb
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102115760003560e01c8063a3b1d8cb11610125578063ca7d34b6116100ad578063f1382b531161007c578063f1382b5314610894578063f1980a50146108cc578063f2fde38b146108ef578063f92ec5af14610915578063fb77c94e1461094157610211565b8063ca7d34b614610773578063e12ab1af14610790578063eae3f749146107b9578063ebde9f931461087757610211565b8063b6fa74c4116100f4578063b6fa74c4146105f9578063b7721d2d1461061c578063b80fbce51461064e578063c69d057314610712578063c98cc0021461074a57610211565b8063a3b1d8cb14610549578063a449d7951461056c578063ae2e26b114610598578063b685b26a146105d057610211565b8063605be9be116101a85780637f88a957116101775780637f88a9571461049e57806381dc101b146104d05780638da5cb5b146105025780638f32d59b1461050a578063a0e300a61461052657610211565b8063605be9be14610403578063715018a61461043557806378daaf691461043d5780637b1039991461049657610211565b80634b6b87ce116101e45780634b6b87ce1461036b578063532e19a9146103855780635616a7cc146103a25780635e04d483146103cb57610211565b80630934a6df14610216578063122b648114610241578063178d46aa1461026d57806333a8383c146102a6575b600080fd5b61023f6004803603606081101561022c57600080fd5b5080359060208101359060400135610964565b005b61023f6004803603604081101561025757600080fd5b506001600160a01b038135169060200135610a4d565b61028a6004803603602081101561028357600080fd5b5035610b3c565b604080516001600160a01b039092168252519081900360200190f35b61023f600480360360c08110156102bc57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156102e657600080fd5b8201836020820111156102f857600080fd5b803590602001918460018302840111600160201b8311171561031957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505082359350505060208101359060408101359060600135610c2d565b610373610df2565b60408051918252519081900360200190f35b61023f6004803603602081101561039b57600080fd5b5035610ed6565b61023f600480360360608110156103b857600080fd5b50803590602081013590604001356110a5565b61023f600480360360808110156103e157600080fd5b506001600160a01b038135169060208101359060408101359060600135611199565b61023f6004803603606081101561041957600080fd5b508035906001600160a01b0360208201351690604001356112cf565b61023f61145a565b61045a6004803603602081101561045357600080fd5b50356114b5565b6040805196875260208701959095528585019390935260608501919091526001600160a01b0316608084015260a0830152519081900360c00190f35b61028a61167e565b61023f600480360360608110156104b457600080fd5b508035906001600160a01b03602082013516906040013561168d565b61023f600480360360608110156104e657600080fd5b50803590602081013590604001356001600160a01b0316611810565b61028a611902565b610512611911565b604080519115158252519081900360200190f35b61023f6004803603604081101561053c57600080fd5b5080359060200135611922565b61023f6004803603604081101561055f57600080fd5b5080359060200135611a16565b61023f6004803603604081101561058257600080fd5b506001600160a01b038135169060200135611b0a565b61023f600480360360808110156105ae57600080fd5b506001600160a01b038135169060208101359060408101359060600135611bf9565b61023f600480360360608110156105e657600080fd5b5080359060208101359060400135611cfe565b61023f6004803603604081101561060f57600080fd5b5080359060200135611de7565b61023f6004803603606081101561063257600080fd5b508035906001600160a01b036020820135169060400135611edb565b61023f6004803603608081101561066457600080fd5b8135916001600160a01b03602082013581169260408301359091169190810190608081016060820135600160201b81111561069e57600080fd5b8201836020820111156106b057600080fd5b803590602001918460018302840111600160201b831117156106d157600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061205e945050505050565b61023f6004803603608081101561072857600080fd5b508035906001600160a01b036020820135169060408101359060600135612202565b61023f6004803603606081101561076057600080fd5b5080359060208101359060400135612391565b6103736004803603602081101561078957600080fd5b503561250b565b61023f600480360360608110156107a657600080fd5b508035906020810135906040013561268b565b61023f600480360360408110156107cf57600080fd5b810190602081018135600160201b8111156107e957600080fd5b8201836020820111156107fb57600080fd5b803590602001918460208302840111600160201b8311171561081c57600080fd5b919390929091602081019035600160201b81111561083957600080fd5b82018360208201111561084b57600080fd5b803590602001918460208302840111600160201b8311171561086c57600080fd5b509092509050612774565b6103736004803603602081101561088d57600080fd5b5035612827565b61023f600480360360808110156108aa57600080fd5b508035906001600160a01b036020820135169060408101359060600135612839565b61023f600480360360408110156108e257600080fd5b50803590602001356129c8565b61023f6004803603602081101561090557600080fd5b50356001600160a01b0316612abc565b61023f6004803603604081101561092b57600080fd5b50803590602001356001600160a01b0316612ad9565b61023f6004803603604081101561095757600080fd5b5080359060200135612bc8565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b1580156109a857600080fd5b505afa1580156109bc573d6000803e3d6000fd5b505050506040513d60208110156109d257600080fd5b50516001600160a01b031614610a195760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b8082847f683d0f47c7fa11331f4e9563b3f5a7fdc3d3c5b75c600357a91d991f5a13a43760405160405180910390a4505050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015610a9157600080fd5b505afa158015610aa5573d6000803e3d6000fd5b505050506040513d6020811015610abb57600080fd5b50516001600160a01b031614610b025760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b60405181906001600160a01b038416907ff40b9ca28516abde647ef8ed0e7b155e16347eb4d8dd6eb29989ed2c0c3d27e890600090a35050565b60025460408051630a1ef8f960e21b815290516000926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015610b8157600080fd5b505afa158015610b95573d6000803e3d6000fd5b505050506040513d6020811015610bab57600080fd5b505160408051630d6a8b9160e21b81526004810185905290516001600160a01b03909216916335aa2e449160248082019261010092909190829003018186803b158015610bf757600080fd5b505afa158015610c0b573d6000803e3d6000fd5b505050506040513d610100811015610c2257600080fd5b5060c0015192915050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015610c7157600080fd5b505afa158015610c85573d6000803e3d6000fd5b505050506040513d6020811015610c9b57600080fd5b50516001600160a01b031614610ce25760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b600084815260016020819052604090912054610d039163ffffffff612cae16565b60016000868152602001908152602001600020819055508284876001600160a01b03167f68c13e4125b983d7e2d6114246f443e567ec6c4ee5b4d4a7ef6100b1402bfd84600160008981526020019081526020016000205486868b6040518085815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610dad578181015183820152602001610d95565b50505050905090810190601f168015610dda5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a4505050505050565b60025460408051630a1ef8f960e21b815290516000926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015610e3757600080fd5b505afa158015610e4b573d6000803e3d6000fd5b505050506040513d6020811015610e6157600080fd5b50516040805163017c2b9160e41b815290516001600160a01b03909216916317c2b91091600480820192602092909190829003018186803b158015610ea557600080fd5b505afa158015610eb9573d6000803e3d6000fd5b505050506040513d6020811015610ecf57600080fd5b5051919050565b80600080600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2857600080fd5b505afa158015610f3c573d6000803e3d6000fd5b505050506040513d6020811015610f5257600080fd5b505160408051630d6a8b9160e21b81526004810186905290519192506001600160a01b038316916335aa2e449160248082019261010092909190829003018186803b158015610fa057600080fd5b505afa158015610fb4573d6000803e3d6000fd5b505050506040513d610100811015610fcb57600080fd5b5060c0015191506001600160a01b038216331480610ff157506001600160a01b03811633145b61102c5760405162461bcd60e51b8152600401808060200182810382526037815260200180612d5a6037913960400191505060405180910390fd5b60008481526001602081905260409091205461104d9163ffffffff612cae16565b6000858152600160205260409020556110658461250b565b600085815260016020526040808220549051909187917f35af9eea1f0e7b300b0a14fae90139a072470e44daa3f14b5069bebbc1265bda9190a450505050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b1580156110e957600080fd5b505afa1580156110fd573d6000803e3d6000fd5b505050506040513d602081101561111357600080fd5b50516001600160a01b03161461115a5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b6040805183815260208101839052815185927f09b24121f82c610c13909ec63bd0843468819a45f6eda5838c3a80568c2046a8928290030190a2505050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b1580156111dd57600080fd5b505afa1580156111f1573d6000803e3d6000fd5b505050506040513d602081101561120757600080fd5b50516001600160a01b03161461124e5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b60008381526001602081905260409091205461126f9163ffffffff612cae16565b600084815260016020908152604091829020839055815192835282018490528051839286926001600160a01b038916927f69b288bb79cd5386c9fe0af060f650e823bcdfa96a44cdc07f862db060f571209281900390910190a450505050565b826000600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b15801561132057600080fd5b505afa158015611334573d6000803e3d6000fd5b505050506040513d602081101561134a57600080fd5b505160408051630d6a8b9160e21b81526004810185905290516001600160a01b03909216916335aa2e449160248082019261010092909190829003018186803b15801561139657600080fd5b505afa1580156113aa573d6000803e3d6000fd5b505050506040513d6101008110156113c157600080fd5b5060c0015190506001600160a01b0381163314611413576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d91833981519152604482015290519081900360640190fd5b6040805184815290516001600160a01b0386169187917f770c7c7d8e20347e5080e2ac70e8519793bedaff621f044396fd8d6d052c4aa89181900360200190a35050505050565b611462611911565b61146b57600080fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000806000806000806000600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b15801561150e57600080fd5b505afa158015611522573d6000803e3d6000fd5b505050506040513d602081101561153857600080fd5b505160408051630d6a8b9160e21b8152600481018b9052905191925060009182916001600160a01b038516916335aa2e449160248082019261010092909190829003018186803b15801561158b57600080fd5b505afa15801561159f573d6000803e3d6000fd5b505050506040513d6101008110156115b657600080fd5b50805160208201516040830151606084015160a085015160c086015160e090960151949e50929c50909a509850965090925090508060038111156115f657fe5b93506001600160a01b0382161561167257816001600160a01b0316635d1e36166040518163ffffffff1660e01b815260040160206040518083038186803b15801561164057600080fd5b505afa158015611654573d6000803e3d6000fd5b505050506040513d602081101561166a57600080fd5b505197909701965b50505091939550919395565b6002546001600160a01b031681565b826000600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b1580156116de57600080fd5b505afa1580156116f2573d6000803e3d6000fd5b505050506040513d602081101561170857600080fd5b505160408051630d6a8b9160e21b81526004810185905290516001600160a01b03909216916335aa2e449160248082019261010092909190829003018186803b15801561175457600080fd5b505afa158015611768573d6000803e3d6000fd5b505050506040513d61010081101561177f57600080fd5b5060c0015190506001600160a01b03811633146117d1576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d91833981519152604482015290519081900360640190fd5b82846001600160a01b0316867f0f9ccdda16b467e719059c85ebd8383fcb7f8ffa5576629fe3b842836e04dad160405160405180910390a45050505050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b15801561185457600080fd5b505afa158015611868573d6000803e3d6000fd5b505050506040513d602081101561187e57600080fd5b50516001600160a01b0316146118c55760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b806001600160a01b031682847ff6566d8fbe8f23227826ba3da2ecc1ec48698c5be051a829965e3358fd5b965860405160405180910390a4505050565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b15801561196657600080fd5b505afa15801561197a573d6000803e3d6000fd5b505050506040513d602081101561199057600080fd5b50516001600160a01b0316146119d75760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b604080518381526020810183905281517f9444bfcfa6aed72a15da73de1220dcc07d7864119c44abfec0037bbcacefda98929181900390910190a15050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015611a5a57600080fd5b505afa158015611a6e573d6000803e3d6000fd5b505050506040513d6020811015611a8457600080fd5b50516001600160a01b031614611acb5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b604080518381526020810183905281517f4a501a9c4d5cce5c32415945bbc8973764f31b844e3e8fd4c15f51f315ac8792929181900390910190a15050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015611b4e57600080fd5b505afa158015611b62573d6000803e3d6000fd5b505050506040513d6020811015611b7857600080fd5b50516001600160a01b031614611bbf5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b60405181906001600160a01b038416907f2c3bb5458e3dd671c31974c4ca8e8ebc2cdd892ae8602374d9a6f789b00c6b9490600090a35050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015611c3d57600080fd5b505afa158015611c51573d6000803e3d6000fd5b505050506040513d6020811015611c6757600080fd5b50516001600160a01b031614611cae5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b82846001600160a01b03167f204fccf0d92ed8d48f204adb39b2e81e92bad0dedb93f5716ca9478cfb57de008484604051808381526020018281526020019250505060405180910390a350505050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015611d4257600080fd5b505afa158015611d56573d6000803e3d6000fd5b505050506040513d6020811015611d6c57600080fd5b50516001600160a01b031614611db35760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b8082847f41e5e4590cfcde2f03ee9281c54d03acad8adffb83f8310d66b894532470ba3560405160405180910390a4505050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015611e2b57600080fd5b505afa158015611e3f573d6000803e3d6000fd5b505050506040513d6020811015611e5557600080fd5b50516001600160a01b031614611e9c5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b604080518381526020810183905281517ff67f33e8589d3ea0356303c0f9a8e764873692159f777ff79e4fc523d389dfcd929181900390910190a15050565b826000600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b158015611f2c57600080fd5b505afa158015611f40573d6000803e3d6000fd5b505050506040513d6020811015611f5657600080fd5b505160408051630d6a8b9160e21b81526004810185905290516001600160a01b03909216916335aa2e449160248082019261010092909190829003018186803b158015611fa257600080fd5b505afa158015611fb6573d6000803e3d6000fd5b505050506040513d610100811015611fcd57600080fd5b5060c0015190506001600160a01b038116331461201f576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d91833981519152604482015290519081900360640190fd5b82846001600160a01b0316867f31d1715032654fde9867c0f095aecce1113049e30b9f4ecbaa6954ed6c63b8df60405160405180910390a45050505050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b1580156120a257600080fd5b505afa1580156120b6573d6000803e3d6000fd5b505050506040513d60208110156120cc57600080fd5b50516001600160a01b0316146121135760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b6000848152600160208190526040909120546121349163ffffffff612cae16565b6000858152600160209081526040808320849055805184815280830182815286519282019290925285516001600160a01b0380891696908a16958b957f086044c0612a8c965d4cccd907f0d588e40ad68438bd4c1274cac60f4c3a9d1f9592948a949093926060850192860191908190849084905b838110156121c15781810151838201526020016121a9565b50505050905090810190601f1680156121ee5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a450505050565b836000600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b15801561225357600080fd5b505afa158015612267573d6000803e3d6000fd5b505050506040513d602081101561227d57600080fd5b505160408051630d6a8b9160e21b81526004810185905290516001600160a01b03909216916335aa2e449160248082019261010092909190829003018186803b1580156122c957600080fd5b505afa1580156122dd573d6000803e3d6000fd5b505050506040513d6101008110156122f457600080fd5b5060c0015190506001600160a01b0381163314612346576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d91833981519152604482015290519081900360640190fd5b83856001600160a01b0316877fc9afff0972d33d68c8d330fe0ebd0e9f54491ad8c59ae17330a9206f280f0865866040518082815260200191505060405180910390a4505050505050565b826000600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b1580156123e257600080fd5b505afa1580156123f6573d6000803e3d6000fd5b505050506040513d602081101561240c57600080fd5b505160408051630d6a8b9160e21b81526004810185905290516001600160a01b03909216916335aa2e449160248082019261010092909190829003018186803b15801561245857600080fd5b505afa15801561246c573d6000803e3d6000fd5b505050506040513d61010081101561248357600080fd5b5060c0015190506001600160a01b03811633146124d5576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d91833981519152604482015290519081900360640190fd5b8284867f7d5da5ece9d43013d62ab966f4704ca376b92be29ca6fbb958154baf1c0dc17e60405160405180910390a45050505050565b600080600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b15801561255c57600080fd5b505afa158015612570573d6000803e3d6000fd5b505050506040513d602081101561258657600080fd5b505160408051630d6a8b9160e21b81526004810186905290516001600160a01b03909216916335aa2e449160248082019261010092909190829003018186803b1580156125d257600080fd5b505afa1580156125e6573d6000803e3d6000fd5b505050506040513d6101008110156125fd57600080fd5b50805160c09091015190925090506001600160a01b0381161561268557806001600160a01b0316633a09bf446040518163ffffffff1660e01b815260040160206040518083038186803b15801561265357600080fd5b505afa158015612667573d6000803e3d6000fd5b505050506040513d602081101561267d57600080fd5b505191909101905b50919050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b1580156126cf57600080fd5b505afa1580156126e3573d6000803e3d6000fd5b505050506040513d60208110156126f957600080fd5b50516001600160a01b0316146127405760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b8082847f1002381ecf76700f6f0ab4c90b9f523e39df7b0482b71ec63cf62cf85412047060405160405180910390a4505050565b61277c611911565b61278557600080fd5b8281146127d0576040805162461bcd60e51b81526020600482015260146024820152730c2e4cee640d8cadccee8d040dad2e6dac2e8c6d60631b604482015290519081900360640190fd5b60005b83811015612820578282828181106127e757fe5b90506020020135600160008787858181106127fe57fe5b60209081029290920135835250810191909152604001600020556001016127d3565b5050505050565b60016020526000908152604090205481565b836000600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b15801561288a57600080fd5b505afa15801561289e573d6000803e3d6000fd5b505050506040513d60208110156128b457600080fd5b505160408051630d6a8b9160e21b81526004810185905290516001600160a01b03909216916335aa2e449160248082019261010092909190829003018186803b15801561290057600080fd5b505afa158015612914573d6000803e3d6000fd5b505050506040513d61010081101561292b57600080fd5b5060c0015190506001600160a01b038116331461297d576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d91833981519152604482015290519081900360640190fd5b83856001600160a01b0316877f7e86625aa6e668407f095af342e0cc237809c4c5086b4d665a0067de122980a9866040518082815260200191505060405180910390a4505050505050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015612a0c57600080fd5b505afa158015612a20573d6000803e3d6000fd5b505050506040513d6020811015612a3657600080fd5b50516001600160a01b031614612a7d5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b604080518381526020810183905281517f5d16a900896e1160c2033bc940e6b072d3dc3b6a996fefb9b3b9b9678841824c929181900390910190a15050565b612ac4611911565b612acd57600080fd5b612ad681612cc7565b50565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015612b1d57600080fd5b505afa158015612b31573d6000803e3d6000fd5b505050506040513d6020811015612b4757600080fd5b50516001600160a01b031614612b8e5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b6040516001600160a01b0382169083907fd3cb87a9c75a0d21336afc0f79f7e398f06748db5ce1815af01d315c7c135c0b90600090a35050565b60025460408051631ab0168360e31b8152905133926001600160a01b03169163d580b418916004808301926020929190829003018186803b158015612c0c57600080fd5b505afa158015612c20573d6000803e3d6000fd5b505050506040513d6020811015612c3657600080fd5b50516001600160a01b031614612c7d5760405162461bcd60e51b8152600401808060200182810382526024815260200180612d366024913960400191505060405180910390fd5b604051819083907f4f5f38ee30b01a960b4dfdcd520a3ca59c1a664a32dcfe5418ca79b0de6b723690600090a35050565b600082820183811015612cc057600080fd5b9392505050565b6001600160a01b038116612cda57600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b039290921691909117905556fe496e76616c69642073656e6465722c206e6f7420736c617368696e67206d616e61676572496e76616c69642073656e6465722c206e6f74207374616b65206d616e61676572206f722076616c696461746f7220636f6e7472616374496e76616c69642073656e6465722c206e6f742076616c696461746f72000000496e76616c69642073656e6465722c206e6f74207374616b65206d616e61676572a265627a7a72315820a8b60a07375e1ae5b19246d449ea17da038b46fdbc4a7f116e246ced08eed27a64736f6c63430005110032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f486e3b6a432bdd6edaae85a565cd7682a7862bb
-----Decoded View---------------
Arg [0] : _registry (address): 0xF486e3B6A432Bdd6EDaAe85a565CD7682A7862BB
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000f486e3b6a432bdd6edaae85a565cd7682a7862bb
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.