Source Code
Overview
FTM Balance
0 FTM
More Info
ContractCreator
Multichain Info
N/A
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
23430954 | 394 days ago | Contract Creation | 0 FTM |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
TokenManagerDeployer
Compiler Version
v0.8.21+commit.d9974bed
Optimization Enabled:
Yes with 1000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import { Create3 } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/deploy/Create3.sol'; import { ITokenManagerDeployer } from '../interfaces/ITokenManagerDeployer.sol'; import { TokenManagerProxy } from '../proxies/TokenManagerProxy.sol'; /** * @title TokenManagerDeployer * @notice This contract is used to deploy new instances of the TokenManagerProxy contract. */ contract TokenManagerDeployer is ITokenManagerDeployer, Create3 { /** * @notice Deploys a new instance of the TokenManagerProxy contract * @param tokenId The unique identifier for the token * @param implementationType Token manager implementation type * @param params Additional parameters used in the setup of the token manager * @return tokenManager The address of the deployed tokenManager */ // slither-disable-next-line locked-ether function deployTokenManager( bytes32 tokenId, uint256 implementationType, bytes calldata params ) external payable returns (address tokenManager) { bytes memory args = abi.encode(address(this), implementationType, tokenId, params); // slither-disable-next-line too-many-digits bytes memory bytecode = abi.encodePacked(type(TokenManagerProxy).creationCode, args); tokenManager = _create3(bytecode, tokenId); if (tokenManager.code.length == 0) revert TokenManagerDeploymentFailed(); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import { IDeploy } from '../interfaces/IDeploy.sol'; import { ContractAddress } from '../libs/ContractAddress.sol'; import { CreateDeploy } from './CreateDeploy.sol'; import { Create3Address } from './Create3Address.sol'; /** * @title Create3 contract * @notice This contract can be used to deploy a contract with a deterministic address that depends only on * the deployer address and deployment salt, not the contract bytecode and constructor parameters. */ contract Create3 is Create3Address, IDeploy { using ContractAddress for address; /** * @notice Deploys a new contract using the `CREATE3` method. * @dev This function first deploys the CreateDeploy contract using * the `CREATE2` opcode and then utilizes the CreateDeploy to deploy the * new contract with the `CREATE` opcode. * @param bytecode The bytecode of the contract to be deployed * @param deploySalt A salt to influence the contract address * @return deployed The address of the deployed contract */ function _create3(bytes memory bytecode, bytes32 deploySalt) internal returns (address deployed) { deployed = _create3Address(deploySalt); if (bytecode.length == 0) revert EmptyBytecode(); if (deployed.isContract()) revert AlreadyDeployed(); // Deploy using create2 CreateDeploy create = new CreateDeploy{ salt: deploySalt }(); if (address(create) == address(0)) revert DeployFailed(); // Deploy using create create.deploy(bytecode); } }
// SPDX-License-Identifier: MIT import { CreateDeploy } from './CreateDeploy.sol'; pragma solidity ^0.8.0; /** * @title Create3Address contract * @notice This contract can be used to predict the deterministic deployment address of a contract deployed with the `CREATE3` technique. */ contract Create3Address { /// @dev bytecode hash of the CreateDeploy helper contract bytes32 internal immutable createDeployBytecodeHash; constructor() { createDeployBytecodeHash = keccak256(type(CreateDeploy).creationCode); } /** * @notice Compute the deployed address that will result from the `CREATE3` method. * @param deploySalt A salt to influence the contract address * @return deployed The deterministic contract address if it was deployed */ function _create3Address(bytes32 deploySalt) internal view returns (address deployed) { address deployer = address( uint160(uint256(keccak256(abi.encodePacked(hex'ff', address(this), deploySalt, createDeployBytecodeHash)))) ); deployed = address(uint160(uint256(keccak256(abi.encodePacked(hex'd6_94', deployer, hex'01'))))); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title CreateDeploy Contract * @notice This contract deploys new contracts using the `CREATE` opcode and is used as part of * the `CREATE3` deployment method. */ contract CreateDeploy { /** * @dev Deploys a new contract with the specified bytecode using the `CREATE` opcode. * @param bytecode The bytecode of the contract to be deployed */ // slither-disable-next-line locked-ether function deploy(bytes memory bytecode) external payable { assembly { if iszero(create(0, add(bytecode, 32), mload(bytecode))) { revert(0, 0) } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title IDeploy Interface * @notice This interface defines the errors for a contract that is responsible for deploying new contracts. */ interface IDeploy { error EmptyBytecode(); error AlreadyDeployed(); error DeployFailed(); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // General interface for upgradable contracts interface IProxy { error InvalidOwner(); error InvalidImplementation(); error SetupFailed(); error NotOwner(); error AlreadyInitialized(); function implementation() external view returns (address); function setup(bytes calldata setupParams) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; library ContractAddress { function isContract(address contractAddress) internal view returns (bool) { bytes32 existingCodeHash = contractAddress.codehash; // https://eips.ethereum.org/EIPS/eip-1052 // keccak256('') == 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 return existingCodeHash != bytes32(0) && existingCodeHash != 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import { IProxy } from '../interfaces/IProxy.sol'; /** * @title BaseProxy Contract * @dev This abstract contract implements a basic proxy that stores an implementation address. Fallback function * calls are delegated to the implementation. This contract is meant to be inherited by other proxy contracts. */ abstract contract BaseProxy is IProxy { // bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1) bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; // keccak256('owner') bytes32 internal constant _OWNER_SLOT = 0x02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c0; /** * @dev Returns the current implementation address. * @return implementation_ The address of the current implementation contract */ function implementation() public view virtual returns (address implementation_) { assembly { implementation_ := sload(_IMPLEMENTATION_SLOT) } } /** * @dev Shadows the setup function of the implementation contract so it can't be called directly via the proxy. * @param params The setup parameters for the implementation contract. */ function setup(bytes calldata params) external {} /** * @dev Returns the contract ID. It can be used as a check during upgrades. Meant to be implemented in derived contracts. * @return bytes32 The contract ID */ function contractId() internal pure virtual returns (bytes32); /** * @dev Fallback function. Delegates the call to the current implementation contract. */ fallback() external payable virtual { address implementation_ = implementation(); assembly { calldatacopy(0, 0, calldatasize()) let result := delegatecall(gas(), implementation_, 0, calldatasize(), 0, 0) returndatacopy(0, 0, returndatasize()) switch result case 0 { revert(0, returndatasize()) } default { return(0, returndatasize()) } } } /** * @dev Payable fallback function. Can be overridden in derived contracts. */ receive() external payable virtual {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title IBaseTokenManager * @notice This contract is defines the base token manager interface implemented by all token managers. */ interface IBaseTokenManager { /** * @notice A function that returns the token id. */ function interchainTokenId() external view returns (bytes32); /** * @notice A function that should return the address of the token. * Must be overridden in the inheriting contract. * @return address address of the token. */ function tokenAddress() external view returns (address); /** * @notice A function that should return the token address from the init params. */ function getTokenAddressFromParams(bytes calldata params) external pure returns (address); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title ITokenManagerDeployer Interface * @notice This interface is used to deploy new instances of the TokenManagerProxy contract. */ interface ITokenManagerDeployer { error AddressZero(); error TokenManagerDeploymentFailed(); /** * @notice Deploys a new instance of the TokenManagerProxy contract. * @param tokenId The token ID. * @param implementationType Token manager implementation type. * @param params Additional parameters used in the setup of the token manager. * @return tokenManager Address of the deployed tokenManager. */ function deployTokenManager( bytes32 tokenId, uint256 implementationType, bytes calldata params ) external payable returns (address tokenManager); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title ITokenManagerImplementation Interface * @notice Interface for returning the token manager implementation type. */ interface ITokenManagerImplementation { /** * @notice Returns the implementation address for a given token manager type. * @param tokenManagerType The type of token manager. * @return tokenManagerAddress_ The address of the token manager implementation. */ function tokenManagerImplementation(uint256 tokenManagerType) external view returns (address tokenManagerAddress_); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import { IProxy } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IProxy.sol'; /** * @title ITokenManagerProxy Interface * @notice This interface is for a proxy for token manager contracts. */ interface ITokenManagerProxy is IProxy { error ZeroAddress(); /** * @notice Returns implementation type of this token manager. * @return uint256 The implementation type of this token manager. */ function implementationType() external view returns (uint256); /** * @notice Returns the interchain token ID of the token manager. * @return bytes32 The interchain token ID of the token manager. */ function interchainTokenId() external view returns (bytes32); /** * @notice Returns token address that this token manager manages. * @return address The token address. */ function tokenAddress() external view returns (address); /** * @notice Returns implementation type and token address. * @return uint256 The implementation type. * @return address The token address. */ function getImplementationTypeAndTokenAddress() external view returns (uint256, address); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import { IProxy } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IProxy.sol'; import { BaseProxy } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/upgradable/BaseProxy.sol'; import { IBaseTokenManager } from '../interfaces/IBaseTokenManager.sol'; import { ITokenManagerProxy } from '../interfaces/ITokenManagerProxy.sol'; import { ITokenManagerImplementation } from '../interfaces/ITokenManagerImplementation.sol'; /** * @title TokenManagerProxy * @notice This contract is a proxy for token manager contracts. * @dev This contract implements BaseProxy and ITokenManagerProxy. */ contract TokenManagerProxy is BaseProxy, ITokenManagerProxy { bytes32 private constant CONTRACT_ID = keccak256('token-manager'); address public immutable interchainTokenService; uint256 public immutable implementationType; bytes32 public immutable interchainTokenId; address public immutable tokenAddress; /** * @notice Constructs the TokenManagerProxy contract. * @param interchainTokenService_ The address of the interchain token service. * @param implementationType_ The token manager type. * @param tokenId The identifier for the token. * @param params The initialization parameters for the token manager contract. */ constructor(address interchainTokenService_, uint256 implementationType_, bytes32 tokenId, bytes memory params) { if (interchainTokenService_ == address(0)) revert ZeroAddress(); interchainTokenService = interchainTokenService_; implementationType = implementationType_; interchainTokenId = tokenId; address implementation_ = _tokenManagerImplementation(interchainTokenService_, implementationType_); if (implementation_ == address(0)) revert InvalidImplementation(); (bool success, ) = implementation_.delegatecall(abi.encodeWithSelector(IProxy.setup.selector, params)); if (!success) revert SetupFailed(); tokenAddress = IBaseTokenManager(implementation_).getTokenAddressFromParams(params); } /** * @notice Getter for the contract id. * @return bytes32 The contract id. */ function contractId() internal pure override returns (bytes32) { return CONTRACT_ID; } /** * @notice Returns implementation type and token address. * @return implementationType_ The implementation type. * @return tokenAddress_ The token address. */ function getImplementationTypeAndTokenAddress() external view returns (uint256 implementationType_, address tokenAddress_) { implementationType_ = implementationType; tokenAddress_ = tokenAddress; } /** * @notice Returns the address of the current implementation. * @return implementation_ The address of the current implementation. */ function implementation() public view override(BaseProxy, IProxy) returns (address implementation_) { implementation_ = _tokenManagerImplementation(interchainTokenService, implementationType); } /** * @notice Returns the implementation address from the interchain token service for the provided type. * @param interchainTokenService_ The address of the interchain token service. * @param implementationType_ The token manager type. * @return implementation_ The address of the implementation. */ function _tokenManagerImplementation( address interchainTokenService_, uint256 implementationType_ ) internal view returns (address implementation_) { implementation_ = ITokenManagerImplementation(interchainTokenService_).tokenManagerImplementation(implementationType_); } }
{ "evmVersion": "london", "optimizer": { "enabled": true, "runs": 1000, "details": { "peephole": true, "inliner": true, "jumpdestRemover": true, "orderLiterals": true, "deduplicate": true, "cse": true, "constantOptimizer": true, "yul": true, "yulDetails": { "stackAllocation": true } } }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
[{"inputs":[],"name":"AddressZero","type":"error"},{"inputs":[],"name":"AlreadyDeployed","type":"error"},{"inputs":[],"name":"DeployFailed","type":"error"},{"inputs":[],"name":"EmptyBytecode","type":"error"},{"inputs":[],"name":"TokenManagerDeploymentFailed","type":"error"},{"inputs":[{"internalType":"bytes32","name":"tokenId","type":"bytes32"},{"internalType":"uint256","name":"implementationType","type":"uint256"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"deployTokenManager","outputs":[{"internalType":"address","name":"tokenManager","type":"address"}],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60a060405234801561001057600080fd5b5060405161002060208201610044565b601f1982820381018352601f90910116604052805160209190910120608052610051565b61018280610fce83390190565b608051610f6261006c60003960006101720152610f626000f3fe60806040526004361061001e5760003560e01c80636519d04b14610023575b600080fd5b6100366100313660046103ea565b610052565b6040516001600160a01b03909116815260200160405180910390f35b600080308587868660405160200161006e95949392919061046a565b6040516020818303038152906040529050600060405180602001610091906103d0565b601f1982820381018352601f9091011660408190526100b5919084906020016104db565b60405160208183030381529060405290506100d08188610120565b9250826001600160a01b03163b600003610116576040517f22c7871800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050949350505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091526bffffffffffffffffffffffff1930606090811b82166021850152603584018690527f0000000000000000000000000000000000000000000000000000000000000000605580860191909152855180860390910181526075850186528051908401207fd6940000000000000000000000000000000000000000000000000000000000006095860152901b1660978301527f010000000000000000000000000000000000000000000000000000000000000060ab8301528251808303608c01815260ac90920190925280519101208251600003610256576040517f21744a5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610268816001600160a01b031661038d565b1561029f576040517fa6ef0ba100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000826040516102ae906103dd565b8190604051809103906000f59050801580156102ce573d6000803e3d6000fd5b5090506001600160a01b038116610311576040517fb4f5411100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517e7743600000000000000000000000000000000000000000000000000000000081526001600160a01b03821690627743609061035490879060040161050a565b600060405180830381600087803b15801561036e57600080fd5b505af1158015610382573d6000803e3d6000fd5b505050505092915050565b60006001600160a01b0382163f80158015906103c957507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708114155b9392505050565b61086d8061053e83390190565b61018280610dab83390190565b6000806000806060858703121561040057600080fd5b8435935060208501359250604085013567ffffffffffffffff8082111561042657600080fd5b818701915087601f83011261043a57600080fd5b81358181111561044957600080fd5b88602082850101111561045b57600080fd5b95989497505060200194505050565b6001600160a01b038616815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f909201601f19160101949350505050565b60005b838110156104d25781810151838201526020016104ba565b50506000910152565b600083516104ed8184602088016104b7565b8351908301906105018183602088016104b7565b01949350505050565b60208152600082518060208401526105298160408501602087016104b7565b601f01601f1916919091016040019291505056fe61010060405234801561001157600080fd5b5060405161086d38038061086d833981016040819052610030916102b6565b6001600160a01b0384166100575760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03841660805260a083905260c0829052600061007a85856101ed565b90506001600160a01b0381166100a35760405163340aafcd60e11b815260040160405180910390fd5b6000816001600160a01b0316639ded06df60e01b846040516024016100c89190610388565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161010691906103bb565b600060405180830381855af49150503d8060008114610141576040519150601f19603f3d011682016040523d82523d6000602084013e610146565b606091505b5050905080610168576040516397905dfb60e01b815260040160405180910390fd5b60405163f5983e8360e01b81526001600160a01b0383169063f5983e8390610194908690600401610388565b602060405180830381865afa1580156101b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d591906103d7565b6001600160a01b031660e052506103f2945050505050565b604051633f0a8fd360e11b8152600481018290526000906001600160a01b03841690637e151fa690602401602060405180830381865afa158015610235573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025991906103d7565b9392505050565b80516001600160a01b038116811461027757600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156102ad578181015183820152602001610295565b50506000910152565b600080600080608085870312156102cc57600080fd5b6102d585610260565b60208601516040870151606088015192965090945092506001600160401b038082111561030157600080fd5b818701915087601f83011261031557600080fd5b8151818111156103275761032761027c565b604051601f8201601f19908116603f0116810190838211818310171561034f5761034f61027c565b816040528281528a602084870101111561036857600080fd5b610379836020830160208801610292565b979a9699509497505050505050565b60208152600082518060208401526103a7816040850160208701610292565b601f01601f19169190910160400192915050565b600082516103cd818460208701610292565b9190910192915050565b6000602082840312156103e957600080fd5b61025982610260565b60805160a05160c05160e051610427610446600039600081816101a801526102340152600061011d01526000818161015f015281816101fc015261028701526000818160bf015261026601526104276000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b146101815780639d76ea58146101965780639ded06df146101ca578063d4ae3c42146101e95761007b565b806309c6bed9146100ad578063129d81881461010b5780634fdf7cb51461014d5761007b565b3661007b57005b600061008561025f565b90503660008037600080366000845af43d6000803e8080156100a6573d6000f35b3d6000fd5b005b3480156100b957600080fd5b506100e17f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561011757600080fd5b5061013f7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610102565b34801561015957600080fd5b5061013f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561018d57600080fd5b506100e161025f565b3480156101a257600080fd5b506100e17f000000000000000000000000000000000000000000000000000000000000000081565b3480156101d657600080fd5b506100ab6101e5366004610349565b5050565b3480156101f557600080fd5b50604080517f0000000000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016602082015201610102565b60006102ab7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006102b0565b905090565b6040517f7e151fa60000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff841690637e151fa690602401602060405180830381865afa15801561031e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034291906103bb565b9392505050565b6000806020838503121561035c57600080fd5b823567ffffffffffffffff8082111561037457600080fd5b818501915085601f83011261038857600080fd5b81358181111561039757600080fd5b8660208285010111156103a957600080fd5b60209290920196919550909350505050565b6000602082840312156103cd57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461034257600080fdfea2646970667358221220d011ec6a9d8ff1de78334122dc7f461e39a52c3c3e3116b86bd148633a67d06664736f6c63430008150033608060405234801561001057600080fd5b50610162806100206000396000f3fe60806040526004361061001d5760003560e01c806277436014610022575b600080fd5b61003561003036600461007b565b610037565b005b8051602082016000f061004957600080fd5b50565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561008d57600080fd5b813567ffffffffffffffff808211156100a557600080fd5b818401915084601f8301126100b957600080fd5b8135818111156100cb576100cb61004c565b604051601f8201601f19908116603f011681019083821181831017156100f3576100f361004c565b8160405282815287602084870101111561010c57600080fd5b82602086016020830137600092810160200192909252509594505050505056fea264697066735822122094780ce55d28f1d568f4e0ab1b9dc230b96e952b73d2e06456fbff2289fa27f464736f6c63430008150033a2646970667358221220690a1dfc685d30f751ab58cf9cd42d710bdb563552db362378e4213085519e1f64736f6c63430008150033608060405234801561001057600080fd5b50610162806100206000396000f3fe60806040526004361061001d5760003560e01c806277436014610022575b600080fd5b61003561003036600461007b565b610037565b005b8051602082016000f061004957600080fd5b50565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561008d57600080fd5b813567ffffffffffffffff808211156100a557600080fd5b818401915084601f8301126100b957600080fd5b8135818111156100cb576100cb61004c565b604051601f8201601f19908116603f011681019083821181831017156100f3576100f361004c565b8160405282815287602084870101111561010c57600080fd5b82602086016020830137600092810160200192909252509594505050505056fea264697066735822122094780ce55d28f1d568f4e0ab1b9dc230b96e952b73d2e06456fbff2289fa27f464736f6c63430008150033
Deployed Bytecode
0x60806040526004361061001e5760003560e01c80636519d04b14610023575b600080fd5b6100366100313660046103ea565b610052565b6040516001600160a01b03909116815260200160405180910390f35b600080308587868660405160200161006e95949392919061046a565b6040516020818303038152906040529050600060405180602001610091906103d0565b601f1982820381018352601f9091011660408190526100b5919084906020016104db565b60405160208183030381529060405290506100d08188610120565b9250826001600160a01b03163b600003610116576040517f22c7871800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050949350505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091526bffffffffffffffffffffffff1930606090811b82166021850152603584018690527fdb4bab1640a2602c9f66f33765d12be4af115accf74b24515702961e82a71327605580860191909152855180860390910181526075850186528051908401207fd6940000000000000000000000000000000000000000000000000000000000006095860152901b1660978301527f010000000000000000000000000000000000000000000000000000000000000060ab8301528251808303608c01815260ac90920190925280519101208251600003610256576040517f21744a5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610268816001600160a01b031661038d565b1561029f576040517fa6ef0ba100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000826040516102ae906103dd565b8190604051809103906000f59050801580156102ce573d6000803e3d6000fd5b5090506001600160a01b038116610311576040517fb4f5411100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517e7743600000000000000000000000000000000000000000000000000000000081526001600160a01b03821690627743609061035490879060040161050a565b600060405180830381600087803b15801561036e57600080fd5b505af1158015610382573d6000803e3d6000fd5b505050505092915050565b60006001600160a01b0382163f80158015906103c957507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708114155b9392505050565b61086d8061053e83390190565b61018280610dab83390190565b6000806000806060858703121561040057600080fd5b8435935060208501359250604085013567ffffffffffffffff8082111561042657600080fd5b818701915087601f83011261043a57600080fd5b81358181111561044957600080fd5b88602082850101111561045b57600080fd5b95989497505060200194505050565b6001600160a01b038616815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f909201601f19160101949350505050565b60005b838110156104d25781810151838201526020016104ba565b50506000910152565b600083516104ed8184602088016104b7565b8351908301906105018183602088016104b7565b01949350505050565b60208152600082518060208401526105298160408501602087016104b7565b601f01601f1916919091016040019291505056fe61010060405234801561001157600080fd5b5060405161086d38038061086d833981016040819052610030916102b6565b6001600160a01b0384166100575760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03841660805260a083905260c0829052600061007a85856101ed565b90506001600160a01b0381166100a35760405163340aafcd60e11b815260040160405180910390fd5b6000816001600160a01b0316639ded06df60e01b846040516024016100c89190610388565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161010691906103bb565b600060405180830381855af49150503d8060008114610141576040519150601f19603f3d011682016040523d82523d6000602084013e610146565b606091505b5050905080610168576040516397905dfb60e01b815260040160405180910390fd5b60405163f5983e8360e01b81526001600160a01b0383169063f5983e8390610194908690600401610388565b602060405180830381865afa1580156101b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d591906103d7565b6001600160a01b031660e052506103f2945050505050565b604051633f0a8fd360e11b8152600481018290526000906001600160a01b03841690637e151fa690602401602060405180830381865afa158015610235573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025991906103d7565b9392505050565b80516001600160a01b038116811461027757600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156102ad578181015183820152602001610295565b50506000910152565b600080600080608085870312156102cc57600080fd5b6102d585610260565b60208601516040870151606088015192965090945092506001600160401b038082111561030157600080fd5b818701915087601f83011261031557600080fd5b8151818111156103275761032761027c565b604051601f8201601f19908116603f0116810190838211818310171561034f5761034f61027c565b816040528281528a602084870101111561036857600080fd5b610379836020830160208801610292565b979a9699509497505050505050565b60208152600082518060208401526103a7816040850160208701610292565b601f01601f19169190910160400192915050565b600082516103cd818460208701610292565b9190910192915050565b6000602082840312156103e957600080fd5b61025982610260565b60805160a05160c05160e051610427610446600039600081816101a801526102340152600061011d01526000818161015f015281816101fc015261028701526000818160bf015261026601526104276000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b146101815780639d76ea58146101965780639ded06df146101ca578063d4ae3c42146101e95761007b565b806309c6bed9146100ad578063129d81881461010b5780634fdf7cb51461014d5761007b565b3661007b57005b600061008561025f565b90503660008037600080366000845af43d6000803e8080156100a6573d6000f35b3d6000fd5b005b3480156100b957600080fd5b506100e17f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561011757600080fd5b5061013f7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610102565b34801561015957600080fd5b5061013f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561018d57600080fd5b506100e161025f565b3480156101a257600080fd5b506100e17f000000000000000000000000000000000000000000000000000000000000000081565b3480156101d657600080fd5b506100ab6101e5366004610349565b5050565b3480156101f557600080fd5b50604080517f0000000000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016602082015201610102565b60006102ab7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006102b0565b905090565b6040517f7e151fa60000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff841690637e151fa690602401602060405180830381865afa15801561031e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034291906103bb565b9392505050565b6000806020838503121561035c57600080fd5b823567ffffffffffffffff8082111561037457600080fd5b818501915085601f83011261038857600080fd5b81358181111561039757600080fd5b8660208285010111156103a957600080fd5b60209290920196919550909350505050565b6000602082840312156103cd57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461034257600080fdfea2646970667358221220d011ec6a9d8ff1de78334122dc7f461e39a52c3c3e3116b86bd148633a67d06664736f6c63430008150033608060405234801561001057600080fd5b50610162806100206000396000f3fe60806040526004361061001d5760003560e01c806277436014610022575b600080fd5b61003561003036600461007b565b610037565b005b8051602082016000f061004957600080fd5b50565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561008d57600080fd5b813567ffffffffffffffff808211156100a557600080fd5b818401915084601f8301126100b957600080fd5b8135818111156100cb576100cb61004c565b604051601f8201601f19908116603f011681019083821181831017156100f3576100f361004c565b8160405282815287602084870101111561010c57600080fd5b82602086016020830137600092810160200192909252509594505050505056fea264697066735822122094780ce55d28f1d568f4e0ab1b9dc230b96e952b73d2e06456fbff2289fa27f464736f6c63430008150033a2646970667358221220690a1dfc685d30f751ab58cf9cd42d710bdb563552db362378e4213085519e1f64736f6c63430008150033
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.