Contract Overview
Balance:
0 ETH
ETH Value:
$0.00
My Name Tag:
Not Available
Txn Hash | Method |
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0x671477c6586e26fc0db97012aa522a8cf70d6985744e994ce169afefd5b26757 | 0x60806040 | 6077255 | 100 days 11 hrs ago | 0xb5af4138f0f33be0d6414eb25271b9c2dc245fb5 | IN | Create: L2Migrator | 0 ETH | 0.028916657895 ETH |
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
L2Migrator
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol) pragma solidity ^0.8.0; /** * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for * deploying minimal proxy contracts, also known as "clones". * * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies * > a minimal bytecode implementation that delegates all calls to a known, fixed address. * * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2` * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the * deterministic method. * * _Available since v3.4._ */ library Clones { /** * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`. * * This function uses the create opcode, which should never revert. */ function clone(address implementation) internal returns (address instance) { assembly { let ptr := mload(0x40) mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000) mstore(add(ptr, 0x14), shl(0x60, implementation)) mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000) instance := create(0, ptr, 0x37) } require(instance != address(0), "ERC1167: create failed"); } /** * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`. * * This function uses the create2 opcode and a `salt` to deterministically deploy * the clone. Using the same `implementation` and `salt` multiple time will revert, since * the clones cannot be deployed twice at the same address. */ function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) { assembly { let ptr := mload(0x40) mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000) mstore(add(ptr, 0x14), shl(0x60, implementation)) mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000) instance := create2(0, ptr, 0x37, salt) } require(instance != address(0), "ERC1167: create2 failed"); } /** * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}. */ function predictDeterministicAddress( address implementation, bytes32 salt, address deployer ) internal pure returns (address predicted) { assembly { let ptr := mload(0x40) mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000) mstore(add(ptr, 0x14), shl(0x60, implementation)) mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000) mstore(add(ptr, 0x38), shl(0x60, deployer)) mstore(add(ptr, 0x4c), salt) mstore(add(ptr, 0x6c), keccak256(ptr, 0x37)) predicted := keccak256(add(ptr, 0x37), 0x55) } } /** * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}. */ function predictDeterministicAddress(address implementation, bytes32 salt) internal view returns (address predicted) { return predictDeterministicAddress(implementation, salt, address(this)); } }
//SPDX-License-Identifier: MIT pragma solidity 0.8.9; import {IArbSys} from "../../arbitrum/IArbSys.sol"; abstract contract L2ArbitrumMessenger { event TxToL1( address indexed _from, address indexed _to, uint256 indexed _id, bytes _data ); function sendTxToL1( address user, address to, bytes memory data ) internal returns (uint256) { // note: this method doesn't support sending ether to L1 together with a call uint256 id = IArbSys(address(100)).sendTxToL1(to, data); emit TxToL1(user, to, id, data); return id; } modifier onlyL1Counterpart(address l1Counterpart) { require( msg.sender == applyL1ToL2Alias(l1Counterpart), "ONLY_COUNTERPART_GATEWAY" ); _; } uint160 internal constant OFFSET = uint160(0x1111000000000000000000000000000000001111); // l1 addresses are transformed durng l1->l2 calls function applyL1ToL2Alias(address l1Address) internal pure returns (address l2Address) { l2Address = address(uint160(l1Address) + OFFSET); } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.9; import {L2ArbitrumMessenger} from "./L2ArbitrumMessenger.sol"; import {IMigrator} from "../../interfaces/IMigrator.sol"; import "../../proxy/ManagerProxyTarget.sol"; import "@openzeppelin/contracts/proxy/Clones.sol"; interface IBondingManager { function bondForWithHint( uint256 _amount, address _owner, address _to, address _oldDelegateNewPosPrev, address _oldDelegateNewPosNext, address _newDelegateNewPosPrev, address _newDelegateNewPosNext ) external; } interface ITicketBroker { function fundDepositAndReserveFor( address _addr, uint256 _depositAmount, uint256 _reserveAmount ) external payable; } interface IMerkleSnapshot { function verify( bytes32 _id, bytes32[] memory _proof, bytes32 _leaf ) external view returns (bool); } interface IDelegatorPool { function initialize(address _bondingManager) external; function claim(address _addr, uint256 _stake) external; } interface ApproveLike { function approve(address _addr, uint256 _amount) external; } contract L2Migrator is ManagerProxyTarget, L2ArbitrumMessenger, IMigrator { address public bondingManagerAddr; address public ticketBrokerAddr; address public merkleSnapshotAddr; address public tokenAddr; address public l1MigratorAddr; address public delegatorPoolImpl; bool public claimStakeEnabled; mapping(address => bool) public migratedDelegators; mapping(address => address) public delegatorPools; mapping(address => uint256) public claimedDelegatedStake; mapping(address => mapping(uint256 => bool)) public migratedUnbondingLocks; mapping(address => bool) public migratedSenders; event L1MigratorUpdate(address _l1MigratorAddr); event ControllerContractUpdate(bytes32 id, address addr); event MigrateDelegatorFinalized(MigrateDelegatorParams params); event MigrateUnbondingLocksFinalized(MigrateUnbondingLocksParams params); event MigrateSenderFinalized(MigrateSenderParams params); event DelegatorPoolImplUpdate(address _delegatorPoolImpl); event DelegatorPoolCreated(address indexed l1Addr, address delegatorPool); event ClaimStakeEnabled(bool _enabled); event StakeClaimed( address indexed delegator, address delegate, uint256 stake, uint256 fees ); /** * @notice L2Migrator constructor. Only invokes constructor of base Manager contract with provided Controller address * @dev This constructor will not initialize any state variables besides `controller`. * - initialize() function must be called on a proxy that uses this implementation contract immediately after deployment * @param _controller Address of Controller that this contract will be registered with */ constructor(address _controller) Manager(_controller) {} function initialize(address _l1MigratorAddr, address _delegatorPoolImpl) external onlyControllerOwner { l1MigratorAddr = _l1MigratorAddr; delegatorPoolImpl = _delegatorPoolImpl; syncControllerContracts(); } /** * @notice Sets L1Migrator * @param _l1MigratorAddr L1Migrator address */ function setL1Migrator(address _l1MigratorAddr) external onlyControllerOwner { l1MigratorAddr = _l1MigratorAddr; emit L1MigratorUpdate(_l1MigratorAddr); } /** * @notice Sets DelegatorPool implementation contract * @param _delegatorPoolImpl DelegatorPool implementation contract */ function setDelegatorPoolImpl(address _delegatorPoolImpl) external onlyControllerOwner { delegatorPoolImpl = _delegatorPoolImpl; emit DelegatorPoolImplUpdate(_delegatorPoolImpl); } /** * @notice Enable/disable claimStake() * @param _enabled True/false indicating claimStake() enabled/disabled */ function setClaimStakeEnabled(bool _enabled) external onlyControllerOwner { claimStakeEnabled = _enabled; emit ClaimStakeEnabled(_enabled); } /** * @notice Called by L1Migrator to complete transcoder/delegator state migration * @param _params L1 state relevant for migration */ function finalizeMigrateDelegator(MigrateDelegatorParams calldata _params) external onlyL1Counterpart(l1MigratorAddr) { require( !migratedDelegators[_params.l1Addr], "DELEGATOR_ALREADY_MIGRATED" ); migratedDelegators[_params.l1Addr] = true; if (_params.l1Addr == _params.delegate) { // l1Addr is an orchestrator on L1: // 1. Stake _params.stake on behalf of _params.l2Addr // 2. Create delegator pool // 3. Stake non-self delegated stake on behalf of the delegator pool bondFor(_params.stake, _params.l2Addr, _params.l2Addr); // _params.delegatedStake includes _params.stake which is the orchestrator's self-stake // Subtract _params.stake to get the orchestrator's non-self delegated stake uint256 nonSelfDelegatedStake = _params.delegatedStake - _params.stake; uint256 unclaimedNonSelfDelegatedStake = nonSelfDelegatedStake - claimedDelegatedStake[_params.l1Addr]; if (unclaimedNonSelfDelegatedStake > 0) { address poolAddr = Clones.clone(delegatorPoolImpl); delegatorPools[_params.l1Addr] = poolAddr; bondFor( unclaimedNonSelfDelegatedStake, poolAddr, _params.l2Addr ); IDelegatorPool(poolAddr).initialize(bondingManagerAddr); emit DelegatorPoolCreated(_params.l1Addr, poolAddr); } } else { // l1Addr is a delegator on L1: // If a delegator pool exists for _params.delegate claim stake which // was already migrated by delegate on behalf of _params.l2Addr. // Otherwise, stake _params.stake on behalf of _params.l2Addr. address pool = delegatorPools[_params.delegate]; if (pool != address(0)) { // Claim stake that is held by the delegator pool IDelegatorPool(pool).claim(_params.l2Addr, _params.stake); } else { bondFor(_params.stake, _params.l2Addr, _params.delegate); } } claimedDelegatedStake[_params.delegate] += _params.stake; // Use .call() since l2Addr could be a contract that needs more gas than // the stipend provided by .transfer() // The .call() is safe without a re-entrancy guard because this function cannot be re-entered // by _params.l2Addr since the function can only be called by the L1Migrator via a cross-chain retryable ticket if (_params.fees > 0) { (bool ok, ) = _params.l2Addr.call{value: _params.fees}(""); require(ok, "FINALIZE_DELEGATOR:FAIL_FEE"); } emit MigrateDelegatorFinalized(_params); } /** * @notice Called by L1Migrator to complete unbonding locks migration * @param _params L1 state relevant for migration */ function finalizeMigrateUnbondingLocks( MigrateUnbondingLocksParams calldata _params ) external onlyL1Counterpart(l1MigratorAddr) { uint256 unbondingLockIdsLen = _params.unbondingLockIds.length; for (uint256 i; i < unbondingLockIdsLen; i++) { uint256 id = _params.unbondingLockIds[i]; require( !migratedUnbondingLocks[_params.l1Addr][id], "UNBONDING_LOCK_ALREADY_MIGRATED" ); migratedUnbondingLocks[_params.l1Addr][id] = true; } bondFor(_params.total, _params.l2Addr, _params.delegate); emit MigrateUnbondingLocksFinalized(_params); } /** * @notice Called by L1Migrator to complete sender deposit/reserve migration * @param _params L1 state relevant for migration */ function finalizeMigrateSender(MigrateSenderParams calldata _params) external onlyL1Counterpart(l1MigratorAddr) { require(!migratedSenders[_params.l1Addr], "SENDER_ALREADY_MIGRATED"); migratedSenders[_params.l1Addr] = true; // msg.value for this call must be equal to deposit + reserve amounts ITicketBroker(ticketBrokerAddr).fundDepositAndReserveFor{ value: _params.deposit + _params.reserve }(_params.l2Addr, _params.deposit, _params.reserve); emit MigrateSenderFinalized(_params); } receive() external payable {} /** * @notice Completes delegator migration using a Merkle proof that a delegator's state was included in a state * snapshot represented by a Merkle tree root * @dev Assume that only EOAs are included in the snapshot * Regardless of the caller of this function, the EOA from L1 will be able to access its stake on L2 * @param _delegate Address that is migrating * @param _stake Stake of delegator on L1 * @param _fees Fees of delegator on L1 * @param _proof Merkle proof of inclusion in Merkle tree state snapshot * @param _newDelegate Optional address of a new delegate on L2 */ function claimStake( address _delegate, uint256 _stake, uint256 _fees, bytes32[] calldata _proof, address _newDelegate ) external { require(claimStakeEnabled, "CLAIM_STAKE_DISABLED"); address delegator = msg.sender; require(!migratedDelegators[delegator], "CLAIM_STAKE:ALREADY_MIGRATED"); IMerkleSnapshot merkleSnapshot = IMerkleSnapshot(merkleSnapshotAddr); bytes32 leaf = keccak256( abi.encodePacked(delegator, _delegate, _stake, _fees) ); require( merkleSnapshot.verify(keccak256("LIP-73"), _proof, leaf), "CLAIM_STAKE:INVALID_PROOF" ); migratedDelegators[delegator] = true; if (_delegate != address(0)) { claimedDelegatedStake[_delegate] += _stake; address pool = delegatorPools[_delegate]; address delegate = _delegate; if (_newDelegate != address(0)) { delegate = _newDelegate; } if (pool != address(0)) { // Claim stake that is held by the delegator pool IDelegatorPool(pool).claim(delegator, _stake); } else { bondFor(_stake, delegator, delegate); } } // Only EOAs are included in the snapshot so we do not need to worry about // the insufficeint gas stipend with transfer() if (_fees > 0) { payable(delegator).transfer(_fees); } emit StakeClaimed(delegator, _delegate, _stake, _fees); } function bondFor( uint256 _amount, address _owner, address _to ) private { IBondingManager bondingManager = IBondingManager(bondingManagerAddr); ApproveLike(tokenAddr).approve(address(bondingManager), _amount); bondingManager.bondForWithHint( _amount, _owner, _to, address(0), address(0), address(0), address(0) ); } /** * @notice Fetches addresses and sets bondingManagerAddr, ticketBrokerAddr, merkleSnapshotAddr * if they are different from the stored addresses */ function syncControllerContracts() public { // Check and update BondingManager address bytes32 bondingManagerId = keccak256("BondingManager"); address _bondingManagerAddr = controller.getContract(bondingManagerId); if (_bondingManagerAddr != bondingManagerAddr) { bondingManagerAddr = _bondingManagerAddr; emit ControllerContractUpdate( bondingManagerId, _bondingManagerAddr ); } // Check and update TicketBroker address bytes32 ticketBrokerId = keccak256("TicketBroker"); address _ticketBrokerAddr = controller.getContract(ticketBrokerId); if (_ticketBrokerAddr != ticketBrokerAddr) { ticketBrokerAddr = _ticketBrokerAddr; emit ControllerContractUpdate(ticketBrokerId, _ticketBrokerAddr); } // Check and update MerkleSnapshot address bytes32 merkleSnapshotId = keccak256("MerkleSnapshot"); address _merkleSnapshotAddr = controller.getContract(merkleSnapshotId); if (_merkleSnapshotAddr != merkleSnapshotAddr) { merkleSnapshotAddr = _merkleSnapshotAddr; emit ControllerContractUpdate( merkleSnapshotId, _merkleSnapshotAddr ); } // Check and update LivepeerToken address bytes32 tokenId = keccak256("LivepeerToken"); address _tokenAddr = controller.getContract(tokenId); if (_tokenAddr != tokenAddr) { tokenAddr = _tokenAddr; emit ControllerContractUpdate(tokenId, _tokenAddr); } } }
// SPDX-License-Identifier: Apache-2.0 /* * Copyright 2021, Offchain Labs, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ pragma solidity 0.8.9; /** * @title Precompiled contract that exists in every Arbitrum chain at address(100), 0x0000000000000000000000000000000000000064. Exposes a variety of system-level functionality. */ interface IArbSys { /** * @notice Get internal version number identifying an ArbOS build * @return version number as int */ function arbOSVersion() external pure returns (uint256); function arbChainID() external view returns (uint256); /** * @notice Get Arbitrum block number (distinct from L1 block number; Arbitrum genesis block has block number 0) * @return block number as int */ function arbBlockNumber() external view returns (uint256); /** * @notice Send given amount of Eth to dest from sender. * This is a convenience function, which is equivalent to calling sendTxToL1 with empty calldataForL1. * @param destination recipient address on L1 * @return unique identifier for this L2-to-L1 transaction. */ function withdrawEth(address destination) external payable returns (uint256); /** * @notice Send a transaction to L1 * @param destination recipient address on L1 * @param calldataForL1 (optional) calldata for L1 contract call * @return a unique identifier for this L2-to-L1 transaction. */ function sendTxToL1(address destination, bytes calldata calldataForL1) external payable returns (uint256); /** * @notice get the number of transactions issued by the given external account or the account sequence number of the given contract * @param account target account * @return the number of transactions issued by the given external account or the account sequence number of the given contract */ function getTransactionCount(address account) external view returns (uint256); /** * @notice get the value of target L2 storage slot * This function is only callable from address 0 to prevent contracts from being able to call it * @param account target account * @param index target index of storage slot * @return stotage value for the given account at the given index */ function getStorageAt(address account, uint256 index) external view returns (uint256); /** * @notice check if current call is coming from l1 * @return true if the caller of this was called directly from L1 */ function isTopLevelCall() external view returns (bool); event EthWithdrawal(address indexed destAddr, uint256 amount); event L2ToL1Transaction( address caller, address indexed destination, uint256 indexed uniqueId, uint256 indexed batchNumber, uint256 indexInBatch, uint256 arbBlockNum, uint256 ethBlockNum, uint256 timestamp, uint256 callvalue, bytes data ); }
// SPDX-License-Identifier: MIT pragma solidity 0.8.9; interface IMigrator { struct MigrateDelegatorParams { // Address that is migrating from L1 address l1Addr; // Address to use on L2 // If null, l1Addr is used on L2 address l2Addr; // Stake of l1Addr on L1 uint256 stake; // Delegated stake of l1Addr on L1 uint256 delegatedStake; // Fees of l1Addr on L1 uint256 fees; // Delegate of l1Addr on L1 address delegate; } struct MigrateUnbondingLocksParams { // Address that is migrating from L1 address l1Addr; // Address to use on L2 // If null, l1Addr is used on L2 address l2Addr; // Total tokens in unbonding locks uint256 total; // IDs of unbonding locks being migrated uint256[] unbondingLockIds; // Delegate of l1Addr on L1 address delegate; } struct MigrateSenderParams { // Address that is migrating from L1 address l1Addr; // Address to use on L2 // If null, l1Addr is used on L2 address l2Addr; // Deposit of l1Addr on L1 uint256 deposit; // Reserve of l1Addr on L1 uint256 reserve; } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.9; interface IController { function owner() external view returns (address); function paused() external view returns (bool); function getContract(bytes32 _id) external view returns (address); }
// SPDX-License-Identifier: MIT pragma solidity 0.8.9; interface IManager { event SetController(address controller); function setController(address _controller) external; }
// SPDX-License-Identifier: MIT pragma solidity 0.8.9; import {IManager} from "./IManager.sol"; import {IController} from "./IController.sol"; // Copy of https://github.com/livepeer/protocol/blob/confluence/contracts/Manager.sol // Tests at https://github.com/livepeer/protocol/blob/confluence/test/unit/ManagerProxy.js contract Manager is IManager { // Controller that contract is registered with IController public controller; // Check if sender is controller modifier onlyController() { _onlyController(); _; } // Check if sender is controller owner modifier onlyControllerOwner() { _onlyControllerOwner(); _; } // Check if controller is not paused modifier whenSystemNotPaused() { _whenSystemNotPaused(); _; } // Check if controller is paused modifier whenSystemPaused() { _whenSystemPaused(); _; } constructor(address _controller) { controller = IController(_controller); } /** * @notice Set controller. Only callable by current controller * @param _controller Controller contract address */ function setController(address _controller) external onlyController { controller = IController(_controller); emit SetController(_controller); } function _onlyController() private view { require(msg.sender == address(controller), "caller must be Controller"); } function _onlyControllerOwner() private view { require( msg.sender == controller.owner(), "caller must be Controller owner" ); } function _whenSystemNotPaused() private view { require(!controller.paused(), "system is paused"); } function _whenSystemPaused() private view { require(controller.paused(), "system is not paused"); } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.9; import "./Manager.sol"; /** * @title ManagerProxyTarget * @notice The base contract that target contracts used by a proxy contract should inherit from * @dev Both the target contract and the proxy contract (implemented as ManagerProxy) MUST inherit from ManagerProxyTarget in order to guarantee that both contracts have the same storage layout. Differing storage layouts in a proxy contract and target contract can potentially break the delegate proxy upgradeability mechanism */ abstract contract ManagerProxyTarget is Manager { // Used to look up target contract address in controller's registry bytes32 public targetContractId; }
{ "evmVersion": "london", "libraries": {}, "metadata": { "bytecodeHash": "ipfs", "useLiteralContent": true }, "optimizer": { "enabled": false, "runs": 200 }, "remappings": [], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
[{"inputs":[{"internalType":"address","name":"_controller","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_enabled","type":"bool"}],"name":"ClaimStakeEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":false,"internalType":"address","name":"addr","type":"address"}],"name":"ControllerContractUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"l1Addr","type":"address"},{"indexed":false,"internalType":"address","name":"delegatorPool","type":"address"}],"name":"DelegatorPoolCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_delegatorPoolImpl","type":"address"}],"name":"DelegatorPoolImplUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_l1MigratorAddr","type":"address"}],"name":"L1MigratorUpdate","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"l1Addr","type":"address"},{"internalType":"address","name":"l2Addr","type":"address"},{"internalType":"uint256","name":"stake","type":"uint256"},{"internalType":"uint256","name":"delegatedStake","type":"uint256"},{"internalType":"uint256","name":"fees","type":"uint256"},{"internalType":"address","name":"delegate","type":"address"}],"indexed":false,"internalType":"struct IMigrator.MigrateDelegatorParams","name":"params","type":"tuple"}],"name":"MigrateDelegatorFinalized","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"l1Addr","type":"address"},{"internalType":"address","name":"l2Addr","type":"address"},{"internalType":"uint256","name":"deposit","type":"uint256"},{"internalType":"uint256","name":"reserve","type":"uint256"}],"indexed":false,"internalType":"struct IMigrator.MigrateSenderParams","name":"params","type":"tuple"}],"name":"MigrateSenderFinalized","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"l1Addr","type":"address"},{"internalType":"address","name":"l2Addr","type":"address"},{"internalType":"uint256","name":"total","type":"uint256"},{"internalType":"uint256[]","name":"unbondingLockIds","type":"uint256[]"},{"internalType":"address","name":"delegate","type":"address"}],"indexed":false,"internalType":"struct IMigrator.MigrateUnbondingLocksParams","name":"params","type":"tuple"}],"name":"MigrateUnbondingLocksFinalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"controller","type":"address"}],"name":"SetController","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":false,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"stake","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fees","type":"uint256"}],"name":"StakeClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_id","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"_data","type":"bytes"}],"name":"TxToL1","type":"event"},{"inputs":[],"name":"bondingManagerAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_delegate","type":"address"},{"internalType":"uint256","name":"_stake","type":"uint256"},{"internalType":"uint256","name":"_fees","type":"uint256"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"},{"internalType":"address","name":"_newDelegate","type":"address"}],"name":"claimStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimStakeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimedDelegatedStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"controller","outputs":[{"internalType":"contract IController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delegatorPoolImpl","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"delegatorPools","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"l1Addr","type":"address"},{"internalType":"address","name":"l2Addr","type":"address"},{"internalType":"uint256","name":"stake","type":"uint256"},{"internalType":"uint256","name":"delegatedStake","type":"uint256"},{"internalType":"uint256","name":"fees","type":"uint256"},{"internalType":"address","name":"delegate","type":"address"}],"internalType":"struct IMigrator.MigrateDelegatorParams","name":"_params","type":"tuple"}],"name":"finalizeMigrateDelegator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"l1Addr","type":"address"},{"internalType":"address","name":"l2Addr","type":"address"},{"internalType":"uint256","name":"deposit","type":"uint256"},{"internalType":"uint256","name":"reserve","type":"uint256"}],"internalType":"struct IMigrator.MigrateSenderParams","name":"_params","type":"tuple"}],"name":"finalizeMigrateSender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"l1Addr","type":"address"},{"internalType":"address","name":"l2Addr","type":"address"},{"internalType":"uint256","name":"total","type":"uint256"},{"internalType":"uint256[]","name":"unbondingLockIds","type":"uint256[]"},{"internalType":"address","name":"delegate","type":"address"}],"internalType":"struct IMigrator.MigrateUnbondingLocksParams","name":"_params","type":"tuple"}],"name":"finalizeMigrateUnbondingLocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_l1MigratorAddr","type":"address"},{"internalType":"address","name":"_delegatorPoolImpl","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"l1MigratorAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleSnapshotAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"migratedDelegators","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"migratedSenders","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"migratedUnbondingLocks","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setClaimStakeEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_controller","type":"address"}],"name":"setController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_delegatorPoolImpl","type":"address"}],"name":"setDelegatorPoolImpl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_l1MigratorAddr","type":"address"}],"name":"setL1Migrator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"syncControllerContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"targetContractId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ticketBrokerAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162003952380380620039528339818101604052810190620000379190620000ea565b80806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506200011c565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000b28262000085565b9050919050565b620000c481620000a5565b8114620000d057600080fd5b50565b600081519050620000e481620000b9565b92915050565b60006020828403121562000103576200010262000080565b5b60006200011384828501620000d3565b91505092915050565b613826806200012c6000396000f3fe60806040526004361061014f5760003560e01c80638a716fbb116100b6578063b76087361161006f578063b760873614610487578063cc14c988146104b0578063d0b1cba2146104d9578063d2f40c5a14610504578063e89320e514610541578063f77c47911461056c57610156565b80638a716fbb146103795780638f2c17ed146103b6578063923f475c146103e157806392eefe9b1461040a57806396f995a214610433578063b3f5ccae1461045e57610156565b8063485cc95511610108578063485cc955146102555780635118d8cf1461027e57806351720b41146102bb5780635cf207f8146102e65780635fbe4d1d1461031157806389bec3441461033c57610156565b80631a0725d81461015b57806324583d97146101845780633aceba5d146101ad5780633f1c49cc146101ea5780633f23f8de146102135780634413a2e71461022a57610156565b3661015657005b600080fd5b34801561016757600080fd5b50610182600480360381019061017d919061261f565b610597565b005b34801561019057600080fd5b506101ab60048036038101906101a691906126aa565b610cf8565b005b3480156101b957600080fd5b506101d460048036038101906101cf91906126aa565b610d7b565b6040516101e191906126f2565b60405180910390f35b3480156101f657600080fd5b50610211600480360381019061020c91906127a8565b610d9b565b005b34801561021f57600080fd5b506102286112a8565b005b34801561023657600080fd5b5061023f61193e565b60405161024c9190612851565b60405180910390f35b34801561026157600080fd5b5061027c6004803603810190610277919061286c565b611964565b005b34801561028a57600080fd5b506102a560048036038101906102a091906126aa565b6119fa565b6040516102b291906128bb565b60405180910390f35b3480156102c757600080fd5b506102d0611a12565b6040516102dd91906128ef565b60405180910390f35b3480156102f257600080fd5b506102fb611a18565b6040516103089190612851565b60405180910390f35b34801561031d57600080fd5b50610326611a3e565b6040516103339190612851565b60405180910390f35b34801561034857600080fd5b50610363600480360381019061035e919061290a565b611a64565b60405161037091906126f2565b60405180910390f35b34801561038557600080fd5b506103a0600480360381019061039b91906126aa565b611a93565b6040516103ad91906126f2565b60405180910390f35b3480156103c257600080fd5b506103cb611ab3565b6040516103d89190612851565b60405180910390f35b3480156103ed57600080fd5b5061040860048036038101906104039190612976565b611ad9565b005b34801561041657600080fd5b50610431600480360381019061042c91906126aa565b611b35565b005b34801561043f57600080fd5b50610448611bb7565b60405161045591906126f2565b60405180910390f35b34801561046a57600080fd5b50610485600480360381019061048091906129c2565b611bca565b005b34801561049357600080fd5b506104ae60048036038101906104a991906126aa565b611e66565b005b3480156104bc57600080fd5b506104d760048036038101906104d29190612a0e565b611ee9565b005b3480156104e557600080fd5b506104ee61217e565b6040516104fb9190612851565b60405180910390f35b34801561051057600080fd5b5061052b600480360381019061052691906126aa565b6121a4565b6040516105389190612851565b60405180910390f35b34801561054d57600080fd5b506105566121d7565b6040516105639190612851565b60405180910390f35b34801561057857600080fd5b506105816121fd565b60405161058e9190612ab6565b60405180910390f35b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166105c381612221565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062790612b2e565b60405180910390fd5b6008600083600001602081019061064791906126aa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156106cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c690612b9a565b60405180910390fd5b6001600860008460000160208101906106e891906126aa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508160a001602081019061074c91906126aa565b73ffffffffffffffffffffffffffffffffffffffff1682600001602081019061077591906126aa565b73ffffffffffffffffffffffffffffffffffffffff161415610a18576107c482604001358360200160208101906107ac91906126aa565b8460200160208101906107bf91906126aa565b61224a565b6000826040013583606001356107da9190612be9565b90506000600a60008560000160208101906107f591906126aa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261083b9190612be9565b90506000811115610a11576000610873600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661237f565b9050806009600087600001602081019061088d91906126aa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610922828287602001602081019061091d91906126aa565b61224a565b8073ffffffffffffffffffffffffffffffffffffffff1663c4d66de8600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161097d9190612851565b600060405180830381600087803b15801561099757600080fd5b505af11580156109ab573d6000803e3d6000fd5b505050508460000160208101906109c291906126aa565b73ffffffffffffffffffffffffffffffffffffffff167ff8a0d4273560c59d7022f3feaae470fc5b68c55cff078a6ab7e618203b53041882604051610a079190612851565b60405180910390a2505b5050610b80565b6000600960008460a0016020810190610a3191906126aa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b4a578073ffffffffffffffffffffffffffffffffffffffff1663aad3ec96846020016020810190610af191906126aa565b85604001356040518363ffffffff1660e01b8152600401610b13929190612c1d565b600060405180830381600087803b158015610b2d57600080fd5b505af1158015610b41573d6000803e3d6000fd5b50505050610b7e565b610b7d8360400135846020016020810190610b6591906126aa565b8560a0016020810190610b7891906126aa565b61224a565b5b505b8160400135600a60008460a0016020810190610b9c91906126aa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610be59190612c46565b92505081905550600082608001351115610cbd576000826020016020810190610c0e91906126aa565b73ffffffffffffffffffffffffffffffffffffffff168360800135604051610c3590612ccd565b60006040518083038185875af1925050503d8060008114610c72576040519150601f19603f3d011682016040523d82523d6000602084013e610c77565b606091505b5050905080610cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb290612d2e565b60405180910390fd5b505b7fab2cb96eeb8726c709227935b01f6a5c6f7e9b518ab69eda0670c7ceda752d1a82604051610cec9190612e45565b60405180910390a15050565b610d00612454565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ff274fcfe10d70df2c1a3555476ecfb830e80115781fd0c9a10024291df991b2f81604051610d709190612851565b60405180910390a150565b600c6020528060005260406000206000915054906101000a900460ff1681565b600760149054906101000a900460ff16610dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de190612eac565b60405180910390fd5b6000339050600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7390612f18565b60405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600082898989604051602001610ebc9493929190612fa1565b6040516020818303038152906040528051906020012090508173ffffffffffffffffffffffffffffffffffffffff16630a02831c7facef05f736f89c16facc0f940c13f4c3a386cf48a9b54b50f59defd8b301c40a8888856040518563ffffffff1660e01b8152600401610f339493929190613070565b60206040518083038186803b158015610f4b57600080fd5b505afa158015610f5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8391906130c5565b610fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb99061313e565b60405180910390fd5b6001600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146111fa5787600a60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461109d9190612c46565b925050819055506000600960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008a9050600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614611145578590505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146111eb578173ffffffffffffffffffffffffffffffffffffffff1663aad3ec96868c6040518363ffffffff1660e01b81526004016111b4929190612c1d565b600060405180830381600087803b1580156111ce57600080fd5b505af11580156111e2573d6000803e3d6000fd5b505050506111f7565b6111f68a868361224a565b5b50505b600087111561124b578273ffffffffffffffffffffffffffffffffffffffff166108fc889081150290604051600060405180830381858888f19350505050158015611249573d6000803e3d6000fd5b505b8273ffffffffffffffffffffffffffffffffffffffff167fc08c27d872ca12215b2df3f441676fe2c084a204a487086d7436a4ac433d417a8a8a8a6040516112959392919061315e565b60405180910390a2505050505050505050565b60007f2517d59a36a86548e38734e8ab416f42afff4bca78706a66ad65750dae7f9e37905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e16c7d98836040518263ffffffff1660e01b815260040161132991906128ef565b60206040518083038186803b15801561134157600080fd5b505afa158015611355573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137991906131aa565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461144b5780600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fb8d523c5d6602683fc3e40e21a9be346f970802af52c8e045e813541394d264d82826040516114429291906131d7565b60405180910390a15b60007fbd1aa3e8d2464256d7fd3dcf645c16418d5d8c51d971f1ad7d57e7b1b5eee239905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e16c7d98836040518263ffffffff1660e01b81526004016114cc91906128ef565b60206040518083038186803b1580156114e457600080fd5b505afa1580156114f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151c91906131aa565b9050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146115ee5780600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fb8d523c5d6602683fc3e40e21a9be346f970802af52c8e045e813541394d264d82826040516115e59291906131d7565b60405180910390a15b60007fb6138afe6f306a47bdf645c5aebcb9781efe787d221a1880e62d1f76dae58b84905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e16c7d98836040518263ffffffff1660e01b815260040161166f91906128ef565b60206040518083038186803b15801561168757600080fd5b505afa15801561169b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bf91906131aa565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146117915780600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fb8d523c5d6602683fc3e40e21a9be346f970802af52c8e045e813541394d264d82826040516117889291906131d7565b60405180910390a15b60007f3443e257065fe41dd0e4d1f5a1b73a22a62e300962b57f30cddf41d0f8273ba7905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e16c7d98836040518263ffffffff1660e01b815260040161181291906128ef565b60206040518083038186803b15801561182a57600080fd5b505afa15801561183e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186291906131aa565b9050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146119345780600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fb8d523c5d6602683fc3e40e21a9be346f970802af52c8e045e813541394d264d828260405161192b9291906131d7565b60405180910390a15b5050505050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61196c612454565b81600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506119f66112a8565b5050565b600a6020528060005260406000206000915090505481565b60015481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ae1612454565b80600760146101000a81548160ff0219169083151502179055507f370171e543b14c71782f52c505a6b233744e5b2a35486e12ddf379221e49dfaf81604051611b2a91906126f2565b60405180910390a150565b611b3d612561565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f7081604051611bac9190612851565b60405180910390a150565b600760149054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611bf681612221565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5a90612b2e565b60405180910390fd5b600c6000836000016020810190611c7a91906126aa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf99061324c565b60405180910390fd5b6001600c6000846000016020810190611d1b91906126aa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663989f789c83606001358460400135611dbe9190612c46565b846020016020810190611dd191906126aa565b856040013586606001356040518563ffffffff1660e01b8152600401611df99392919061315e565b6000604051808303818588803b158015611e1257600080fd5b505af1158015611e26573d6000803e3d6000fd5b50505050507f71adb0cec7763a4cfefd893fc873369117ed172979f7b8f7b683f6a5787c52c082604051611e5a91906132e1565b60405180910390a15050565b611e6e612454565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fe51b4d409fd6629b39368b4863ab2212c8e0e0a970dccfaa5800888e507ce79d81604051611ede9190612851565b60405180910390a150565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611f1581612221565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7990612b2e565b60405180910390fd5b6000828060600190611f94919061330b565b9050905060005b8181101561210e576000848060600190611fb5919061330b565b83818110611fc657611fc561336e565b5b905060200201359050600b6000866000016020810190611fe691906126aa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002060009054906101000a900460ff161561207f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612076906133e9565b60405180910390fd5b6001600b600087600001602081019061209891906126aa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061210690613409565b915050611f9b565b50612142836040013584602001602081019061212a91906126aa565b85608001602081019061213d91906126aa565b61224a565b7f9e36876ab9fc404649651fb29b8aebacf24393e00799e53abef98a59c5a003948360405161217191906135d1565b60405180910390a1505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60096020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007311110000000000000000000000000000000011118261224391906135f3565b9050919050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b382866040518363ffffffff1660e01b81526004016122ce929190612c1d565b600060405180830381600087803b1580156122e857600080fd5b505af11580156122fc573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663ee4e804a8585856000806000806040518863ffffffff1660e01b8152600401612347979695949392919061363d565b600060405180830381600087803b15801561236157600080fd5b505af1158015612375573d6000803e3d6000fd5b5050505050505050565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f0915050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561244f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612446906136f8565b60405180910390fd5b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156124ba57600080fd5b505afa1580156124ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f291906131aa565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461255f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255690613764565b60405180910390fd5b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146125ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e6906137d0565b60405180910390fd5b565b600080fd5b600080fd5b600080fd5b600060c08284031215612616576126156125fb565b5b81905092915050565b600060c08284031215612635576126346125f1565b5b600061264384828501612600565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006126778261264c565b9050919050565b6126878161266c565b811461269257600080fd5b50565b6000813590506126a48161267e565b92915050565b6000602082840312156126c0576126bf6125f1565b5b60006126ce84828501612695565b91505092915050565b60008115159050919050565b6126ec816126d7565b82525050565b600060208201905061270760008301846126e3565b92915050565b6000819050919050565b6127208161270d565b811461272b57600080fd5b50565b60008135905061273d81612717565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261276857612767612743565b5b8235905067ffffffffffffffff81111561278557612784612748565b5b6020830191508360208202830111156127a1576127a061274d565b5b9250929050565b60008060008060008060a087890312156127c5576127c46125f1565b5b60006127d389828a01612695565b96505060206127e489828a0161272e565b95505060406127f589828a0161272e565b945050606087013567ffffffffffffffff811115612816576128156125f6565b5b61282289828a01612752565b9350935050608061283589828a01612695565b9150509295509295509295565b61284b8161266c565b82525050565b60006020820190506128666000830184612842565b92915050565b60008060408385031215612883576128826125f1565b5b600061289185828601612695565b92505060206128a285828601612695565b9150509250929050565b6128b58161270d565b82525050565b60006020820190506128d060008301846128ac565b92915050565b6000819050919050565b6128e9816128d6565b82525050565b600060208201905061290460008301846128e0565b92915050565b60008060408385031215612921576129206125f1565b5b600061292f85828601612695565b92505060206129408582860161272e565b9150509250929050565b612953816126d7565b811461295e57600080fd5b50565b6000813590506129708161294a565b92915050565b60006020828403121561298c5761298b6125f1565b5b600061299a84828501612961565b91505092915050565b6000608082840312156129b9576129b86125fb565b5b81905092915050565b6000608082840312156129d8576129d76125f1565b5b60006129e6848285016129a3565b91505092915050565b600060a08284031215612a0557612a046125fb565b5b81905092915050565b600060208284031215612a2457612a236125f1565b5b600082013567ffffffffffffffff811115612a4257612a416125f6565b5b612a4e848285016129ef565b91505092915050565b6000819050919050565b6000612a7c612a77612a728461264c565b612a57565b61264c565b9050919050565b6000612a8e82612a61565b9050919050565b6000612aa082612a83565b9050919050565b612ab081612a95565b82525050565b6000602082019050612acb6000830184612aa7565b92915050565b600082825260208201905092915050565b7f4f4e4c595f434f554e544552504152545f474154455741590000000000000000600082015250565b6000612b18601883612ad1565b9150612b2382612ae2565b602082019050919050565b60006020820190508181036000830152612b4781612b0b565b9050919050565b7f44454c454741544f525f414c52454144595f4d49475241544544000000000000600082015250565b6000612b84601a83612ad1565b9150612b8f82612b4e565b602082019050919050565b60006020820190508181036000830152612bb381612b77565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612bf48261270d565b9150612bff8361270d565b925082821015612c1257612c11612bba565b5b828203905092915050565b6000604082019050612c326000830185612842565b612c3f60208301846128ac565b9392505050565b6000612c518261270d565b9150612c5c8361270d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612c9157612c90612bba565b5b828201905092915050565b600081905092915050565b50565b6000612cb7600083612c9c565b9150612cc282612ca7565b600082019050919050565b6000612cd882612caa565b9150819050919050565b7f46494e414c495a455f44454c454741544f523a4641494c5f4645450000000000600082015250565b6000612d18601b83612ad1565b9150612d2382612ce2565b602082019050919050565b60006020820190508181036000830152612d4781612d0b565b9050919050565b6000612d5d6020840184612695565b905092915050565b612d6e8161266c565b82525050565b6000612d83602084018461272e565b905092915050565b612d948161270d565b82525050565b60c08201612dab6000830183612d4e565b612db86000850182612d65565b50612dc66020830183612d4e565b612dd36020850182612d65565b50612de16040830183612d74565b612dee6040850182612d8b565b50612dfc6060830183612d74565b612e096060850182612d8b565b50612e176080830183612d74565b612e246080850182612d8b565b50612e3260a0830183612d4e565b612e3f60a0850182612d65565b50505050565b600060c082019050612e5a6000830184612d9a565b92915050565b7f434c41494d5f5354414b455f44495341424c4544000000000000000000000000600082015250565b6000612e96601483612ad1565b9150612ea182612e60565b602082019050919050565b60006020820190508181036000830152612ec581612e89565b9050919050565b7f434c41494d5f5354414b453a414c52454144595f4d4947524154454400000000600082015250565b6000612f02601c83612ad1565b9150612f0d82612ecc565b602082019050919050565b60006020820190508181036000830152612f3181612ef5565b9050919050565b60008160601b9050919050565b6000612f5082612f38565b9050919050565b6000612f6282612f45565b9050919050565b612f7a612f758261266c565b612f57565b82525050565b6000819050919050565b612f9b612f968261270d565b612f80565b82525050565b6000612fad8287612f69565b601482019150612fbd8286612f69565b601482019150612fcd8285612f8a565b602082019150612fdd8284612f8a565b60208201915081905095945050505050565b600082825260208201905092915050565b600080fd5b82818337600083830152505050565b60006130208385612fef565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561305357613052613000565b5b602083029250613064838584613005565b82840190509392505050565b600060608201905061308560008301876128e0565b8181036020830152613098818587613014565b90506130a760408301846128e0565b95945050505050565b6000815190506130bf8161294a565b92915050565b6000602082840312156130db576130da6125f1565b5b60006130e9848285016130b0565b91505092915050565b7f434c41494d5f5354414b453a494e56414c49445f50524f4f4600000000000000600082015250565b6000613128601983612ad1565b9150613133826130f2565b602082019050919050565b600060208201905081810360008301526131578161311b565b9050919050565b60006060820190506131736000830186612842565b61318060208301856128ac565b61318d60408301846128ac565b949350505050565b6000815190506131a48161267e565b92915050565b6000602082840312156131c0576131bf6125f1565b5b60006131ce84828501613195565b91505092915050565b60006040820190506131ec60008301856128e0565b6131f96020830184612842565b9392505050565b7f53454e4445525f414c52454144595f4d49475241544544000000000000000000600082015250565b6000613236601783612ad1565b915061324182613200565b602082019050919050565b6000602082019050818103600083015261326581613229565b9050919050565b6080820161327d6000830183612d4e565b61328a6000850182612d65565b506132986020830183612d4e565b6132a56020850182612d65565b506132b36040830183612d74565b6132c06040850182612d8b565b506132ce6060830183612d74565b6132db6060850182612d8b565b50505050565b60006080820190506132f6600083018461326c565b92915050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112613328576133276132fc565b5b80840192508235915067ffffffffffffffff82111561334a57613349613301565b5b60208301925060208202360383131561336657613365613306565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f554e424f4e44494e475f4c4f434b5f414c52454144595f4d4947524154454400600082015250565b60006133d3601f83612ad1565b91506133de8261339d565b602082019050919050565b60006020820190508181036000830152613402816133c6565b9050919050565b60006134148261270d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561344757613446612bba565b5b600182019050919050565b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261347e5761347d61345c565b5b83810192508235915060208301925067ffffffffffffffff8211156134a6576134a5613452565b5b6020820236038413156134bc576134bb613457565b5b509250929050565b600082825260208201905092915050565b60006134e183856134c4565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561351457613513613000565b5b602083029250613525838584613005565b82840190509392505050565b600060a083016135446000840184612d4e565b6135516000860182612d65565b5061355f6020840184612d4e565b61356c6020860182612d65565b5061357a6040840184612d74565b6135876040860182612d8b565b506135956060840184613461565b85830360608701526135a88382846134d5565b925050506135b96080840184612d4e565b6135c66080860182612d65565b508091505092915050565b600060208201905081810360008301526135eb8184613531565b905092915050565b60006135fe8261264c565b91506136098361264c565b92508273ffffffffffffffffffffffffffffffffffffffff0382111561363257613631612bba565b5b828201905092915050565b600060e082019050613652600083018a6128ac565b61365f6020830189612842565b61366c6040830188612842565b6136796060830187612842565b6136866080830186612842565b61369360a0830185612842565b6136a060c0830184612842565b98975050505050505050565b7f455243313136373a20637265617465206661696c656400000000000000000000600082015250565b60006136e2601683612ad1565b91506136ed826136ac565b602082019050919050565b60006020820190508181036000830152613711816136d5565b9050919050565b7f63616c6c6572206d75737420626520436f6e74726f6c6c6572206f776e657200600082015250565b600061374e601f83612ad1565b915061375982613718565b602082019050919050565b6000602082019050818103600083015261377d81613741565b9050919050565b7f63616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000600082015250565b60006137ba601983612ad1565b91506137c582613784565b602082019050919050565b600060208201905081810360008301526137e9816137ad565b905091905056fea264697066735822122066b86eceb7ddfc038bc8e5be0f564cb4e2c604e36eababd132fa6d053e0abd6864736f6c63430008090033000000000000000000000000d8e8328501e9645d16cf49539efc04f734606ee4
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d8e8328501e9645d16cf49539efc04f734606ee4
-----Decoded View---------------
Arg [0] : _controller (address): 0xd8e8328501e9645d16cf49539efc04f734606ee4
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000d8e8328501e9645d16cf49539efc04f734606ee4
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.