Source Code
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 107527214 | 923 days ago | 0 ETH | ||||
| 107527214 | 923 days ago | 0 ETH | ||||
| 107527214 | 923 days ago | 0 ETH | ||||
| 107527214 | 923 days ago | 0 ETH | ||||
| 107521922 | 923 days ago | 0 ETH | ||||
| 107521922 | 923 days ago | 0 ETH | ||||
| 107521922 | 923 days ago | 0 ETH | ||||
| 107521922 | 923 days ago | 0 ETH | ||||
| 107510016 | 923 days ago | 0 ETH | ||||
| 107510016 | 923 days ago | 0 ETH | ||||
| 107510016 | 923 days ago | 0 ETH | ||||
| 107510016 | 923 days ago | 0 ETH | ||||
| 107469586 | 924 days ago | 0 ETH | ||||
| 107469586 | 924 days ago | 0 ETH | ||||
| 107469586 | 924 days ago | 0 ETH | ||||
| 107469586 | 924 days ago | 0 ETH | ||||
| 107448017 | 925 days ago | 0 ETH | ||||
| 107448017 | 925 days ago | 0 ETH | ||||
| 107448017 | 925 days ago | 0 ETH | ||||
| 107448017 | 925 days ago | 0 ETH | ||||
| 107437184 | 925 days ago | 0 ETH | ||||
| 107437184 | 925 days ago | 0 ETH | ||||
| 107437184 | 925 days ago | 0 ETH | ||||
| 107437184 | 925 days ago | 0 ETH | ||||
| 107421292 | 925 days ago | 0 ETH |
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-17
*/
// 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 {
TokenUtils.safeTransferFrom(assets[_asset], _target, address(this), _amount);
ICrossChainToken(assets[_asset]).exchangeCanonicalForOld(_asset, _amount);
TokenUtils.safeApprove(_asset, connext, _amount);
IConnext(connext).xcall{value: _relayerFee}(
_destinationDomain, // _destination
_target, // _to
_asset, // _asset
msg.sender, // _delegate
_amount, // _amount
0, // _slippage
"" // _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":[],"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
60a060405234801561001057600080fd5b50604051610c01380380610c0183398101604081905261002f91610052565b6001600160a01b0316608052600080546001600160a01b03191633179055610082565b60006020828403121561006457600080fd5b81516001600160a01b038116811461007b57600080fd5b9392505050565b608051610b506100b16000396000818160dc01528181610334015281816103ae01526104330152610b506000f3fe6080604052600436106100705760003560e01c8063de4b05481161004e578063de4b0548146100ca578063f11b81881461011b578063f851a44014610151578063fd614f411461017157600080fd5b80634fad6bff14610075578063704b6c02146100975780637bee258a146100b7575b600080fd5b34801561008157600080fd5b50610095610090366004610824565b61019e565b005b3480156100a357600080fd5b506100956100b236600461085d565b610217565b6100956100c536600461089a565b61027f565b3480156100d657600080fd5b506100fe7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561012757600080fd5b506100fe61013636600461085d565b6001602052600090815260409020546001600160a01b031681565b34801561015d57600080fd5b506000546100fe906001600160a01b031681565b34801561017d57600080fd5b5061019161018c366004610909565b610426565b6040516101129190610a5e565b6000546001600160a01b031633146101e95760405162461bcd60e51b81526020600482015260096024820152682737ba1030b236b4b760b91b60448201526064015b60405180910390fd5b6001600160a01b03918216600090815260016020526040902080546001600160a01b03191691909216179055565b6000546001600160a01b0316331461025d5760405162461bcd60e51b81526020600482015260096024820152682737ba1030b236b4b760b91b60448201526064016101e0565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038085166000908152600160205260409020546102a691168630866105af565b6001600160a01b038481166000818152600160205260409081902054905163280cf3ed60e01b81526004810192909252602482018690529091169063280cf3ed906044016020604051808303816000875af1158015610309573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032d9190610a71565b50610359847f0000000000000000000000000000000000000000000000000000000000000000856106bc565b6040516345560b5d60e11b815263ffffffff831660048201526001600160a01b038681166024830152858116604483015233606483015260848201859052600060a4830181905260e060c484015260e48301527f00000000000000000000000000000000000000000000000000000000000000001690638aac16ba9083906101040160206040518083038185885af11580156103f9573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061041e9190610a71565b505050505050565b6060336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104b85760405162461bcd60e51b815260206004820152602f60248201527f4578706563746564206f726967696e616c2063616c6c657220746f206265204360448201526e1bdb9b995e1d0818dbdb9d1c9858dd608a1b60648201526084016101e0565b6001600160a01b038086166000908152600160205260409020546104df91879116886106bc565b6001600160a01b0385811660008181526001602052604090819020549051639006a50f60e01b815260048101929092526024820189905290911690639006a50f906044016020604051808303816000875af1158015610542573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105669190610a71565b506001600160a01b0380861660009081526001602090815260409091205484516105a593919091169161059f9186018101908601610a8a565b886107d9565b9695505050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916106139190610aa7565b6000604051808303816000865af19150503d8060008114610650576040519150601f19603f3d011682016040523d82523d6000602084013e610655565b606091505b5091509150856001600160a01b03163b60001480610671575081155b8061069857508051158015906106985750808060200190518101906106969190610ac3565b155b1561041e5785828260405163e7e40b5b60e01b81526004016101e093929190610ae5565b6040516001600160a01b03838116602483015260448201839052600091829186169063095ea7b360e01b906064015b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516107299190610aa7565b6000604051808303816000865af19150503d8060008114610766576040519150601f19603f3d011682016040523d82523d6000602084013e61076b565b606091505b5091509150846001600160a01b03163b60001480610787575081155b806107ae57508051158015906107ae5750808060200190518101906107ac9190610ac3565b155b156107d25784828260405163e7e40b5b60e01b81526004016101e093929190610ae5565b5050505050565b6040516001600160a01b03838116602483015260448201839052600091829186169063a9059cbb60e01b906064016106eb565b6001600160a01b038116811461082157600080fd5b50565b6000806040838503121561083757600080fd5b82356108428161080c565b915060208301356108528161080c565b809150509250929050565b60006020828403121561086f57600080fd5b813561087a8161080c565b9392505050565b803563ffffffff8116811461089557600080fd5b919050565b600080600080600060a086880312156108b257600080fd5b85356108bd8161080c565b945060208601356108cd8161080c565b9350604086013592506108e260608701610881565b949793965091946080013592915050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c0878903121561092257600080fd5b8635955060208701359450604087013561093b8161080c565b9350606087013561094b8161080c565b925061095960808801610881565b915060a087013567ffffffffffffffff8082111561097657600080fd5b818901915089601f83011261098a57600080fd5b81358181111561099c5761099c6108f3565b604051601f8201601f19908116603f011681019083821181831017156109c4576109c46108f3565b816040528281528c60208487010111156109dd57600080fd5b8260208601602083013760006020848301015280955050505050509295509295509295565b60005b83811015610a1d578181015183820152602001610a05565b83811115610a2c576000848401525b50505050565b60008151808452610a4a816020860160208601610a02565b601f01601f19169290920160200192915050565b60208152600061087a6020830184610a32565b600060208284031215610a8357600080fd5b5051919050565b600060208284031215610a9c57600080fd5b815161087a8161080c565b60008251610ab9818460208701610a02565b9190910192915050565b600060208284031215610ad557600080fd5b8151801515811461087a57600080fd5b6001600160a01b03841681528215156020820152606060408201819052600090610b1190830184610a32565b9594505050505056fea264697066735822122011470d5a6e837c2524d95dd5574aafed6bb675a5dfddb904715212c5579fdaa464736f6c634300080d00330000000000000000000000008f7492de823025b4cfaab1d34c58963f2af5deda
Deployed Bytecode
0x6080604052600436106100705760003560e01c8063de4b05481161004e578063de4b0548146100ca578063f11b81881461011b578063f851a44014610151578063fd614f411461017157600080fd5b80634fad6bff14610075578063704b6c02146100975780637bee258a146100b7575b600080fd5b34801561008157600080fd5b50610095610090366004610824565b61019e565b005b3480156100a357600080fd5b506100956100b236600461085d565b610217565b6100956100c536600461089a565b61027f565b3480156100d657600080fd5b506100fe7f0000000000000000000000008f7492de823025b4cfaab1d34c58963f2af5deda81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561012757600080fd5b506100fe61013636600461085d565b6001602052600090815260409020546001600160a01b031681565b34801561015d57600080fd5b506000546100fe906001600160a01b031681565b34801561017d57600080fd5b5061019161018c366004610909565b610426565b6040516101129190610a5e565b6000546001600160a01b031633146101e95760405162461bcd60e51b81526020600482015260096024820152682737ba1030b236b4b760b91b60448201526064015b60405180910390fd5b6001600160a01b03918216600090815260016020526040902080546001600160a01b03191691909216179055565b6000546001600160a01b0316331461025d5760405162461bcd60e51b81526020600482015260096024820152682737ba1030b236b4b760b91b60448201526064016101e0565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038085166000908152600160205260409020546102a691168630866105af565b6001600160a01b038481166000818152600160205260409081902054905163280cf3ed60e01b81526004810192909252602482018690529091169063280cf3ed906044016020604051808303816000875af1158015610309573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032d9190610a71565b50610359847f0000000000000000000000008f7492de823025b4cfaab1d34c58963f2af5deda856106bc565b6040516345560b5d60e11b815263ffffffff831660048201526001600160a01b038681166024830152858116604483015233606483015260848201859052600060a4830181905260e060c484015260e48301527f0000000000000000000000008f7492de823025b4cfaab1d34c58963f2af5deda1690638aac16ba9083906101040160206040518083038185885af11580156103f9573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061041e9190610a71565b505050505050565b6060336001600160a01b037f0000000000000000000000008f7492de823025b4cfaab1d34c58963f2af5deda16146104b85760405162461bcd60e51b815260206004820152602f60248201527f4578706563746564206f726967696e616c2063616c6c657220746f206265204360448201526e1bdb9b995e1d0818dbdb9d1c9858dd608a1b60648201526084016101e0565b6001600160a01b038086166000908152600160205260409020546104df91879116886106bc565b6001600160a01b0385811660008181526001602052604090819020549051639006a50f60e01b815260048101929092526024820189905290911690639006a50f906044016020604051808303816000875af1158015610542573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105669190610a71565b506001600160a01b0380861660009081526001602090815260409091205484516105a593919091169161059f9186018101908601610a8a565b886107d9565b9695505050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916106139190610aa7565b6000604051808303816000865af19150503d8060008114610650576040519150601f19603f3d011682016040523d82523d6000602084013e610655565b606091505b5091509150856001600160a01b03163b60001480610671575081155b8061069857508051158015906106985750808060200190518101906106969190610ac3565b155b1561041e5785828260405163e7e40b5b60e01b81526004016101e093929190610ae5565b6040516001600160a01b03838116602483015260448201839052600091829186169063095ea7b360e01b906064015b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516107299190610aa7565b6000604051808303816000865af19150503d8060008114610766576040519150601f19603f3d011682016040523d82523d6000602084013e61076b565b606091505b5091509150846001600160a01b03163b60001480610787575081155b806107ae57508051158015906107ae5750808060200190518101906107ac9190610ac3565b155b156107d25784828260405163e7e40b5b60e01b81526004016101e093929190610ae5565b5050505050565b6040516001600160a01b03838116602483015260448201839052600091829186169063a9059cbb60e01b906064016106eb565b6001600160a01b038116811461082157600080fd5b50565b6000806040838503121561083757600080fd5b82356108428161080c565b915060208301356108528161080c565b809150509250929050565b60006020828403121561086f57600080fd5b813561087a8161080c565b9392505050565b803563ffffffff8116811461089557600080fd5b919050565b600080600080600060a086880312156108b257600080fd5b85356108bd8161080c565b945060208601356108cd8161080c565b9350604086013592506108e260608701610881565b949793965091946080013592915050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c0878903121561092257600080fd5b8635955060208701359450604087013561093b8161080c565b9350606087013561094b8161080c565b925061095960808801610881565b915060a087013567ffffffffffffffff8082111561097657600080fd5b818901915089601f83011261098a57600080fd5b81358181111561099c5761099c6108f3565b604051601f8201601f19908116603f011681019083821181831017156109c4576109c46108f3565b816040528281528c60208487010111156109dd57600080fd5b8260208601602083013760006020848301015280955050505050509295509295509295565b60005b83811015610a1d578181015183820152602001610a05565b83811115610a2c576000848401525b50505050565b60008151808452610a4a816020860160208601610a02565b601f01601f19169290920160200192915050565b60208152600061087a6020830184610a32565b600060208284031215610a8357600080fd5b5051919050565b600060208284031215610a9c57600080fd5b815161087a8161080c565b60008251610ab9818460208701610a02565b9190910192915050565b600060208284031215610ad557600080fd5b8151801515811461087a57600080fd5b6001600160a01b03841681528215156020820152606060408201819052600090610b1190830184610a32565b9594505050505056fea264697066735822122011470d5a6e837c2524d95dd5574aafed6bb675a5dfddb904715212c5579fdaa464736f6c634300080d0033
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:2414:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21476:118;;;;;;;;;;-1:-1:-1;21476:118:0;;;;;:::i;:::-;;:::i;:::-;;21386:84;;;;;;;;;;-1:-1:-1;21386:84:0;;;;;:::i;:::-;;:::i;21600:720::-;;;;;;:::i;:::-;;:::i;20637:32::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1730:32:1;;;1712:51;;1700:2;1685:18;20637:32:0;;;;;;;;20736:42;;;;;;;;;;-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;;;22444:458;;;;;;;;;;-1:-1:-1;22444: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;;4268:2:1;21233:20:0;;;4250:21:1;4307:1;4287:18;;;4280:29;-1:-1:-1;;;4325:18:1;;;4318:39;4374: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;;4268:2:1;21233:20:0;;;4250:21:1;4307:1;4287:18;;;4280:29;-1:-1:-1;;;4325:18:1;;;4318:39;4374:18;;21233:20:0;4066: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:720::-;-1:-1:-1;;;;;21803:14:0;;;;;;;:6;:14;;;;;;21775:76;;21803:14;21819:7;21836:4;21843:7;21775:27;:76::i;:::-;-1:-1:-1;;;;;21875:14:0;;;;;;;:6;:14;;;;;;;;21858:73;;-1:-1:-1;;;21858:73:0;;;;;4577:51:1;;;;4644:18;;;4637:34;;;21875:14:0;;;;21858:56;;4550:18:1;;21858:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21940:48;21963:6;21971:7;21980;21940:22;:48::i;:::-;21995:319;;-1:-1:-1;;;21995:319:0;;5258:10:1;5246:23;;21995:319:0;;;5228:42:1;-1:-1:-1;;;;;5344:15:1;;;5324:18;;;5317:43;5396:15;;;5376:18;;;5369:43;22161:10:0;5428:18:1;;;5421:43;5480:19;;;5473:35;;;22238:1:0;5524:19:1;;;5517:35;;;5589:3;5568:19;;;5561:32;5609:19;;;5602:30;22004:7:0;21995:23;;;;22026:11;;5649:19:1;;21995:319:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21600:720;;;;;:::o;22444:458::-;22645:12;20982:10;-1:-1:-1;;;;;20996:7:0;20982:21;;20964:104;;;;-1:-1:-1;;;20964:104:0;;6070:2:1;20964:104:0;;;6052:21:1;6109:2;6089:18;;;6082:30;6148:34;6128:18;;;6121:62;-1:-1:-1;;;6199:18:1;;;6192:45;6254:19;;20964:104:0;5868:411:1;20964:104:0;-1:-1:-1;;;;;22697:14:0;;::::1;;::::0;;;:6:::1;:14;::::0;;;;;22666:55:::1;::::0;22689:6;;22697:14:::1;22713:7:::0;22666:22:::1;:55::i;:::-;-1:-1:-1::0;;;;;22745:14:0;;::::1;;::::0;;;:6:::1;:14;::::0;;;;;;;22728:73;;-1:-1:-1;;;22728:73:0;;::::1;::::0;::::1;4577:51:1::0;;;;4644:18;;;4637:34;;;22745:14:0;;::::1;::::0;22728:56:::1;::::0;4550:18:1;;22728:73:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;22838:14:0;;::::1;;::::0;;;:6:::1;:14;::::0;;;;;;;;22854:32;;22814:82:::1;::::0;22838:14;;;::::1;::::0;22854:32:::1;::::0;;;;;;;::::1;;:::i;:::-;22888:7;22814:23;:82::i;:::-;22444:458:::0;;;;;;;;:::o;17774:443::-;17946:78;;;-1:-1:-1;;;;;6806:15:1;;;17946:78:0;;;6788:34:1;6858:15;;;6838:18;;;6831:43;6890:18;;;;6883:34;;;17946:78:0;;;;;;;;;;6723: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;16944:405::-;17093:63;;-1:-1:-1;;;;;4595:32:1;;;17093:63:0;;;4577:51:1;4644:18;;;4637:34;;;17033:12:0;;;;17068:10;;;-1:-1:-1;;;17116:23:0;4550: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;;;;;4595:32:1;;;16328:67:0;;;4577:51:1;4644:18;;;4637:34;;;16268:12:0;;;;16303:10;;;-1:-1:-1;;;16351:24:0;4550:18:1;;16328:67:0;4403: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;1774:127::-;1835:10;1830:3;1826:20;1823:1;1816:31;1866:4;1863:1;1856:15;1890:4;1887:1;1880:15;1906:1408;2018:6;2026;2034;2042;2050;2058;2111:3;2099:9;2090:7;2086:23;2082:33;2079:53;;;2128:1;2125;2118:12;2079:53;2164:9;2151:23;2141:33;;2221:2;2210:9;2206:18;2193:32;2183:42;;2275:2;2264:9;2260:18;2247:32;2288:31;2313:5;2288:31;:::i;:::-;2338:5;-1:-1:-1;2395:2:1;2380:18;;2367:32;2408:33;2367:32;2408:33;:::i;:::-;2460:7;-1:-1:-1;2486:38:1;2519:3;2504:19;;2486:38;:::i;:::-;2476:48;;2575:3;2564:9;2560:19;2547:33;2599:18;2640:2;2632:6;2629:14;2626:34;;;2656:1;2653;2646:12;2626:34;2694:6;2683:9;2679:22;2669:32;;2739:7;2732:4;2728:2;2724:13;2720:27;2710:55;;2761:1;2758;2751:12;2710:55;2797:2;2784:16;2819:2;2815;2812:10;2809:36;;;2825:18;;:::i;:::-;2900:2;2894:9;2868:2;2954:13;;-1:-1:-1;;2950:22:1;;;2974:2;2946:31;2942:40;2930:53;;;2998:18;;;3018:22;;;2995:46;2992:72;;;3044:18;;:::i;:::-;3084:10;3080:2;3073:22;3119:2;3111:6;3104:18;3159:7;3154:2;3149;3145;3141:11;3137:20;3134:33;3131:53;;;3180:1;3177;3170:12;3131:53;3236:2;3231;3227;3223:11;3218:2;3210:6;3206:15;3193:46;3281:1;3276:2;3271;3263:6;3259:15;3255:24;3248:35;3302:6;3292:16;;;;;;;1906:1408;;;;;;;;:::o;3319:258::-;3391:1;3401:113;3415:6;3412:1;3409:13;3401:113;;;3491:11;;;3485:18;3472:11;;;3465:39;3437:2;3430:10;3401:113;;;3532:6;3529:1;3526:13;3523:48;;;3567:1;3558:6;3553:3;3549:16;3542:27;3523:48;;3319:258;;;:::o;3582:257::-;3623:3;3661:5;3655:12;3688:6;3683:3;3676:19;3704:63;3760:6;3753:4;3748:3;3744:14;3737:4;3730:5;3726:16;3704:63;:::i;:::-;3821:2;3800:15;-1:-1:-1;;3796:29:1;3787:39;;;;3828:4;3783:50;;3582:257;-1:-1:-1;;3582:257:1:o;3844:217::-;3991:2;3980:9;3973:21;3954:4;4011:44;4051:2;4040:9;4036:18;4028:6;4011:44;:::i;4682:184::-;4752:6;4805:2;4793:9;4784:7;4780:23;4776:32;4773:52;;;4821:1;4818;4811:12;4773:52;-1:-1:-1;4844:16:1;;4682:184;-1:-1:-1;4682:184:1:o;6284:259::-;6362:6;6415:2;6403:9;6394:7;6390:23;6386:32;6383:52;;;6431:1;6428;6421:12;6383:52;6463:9;6457:16;6482:31;6507:5;6482:31;:::i;6928:274::-;7057:3;7095:6;7089:13;7111:53;7157:6;7152:3;7145:4;7137:6;7133:17;7111:53;:::i;:::-;7180:16;;;;;6928:274;-1:-1:-1;;6928:274:1:o;7207:277::-;7274:6;7327:2;7315:9;7306:7;7302:23;7298:32;7295:52;;;7343:1;7340;7333:12;7295:52;7375:9;7369:16;7428:5;7421:13;7414:21;7407:5;7404:32;7394:60;;7450:1;7447;7440:12;7489:395;-1:-1:-1;;;;;7686:32:1;;7668:51;;7762:14;;7755:22;7750:2;7735:18;;7728:50;7814:2;7809;7794:18;;7787:30;;;-1:-1:-1;;7834:44:1;;7859:18;;7851:6;7834:44;:::i;:::-;7826:52;7489:395;-1:-1:-1;;;;;7489:395:1:o
Swarm Source
ipfs://11470d5a6e837c2524d95dd5574aafed6bb675a5dfddb904715212c5579fdaa4
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.