Overview
ETH Balance
0 ETH
Eth Value
$0.00View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
XERC20Module
Compiler Version
v0.8.25+commit.b61c2a91
Optimization Enabled:
Yes with 10000 runs
Other Settings:
london 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/",
"hardhat/=lib/openzeppelin-foundry-upgrades/node_modules/hardhat/",
"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": "london",
"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
6080604052348015600f57600080fd5b50604051610a7f380380610a7f833981016040819052602c916050565b600180546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b6109f28061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c806355389fb01161005057806355389fb0146100ec5780638cad6e771461010f578063f3a9a59e1461012457600080fd5b806304b4d1fb1461006c57806347bfbcc6146100a7575b600080fd5b61009461007a3660046107a2565b600060208181529281526040808220909352908152205481565b6040519081526020015b60405180910390f35b6001546100c79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161009e565b6100ff6100fa36600461081e565b610137565b604051901515815260200161009e565b61012261011d36600461089d565b610371565b005b6101226101323660046108d9565b6105a5565b60015460009073ffffffffffffffffffffffffffffffffffffffff16331461018b576040517f5e28321b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f651fd26800000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff89169063651fd26890602401602060405180830381865afa1580156101f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061021c9190610948565b90508085116102b0576040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152602482018790528916906340c10f1990604401600060405180830381600087803b15801561029557600080fd5b505af19250505080156102a6575060015b156102b057600191505b816103665773ffffffffffffffffffffffffffffffffffffffff808716600090815260208181526040808320938c16835292905290812080548792906102f7908490610990565b925050819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f471d6aaacf1235d0caa925387363751a53c3eae2c8fc2f0a39cc89d23f7170048760405161035d91815260200190565b60405180910390a35b509695505050505050565b6040517f0c05f82c00000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff851690630c05f82c90602401602060405180830381865afa1580156103de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104029190610948565b905081811015610469576040517f29b0606800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600090815260208181526040808320938816835292905290812080548492906104ab9084906109a9565b90915550506040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490528516906340c10f1990604401600060405180830381600087803b15801561052057600080fd5b505af1158015610534573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f582189f7394b93e93476738fd1de7cf483e1f99dfb27e00a7c345a393eefe18c8460405161059791815260200190565b60405180910390a350505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146105f6576040517f5e28321b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fc1eb713700000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff87169063c1eb713790602401602060405180830381865afa158015610663573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106879190610948565b9050838110156106e9576040517f2609e7ff00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff871660048201526024810182905260448101859052606401610460565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201869052871690639dc29fac90604401600060405180830381600087803b15801561075957600080fd5b505af115801561076d573d6000803e3d6000fd5b50505050505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079d57600080fd5b919050565b600080604083850312156107b557600080fd5b6107be83610779565b91506107cc60208401610779565b90509250929050565b60008083601f8401126107e757600080fd5b50813567ffffffffffffffff8111156107ff57600080fd5b60208301915083602082850101111561081757600080fd5b9250929050565b60008060008060008060a0878903121561083757600080fd5b61084087610779565b955061084e60208801610779565b945061085c60408801610779565b935060608701359250608087013567ffffffffffffffff81111561087f57600080fd5b61088b89828a016107d5565b979a9699509497509295939492505050565b6000806000606084860312156108b257600080fd5b6108bb84610779565b92506108c960208501610779565b9150604084013590509250925092565b6000806000806000608086880312156108f157600080fd5b6108fa86610779565b945061090860208701610779565b935060408601359250606086013567ffffffffffffffff81111561092b57600080fd5b610937888289016107d5565b969995985093965092949392505050565b60006020828403121561095a57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156109a3576109a3610961565b92915050565b818103818111156109a3576109a361096156fea2646970667358221220dc5fefc55056e4988805c4147574dd4e84fd9bef0a08a8d2a4c08aa01d5688a664736f6c63430008190033000000000000000000000000a05a3380889115bf313f1db9d5f335157be4d816
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100675760003560e01c806355389fb01161005057806355389fb0146100ec5780638cad6e771461010f578063f3a9a59e1461012457600080fd5b806304b4d1fb1461006c57806347bfbcc6146100a7575b600080fd5b61009461007a3660046107a2565b600060208181529281526040808220909352908152205481565b6040519081526020015b60405180910390f35b6001546100c79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161009e565b6100ff6100fa36600461081e565b610137565b604051901515815260200161009e565b61012261011d36600461089d565b610371565b005b6101226101323660046108d9565b6105a5565b60015460009073ffffffffffffffffffffffffffffffffffffffff16331461018b576040517f5e28321b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f651fd26800000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff89169063651fd26890602401602060405180830381865afa1580156101f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061021c9190610948565b90508085116102b0576040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152602482018790528916906340c10f1990604401600060405180830381600087803b15801561029557600080fd5b505af19250505080156102a6575060015b156102b057600191505b816103665773ffffffffffffffffffffffffffffffffffffffff808716600090815260208181526040808320938c16835292905290812080548792906102f7908490610990565b925050819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f471d6aaacf1235d0caa925387363751a53c3eae2c8fc2f0a39cc89d23f7170048760405161035d91815260200190565b60405180910390a35b509695505050505050565b6040517f0c05f82c00000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff851690630c05f82c90602401602060405180830381865afa1580156103de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104029190610948565b905081811015610469576040517f29b0606800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600090815260208181526040808320938816835292905290812080548492906104ab9084906109a9565b90915550506040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490528516906340c10f1990604401600060405180830381600087803b15801561052057600080fd5b505af1158015610534573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f582189f7394b93e93476738fd1de7cf483e1f99dfb27e00a7c345a393eefe18c8460405161059791815260200190565b60405180910390a350505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146105f6576040517f5e28321b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fc1eb713700000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff87169063c1eb713790602401602060405180830381865afa158015610663573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106879190610948565b9050838110156106e9576040517f2609e7ff00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff871660048201526024810182905260448101859052606401610460565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201869052871690639dc29fac90604401600060405180830381600087803b15801561075957600080fd5b505af115801561076d573d6000803e3d6000fd5b50505050505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079d57600080fd5b919050565b600080604083850312156107b557600080fd5b6107be83610779565b91506107cc60208401610779565b90509250929050565b60008083601f8401126107e757600080fd5b50813567ffffffffffffffff8111156107ff57600080fd5b60208301915083602082850101111561081757600080fd5b9250929050565b60008060008060008060a0878903121561083757600080fd5b61084087610779565b955061084e60208801610779565b945061085c60408801610779565b935060608701359250608087013567ffffffffffffffff81111561087f57600080fd5b61088b89828a016107d5565b979a9699509497509295939492505050565b6000806000606084860312156108b257600080fd5b6108bb84610779565b92506108c960208501610779565b9150604084013590509250925092565b6000806000806000608086880312156108f157600080fd5b6108fa86610779565b945061090860208701610779565b935060408601359250606086013567ffffffffffffffff81111561092b57600080fd5b610937888289016107d5565b969995985093965092949392505050565b60006020828403121561095a57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156109a3576109a3610961565b92915050565b818103818111156109a3576109a361096156fea2646970667358221220dc5fefc55056e4988805c4147574dd4e84fd9bef0a08a8d2a4c08aa01d5688a664736f6c63430008190033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a05A3380889115bf313f1Db9d5f335157Be4D816
-----Decoded View---------------
Arg [0] : _spoke (address): 0xa05A3380889115bf313f1Db9d5f335157Be4D816
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000a05A3380889115bf313f1Db9d5f335157Be4D816
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.