Source Code
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 22639570 | 200 days ago | Contract Creation | 0 FRAX |
Cross-Chain Transactions
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.
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0xe50A3550...B50DD6E08 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
TokenManagerDeployer
Compiler Version
v0.8.27+commit.40a35a09
Optimization Enabled:
Yes with 1000 runs
Other Settings:
london EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import { Create3Fixed } from './Create3Fixed.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, Create3Fixed {
/**
* @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;
/**
* @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 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_);
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @title Create3AddressFixed contract
* @notice This contract can be used to predict the deterministic deployment address of a contract deployed with the `CREATE3` technique.
* It is equivalent to the Create3Address found in axelar-gmp-sdk-solidity repo but uses a fixed bytecode for CreateDeploy,
* which allows changing compilation options (like number of runs) without affecting the future deployment addresses.
*/
contract Create3AddressFixed {
// slither-disable-next-line too-many-digits
bytes internal constant CREATE_DEPLOY_BYTECODE =
hex'608060405234801561001057600080fd5b50610162806100206000396000f3fe60806040526004361061001d5760003560e01c806277436014610022575b600080fd5b61003561003036600461007b565b610037565b005b8051602082016000f061004957600080fd5b50565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561008d57600080fd5b813567ffffffffffffffff808211156100a557600080fd5b818401915084601f8301126100b957600080fd5b8135818111156100cb576100cb61004c565b604051601f8201601f19908116603f011681019083821181831017156100f3576100f361004c565b8160405282815287602084870101111561010c57600080fd5b82602086016020830137600092810160200192909252509594505050505056fea264697066735822122094780ce55d28f1d568f4e0ab1b9dc230b96e952b73d2e06456fbff2289fa27f464736f6c63430008150033';
bytes32 internal constant CREATE_DEPLOY_BYTECODE_HASH = keccak256(CREATE_DEPLOY_BYTECODE);
/**
* @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, CREATE_DEPLOY_BYTECODE_HASH))))
);
deployed = address(uint160(uint256(keccak256(abi.encodePacked(hex'd6_94', deployer, hex'01')))));
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import { IDeploy } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IDeploy.sol';
import { ContractAddress } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/libs/ContractAddress.sol';
import { CreateDeploy } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/deploy/CreateDeploy.sol';
import { Create3AddressFixed } from './Create3AddressFixed.sol';
/**
* @title Create3Fixed 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.
* It uses a fixed bytecode to allow changing the compilation settings without affecting the deployment address in the future.
*/
contract Create3Fixed is Create3AddressFixed, 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 createDeploy;
bytes memory createDeployBytecode_ = CREATE_DEPLOY_BYTECODE;
uint256 length = createDeployBytecode_.length;
assembly {
createDeploy := create2(0, add(createDeployBytecode_, 0x20), length, deploySalt)
}
if (address(createDeploy) == address(0)) revert DeployFailed();
// Deploy using create
createDeploy.deploy(bytecode);
}
}{
"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": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"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
0x6080604052348015600f57600080fd5b50610f8c8061001f6000396000f3fe60806040526004361061001e5760003560e01c80636519d04b14610023575b600080fd5b610036610031366004610409565b610052565b6040516001600160a01b03909116815260200160405180910390f35b600080308587868660405160200161006e95949392919061048c565b6040516020818303038152906040529050600060405180602001610091906103fc565b601f1982820381018352601f9091011660408190526100b5919084906020016104fd565b60405160208183030381529060405290506100d08188610120565b9250826001600160a01b03163b600003610116576040517f22c7871800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050949350505050565b600061012b8261029e565b90508251600003610168576040517f21744a5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61017a816001600160a01b03166103b9565b156101b1576040517fa6ef0ba100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080604051806101c001604052806101828152602001610dd5610182913980519091508481602084016000f592506001600160a01b038316610220576040517fb4f5411100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517e7743600000000000000000000000000000000000000000000000000000000081526001600160a01b03841690627743609061026390899060040161052c565b600060405180830381600087803b15801561027d57600080fd5b505af1158015610291573d6000803e3d6000fd5b5050505050505092915050565b6000803083604051806101c001604052806101828152602001610dd561018291398051602091820120604051610321949392017fff00000000000000000000000000000000000000000000000000000000000000815260609390931b6bffffffffffffffffffffffff191660018401526015830191909152603582015260550190565b60408051601f1981840301815282825280516020918201207fd6940000000000000000000000000000000000000000000000000000000000008285015260601b6bffffffffffffffffffffffff191660228401527f0100000000000000000000000000000000000000000000000000000000000000603684015281516017818503018152603790930190915281519101209392505050565b60006001600160a01b0382163f80158015906103f557507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708114155b9392505050565b6108758061056083390190565b6000806000806060858703121561041f57600080fd5b8435935060208501359250604085013567ffffffffffffffff81111561044457600080fd5b8501601f8101871361045557600080fd5b803567ffffffffffffffff81111561046c57600080fd5b87602082840101111561047e57600080fd5b949793965060200194505050565b6001600160a01b038616815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f909201601f19160101949350505050565b60005b838110156104f45781810151838201526020016104dc565b50506000910152565b6000835161050f8184602088016104d9565b8351908301906105238183602088016104d9565b01949350505050565b602081526000825180602084015261054b8160408501602087016104d9565b601f01601f1916919091016040019291505056fe61010060405234801561001157600080fd5b50604051610875380380610875833981016040819052610030916102b6565b6001600160a01b0384166100575760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03841660805260a083905260c0829052600061007a85856101ed565b90506001600160a01b0381166100a35760405163340aafcd60e11b815260040160405180910390fd5b6000816001600160a01b0316639ded06df60e01b846040516024016100c8919061038e565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161010691906103c1565b600060405180830381855af49150503d8060008114610141576040519150601f19603f3d011682016040523d82523d6000602084013e610146565b606091505b5050905080610168576040516397905dfb60e01b815260040160405180910390fd5b60405163f5983e8360e01b81526001600160a01b0383169063f5983e839061019490869060040161038e565b602060405180830381865afa1580156101b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d591906103dd565b6001600160a01b031660e052506103f8945050505050565b604051633f0a8fd360e11b8152600481018290526000906001600160a01b03841690637e151fa690602401602060405180830381865afa158015610235573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025991906103dd565b9392505050565b80516001600160a01b038116811461027757600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156102ad578181015183820152602001610295565b50506000910152565b600080600080608085870312156102cc57600080fd5b6102d585610260565b60208601516040870151606088015192965090945092506001600160401b0381111561030057600080fd5b8501601f8101871361031157600080fd5b80516001600160401b0381111561032a5761032a61027c565b604051601f8201601f19908116603f011681016001600160401b03811182821017156103585761035861027c565b60405281815282820160200189101561037057600080fd5b610381826020830160208601610292565b9598949750929550505050565b60208152600082518060208401526103ad816040850160208701610292565b601f01601f19169190910160400192915050565b600082516103d3818460208701610292565b9190910192915050565b6000602082840312156103ef57600080fd5b61025982610260565b60805160a05160c05160e05161042961044c600039600081816101a801526102340152600061011d01526000818161015f015281816101fc015261028701526000818160bf015261026601526104296000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b146101815780639d76ea58146101965780639ded06df146101ca578063d4ae3c42146101e95761007b565b806309c6bed9146100ad578063129d81881461010b5780634fdf7cb51461014d5761007b565b3661007b57005b600061008561025f565b90503660008037600080366000845af43d6000803e8080156100a6573d6000f35b3d6000fd5b005b3480156100b957600080fd5b506100e17f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561011757600080fd5b5061013f7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610102565b34801561015957600080fd5b5061013f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561018d57600080fd5b506100e161025f565b3480156101a257600080fd5b506100e17f000000000000000000000000000000000000000000000000000000000000000081565b3480156101d657600080fd5b506100ab6101e5366004610349565b5050565b3480156101f557600080fd5b50604080517f0000000000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016602082015201610102565b60006102ab7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006102b0565b905090565b6040517f7e151fa60000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff841690637e151fa690602401602060405180830381865afa15801561031e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034291906103bd565b9392505050565b6000806020838503121561035c57600080fd5b823567ffffffffffffffff81111561037357600080fd5b8301601f8101851361038457600080fd5b803567ffffffffffffffff81111561039b57600080fd5b8560208284010111156103ad57600080fd5b6020919091019590945092505050565b6000602082840312156103cf57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461034257600080fdfea2646970667358221220fe36e72a99474f08534df4ada0b102f7c198df65bf7daafff03a225fb00724c964736f6c634300081b0033608060405234801561001057600080fd5b50610162806100206000396000f3fe60806040526004361061001d5760003560e01c806277436014610022575b600080fd5b61003561003036600461007b565b610037565b005b8051602082016000f061004957600080fd5b50565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561008d57600080fd5b813567ffffffffffffffff808211156100a557600080fd5b818401915084601f8301126100b957600080fd5b8135818111156100cb576100cb61004c565b604051601f8201601f19908116603f011681019083821181831017156100f3576100f361004c565b8160405282815287602084870101111561010c57600080fd5b82602086016020830137600092810160200192909252509594505050505056fea264697066735822122094780ce55d28f1d568f4e0ab1b9dc230b96e952b73d2e06456fbff2289fa27f464736f6c63430008150033a264697066735822122019fa5ae3e0948f19e633366cdadd4d2885054c3175f3f1471b392466794b5d6064736f6c634300081b0033
Deployed Bytecode
0x60806040526004361061001e5760003560e01c80636519d04b14610023575b600080fd5b610036610031366004610409565b610052565b6040516001600160a01b03909116815260200160405180910390f35b600080308587868660405160200161006e95949392919061048c565b6040516020818303038152906040529050600060405180602001610091906103fc565b601f1982820381018352601f9091011660408190526100b5919084906020016104fd565b60405160208183030381529060405290506100d08188610120565b9250826001600160a01b03163b600003610116576040517f22c7871800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050949350505050565b600061012b8261029e565b90508251600003610168576040517f21744a5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61017a816001600160a01b03166103b9565b156101b1576040517fa6ef0ba100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080604051806101c001604052806101828152602001610dd5610182913980519091508481602084016000f592506001600160a01b038316610220576040517fb4f5411100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517e7743600000000000000000000000000000000000000000000000000000000081526001600160a01b03841690627743609061026390899060040161052c565b600060405180830381600087803b15801561027d57600080fd5b505af1158015610291573d6000803e3d6000fd5b5050505050505092915050565b6000803083604051806101c001604052806101828152602001610dd561018291398051602091820120604051610321949392017fff00000000000000000000000000000000000000000000000000000000000000815260609390931b6bffffffffffffffffffffffff191660018401526015830191909152603582015260550190565b60408051601f1981840301815282825280516020918201207fd6940000000000000000000000000000000000000000000000000000000000008285015260601b6bffffffffffffffffffffffff191660228401527f0100000000000000000000000000000000000000000000000000000000000000603684015281516017818503018152603790930190915281519101209392505050565b60006001600160a01b0382163f80158015906103f557507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708114155b9392505050565b6108758061056083390190565b6000806000806060858703121561041f57600080fd5b8435935060208501359250604085013567ffffffffffffffff81111561044457600080fd5b8501601f8101871361045557600080fd5b803567ffffffffffffffff81111561046c57600080fd5b87602082840101111561047e57600080fd5b949793965060200194505050565b6001600160a01b038616815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f909201601f19160101949350505050565b60005b838110156104f45781810151838201526020016104dc565b50506000910152565b6000835161050f8184602088016104d9565b8351908301906105238183602088016104d9565b01949350505050565b602081526000825180602084015261054b8160408501602087016104d9565b601f01601f1916919091016040019291505056fe61010060405234801561001157600080fd5b50604051610875380380610875833981016040819052610030916102b6565b6001600160a01b0384166100575760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03841660805260a083905260c0829052600061007a85856101ed565b90506001600160a01b0381166100a35760405163340aafcd60e11b815260040160405180910390fd5b6000816001600160a01b0316639ded06df60e01b846040516024016100c8919061038e565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161010691906103c1565b600060405180830381855af49150503d8060008114610141576040519150601f19603f3d011682016040523d82523d6000602084013e610146565b606091505b5050905080610168576040516397905dfb60e01b815260040160405180910390fd5b60405163f5983e8360e01b81526001600160a01b0383169063f5983e839061019490869060040161038e565b602060405180830381865afa1580156101b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d591906103dd565b6001600160a01b031660e052506103f8945050505050565b604051633f0a8fd360e11b8152600481018290526000906001600160a01b03841690637e151fa690602401602060405180830381865afa158015610235573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025991906103dd565b9392505050565b80516001600160a01b038116811461027757600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156102ad578181015183820152602001610295565b50506000910152565b600080600080608085870312156102cc57600080fd5b6102d585610260565b60208601516040870151606088015192965090945092506001600160401b0381111561030057600080fd5b8501601f8101871361031157600080fd5b80516001600160401b0381111561032a5761032a61027c565b604051601f8201601f19908116603f011681016001600160401b03811182821017156103585761035861027c565b60405281815282820160200189101561037057600080fd5b610381826020830160208601610292565b9598949750929550505050565b60208152600082518060208401526103ad816040850160208701610292565b601f01601f19169190910160400192915050565b600082516103d3818460208701610292565b9190910192915050565b6000602082840312156103ef57600080fd5b61025982610260565b60805160a05160c05160e05161042961044c600039600081816101a801526102340152600061011d01526000818161015f015281816101fc015261028701526000818160bf015261026601526104296000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b146101815780639d76ea58146101965780639ded06df146101ca578063d4ae3c42146101e95761007b565b806309c6bed9146100ad578063129d81881461010b5780634fdf7cb51461014d5761007b565b3661007b57005b600061008561025f565b90503660008037600080366000845af43d6000803e8080156100a6573d6000f35b3d6000fd5b005b3480156100b957600080fd5b506100e17f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561011757600080fd5b5061013f7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610102565b34801561015957600080fd5b5061013f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561018d57600080fd5b506100e161025f565b3480156101a257600080fd5b506100e17f000000000000000000000000000000000000000000000000000000000000000081565b3480156101d657600080fd5b506100ab6101e5366004610349565b5050565b3480156101f557600080fd5b50604080517f0000000000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016602082015201610102565b60006102ab7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006102b0565b905090565b6040517f7e151fa60000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff841690637e151fa690602401602060405180830381865afa15801561031e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034291906103bd565b9392505050565b6000806020838503121561035c57600080fd5b823567ffffffffffffffff81111561037357600080fd5b8301601f8101851361038457600080fd5b803567ffffffffffffffff81111561039b57600080fd5b8560208284010111156103ad57600080fd5b6020919091019590945092505050565b6000602082840312156103cf57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461034257600080fdfea2646970667358221220fe36e72a99474f08534df4ada0b102f7c198df65bf7daafff03a225fb00724c964736f6c634300081b0033608060405234801561001057600080fd5b50610162806100206000396000f3fe60806040526004361061001d5760003560e01c806277436014610022575b600080fd5b61003561003036600461007b565b610037565b005b8051602082016000f061004957600080fd5b50565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561008d57600080fd5b813567ffffffffffffffff808211156100a557600080fd5b818401915084601f8301126100b957600080fd5b8135818111156100cb576100cb61004c565b604051601f8201601f19908116603f011681019083821181831017156100f3576100f361004c565b8160405282815287602084870101111561010c57600080fd5b82602086016020830137600092810160200192909252509594505050505056fea264697066735822122094780ce55d28f1d568f4e0ab1b9dc230b96e952b73d2e06456fbff2289fa27f464736f6c63430008150033a264697066735822122019fa5ae3e0948f19e633366cdadd4d2885054c3175f3f1471b392466794b5d6064736f6c634300081b0033
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in FRAX
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.