Source Code
Overview
ETH Balance
0 ETH
ETH Value
$0.00
Cross-Chain Transactions
Loading...
Loading
Contract Name:
XERC20Module
Compiler Version
v0.8.25+commit.b61c2a91
Optimization Enabled:
Yes with 10000 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity 0.8.25;
import {ISettlementModule} from 'interfaces/common/ISettlementModule.sol';
import {IXERC20} from 'interfaces/common/IXERC20.sol';
import {IXERC20Module} from 'interfaces/intent/modules/IXERC20Module.sol';
/**
* @title XERC20Module
* @notice Module for handling minting and burning through XERC20 specific methods
*/
contract XERC20Module is IXERC20Module {
/// @inheritdoc IXERC20Module
mapping(address _user => mapping(address _asset => uint256 _amount)) public mintable;
/// @inheritdoc IXERC20Module
address public spoke;
/**
* @notice Check that the function is called by the local `EverclearSpoke`
*/
modifier onlySpoke() {
if (msg.sender != spoke) revert XERC20Module_HandleStrategy_OnlySpoke();
_;
}
constructor(
address _spoke
) {
spoke = _spoke;
}
/// @inheritdoc ISettlementModule
function handleMintStrategy(
address _asset,
address _recipient,
address _fallbackRecipient,
uint256 _amount,
bytes calldata
) external onlySpoke returns (bool _success) {
uint256 _limit = IXERC20(_asset).mintingCurrentLimitOf(address(this));
if (_amount <= _limit) {
try IXERC20(_asset).mint(_recipient, _amount) {
_success = true;
} catch {}
}
if (!_success) {
mintable[_fallbackRecipient][_asset] += _amount;
emit HandleMintStrategyFailed(_asset, _recipient, _amount);
}
}
/// @inheritdoc ISettlementModule
function handleBurnStrategy(address _asset, address _user, uint256 _amount, bytes calldata) external onlySpoke {
uint256 _limit = IXERC20(_asset).burningMaxLimitOf(address(this));
if (_limit < _amount) revert XERC20Module_HandleBurnStrategy_InsufficientBurningLimit(_asset, _limit, _amount);
IXERC20(_asset).burn(_user, _amount);
}
/// @inheritdoc IXERC20Module
function mintDebt(address _asset, address _recipient, uint256 _amount) external {
uint256 _limit = IXERC20(_asset).mintingMaxLimitOf(address(this));
if (_limit < _amount) revert XERC20Module_MintDebt_InsufficientMintingLimit(_asset, _limit, _amount);
mintable[_recipient][_asset] -= _amount;
IXERC20(_asset).mint(_recipient, _amount);
emit DebtMinted(_asset, _recipient, _amount);
}
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.25;
/**
* @title ISettlementModule
* @notice Interface for the base settlement module
*/
interface ISettlementModule {
/*///////////////////////////////////////////////////////////////
LOGIC
//////////////////////////////////////////////////////////////*/
/**
* @notice Handle a mint action for a specific strategy
* @param _asset The address of the asset to mint
* @param _recipient The recipient of the minted assets
* @param _fallbackRecipient The fallback recipient of the minted assets (in case of failure)
* @param _amount The amount to mint
* @param _data Extra data needed by some modules
* @return _success The outcome of the minting strategy
* @dev In case of failure, the parent module will handle the operation accordingly
*/
function handleMintStrategy(
address _asset,
address _recipient,
address _fallbackRecipient,
uint256 _amount,
bytes calldata _data
) external returns (bool _success);
/**
* @notice Handle a burn action for a specific strategy
* @param _asset The address of the asset to burn
* @param _user The user whose assets are being burned
* @param _amount The amount to burn
* @param _data Extra data needed by some modules
* @dev In case of failure, the `newIntent` flow will revert
*/
function handleBurnStrategy(address _asset, address _user, uint256 _amount, bytes calldata _data) external;
}// SPDX-License-Identifier: UNLICENSED
pragma solidity >=0.8.4 <0.9.0;
interface IXERC20 {
/**
* @notice Contains the full minting and burning data for a particular bridge
*
* @param minterParams The minting parameters for the bridge
* @param burnerParams The burning parameters for the bridge
*/
struct Bridge {
BridgeParameters minterParams;
BridgeParameters burnerParams;
}
/**
* @notice Contains the mint or burn parameters for a bridge
*
* @param timestamp The timestamp of the last mint/burn
* @param ratePerSecond The rate per second of the bridge
* @param maxLimit The max limit of the bridge
* @param currentLimit The current limit of the bridge
*/
struct BridgeParameters {
uint256 timestamp;
uint256 ratePerSecond;
uint256 maxLimit;
uint256 currentLimit;
}
/**
* @notice Emits when a lockbox is set
*
* @param _lockbox The address of the lockbox
*/
event LockboxSet(address _lockbox);
/**
* @notice Emits when a limit is set
*
* @param _mintingLimit The updated minting limit we are setting to the bridge
* @param _burningLimit The updated burning limit we are setting to the bridge
* @param _bridge The address of the bridge we are setting the limit too
*/
event BridgeLimitsSet(uint256 _mintingLimit, uint256 _burningLimit, address indexed _bridge);
/**
* @notice Reverts when a user with too low of a limit tries to call mint/burn
*/
error IXERC20_NotHighEnoughLimits();
/**
* @notice Reverts when caller is not the factory
*/
error IXERC20_NotFactory();
/**
* @notice Reverts when limits are too high
*/
error IXERC20_LimitsTooHigh();
/**
* @notice Sets the lockbox address
*
* @param _lockbox The address of the lockbox
*/
function setLockbox(
address _lockbox
) external;
/**
* @notice Updates the limits of any bridge
* @dev Can only be called by the owner
* @param _mintingLimit The updated minting limit we are setting to the bridge
* @param _burningLimit The updated burning limit we are setting to the bridge
* @param _bridge The address of the bridge we are setting the limits too
*/
function setLimits(address _bridge, uint256 _mintingLimit, uint256 _burningLimit) external;
/**
* @notice Mints tokens for a user
* @dev Can only be called by a minter
* @param _user The address of the user who needs tokens minted
* @param _amount The amount of tokens being minted
*/
function mint(address _user, uint256 _amount) external;
/**
* @notice Burns tokens for a user
* @dev Can only be called by a minter
* @param _user The address of the user who needs tokens burned
* @param _amount The amount of tokens being burned
*/
function burn(address _user, uint256 _amount) external;
/**
* @notice Returns the max limit of a minter
*
* @param _minter The minter we are viewing the limits of
* @return _limit The limit the minter has
*/
function mintingMaxLimitOf(
address _minter
) external view returns (uint256 _limit);
/**
* @notice Returns the max limit of a bridge
*
* @param _bridge the bridge we are viewing the limits of
* @return _limit The limit the bridge has
*/
function burningMaxLimitOf(
address _bridge
) external view returns (uint256 _limit);
/**
* @notice Returns the current limit of a minter
*
* @param _minter The minter we are viewing the limits of
* @return _limit The limit the minter has
*/
function mintingCurrentLimitOf(
address _minter
) external view returns (uint256 _limit);
/**
* @notice Returns the current limit of a bridge
*
* @param _bridge the bridge we are viewing the limits of
* @return _limit The limit the bridge has
*/
function burningCurrentLimitOf(
address _bridge
) external view returns (uint256 _limit);
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.25;
import {ISettlementModule} from 'interfaces/common/ISettlementModule.sol';
/**
* @title Interface
* @notice Interface for
*/
interface IXERC20Module is ISettlementModule {
/*///////////////////////////////////////////////////////////////
EVENTS
//////////////////////////////////////////////////////////////*/
/**
* @notice Emitted when debt is minted in favor of a user
* @param _asset The address of the minted asset
* @param _recipient The address of the minted tokens recipient
* @param _amount The amount of tokens minted
*/
event DebtMinted(address indexed _asset, address indexed _recipient, uint256 _amount);
/**
* @notice Emitted when the handle mint strategy fails
* @param _asset The address of the minted asset
* @param _recipient The address of the minted tokens recipient
* @param _amount The amount of tokens minted
*/
event HandleMintStrategyFailed(address indexed _asset, address indexed _recipient, uint256 _amount);
/*///////////////////////////////////////////////////////////////
ERRORS
//////////////////////////////////////////////////////////////*/
/**
* @notice Thrown when the XERC20 minting limit is lower than the amount being minted
* @param _asset The address of the asset
* @param _limit The hit limit
* @param _amount The amount trying to be minted
*/
error XERC20Module_MintDebt_InsufficientMintingLimit(address _asset, uint256 _limit, uint256 _amount);
/**
* @notice Thrown when the XERC20 burning limit is lower than the amount being burned
* @param _asset The address of the asset
* @param _limit The hit limit
* @param _amount The amount trying to be burned
*/
error XERC20Module_HandleBurnStrategy_InsufficientBurningLimit(address _asset, uint256 _limit, uint256 _amount);
/**
* @notice Thrown when the caller is not the `EverclearSpoke`
*/
error XERC20Module_HandleStrategy_OnlySpoke();
/*///////////////////////////////////////////////////////////////
LOGIC
//////////////////////////////////////////////////////////////*/
/**
* @notice Mints owed assets to an account
* @param _asset The address of the asset to mint
* @param _recipient The recipient of the minted assets
* @param _amount The amount to mint
*/
function mintDebt(address _asset, address _recipient, uint256 _amount) external;
/*///////////////////////////////////////////////////////////////
VIEWS
//////////////////////////////////////////////////////////////*/
/**
* @notice Returns the address of the local `EverclearSpoke`
* @return _spoke The address of the `EverclearSpoke`
*/
function spoke() external view returns (address _spoke);
/**
* @notice Returns the amount of tokens mintable by a user
* @param _account The address of the owed user
* @param _asset The address of the mintable asset
* @return _amount The total mintable amount
*/
function mintable(address _account, address _asset) external view returns (uint256 _amount);
}{
"remappings": [
"ds-test/=../../node_modules/ds-test/src/",
"forge-std/=../../node_modules/forge-std/src/",
"isolmate/=../../node_modules/isolmate/src/",
"@hyperlane/=../../node_modules/@hyperlane-xyz/core/contracts/",
"@openzeppelin/=../../node_modules/@openzeppelin/",
"@upgrades/=lib/openzeppelin-foundry-upgrades/src/",
"xerc20/=lib/xerc20/solidity/contracts/",
"contracts/=src/contracts/",
"interfaces/=src/interfaces/",
"utils/=script/utils/",
"@eth-optimism/=../../node_modules/@eth-optimism/",
"@hyperlane-xyz/=../../node_modules/@hyperlane-xyz/",
"@layerzerolabs/=../../node_modules/@layerzerolabs/",
"erc4626-tests/=lib/xerc20/lib/openzeppelin-contracts/lib/erc4626-tests/",
"forge-gas-snapshot/=lib/xerc20/lib/permit2/lib/forge-gas-snapshot/src/",
"fx-portal/=../../node_modules/fx-portal/",
"openzeppelin-contracts/=lib/xerc20/lib/openzeppelin-contracts/",
"openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/",
"openzeppelin/=lib/xerc20/lib/openzeppelin-contracts/contracts/",
"permit2/=lib/xerc20/lib/permit2/",
"prb-test/=lib/xerc20/lib/prb-test/src/",
"prb/test/=lib/xerc20/lib/prb-test/src/",
"solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/",
"solmate/=lib/xerc20/lib/permit2/lib/solmate/"
],
"optimizer": {
"enabled": true,
"runs": 10000
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "cancun",
"viaIR": false,
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_spoke","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"_asset","type":"address"},{"internalType":"uint256","name":"_limit","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"XERC20Module_HandleBurnStrategy_InsufficientBurningLimit","type":"error"},{"inputs":[],"name":"XERC20Module_HandleStrategy_OnlySpoke","type":"error"},{"inputs":[{"internalType":"address","name":"_asset","type":"address"},{"internalType":"uint256","name":"_limit","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"XERC20Module_MintDebt_InsufficientMintingLimit","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_asset","type":"address"},{"indexed":true,"internalType":"address","name":"_recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"DebtMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_asset","type":"address"},{"indexed":true,"internalType":"address","name":"_recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"HandleMintStrategyFailed","type":"event"},{"inputs":[{"internalType":"address","name":"_asset","type":"address"},{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"handleBurnStrategy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_asset","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"address","name":"_fallbackRecipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"handleMintStrategy","outputs":[{"internalType":"bool","name":"_success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_asset","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"address","name":"_asset","type":"address"}],"name":"mintable","outputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"spoke","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
6080604052348015600e575f80fd5b50604051610a43380380610a43833981016040819052602b91604f565b600180546001600160a01b0319166001600160a01b0392909216919091179055607a565b5f60208284031215605e575f80fd5b81516001600160a01b03811681146073575f80fd5b9392505050565b6109bc806100875f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c806355389fb01161004d57806355389fb0146100e75780638cad6e771461010a578063f3a9a59e1461011f575f80fd5b806304b4d1fb1461006857806347bfbcc6146100a2575b5f80fd5b61008f610076366004610783565b5f60208181529281526040808220909352908152205481565b6040519081526020015b60405180910390f35b6001546100c29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610099565b6100fa6100f53660046107f9565b610132565b6040519015158152602001610099565b61011d610118366004610873565b610364565b005b61011d61012d3660046108ac565b61058f565b6001545f9073ffffffffffffffffffffffffffffffffffffffff163314610185576040517f5e28321b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f651fd2680000000000000000000000000000000000000000000000000000000081523060048201525f9073ffffffffffffffffffffffffffffffffffffffff89169063651fd26890602401602060405180830381865afa1580156101ef573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102139190610916565b90508085116102a4576040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152602482018790528916906340c10f19906044015f604051808303815f87803b158015610289575f80fd5b505af192505050801561029a575060015b156102a457600191505b816103595773ffffffffffffffffffffffffffffffffffffffff8087165f90815260208181526040808320938c16835292905290812080548792906102ea90849061095a565b925050819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f471d6aaacf1235d0caa925387363751a53c3eae2c8fc2f0a39cc89d23f7170048760405161035091815260200190565b60405180910390a35b509695505050505050565b6040517f0c05f82c0000000000000000000000000000000000000000000000000000000081523060048201525f9073ffffffffffffffffffffffffffffffffffffffff851690630c05f82c90602401602060405180830381865afa1580156103ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103f29190610916565b905081811015610459576040517f29b0606800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8084165f908152602081815260408083209388168352929052908120805484929061049a908490610973565b90915550506040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490528516906340c10f19906044015f604051808303815f87803b15801561050c575f80fd5b505af115801561051e573d5f803e3d5ffd5b505050508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f582189f7394b93e93476738fd1de7cf483e1f99dfb27e00a7c345a393eefe18c8460405161058191815260200190565b60405180910390a350505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146105e0576040517f5e28321b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fc1eb71370000000000000000000000000000000000000000000000000000000081523060048201525f9073ffffffffffffffffffffffffffffffffffffffff87169063c1eb713790602401602060405180830381865afa15801561064a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061066e9190610916565b9050838110156106d0576040517f2609e7ff00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff871660048201526024810182905260448101859052606401610450565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201869052871690639dc29fac906044015f604051808303815f87803b15801561073d575f80fd5b505af115801561074f573d5f803e3d5ffd5b50505050505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461077e575f80fd5b919050565b5f8060408385031215610794575f80fd5b61079d8361075b565b91506107ab6020840161075b565b90509250929050565b5f8083601f8401126107c4575f80fd5b50813567ffffffffffffffff8111156107db575f80fd5b6020830191508360208285010111156107f2575f80fd5b9250929050565b5f805f805f8060a0878903121561080e575f80fd5b6108178761075b565b95506108256020880161075b565b94506108336040880161075b565b935060608701359250608087013567ffffffffffffffff811115610855575f80fd5b61086189828a016107b4565b979a9699509497509295939492505050565b5f805f60608486031215610885575f80fd5b61088e8461075b565b925061089c6020850161075b565b9150604084013590509250925092565b5f805f805f608086880312156108c0575f80fd5b6108c98661075b565b94506108d76020870161075b565b935060408601359250606086013567ffffffffffffffff8111156108f9575f80fd5b610905888289016107b4565b969995985093965092949392505050565b5f60208284031215610926575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561096d5761096d61092d565b92915050565b8181038181111561096d5761096d61092d56fea264697066735822122077fba96493256ee32a184b0a03ada506f8fc4fb0aad23955235e2943d2003e9c64736f6c63430008190033000000000000000000000000f1d5d2d7c6c3d125ebbf137be5093c0c5d7fa032
Deployed Bytecode
0x608060405234801561000f575f80fd5b5060043610610064575f3560e01c806355389fb01161004d57806355389fb0146100e75780638cad6e771461010a578063f3a9a59e1461011f575f80fd5b806304b4d1fb1461006857806347bfbcc6146100a2575b5f80fd5b61008f610076366004610783565b5f60208181529281526040808220909352908152205481565b6040519081526020015b60405180910390f35b6001546100c29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610099565b6100fa6100f53660046107f9565b610132565b6040519015158152602001610099565b61011d610118366004610873565b610364565b005b61011d61012d3660046108ac565b61058f565b6001545f9073ffffffffffffffffffffffffffffffffffffffff163314610185576040517f5e28321b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f651fd2680000000000000000000000000000000000000000000000000000000081523060048201525f9073ffffffffffffffffffffffffffffffffffffffff89169063651fd26890602401602060405180830381865afa1580156101ef573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102139190610916565b90508085116102a4576040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152602482018790528916906340c10f19906044015f604051808303815f87803b158015610289575f80fd5b505af192505050801561029a575060015b156102a457600191505b816103595773ffffffffffffffffffffffffffffffffffffffff8087165f90815260208181526040808320938c16835292905290812080548792906102ea90849061095a565b925050819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f471d6aaacf1235d0caa925387363751a53c3eae2c8fc2f0a39cc89d23f7170048760405161035091815260200190565b60405180910390a35b509695505050505050565b6040517f0c05f82c0000000000000000000000000000000000000000000000000000000081523060048201525f9073ffffffffffffffffffffffffffffffffffffffff851690630c05f82c90602401602060405180830381865afa1580156103ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103f29190610916565b905081811015610459576040517f29b0606800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8084165f908152602081815260408083209388168352929052908120805484929061049a908490610973565b90915550506040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490528516906340c10f19906044015f604051808303815f87803b15801561050c575f80fd5b505af115801561051e573d5f803e3d5ffd5b505050508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f582189f7394b93e93476738fd1de7cf483e1f99dfb27e00a7c345a393eefe18c8460405161058191815260200190565b60405180910390a350505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146105e0576040517f5e28321b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fc1eb71370000000000000000000000000000000000000000000000000000000081523060048201525f9073ffffffffffffffffffffffffffffffffffffffff87169063c1eb713790602401602060405180830381865afa15801561064a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061066e9190610916565b9050838110156106d0576040517f2609e7ff00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff871660048201526024810182905260448101859052606401610450565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201869052871690639dc29fac906044015f604051808303815f87803b15801561073d575f80fd5b505af115801561074f573d5f803e3d5ffd5b50505050505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461077e575f80fd5b919050565b5f8060408385031215610794575f80fd5b61079d8361075b565b91506107ab6020840161075b565b90509250929050565b5f8083601f8401126107c4575f80fd5b50813567ffffffffffffffff8111156107db575f80fd5b6020830191508360208285010111156107f2575f80fd5b9250929050565b5f805f805f8060a0878903121561080e575f80fd5b6108178761075b565b95506108256020880161075b565b94506108336040880161075b565b935060608701359250608087013567ffffffffffffffff811115610855575f80fd5b61086189828a016107b4565b979a9699509497509295939492505050565b5f805f60608486031215610885575f80fd5b61088e8461075b565b925061089c6020850161075b565b9150604084013590509250925092565b5f805f805f608086880312156108c0575f80fd5b6108c98661075b565b94506108d76020870161075b565b935060408601359250606086013567ffffffffffffffff8111156108f9575f80fd5b610905888289016107b4565b969995985093965092949392505050565b5f60208284031215610926575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561096d5761096d61092d565b92915050565b8181038181111561096d5761096d61092d56fea264697066735822122077fba96493256ee32a184b0a03ada506f8fc4fb0aad23955235e2943d2003e9c64736f6c63430008190033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f1d5d2d7c6c3d125ebbf137be5093c0c5d7fa032
-----Decoded View---------------
Arg [0] : _spoke (address): 0xf1D5d2D7C6c3D125eBbf137BE5093c0C5D7Fa032
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000f1d5d2d7c6c3d125ebbf137be5093c0c5d7fa032
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.