Source Code
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-29
*/
// 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,
bytes calldata _callData
) 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
_callData // _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"},{"internalType":"bytes","name":"_callData","type":"bytes"}],"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
60a060405234801561001057600080fd5b50604051610cce380380610cce83398101604081905261002f91610052565b6001600160a01b0316608052600080546001600160a01b03191633179055610082565b60006020828403121561006457600080fd5b81516001600160a01b038116811461007b57600080fd5b9392505050565b608051610c1d6100b16000396000818160ef015281816102630152818161029f01526104230152610c1d6000f3fe6080604052600436106100705760003560e01c8063de4b05481161004e578063de4b0548146100dd578063f11b818814610129578063f851a4401461015f578063fd614f411461017f57600080fd5b80634105c8a3146100755780634fad6bff1461009b578063704b6c02146100bd575b600080fd5b610088610083366004610835565b6101ac565b6040519081526020015b60405180910390f35b3480156100a757600080fd5b506100bb6100b63660046108f1565b610335565b005b3480156100c957600080fd5b506100bb6100d836600461092a565b6103ae565b3480156100e957600080fd5b506101117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610092565b34801561013557600080fd5b5061011161014436600461092a565b6001602052600090815260409020546001600160a01b031681565b34801561016b57600080fd5b50600054610111906001600160a01b031681565b34801561018b57600080fd5b5061019f61019a366004610964565b610416565b6040516100929190610ab9565b6001600160a01b0380871660009081526001602052604081205490916101d5911689308961059f565b6001600160a01b038781166000818152600160205260409081902054905163280cf3ed60e01b81526004810192909252602482018990529091169063280cf3ed906044016020604051808303816000875af1158015610238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025c9190610acc565b50610288877f0000000000000000000000000000000000000000000000000000000000000000886106b4565b6040516345560b5d60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638aac16ba9086906102e69089908d908d9033908e90612710908d908d90600401610ae5565b60206040518083038185885af1158015610304573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906103299190610acc565b98975050505050505050565b6000546001600160a01b031633146103805760405162461bcd60e51b81526020600482015260096024820152682737ba1030b236b4b760b91b60448201526064015b60405180910390fd5b6001600160a01b03918216600090815260016020526040902080546001600160a01b03191691909216179055565b6000546001600160a01b031633146103f45760405162461bcd60e51b81526020600482015260096024820152682737ba1030b236b4b760b91b6044820152606401610377565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6060336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104a85760405162461bcd60e51b815260206004820152602f60248201527f4578706563746564206f726967696e616c2063616c6c657220746f206265204360448201526e1bdb9b995e1d0818dbdb9d1c9858dd608a1b6064820152608401610377565b6001600160a01b038086166000908152600160205260409020546104cf91879116886106b4565b6001600160a01b0385811660008181526001602052604090819020549051639006a50f60e01b815260048101929092526024820189905290911690639006a50f906044016020604051808303816000875af1158015610532573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105569190610acc565b506001600160a01b03808616600090815260016020908152604090912054845161059593919091169161058f9186018101908601610b57565b886107d1565b9695505050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916106039190610b74565b6000604051808303816000865af19150503d8060008114610640576040519150601f19603f3d011682016040523d82523d6000602084013e610645565b606091505b5091509150856001600160a01b03163b60001480610661575081155b8061068857508051158015906106885750808060200190518101906106869190610b90565b155b156106ac5785828260405163e7e40b5b60e01b815260040161037793929190610bb2565b505050505050565b6040516001600160a01b03838116602483015260448201839052600091829186169063095ea7b360e01b906064015b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516107219190610b74565b6000604051808303816000865af19150503d806000811461075e576040519150601f19603f3d011682016040523d82523d6000602084013e610763565b606091505b5091509150846001600160a01b03163b6000148061077f575081155b806107a657508051158015906107a65750808060200190518101906107a49190610b90565b155b156107ca5784828260405163e7e40b5b60e01b815260040161037793929190610bb2565b5050505050565b6040516001600160a01b03838116602483015260448201839052600091829186169063a9059cbb60e01b906064016106e3565b6001600160a01b038116811461081957600080fd5b50565b803563ffffffff8116811461083057600080fd5b919050565b600080600080600080600060c0888a03121561085057600080fd5b873561085b81610804565b9650602088013561086b81610804565b9550604088013594506108806060890161081c565b93506080880135925060a088013567ffffffffffffffff808211156108a457600080fd5b818a0191508a601f8301126108b857600080fd5b8135818111156108c757600080fd5b8b60208285010111156108d957600080fd5b60208301945080935050505092959891949750929550565b6000806040838503121561090457600080fd5b823561090f81610804565b9150602083013561091f81610804565b809150509250929050565b60006020828403121561093c57600080fd5b813561094781610804565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c0878903121561097d57600080fd5b8635955060208701359450604087013561099681610804565b935060608701356109a681610804565b92506109b46080880161081c565b915060a087013567ffffffffffffffff808211156109d157600080fd5b818901915089601f8301126109e557600080fd5b8135818111156109f7576109f761094e565b604051601f8201601f19908116603f01168101908382118183101715610a1f57610a1f61094e565b816040528281528c6020848701011115610a3857600080fd5b8260208601602083013760006020848301015280955050505050509295509295509295565b60005b83811015610a78578181015183820152602001610a60565b83811115610a87576000848401525b50505050565b60008151808452610aa5816020860160208601610a5d565b601f01601f19169290920160200192915050565b6020815260006109476020830184610a8d565b600060208284031215610ade57600080fd5b5051919050565b63ffffffff891681526001600160a01b0388811660208301528781166040830152861660608201526080810185905260a0810184905260e060c08201819052810182905260006101008385828501376000838501820152601f909301601f191690910190910198975050505050505050565b600060208284031215610b6957600080fd5b815161094781610804565b60008251610b86818460208701610a5d565b9190910192915050565b600060208284031215610ba257600080fd5b8151801515811461094757600080fd5b6001600160a01b03841681528215156020820152606060408201819052600090610bde90830184610a8d565b9594505050505056fea2646970667358221220de74077da50f805e7450830766303b1be842faec829a3820c290ef92992cce4a64736f6c634300080d00330000000000000000000000008f7492de823025b4cfaab1d34c58963f2af5deda
Deployed Bytecode
0x6080604052600436106100705760003560e01c8063de4b05481161004e578063de4b0548146100dd578063f11b818814610129578063f851a4401461015f578063fd614f411461017f57600080fd5b80634105c8a3146100755780634fad6bff1461009b578063704b6c02146100bd575b600080fd5b610088610083366004610835565b6101ac565b6040519081526020015b60405180910390f35b3480156100a757600080fd5b506100bb6100b63660046108f1565b610335565b005b3480156100c957600080fd5b506100bb6100d836600461092a565b6103ae565b3480156100e957600080fd5b506101117f0000000000000000000000008f7492de823025b4cfaab1d34c58963f2af5deda81565b6040516001600160a01b039091168152602001610092565b34801561013557600080fd5b5061011161014436600461092a565b6001602052600090815260409020546001600160a01b031681565b34801561016b57600080fd5b50600054610111906001600160a01b031681565b34801561018b57600080fd5b5061019f61019a366004610964565b610416565b6040516100929190610ab9565b6001600160a01b0380871660009081526001602052604081205490916101d5911689308961059f565b6001600160a01b038781166000818152600160205260409081902054905163280cf3ed60e01b81526004810192909252602482018990529091169063280cf3ed906044016020604051808303816000875af1158015610238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025c9190610acc565b50610288877f0000000000000000000000008f7492de823025b4cfaab1d34c58963f2af5deda886106b4565b6040516345560b5d60e11b81526001600160a01b037f0000000000000000000000008f7492de823025b4cfaab1d34c58963f2af5deda1690638aac16ba9086906102e69089908d908d9033908e90612710908d908d90600401610ae5565b60206040518083038185885af1158015610304573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906103299190610acc565b98975050505050505050565b6000546001600160a01b031633146103805760405162461bcd60e51b81526020600482015260096024820152682737ba1030b236b4b760b91b60448201526064015b60405180910390fd5b6001600160a01b03918216600090815260016020526040902080546001600160a01b03191691909216179055565b6000546001600160a01b031633146103f45760405162461bcd60e51b81526020600482015260096024820152682737ba1030b236b4b760b91b6044820152606401610377565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6060336001600160a01b037f0000000000000000000000008f7492de823025b4cfaab1d34c58963f2af5deda16146104a85760405162461bcd60e51b815260206004820152602f60248201527f4578706563746564206f726967696e616c2063616c6c657220746f206265204360448201526e1bdb9b995e1d0818dbdb9d1c9858dd608a1b6064820152608401610377565b6001600160a01b038086166000908152600160205260409020546104cf91879116886106b4565b6001600160a01b0385811660008181526001602052604090819020549051639006a50f60e01b815260048101929092526024820189905290911690639006a50f906044016020604051808303816000875af1158015610532573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105569190610acc565b506001600160a01b03808616600090815260016020908152604090912054845161059593919091169161058f9186018101908601610b57565b886107d1565b9695505050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916106039190610b74565b6000604051808303816000865af19150503d8060008114610640576040519150601f19603f3d011682016040523d82523d6000602084013e610645565b606091505b5091509150856001600160a01b03163b60001480610661575081155b8061068857508051158015906106885750808060200190518101906106869190610b90565b155b156106ac5785828260405163e7e40b5b60e01b815260040161037793929190610bb2565b505050505050565b6040516001600160a01b03838116602483015260448201839052600091829186169063095ea7b360e01b906064015b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516107219190610b74565b6000604051808303816000865af19150503d806000811461075e576040519150601f19603f3d011682016040523d82523d6000602084013e610763565b606091505b5091509150846001600160a01b03163b6000148061077f575081155b806107a657508051158015906107a65750808060200190518101906107a49190610b90565b155b156107ca5784828260405163e7e40b5b60e01b815260040161037793929190610bb2565b5050505050565b6040516001600160a01b03838116602483015260448201839052600091829186169063a9059cbb60e01b906064016106e3565b6001600160a01b038116811461081957600080fd5b50565b803563ffffffff8116811461083057600080fd5b919050565b600080600080600080600060c0888a03121561085057600080fd5b873561085b81610804565b9650602088013561086b81610804565b9550604088013594506108806060890161081c565b93506080880135925060a088013567ffffffffffffffff808211156108a457600080fd5b818a0191508a601f8301126108b857600080fd5b8135818111156108c757600080fd5b8b60208285010111156108d957600080fd5b60208301945080935050505092959891949750929550565b6000806040838503121561090457600080fd5b823561090f81610804565b9150602083013561091f81610804565b809150509250929050565b60006020828403121561093c57600080fd5b813561094781610804565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c0878903121561097d57600080fd5b8635955060208701359450604087013561099681610804565b935060608701356109a681610804565b92506109b46080880161081c565b915060a087013567ffffffffffffffff808211156109d157600080fd5b818901915089601f8301126109e557600080fd5b8135818111156109f7576109f761094e565b604051601f8201601f19908116603f01168101908382118183101715610a1f57610a1f61094e565b816040528281528c6020848701011115610a3857600080fd5b8260208601602083013760006020848301015280955050505050509295509295509295565b60005b83811015610a78578181015183820152602001610a60565b83811115610a87576000848401525b50505050565b60008151808452610aa5816020860160208601610a5d565b601f01601f19169290920160200192915050565b6020815260006109476020830184610a8d565b600060208284031215610ade57600080fd5b5051919050565b63ffffffff891681526001600160a01b0388811660208301528781166040830152861660608201526080810185905260a0810184905260e060c08201819052810182905260006101008385828501376000838501820152601f909301601f191690910190910198975050505050505050565b600060208284031215610b6957600080fd5b815161094781610804565b60008251610b86818460208701610a5d565b9190910192915050565b600060208284031215610ba257600080fd5b8151801515811461094757600080fd5b6001600160a01b03841681528215156020820152606060408201819052600090610bde90830184610a8d565b9594505050505056fea2646970667358221220de74077da50f805e7450830766303b1be842faec829a3820c290ef92992cce4a64736f6c634300080d0033
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:2474:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21600:780;;;;;;:::i;:::-;;:::i;:::-;;;1547:25:1;;;1535:2;1520:18;21600:780:0;;;;;;;;21476:118;;;;;;;;;;-1:-1:-1;21476:118:0;;;;;:::i;:::-;;:::i;:::-;;21386:84;;;;;;;;;;-1:-1:-1;21386:84:0;;;;;:::i;:::-;;:::i;20637:32::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2392:32:1;;;2374:51;;2362:2;2347:18;20637:32:0;2228: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;;;22504:458;;;;;;;;;;-1:-1:-1;22504:458:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;21600:780::-;-1:-1:-1;;;;;21852:14:0;;;21808:7;21852:14;;;:6;:14;;;;;;21808:7;;21824:76;;21852:14;21868:7;21885:4;21892:7;21824:27;:76::i;:::-;-1:-1:-1;;;;;21924:14:0;;;;;;;:6;:14;;;;;;;;21907:73;;-1:-1:-1;;;21907:73:0;;;;;4902:51:1;;;;4969:18;;;4962:34;;;21924:14:0;;;;21907:56;;4875:18:1;;21907:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21989:48;22012:6;22020:7;22029;21989:22;:48::i;:::-;22051:323;;-1:-1:-1;;;22051:323:0;;-1:-1:-1;;;;;22060:7:0;22051:23;;;;22082:11;;22051:323;;22103:18;;22146:7;;22180:6;;22217:10;;22257:7;;22295:5;;22335:9;;;;22051:323;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22044:330;21600:780;-1:-1:-1;;;;;;;;21600:780:0:o;21476:118::-;21213:5;;-1:-1:-1;;;;;21213:5:0;21199:10;:19;21195:68;;21233:20;;-1:-1:-1;;;21233:20:0;;6525:2:1;21233:20:0;;;6507:21:1;6564:1;6544:18;;;6537:29;-1:-1:-1;;;6582:18:1;;;6575:39;6631: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;;6525:2:1;21233:20:0;;;6507:21:1;6564:1;6544:18;;;6537:29;-1:-1:-1;;;6582:18:1;;;6575:39;6631:18;;21233:20:0;6323: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;22504:458::-;22705:12;20982:10;-1:-1:-1;;;;;20996:7:0;20982:21;;20964:104;;;;-1:-1:-1;;;20964:104:0;;6862:2:1;20964:104:0;;;6844:21:1;6901:2;6881:18;;;6874:30;6940:34;6920:18;;;6913:62;-1:-1:-1;;;6991:18:1;;;6984:45;7046:19;;20964:104:0;6660:411:1;20964:104:0;-1:-1:-1;;;;;22757:14:0;;::::1;;::::0;;;:6:::1;:14;::::0;;;;;22726:55:::1;::::0;22749:6;;22757:14:::1;22773:7:::0;22726:22:::1;:55::i;:::-;-1:-1:-1::0;;;;;22805:14:0;;::::1;;::::0;;;:6:::1;:14;::::0;;;;;;;22788:73;;-1:-1:-1;;;22788:73:0;;::::1;::::0;::::1;4902:51:1::0;;;;4969:18;;;4962:34;;;22805:14:0;;::::1;::::0;22788:56:::1;::::0;4875:18:1;;22788:73:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;22898:14:0;;::::1;;::::0;;;:6:::1;:14;::::0;;;;;;;;22914:32;;22874:82:::1;::::0;22898:14;;;::::1;::::0;22914:32:::1;::::0;;;;;;;::::1;;:::i;:::-;22948:7;22874:23;:82::i;:::-;22504:458:::0;;;;;;;;:::o;17774:443::-;17946:78;;;-1:-1:-1;;;;;7598:15:1;;;17946:78:0;;;7580:34:1;7650:15;;;7630:18;;;7623:43;7682:18;;;;7675:34;;;17946:78:0;;;;;;;;;;7515: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;;;;;4920:32:1;;;17093:63:0;;;4902:51:1;4969:18;;;4962:34;;;17033:12:0;;;;17068:10;;;-1:-1:-1;;;17116:23:0;4875: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;;;;;4920:32:1;;;16328:67:0;;;4902:51:1;4969:18;;;4962:34;;;16268:12:0;;;;16303:10;;;-1:-1:-1;;;16351:24:0;4875:18:1;;16328:67:0;4728: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:163::-;217:20;;277:10;266:22;;256:33;;246:61;;303:1;300;293:12;246:61;150:163;;;:::o;318:1078::-;432:6;440;448;456;464;472;480;533:3;521:9;512:7;508:23;504:33;501:53;;;550:1;547;540:12;501:53;589:9;576:23;608:31;633:5;608:31;:::i;:::-;658:5;-1:-1:-1;715:2:1;700:18;;687:32;728:33;687:32;728:33;:::i;:::-;780:7;-1:-1:-1;834:2:1;819:18;;806:32;;-1:-1:-1;857:37:1;890:2;875:18;;857:37;:::i;:::-;847:47;;941:3;930:9;926:19;913:33;903:43;;997:3;986:9;982:19;969:33;1021:18;1062:2;1054:6;1051:14;1048:34;;;1078:1;1075;1068:12;1048:34;1116:6;1105:9;1101:22;1091:32;;1161:7;1154:4;1150:2;1146:13;1142:27;1132:55;;1183:1;1180;1173:12;1132:55;1223:2;1210:16;1249:2;1241:6;1238:14;1235:34;;;1265:1;1262;1255:12;1235:34;1310:7;1305:2;1296:6;1292:2;1288:15;1284:24;1281:37;1278:57;;;1331:1;1328;1321:12;1278:57;1362:2;1358;1354:11;1344:21;;1384:6;1374:16;;;;;318:1078;;;;;;;;;;:::o;1583:388::-;1651:6;1659;1712:2;1700:9;1691:7;1687:23;1683:32;1680:52;;;1728:1;1725;1718:12;1680:52;1767:9;1754:23;1786:31;1811:5;1786:31;:::i;:::-;1836:5;-1:-1:-1;1893:2:1;1878:18;;1865:32;1906:33;1865:32;1906:33;:::i;:::-;1958:7;1948:17;;;1583:388;;;;;:::o;1976:247::-;2035:6;2088:2;2076:9;2067:7;2063:23;2059:32;2056:52;;;2104:1;2101;2094:12;2056:52;2143:9;2130:23;2162:31;2187:5;2162:31;:::i;:::-;2212:5;1976:247;-1:-1:-1;;;1976:247:1:o;2436:127::-;2497:10;2492:3;2488:20;2485:1;2478:31;2528:4;2525:1;2518:15;2552:4;2549:1;2542:15;2568:1408;2680:6;2688;2696;2704;2712;2720;2773:3;2761:9;2752:7;2748:23;2744:33;2741:53;;;2790:1;2787;2780:12;2741:53;2826:9;2813:23;2803:33;;2883:2;2872:9;2868:18;2855:32;2845:42;;2937:2;2926:9;2922:18;2909:32;2950:31;2975:5;2950:31;:::i;:::-;3000:5;-1:-1:-1;3057:2:1;3042:18;;3029:32;3070:33;3029:32;3070:33;:::i;:::-;3122:7;-1:-1:-1;3148:38:1;3181:3;3166:19;;3148:38;:::i;:::-;3138:48;;3237:3;3226:9;3222:19;3209:33;3261:18;3302:2;3294:6;3291:14;3288:34;;;3318:1;3315;3308:12;3288:34;3356:6;3345:9;3341:22;3331:32;;3401:7;3394:4;3390:2;3386:13;3382:27;3372:55;;3423:1;3420;3413:12;3372:55;3459:2;3446:16;3481:2;3477;3474:10;3471:36;;;3487:18;;:::i;:::-;3562:2;3556:9;3530:2;3616:13;;-1:-1:-1;;3612:22:1;;;3636:2;3608:31;3604:40;3592:53;;;3660:18;;;3680:22;;;3657:46;3654:72;;;3706:18;;:::i;:::-;3746:10;3742:2;3735:22;3781:2;3773:6;3766:18;3821:7;3816:2;3811;3807;3803:11;3799:20;3796:33;3793:53;;;3842:1;3839;3832:12;3793:53;3898:2;3893;3889;3885:11;3880:2;3872:6;3868:15;3855:46;3943:1;3938:2;3933;3925:6;3921:15;3917:24;3910:35;3964:6;3954:16;;;;;;;2568:1408;;;;;;;;:::o;3981:258::-;4053:1;4063:113;4077:6;4074:1;4071:13;4063:113;;;4153:11;;;4147:18;4134:11;;;4127:39;4099:2;4092:10;4063:113;;;4194:6;4191:1;4188:13;4185:48;;;4229:1;4220:6;4215:3;4211:16;4204:27;4185:48;;3981:258;;;:::o;4244:257::-;4285:3;4323:5;4317:12;4350:6;4345:3;4338:19;4366:63;4422:6;4415:4;4410:3;4406:14;4399:4;4392:5;4388:16;4366:63;:::i;:::-;4483:2;4462:15;-1:-1:-1;;4458:29:1;4449:39;;;;4490:4;4445:50;;4244:257;-1:-1:-1;;4244:257:1:o;4506:217::-;4653:2;4642:9;4635:21;4616:4;4673:44;4713:2;4702:9;4698:18;4690:6;4673:44;:::i;5007:184::-;5077:6;5130:2;5118:9;5109:7;5105:23;5101:32;5098:52;;;5146:1;5143;5136:12;5098:52;-1:-1:-1;5169:16:1;;5007:184;-1:-1:-1;5007:184:1:o;5196:933::-;5543:10;5531:23;;5513:42;;-1:-1:-1;;;;;5629:15:1;;;5624:2;5609:18;;5602:43;5681:15;;;5676:2;5661:18;;5654:43;5733:15;;5728:2;5713:18;;5706:43;5780:3;5765:19;;5758:35;;;5582:3;5809:19;;5802:35;;;5874:3;5868;5853:19;;5846:32;;;5894:19;;5887:35;;;5494:4;5941:3;5915:6;5986;5966:18;;;5953:48;6050:1;6021:22;;;6017:31;;6010:42;6113:2;6092:15;;;-1:-1:-1;;6088:29:1;6073:45;;;6069:54;;;;5196:933;-1:-1:-1;;;;;;;;5196:933:1:o;7076:259::-;7154:6;7207:2;7195:9;7186:7;7182:23;7178:32;7175:52;;;7223:1;7220;7213:12;7175:52;7255:9;7249:16;7274:31;7299:5;7274:31;:::i;7720:274::-;7849:3;7887:6;7881:13;7903:53;7949:6;7944:3;7937:4;7929:6;7925:17;7903:53;:::i;:::-;7972:16;;;;;7720:274;-1:-1:-1;;7720:274:1:o;7999:277::-;8066:6;8119:2;8107:9;8098:7;8094:23;8090:32;8087:52;;;8135:1;8132;8125:12;8087:52;8167:9;8161:16;8220:5;8213:13;8206:21;8199:5;8196:32;8186:60;;8242:1;8239;8232:12;8281:395;-1:-1:-1;;;;;8478:32:1;;8460:51;;8554:14;;8547:22;8542:2;8527:18;;8520:50;8606:2;8601;8586:18;;8579:30;;;-1:-1:-1;;8626:44:1;;8651:18;;8643:6;8626:44;:::i;:::-;8618:52;8281:395;-1:-1:-1;;;;;8281:395:1:o
Swarm Source
ipfs://de74077da50f805e7450830766303b1be842faec829a3820c290ef92992cce4a
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.