Source Code
Overview
ETH Balance
0 ETH
ETH Value
$0.00
Cross-Chain Transactions
Loading...
Loading
Contract Name:
AlchemixConnextGateway
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/**
*Submitted for verification at optimistic.etherscan.io on 2023-07-28
*/
// Sources flattened with hardhat v2.9.9 https://hardhat.org
// File lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
}
// File lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol
// OpenZeppelin Contracts v4.4.1 (interfaces/IERC20.sol)
pragma solidity ^0.8.0;
// File src/interfaces/ICrossChainToken.sol
pragma solidity >=0.5.0;
/// @title ICrossChainToken
/// @author Alchemix Finance
interface ICrossChainToken is IERC20 {
/// @notice Gets the total amount of minted tokens for an account.
///
/// @param account The address of the account.
///
/// @return The total minted.
function hasMinted(address account) external view returns (uint256);
/// @notice Lowers the number of tokens which the `msg.sender` has minted.
///
/// This reverts if the `msg.sender` is not whitelisted.
///
/// @param amount The amount to lower the minted amount by.
function lowerHasMinted(uint256 amount) external;
/// @notice Sets the mint allowance for a given account'
///
/// This reverts if the `msg.sender` is not admin
///
/// @param toSetCeiling The account whos allowance to update
/// @param ceiling The amount of tokens allowed to mint
function setCeiling(address toSetCeiling, uint256 ceiling) external;
/// @notice Updates the state of an address in the whitelist map
///
/// This reverts if msg.sender is not admin
///
/// @param toWhitelist the address whos state is being updated
/// @param state the boolean state of the whitelist
function setWhitelist(address toWhitelist, bool state) external;
function mint(address recipient, uint256 amount) external;
function burn(uint256 amount) external;
function burnFrom(address account, uint256 amount) external;
function exchangeOldForCanonical(address bridgeTokenAddress, uint256 tokenAmount) external returns (uint256 canonicalTokensOut);
function exchangeCanonicalForOld(address bridgeTokenAddress, uint256 tokenAmount) external returns (uint256 bridgeTokensOut);
}
// File src/libraries/connext/LibConnextStorage.sol
pragma solidity ^0.8.13;
/**
* @notice Enum representing status of destination transfer
* @dev Status is only assigned on the destination domain, will always be "none" for the
* origin domains
* @return uint - Index of value in enum
*/
enum DestinationTransferStatus {
None, // 0
Reconciled, // 1
Executed, // 2
Completed // 3 - executed + reconciled
}
/**
* @notice These are the parameters that will remain constant between the
* two chains. They are supplied on `xcall` and should be asserted on `execute`
* @property to - The account that receives funds, in the event of a crosschain call,
* will receive funds if the call fails.
*
* @param originDomain - The originating domain (i.e. where `xcall` is called)
* @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\
* @param canonicalDomain - The canonical domain of the asset you are bridging
* @param to - The address you are sending funds (and potentially data) to
* @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers
* @param receiveLocal - If true, will use the local asset on the destination instead of adopted.
* @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.
* @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if
* a user takes 1% slippage, this is expressed as 1_000)
* @param originSender - The msg.sender of the xcall
* @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)
* @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals
* @param nonce - The nonce on the origin domain used to ensure the transferIds are unique
* @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets
*/
struct TransferInfo {
uint32 originDomain;
uint32 destinationDomain;
uint32 canonicalDomain;
address to;
address delegate;
bool receiveLocal;
bytes callData;
uint256 slippage;
address originSender;
uint256 bridgedAmt;
uint256 normalizedIn;
uint256 nonce;
bytes32 canonicalId;
}
/**
* @notice
* @param params - The TransferInfo. These are consistent across sending and receiving chains.
* @param routers - The routers who you are sending the funds on behalf of.
* @param routerSignatures - Signatures belonging to the routers indicating permission to use funds
* for the signed transfer ID.
* @param sequencer - The sequencer who assigned the router path to this transfer.
* @param sequencerSignature - Signature produced by the sequencer for path assignment accountability
* for the path that was signed.
*/
struct ExecuteArgs {
TransferInfo params;
address[] routers;
bytes[] routerSignatures;
address sequencer;
bytes sequencerSignature;
}
// File src/libraries/connext/TokenId.sol
pragma solidity ^0.8.13;
// ============= Structs =============
// Tokens are identified by a TokenId:
// domain - 4 byte chain ID of the chain from which the token originates
// id - 32 byte identifier of the token address on the origin chain, in that chain's address format
struct TokenId {
uint32 domain;
bytes32 id;
}
// File src/interfaces/external/connext/IConnext.sol
pragma solidity ^0.8.13;
interface IConnext {
// ============ BRIDGE ==============
function xcall(
uint32 _destination,
address _to,
address _asset,
address _delegate,
uint256 _amount,
uint256 _slippage,
bytes calldata _callData
) external payable returns (bytes32);
function xcallIntoLocal(
uint32 _destination,
address _to,
address _asset,
address _delegate,
uint256 _amount,
uint256 _slippage,
bytes calldata _callData
) external payable returns (bytes32);
function execute(ExecuteArgs calldata _args) external returns (bytes32 transferId);
function forceUpdateSlippage(TransferInfo calldata _params, uint256 _slippage) external;
function forceReceiveLocal(TransferInfo calldata _params) external;
function bumpTransfer(bytes32 _transferId) external payable;
function routedTransfers(bytes32 _transferId) external view returns (address[] memory);
function transferStatus(bytes32 _transferId) external view returns (DestinationTransferStatus);
function remote(uint32 _domain) external view returns (address);
function domain() external view returns (uint256);
function nonce() external view returns (uint256);
function approvedSequencers(address _sequencer) external view returns (bool);
function xAppConnectionManager() external view returns (address);
// ============ ROUTERS ==============
function LIQUIDITY_FEE_NUMERATOR() external view returns (uint256);
function LIQUIDITY_FEE_DENOMINATOR() external view returns (uint256);
function getRouterApproval(address _router) external view returns (bool);
function getRouterRecipient(address _router) external view returns (address);
function getRouterOwner(address _router) external view returns (address);
function getProposedRouterOwner(address _router) external view returns (address);
function getProposedRouterOwnerTimestamp(address _router) external view returns (uint256);
function maxRoutersPerTransfer() external view returns (uint256);
function routerBalances(address _router, address _asset) external view returns (uint256);
function getRouterApprovalForPortal(address _router) external view returns (bool);
function initializeRouter(address _owner, address _recipient) external;
function setRouterRecipient(address _router, address _recipient) external;
function proposeRouterOwner(address _router, address _proposed) external;
function acceptProposedRouterOwner(address _router) external;
function addRouterLiquidityFor(
uint256 _amount,
address _local,
address _router
) external payable;
function addRouterLiquidity(uint256 _amount, address _local) external payable;
function removeRouterLiquidityFor(
TokenId memory _canonical,
uint256 _amount,
address payable _to,
address _router
) external;
function removeRouterLiquidity(TokenId memory _canonical, uint256 _amount, address payable _to) external;
}
// File src/interfaces/external/connext/IXReceiver.sol
pragma solidity ^0.8.13;
interface IXReceiver {
function xReceive(
bytes32 _transferId,
uint256 _amount,
address _asset,
address _originSender,
uint32 _origin,
bytes memory _callData
) external returns (bytes memory);
}
// File lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
// File src/interfaces/IERC20Burnable.sol
pragma solidity >=0.5.0;
/// @title IERC20Burnable
/// @author Alchemix Finance
interface IERC20Burnable is IERC20 {
/// @notice Burns `amount` tokens from the balance of `msg.sender`.
///
/// @param amount The amount of tokens to burn.
///
/// @return If burning the tokens was successful.
function burn(uint256 amount) external returns (bool);
/// @notice Burns `amount` tokens from `owner`'s balance.
///
/// @param owner The address to burn tokens from.
/// @param amount The amount of tokens to burn.
///
/// @return If burning the tokens was successful.
function burnFrom(address owner, uint256 amount) external returns (bool);
}
// File src/interfaces/IERC20Mintable.sol
pragma solidity >=0.5.0;
/// @title IERC20Mintable
/// @author Alchemix Finance
interface IERC20Mintable is IERC20 {
/// @notice Mints `amount` tokens to `recipient`.
///
/// @param recipient The address which will receive the minted tokens.
/// @param amount The amount of tokens to mint.
function mint(address recipient, uint256 amount) external;
}
// File src/libraries/TokenUtils.sol
pragma solidity ^0.8.13;
/// @title TokenUtils
/// @author Alchemix Finance
library TokenUtils {
/// @notice An error used to indicate that a call to an ERC20 contract failed.
///
/// @param target The target address.
/// @param success If the call to the token was a success.
/// @param data The resulting data from the call. This is error data when the call was not a success. Otherwise,
/// this is malformed data when the call was a success.
error ERC20CallFailed(address target, bool success, bytes data);
/// @dev A safe function to get the decimals of an ERC20 token.
///
/// @dev Reverts with a {CallFailed} error if execution of the query fails or returns an unexpected value.
///
/// @param token The target token.
///
/// @return The amount of decimals of the token.
function expectDecimals(address token) internal view returns (uint8) {
(bool success, bytes memory data) = token.staticcall(
abi.encodeWithSelector(IERC20Metadata.decimals.selector)
);
if (token.code.length == 0 || !success || data.length < 32) {
revert ERC20CallFailed(token, success, data);
}
return abi.decode(data, (uint8));
}
/// @dev Gets the balance of tokens held by an account.
///
/// @dev Reverts with a {CallFailed} error if execution of the query fails or returns an unexpected value.
///
/// @param token The token to check the balance of.
/// @param account The address of the token holder.
///
/// @return The balance of the tokens held by an account.
function safeBalanceOf(address token, address account) internal view returns (uint256) {
(bool success, bytes memory data) = token.staticcall(
abi.encodeWithSelector(IERC20.balanceOf.selector, account)
);
if (token.code.length == 0 || !success || data.length < 32) {
revert ERC20CallFailed(token, success, data);
}
return abi.decode(data, (uint256));
}
/// @dev Transfers tokens to another address.
///
/// @dev Reverts with a {CallFailed} error if execution of the transfer failed or returns an unexpected value.
///
/// @param token The token to transfer.
/// @param recipient The address of the recipient.
/// @param amount The amount of tokens to transfer.
function safeTransfer(address token, address recipient, uint256 amount) internal {
(bool success, bytes memory data) = token.call(
abi.encodeWithSelector(IERC20.transfer.selector, recipient, amount)
);
if (token.code.length == 0 || !success || (data.length != 0 && !abi.decode(data, (bool)))) {
revert ERC20CallFailed(token, success, data);
}
}
/// @dev Approves tokens for the smart contract.
///
/// @dev Reverts with a {CallFailed} error if execution of the approval fails or returns an unexpected value.
///
/// @param token The token to approve.
/// @param spender The contract to spend the tokens.
/// @param value The amount of tokens to approve.
function safeApprove(address token, address spender, uint256 value) internal {
(bool success, bytes memory data) = token.call(
abi.encodeWithSelector(IERC20.approve.selector, spender, value)
);
if (token.code.length == 0 || !success || (data.length != 0 && !abi.decode(data, (bool)))) {
revert ERC20CallFailed(token, success, data);
}
}
/// @dev Transfer tokens from one address to another address.
///
/// @dev Reverts with a {CallFailed} error if execution of the transfer fails or returns an unexpected value.
///
/// @param token The token to transfer.
/// @param owner The address of the owner.
/// @param recipient The address of the recipient.
/// @param amount The amount of tokens to transfer.
function safeTransferFrom(address token, address owner, address recipient, uint256 amount) internal {
(bool success, bytes memory data) = token.call(
abi.encodeWithSelector(IERC20.transferFrom.selector, owner, recipient, amount)
);
if (token.code.length == 0 || !success || (data.length != 0 && !abi.decode(data, (bool)))) {
revert ERC20CallFailed(token, success, data);
}
}
/// @dev Mints tokens to an address.
///
/// @dev Reverts with a {CallFailed} error if execution of the mint fails or returns an unexpected value.
///
/// @param token The token to mint.
/// @param recipient The address of the recipient.
/// @param amount The amount of tokens to mint.
function safeMint(address token, address recipient, uint256 amount) internal {
(bool success, bytes memory data) = token.call(
abi.encodeWithSelector(IERC20Mintable.mint.selector, recipient, amount)
);
if (token.code.length == 0 || !success || (data.length != 0 && !abi.decode(data, (bool)))) {
revert ERC20CallFailed(token, success, data);
}
}
/// @dev Burns tokens.
///
/// Reverts with a `CallFailed` error if execution of the burn fails or returns an unexpected value.
///
/// @param token The token to burn.
/// @param amount The amount of tokens to burn.
function safeBurn(address token, uint256 amount) internal {
(bool success, bytes memory data) = token.call(
abi.encodeWithSelector(IERC20Burnable.burn.selector, amount)
);
if (token.code.length == 0 || !success || (data.length != 0 && !abi.decode(data, (bool)))) {
revert ERC20CallFailed(token, success, data);
}
}
/// @dev Burns tokens from its total supply.
///
/// @dev Reverts with a {CallFailed} error if execution of the burn fails or returns an unexpected value.
///
/// @param token The token to burn.
/// @param owner The owner of the tokens.
/// @param amount The amount of tokens to burn.
function safeBurnFrom(address token, address owner, uint256 amount) internal {
(bool success, bytes memory data) = token.call(
abi.encodeWithSelector(IERC20Burnable.burnFrom.selector, owner, amount)
);
if (token.code.length == 0 || !success || (data.length != 0 && !abi.decode(data, (bool)))) {
revert ERC20CallFailed(token, success, data);
}
}
}
// File src/bridging/connext/AlchemixConnextGateway.sol
pragma solidity ^0.8.13;
/**
* @title AlchemixConnextGateway
*/
contract AlchemixConnextGateway is IXReceiver {
/// @notice The admin.
address public admin;
// The Connext contract on this domain
address public immutable connext;
// The next tokens mapped to their respective alAssets.
mapping (address => address) public assets;
/** @notice A modifier for authenticated calls.
* This is an important security consideration. msg.sender must be the connext contract.
*/
modifier onlySource() {
require(
msg.sender == connext,
"Expected original caller to be Connext contract"
);
_;
}
/// @dev A modifier which reverts if the message sender is not the admin.
modifier onlyAdmin() {
if (msg.sender != admin) {
revert ("Not admin");
}
_;
}
constructor(
address _connext
) {
connext = _connext;
admin = msg.sender;
}
function setAdmin(address newAdmin) external onlyAdmin {
admin = newAdmin;
}
function registerAsset(address nextAsset, address alAsset) external onlyAdmin {
assets[nextAsset] = alAsset;
}
function bridgeAssets (
address _target,
address _asset,
uint256 _amount,
uint32 _destinationDomain,
uint256 _relayerFee
) external payable returns (bytes32) {
TokenUtils.safeTransferFrom(assets[_asset], _target, address(this), _amount);
ICrossChainToken(assets[_asset]).exchangeCanonicalForOld(_asset, _amount);
TokenUtils.safeApprove(_asset, connext, _amount);
return IConnext(connext).xcall{value: _relayerFee}(
_destinationDomain, // _destination
_target, // _to
_asset, // _asset
msg.sender, // _delegate
_amount, // _amount
10000, // _slippage
bytes("") // _callData
);
}
/** @notice Authenticated receiver function.
* @param _callData Calldata containing the new greeting.
*/
function xReceive(
bytes32 _transferId,
uint256 _amount,
address _asset,
address _originSender,
uint32 _origin,
bytes memory _callData
) external onlySource() returns (bytes memory) {
TokenUtils.safeApprove(_asset, assets[_asset], _amount);
ICrossChainToken(assets[_asset]).exchangeOldForCanonical(_asset, _amount);
TokenUtils.safeTransfer(assets[_asset], abi.decode(_callData, (address)), _amount);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_connext","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"ERC20CallFailed","type":"error"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"assets","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"address","name":"_asset","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint32","name":"_destinationDomain","type":"uint32"},{"internalType":"uint256","name":"_relayerFee","type":"uint256"}],"name":"bridgeAssets","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"connext","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"nextAsset","type":"address"},{"internalType":"address","name":"alAsset","type":"address"}],"name":"registerAsset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_transferId","type":"bytes32"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_asset","type":"address"},{"internalType":"address","name":"_originSender","type":"address"},{"internalType":"uint32","name":"_origin","type":"uint32"},{"internalType":"bytes","name":"_callData","type":"bytes"}],"name":"xReceive","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60a060405234801561001057600080fd5b50604051610c51380380610c5183398101604081905261002f91610052565b6001600160a01b0316608052600080546001600160a01b03191633179055610082565b60006020828403121561006457600080fd5b81516001600160a01b038116811461007b57600080fd5b9392505050565b608051610ba06100b16000396000818160ef015281816103440152818161038d015261042a0152610ba06000f3fe6080604052600436106100705760003560e01c8063de4b05481161004e578063de4b0548146100dd578063f11b818814610129578063f851a4401461015f578063fd614f411461017f57600080fd5b80634fad6bff14610075578063704b6c02146100975780637bee258a146100b7575b600080fd5b34801561008157600080fd5b50610095610090366004610819565b6101ac565b005b3480156100a357600080fd5b506100956100b2366004610852565b610225565b6100ca6100c536600461088f565b61028d565b6040519081526020015b60405180910390f35b3480156100e957600080fd5b506101117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100d4565b34801561013557600080fd5b50610111610144366004610852565b6001602052600090815260409020546001600160a01b031681565b34801561016b57600080fd5b50600054610111906001600160a01b031681565b34801561018b57600080fd5b5061019f61019a3660046108fe565b61041d565b6040516100d49190610a53565b6000546001600160a01b031633146101f75760405162461bcd60e51b81526020600482015260096024820152682737ba1030b236b4b760b91b60448201526064015b60405180910390fd5b6001600160a01b03918216600090815260016020526040902080546001600160a01b03191691909216179055565b6000546001600160a01b0316331461026b5760405162461bcd60e51b81526020600482015260096024820152682737ba1030b236b4b760b91b60448201526064016101ee565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0380851660009081526001602052604081205490916102b6911687308761059c565b6001600160a01b038581166000818152600160205260409081902054905163280cf3ed60e01b81526004810192909252602482018790529091169063280cf3ed906044016020604051808303816000875af1158015610319573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033d9190610a66565b50610369857f0000000000000000000000000000000000000000000000000000000000000000866106b1565b604080516020810182526000815290516345560b5d60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691638aac16ba9185916103d09188918c918c9133918d9161271091600401610a7f565b60206040518083038185885af11580156103ee573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906104139190610a66565b9695505050505050565b6060336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104af5760405162461bcd60e51b815260206004820152602f60248201527f4578706563746564206f726967696e616c2063616c6c657220746f206265204360448201526e1bdb9b995e1d0818dbdb9d1c9858dd608a1b60648201526084016101ee565b6001600160a01b038086166000908152600160205260409020546104d691879116886106b1565b6001600160a01b0385811660008181526001602052604090819020549051639006a50f60e01b815260048101929092526024820189905290911690639006a50f906044016020604051808303816000875af1158015610539573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055d9190610a66565b506001600160a01b0380861660009081526001602090815260409091205484516104139391909116916105969186018101908601610ada565b886107ce565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916106009190610af7565b6000604051808303816000865af19150503d806000811461063d576040519150601f19603f3d011682016040523d82523d6000602084013e610642565b606091505b5091509150856001600160a01b03163b6000148061065e575081155b8061068557508051158015906106855750808060200190518101906106839190610b13565b155b156106a95785828260405163e7e40b5b60e01b81526004016101ee93929190610b35565b505050505050565b6040516001600160a01b03838116602483015260448201839052600091829186169063095ea7b360e01b906064015b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161071e9190610af7565b6000604051808303816000865af19150503d806000811461075b576040519150601f19603f3d011682016040523d82523d6000602084013e610760565b606091505b5091509150846001600160a01b03163b6000148061077c575081155b806107a357508051158015906107a35750808060200190518101906107a19190610b13565b155b156107c75784828260405163e7e40b5b60e01b81526004016101ee93929190610b35565b5050505050565b6040516001600160a01b03838116602483015260448201839052600091829186169063a9059cbb60e01b906064016106e0565b6001600160a01b038116811461081657600080fd5b50565b6000806040838503121561082c57600080fd5b823561083781610801565b9150602083013561084781610801565b809150509250929050565b60006020828403121561086457600080fd5b813561086f81610801565b9392505050565b803563ffffffff8116811461088a57600080fd5b919050565b600080600080600060a086880312156108a757600080fd5b85356108b281610801565b945060208601356108c281610801565b9350604086013592506108d760608701610876565b949793965091946080013592915050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c0878903121561091757600080fd5b8635955060208701359450604087013561093081610801565b9350606087013561094081610801565b925061094e60808801610876565b915060a087013567ffffffffffffffff8082111561096b57600080fd5b818901915089601f83011261097f57600080fd5b813581811115610991576109916108e8565b604051601f8201601f19908116603f011681019083821181831017156109b9576109b96108e8565b816040528281528c60208487010111156109d257600080fd5b8260208601602083013760006020848301015280955050505050509295509295509295565b60005b83811015610a125781810151838201526020016109fa565b83811115610a21576000848401525b50505050565b60008151808452610a3f8160208601602086016109f7565b601f01601f19169290920160200192915050565b60208152600061086f6020830184610a27565b600060208284031215610a7857600080fd5b5051919050565b63ffffffff881681526001600160a01b0387811660208301528681166040830152851660608201526080810184905260a0810183905260e060c08201819052600090610acd90830184610a27565b9998505050505050505050565b600060208284031215610aec57600080fd5b815161086f81610801565b60008251610b098184602087016109f7565b9190910192915050565b600060208284031215610b2557600080fd5b8151801515811461086f57600080fd5b6001600160a01b03841681528215156020820152606060408201819052600090610b6190830184610a27565b9594505050505056fea2646970667358221220b79cb06d6b0bd6b4e6eab11091bbf586421596c2964bf6c45604674cf0f4319464736f6c634300080d00330000000000000000000000008f7492de823025b4cfaab1d34c58963f2af5deda
Deployed Bytecode
0x6080604052600436106100705760003560e01c8063de4b05481161004e578063de4b0548146100dd578063f11b818814610129578063f851a4401461015f578063fd614f411461017f57600080fd5b80634fad6bff14610075578063704b6c02146100975780637bee258a146100b7575b600080fd5b34801561008157600080fd5b50610095610090366004610819565b6101ac565b005b3480156100a357600080fd5b506100956100b2366004610852565b610225565b6100ca6100c536600461088f565b61028d565b6040519081526020015b60405180910390f35b3480156100e957600080fd5b506101117f0000000000000000000000008f7492de823025b4cfaab1d34c58963f2af5deda81565b6040516001600160a01b0390911681526020016100d4565b34801561013557600080fd5b50610111610144366004610852565b6001602052600090815260409020546001600160a01b031681565b34801561016b57600080fd5b50600054610111906001600160a01b031681565b34801561018b57600080fd5b5061019f61019a3660046108fe565b61041d565b6040516100d49190610a53565b6000546001600160a01b031633146101f75760405162461bcd60e51b81526020600482015260096024820152682737ba1030b236b4b760b91b60448201526064015b60405180910390fd5b6001600160a01b03918216600090815260016020526040902080546001600160a01b03191691909216179055565b6000546001600160a01b0316331461026b5760405162461bcd60e51b81526020600482015260096024820152682737ba1030b236b4b760b91b60448201526064016101ee565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0380851660009081526001602052604081205490916102b6911687308761059c565b6001600160a01b038581166000818152600160205260409081902054905163280cf3ed60e01b81526004810192909252602482018790529091169063280cf3ed906044016020604051808303816000875af1158015610319573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033d9190610a66565b50610369857f0000000000000000000000008f7492de823025b4cfaab1d34c58963f2af5deda866106b1565b604080516020810182526000815290516345560b5d60e11b81526001600160a01b037f0000000000000000000000008f7492de823025b4cfaab1d34c58963f2af5deda1691638aac16ba9185916103d09188918c918c9133918d9161271091600401610a7f565b60206040518083038185885af11580156103ee573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906104139190610a66565b9695505050505050565b6060336001600160a01b037f0000000000000000000000008f7492de823025b4cfaab1d34c58963f2af5deda16146104af5760405162461bcd60e51b815260206004820152602f60248201527f4578706563746564206f726967696e616c2063616c6c657220746f206265204360448201526e1bdb9b995e1d0818dbdb9d1c9858dd608a1b60648201526084016101ee565b6001600160a01b038086166000908152600160205260409020546104d691879116886106b1565b6001600160a01b0385811660008181526001602052604090819020549051639006a50f60e01b815260048101929092526024820189905290911690639006a50f906044016020604051808303816000875af1158015610539573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055d9190610a66565b506001600160a01b0380861660009081526001602090815260409091205484516104139391909116916105969186018101908601610ada565b886107ce565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916106009190610af7565b6000604051808303816000865af19150503d806000811461063d576040519150601f19603f3d011682016040523d82523d6000602084013e610642565b606091505b5091509150856001600160a01b03163b6000148061065e575081155b8061068557508051158015906106855750808060200190518101906106839190610b13565b155b156106a95785828260405163e7e40b5b60e01b81526004016101ee93929190610b35565b505050505050565b6040516001600160a01b03838116602483015260448201839052600091829186169063095ea7b360e01b906064015b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161071e9190610af7565b6000604051808303816000865af19150503d806000811461075b576040519150601f19603f3d011682016040523d82523d6000602084013e610760565b606091505b5091509150846001600160a01b03163b6000148061077c575081155b806107a357508051158015906107a35750808060200190518101906107a19190610b13565b155b156107c75784828260405163e7e40b5b60e01b81526004016101ee93929190610b35565b5050505050565b6040516001600160a01b03838116602483015260448201839052600091829186169063a9059cbb60e01b906064016106e0565b6001600160a01b038116811461081657600080fd5b50565b6000806040838503121561082c57600080fd5b823561083781610801565b9150602083013561084781610801565b809150509250929050565b60006020828403121561086457600080fd5b813561086f81610801565b9392505050565b803563ffffffff8116811461088a57600080fd5b919050565b600080600080600060a086880312156108a757600080fd5b85356108b281610801565b945060208601356108c281610801565b9350604086013592506108d760608701610876565b949793965091946080013592915050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c0878903121561091757600080fd5b8635955060208701359450604087013561093081610801565b9350606087013561094081610801565b925061094e60808801610876565b915060a087013567ffffffffffffffff8082111561096b57600080fd5b818901915089601f83011261097f57600080fd5b813581811115610991576109916108e8565b604051601f8201601f19908116603f011681019083821181831017156109b9576109b96108e8565b816040528281528c60208487010111156109d257600080fd5b8260208601602083013760006020848301015280955050505050509295509295509295565b60005b83811015610a125781810151838201526020016109fa565b83811115610a21576000848401525b50505050565b60008151808452610a3f8160208601602086016109f7565b601f01601f19169290920160200192915050565b60208152600061086f6020830184610a27565b600060208284031215610a7857600080fd5b5051919050565b63ffffffff881681526001600160a01b0387811660208301528681166040830152851660608201526080810184905260a0810183905260e060c08201819052600090610acd90830184610a27565b9998505050505050505050565b600060208284031215610aec57600080fd5b815161086f81610801565b60008251610b098184602087016109f7565b9190910192915050565b600060208284031215610b2557600080fd5b8151801515811461086f57600080fd5b6001600160a01b03841681528215156020820152606060408201819052600090610b6190830184610a27565b9594505050505056fea2646970667358221220b79cb06d6b0bd6b4e6eab11091bbf586421596c2964bf6c45604674cf0f4319464736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000008f7492de823025b4cfaab1d34c58963f2af5deda
-----Decoded View---------------
Arg [0] : _connext (address): 0x8f7492DE823025b4CfaAB1D34c58963F2af5DEDA
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000008f7492de823025b4cfaab1d34c58963f2af5deda
Deployed Bytecode Sourcemap
20491:2443:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21476:118;;;;;;;;;;-1:-1:-1;21476:118:0;;;;;:::i;:::-;;:::i;:::-;;21386:84;;;;;;;;;;-1:-1:-1;21386:84:0;;;;;:::i;:::-;;:::i;21600:749::-;;;;;;:::i;:::-;;:::i;:::-;;;1712:25:1;;;1700:2;1685:18;21600:749:0;;;;;;;;20637:32;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1912:32:1;;;1894:51;;1882:2;1867:18;20637:32:0;1748:203:1;20736:42:0;;;;;;;;;;-1:-1:-1;20736:42:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;20736:42:0;;;20568:20;;;;;;;;;;-1:-1:-1;20568:20:0;;;;-1:-1:-1;;;;;20568:20:0;;;22473:458;;;;;;;;;;-1:-1:-1;22473:458:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;21476:118::-;21213:5;;-1:-1:-1;;;;;21213:5:0;21199:10;:19;21195:68;;21233:20;;-1:-1:-1;;;21233:20:0;;4450:2:1;21233:20:0;;;4432:21:1;4489:1;4469:18;;;4462:29;-1:-1:-1;;;4507:18:1;;;4500:39;4556:18;;21233:20:0;;;;;;;;21195:68;-1:-1:-1;;;;;21561:17:0;;::::1;;::::0;;;:6:::1;:17;::::0;;;;:27;;-1:-1:-1;;;;;;21561:27:0::1;::::0;;;::::1;;::::0;;21476:118::o;21386:84::-;21213:5;;-1:-1:-1;;;;;21213:5:0;21199:10;:19;21195:68;;21233:20;;-1:-1:-1;;;21233:20:0;;4450:2:1;21233:20:0;;;4432:21:1;4489:1;4469:18;;;4462:29;-1:-1:-1;;;4507:18:1;;;4500:39;4556:18;;21233:20:0;4248:332:1;21195:68:0;21448:5:::1;:16:::0;;-1:-1:-1;;;;;;21448:16:0::1;-1:-1:-1::0;;;;;21448:16:0;;;::::1;::::0;;;::::1;::::0;;21386:84::o;21600:749::-;-1:-1:-1;;;;;21821:14:0;;;21777:7;21821:14;;;:6;:14;;;;;;21777:7;;21793:76;;21821:14;21837:7;21854:4;21861:7;21793:27;:76::i;:::-;-1:-1:-1;;;;;21893:14:0;;;;;;;:6;:14;;;;;;;;21876:73;;-1:-1:-1;;;21876:73:0;;;;;4759:51:1;;;;4826:18;;;4819:34;;;21893:14:0;;;;21876:56;;4732:18:1;;21876:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21958:48;21981:6;21989:7;21998;21958:22;:48::i;:::-;22304:9;;;;;;;;-1:-1:-1;22304:9:0;;22020:323;;-1:-1:-1;;;22020:323:0;;-1:-1:-1;;;;;22029:7:0;22020:23;;;;22051:11;;22020:323;;22072:18;;22115:7;;22149:6;;22186:10;;22226:7;;22264:5;;22020:323;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22013:330;21600:749;-1:-1:-1;;;;;;21600:749:0:o;22473:458::-;22674:12;20982:10;-1:-1:-1;;;;;20996:7:0;20982:21;;20964:104;;;;-1:-1:-1;;;20964:104:0;;6189:2:1;20964:104:0;;;6171:21:1;6228:2;6208:18;;;6201:30;6267:34;6247:18;;;6240:62;-1:-1:-1;;;6318:18:1;;;6311:45;6373:19;;20964:104:0;5987:411:1;20964:104:0;-1:-1:-1;;;;;22726:14:0;;::::1;;::::0;;;:6:::1;:14;::::0;;;;;22695:55:::1;::::0;22718:6;;22726:14:::1;22742:7:::0;22695:22:::1;:55::i;:::-;-1:-1:-1::0;;;;;22774:14:0;;::::1;;::::0;;;:6:::1;:14;::::0;;;;;;;22757:73;;-1:-1:-1;;;22757:73:0;;::::1;::::0;::::1;4759:51:1::0;;;;4826:18;;;4819:34;;;22774:14:0;;::::1;::::0;22757:56:::1;::::0;4732:18:1;;22757:73:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;22867:14:0;;::::1;;::::0;;;:6:::1;:14;::::0;;;;;;;;22883:32;;22843:82:::1;::::0;22867:14;;;::::1;::::0;22883:32:::1;::::0;;;;;;;::::1;;:::i;:::-;22917:7;22843:23;:82::i;17774:443::-:0;17946:78;;;-1:-1:-1;;;;;6925:15:1;;;17946:78:0;;;6907:34:1;6977:15;;;6957:18;;;6950:43;7009:18;;;;7002:34;;;17946:78:0;;;;;;;;;;6842:18:1;;;;17946:78:0;;;;;;;-1:-1:-1;;;;;17946:78:0;-1:-1:-1;;;17946:78:0;;;17921:114;;-1:-1:-1;;;;17921:10:0;;;;:114;;17946:78;17921:114;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17885:150;;;;18052:5;-1:-1:-1;;;;;18052:17:0;;18073:1;18052:22;:34;;;;18079:7;18078:8;18052:34;:85;;;-1:-1:-1;18091:11:0;;:16;;;;:45;;;18123:4;18112:24;;;;;;;;;;;;:::i;:::-;18111:25;18091:45;18048:162;;;18177:5;18184:7;18193:4;18161:37;;-1:-1:-1;;;18161:37:0;;;;;;;;;;:::i;18048:162::-;17874:343;;17774:443;;;;:::o;16944:405::-;17093:63;;-1:-1:-1;;;;;4777:32:1;;;17093:63:0;;;4759:51:1;4826:18;;;4819:34;;;17033:12:0;;;;17068:10;;;-1:-1:-1;;;17116:23:0;4732:18:1;;17093:63:0;;;;-1:-1:-1;;17093:63:0;;;;;;;;;;;;;;-1:-1:-1;;;;;17093:63:0;-1:-1:-1;;;;;;17093:63:0;;;;;;;;;;17068:99;;;;17093:63;17068:99;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17032:135;;;;17184:5;-1:-1:-1;;;;;17184:17:0;;17205:1;17184:22;:34;;;;17211:7;17210:8;17184:34;:85;;;-1:-1:-1;17223:11:0;;:16;;;;:45;;;17255:4;17244:24;;;;;;;;;;;;:::i;:::-;17243:25;17223:45;17180:162;;;17309:5;17316:7;17325:4;17293:37;;-1:-1:-1;;;17293:37:0;;;;;;;;;;:::i;17180:162::-;17021:328;;16944:405;;;:::o;16175:413::-;16328:67;;-1:-1:-1;;;;;4777:32:1;;;16328:67:0;;;4759:51:1;4826:18;;;4819:34;;;16268:12:0;;;;16303:10;;;-1:-1:-1;;;16351:24:0;4732:18:1;;16328:67:0;4585:274:1;14:131;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:388::-;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;-1:-1:-1;460:2:1;445:18;;432:32;473:33;432:32;473:33;:::i;:::-;525:7;515:17;;;150:388;;;;;:::o;543:247::-;602:6;655:2;643:9;634:7;630:23;626:32;623:52;;;671:1;668;661:12;623:52;710:9;697:23;729:31;754:5;729:31;:::i;:::-;779:5;543:247;-1:-1:-1;;;543:247:1:o;795:163::-;862:20;;922:10;911:22;;901:33;;891:61;;948:1;945;938:12;891:61;795:163;;;:::o;963:598::-;1057:6;1065;1073;1081;1089;1142:3;1130:9;1121:7;1117:23;1113:33;1110:53;;;1159:1;1156;1149:12;1110:53;1198:9;1185:23;1217:31;1242:5;1217:31;:::i;:::-;1267:5;-1:-1:-1;1324:2:1;1309:18;;1296:32;1337:33;1296:32;1337:33;:::i;:::-;1389:7;-1:-1:-1;1443:2:1;1428:18;;1415:32;;-1:-1:-1;1466:37:1;1499:2;1484:18;;1466:37;:::i;:::-;963:598;;;;-1:-1:-1;963:598:1;;1550:3;1535:19;1522:33;;963:598;-1:-1:-1;;963:598:1:o;1956:127::-;2017:10;2012:3;2008:20;2005:1;1998:31;2048:4;2045:1;2038:15;2072:4;2069:1;2062:15;2088:1408;2200:6;2208;2216;2224;2232;2240;2293:3;2281:9;2272:7;2268:23;2264:33;2261:53;;;2310:1;2307;2300:12;2261:53;2346:9;2333:23;2323:33;;2403:2;2392:9;2388:18;2375:32;2365:42;;2457:2;2446:9;2442:18;2429:32;2470:31;2495:5;2470:31;:::i;:::-;2520:5;-1:-1:-1;2577:2:1;2562:18;;2549:32;2590:33;2549:32;2590:33;:::i;:::-;2642:7;-1:-1:-1;2668:38:1;2701:3;2686:19;;2668:38;:::i;:::-;2658:48;;2757:3;2746:9;2742:19;2729:33;2781:18;2822:2;2814:6;2811:14;2808:34;;;2838:1;2835;2828:12;2808:34;2876:6;2865:9;2861:22;2851:32;;2921:7;2914:4;2910:2;2906:13;2902:27;2892:55;;2943:1;2940;2933:12;2892:55;2979:2;2966:16;3001:2;2997;2994:10;2991:36;;;3007:18;;:::i;:::-;3082:2;3076:9;3050:2;3136:13;;-1:-1:-1;;3132:22:1;;;3156:2;3128:31;3124:40;3112:53;;;3180:18;;;3200:22;;;3177:46;3174:72;;;3226:18;;:::i;:::-;3266:10;3262:2;3255:22;3301:2;3293:6;3286:18;3341:7;3336:2;3331;3327;3323:11;3319:20;3316:33;3313:53;;;3362:1;3359;3352:12;3313:53;3418:2;3413;3409;3405:11;3400:2;3392:6;3388:15;3375:46;3463:1;3458:2;3453;3445:6;3441:15;3437:24;3430:35;3484:6;3474:16;;;;;;;2088:1408;;;;;;;;:::o;3501:258::-;3573:1;3583:113;3597:6;3594:1;3591:13;3583:113;;;3673:11;;;3667:18;3654:11;;;3647:39;3619:2;3612:10;3583:113;;;3714:6;3711:1;3708:13;3705:48;;;3749:1;3740:6;3735:3;3731:16;3724:27;3705:48;;3501:258;;;:::o;3764:257::-;3805:3;3843:5;3837:12;3870:6;3865:3;3858:19;3886:63;3942:6;3935:4;3930:3;3926:14;3919:4;3912:5;3908:16;3886:63;:::i;:::-;4003:2;3982:15;-1:-1:-1;;3978:29:1;3969:39;;;;4010:4;3965:50;;3764:257;-1:-1:-1;;3764:257:1:o;4026:217::-;4173:2;4162:9;4155:21;4136:4;4193:44;4233:2;4222:9;4218:18;4210:6;4193:44;:::i;4864:184::-;4934:6;4987:2;4975:9;4966:7;4962:23;4958:32;4955:52;;;5003:1;5000;4993:12;4955:52;-1:-1:-1;5026:16:1;;4864:184;-1:-1:-1;4864:184:1:o;5053:740::-;5390:10;5378:23;;5360:42;;-1:-1:-1;;;;;5476:15:1;;;5471:2;5456:18;;5449:43;5528:15;;;5523:2;5508:18;;5501:43;5580:15;;5575:2;5560:18;;5553:43;5627:3;5612:19;;5605:35;;;5429:3;5656:19;;5649:35;;;5721:3;5715;5700:19;;5693:32;;;5341:4;;5742:45;;5767:19;;5759:6;5742:45;:::i;:::-;5734:53;5053:740;-1:-1:-1;;;;;;;;;5053:740:1:o;6403:259::-;6481:6;6534:2;6522:9;6513:7;6509:23;6505:32;6502:52;;;6550:1;6547;6540:12;6502:52;6582:9;6576:16;6601:31;6626:5;6601:31;:::i;7047:274::-;7176:3;7214:6;7208:13;7230:53;7276:6;7271:3;7264:4;7256:6;7252:17;7230:53;:::i;:::-;7299:16;;;;;7047:274;-1:-1:-1;;7047:274:1:o;7326:277::-;7393:6;7446:2;7434:9;7425:7;7421:23;7417:32;7414:52;;;7462:1;7459;7452:12;7414:52;7494:9;7488:16;7547:5;7540:13;7533:21;7526:5;7523:32;7513:60;;7569:1;7566;7559:12;7608:395;-1:-1:-1;;;;;7805:32:1;;7787:51;;7881:14;;7874:22;7869:2;7854:18;;7847:50;7933:2;7928;7913:18;;7906:30;;;-1:-1:-1;;7953:44:1;;7978:18;;7970:6;7953:44;:::i;:::-;7945:52;7608:395;-1:-1:-1;;;;;7608:395:1:o
Swarm Source
ipfs://b79cb06d6b0bd6b4e6eab11091bbf586421596c2964bf6c45604674cf0f43194
Loading...
Loading
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 ]
[ 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.