Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
TokenTracker
Multichain Info
N/A
Latest 25 from a total of 178 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Send Tokens | 7103069 | 81 days ago | IN | 0 ETH | 0.00085403 | ||||
Send Tokens | 7103059 | 81 days ago | IN | 0 ETH | 0.00062852 | ||||
Send Tokens | 7102971 | 81 days ago | IN | 0 ETH | 0.00054721 | ||||
Send Tokens | 7102941 | 81 days ago | IN | 0 ETH | 0.00044311 | ||||
Send Tokens | 7102935 | 81 days ago | IN | 0 ETH | 0.0004517 | ||||
Send Tokens | 7017780 | 93 days ago | IN | 0 ETH | 0.00191713 | ||||
Send Tokens | 7017778 | 93 days ago | IN | 0 ETH | 0.00183559 | ||||
Send Tokens | 7011589 | 94 days ago | IN | 0 ETH | 0.00123346 | ||||
Send Tokens | 7011585 | 94 days ago | IN | 0 ETH | 0.00120698 | ||||
Send Tokens | 7011573 | 94 days ago | IN | 0 ETH | 0.00117028 | ||||
Send Tokens | 7011568 | 94 days ago | IN | 0 ETH | 0.00101408 | ||||
Send Tokens | 7011533 | 94 days ago | IN | 0 ETH | 0.00114642 | ||||
Send Tokens | 7011511 | 94 days ago | IN | 0 ETH | 0.00114966 | ||||
Send Tokens | 7011464 | 94 days ago | IN | 0 ETH | 0.00103355 | ||||
Send Tokens | 7011439 | 94 days ago | IN | 0 ETH | 0.00114048 | ||||
Send Tokens | 7011435 | 94 days ago | IN | 0 ETH | 0.00105016 | ||||
Send Tokens | 7011421 | 94 days ago | IN | 0 ETH | 0.00118372 | ||||
Send Tokens | 7011416 | 94 days ago | IN | 0 ETH | 0.00106275 | ||||
Send Tokens | 7002832 | 96 days ago | IN | 0 ETH | 0.00055989 | ||||
Send Tokens | 7002821 | 96 days ago | IN | 0 ETH | 0.00059499 | ||||
Send Tokens | 7002806 | 96 days ago | IN | 0 ETH | 0.00052436 | ||||
Send Tokens | 7002764 | 96 days ago | IN | 0 ETH | 0.00073822 | ||||
Send Tokens | 7002755 | 96 days ago | IN | 0 ETH | 0.00068325 | ||||
Send Tokens | 7002738 | 96 days ago | IN | 0 ETH | 0.00068061 | ||||
Send Tokens | 7002704 | 96 days ago | IN | 0 ETH | 0.00051668 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
7103069 | 81 days ago | 0 ETH | ||||
7103059 | 81 days ago | 0 ETH | ||||
7102971 | 81 days ago | 0 ETH | ||||
7102941 | 81 days ago | 0 ETH | ||||
7102935 | 81 days ago | 0 ETH | ||||
7017780 | 93 days ago | 0 ETH | ||||
7017778 | 93 days ago | 0 ETH | ||||
7011589 | 94 days ago | 0 ETH | ||||
7011585 | 94 days ago | 0 ETH | ||||
7011573 | 94 days ago | 0 ETH | ||||
7011568 | 94 days ago | 0 ETH | ||||
7011533 | 94 days ago | 0 ETH | ||||
7011511 | 94 days ago | 0 ETH | ||||
7011464 | 94 days ago | 0 ETH | ||||
7011439 | 94 days ago | 0 ETH | ||||
7011435 | 94 days ago | 0 ETH | ||||
7011421 | 94 days ago | 0 ETH | ||||
7011416 | 94 days ago | 0 ETH | ||||
7002832 | 96 days ago | 0 ETH | ||||
7002821 | 96 days ago | 0 ETH | ||||
7002806 | 96 days ago | 0 ETH | ||||
7002764 | 96 days ago | 0 ETH | ||||
7002755 | 96 days ago | 0 ETH | ||||
7002738 | 96 days ago | 0 ETH | ||||
7002704 | 96 days ago | 0 ETH |
Loading...
Loading
Contract Name:
CrossChainToken
Compiler Version
v0.8.21+commit.d9974bed
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-10-22 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; type WeiPrice is uint256; type GasPrice is uint256; type Gas is uint256; type Dollar is uint256; type Wei is uint256; type LocalNative is uint256; type TargetNative is uint256; using { addWei as +, subWei as -, lteWei as <=, ltWei as <, gtWei as >, eqWei as ==, neqWei as != } for Wei global; using {addTargetNative as +, subTargetNative as -} for TargetNative global; using { leLocalNative as <, leqLocalNative as <=, neqLocalNative as !=, addLocalNative as +, subLocalNative as - } for LocalNative global; using { ltGas as <, lteGas as <=, subGas as - } for Gas global; using WeiLib for Wei; using GasLib for Gas; using DollarLib for Dollar; using WeiPriceLib for WeiPrice; using GasPriceLib for GasPrice; function ltWei(Wei a, Wei b) pure returns (bool) { return Wei.unwrap(a) < Wei.unwrap(b); } function eqWei(Wei a, Wei b) pure returns (bool) { return Wei.unwrap(a) == Wei.unwrap(b); } function gtWei(Wei a, Wei b) pure returns (bool) { return Wei.unwrap(a) > Wei.unwrap(b); } function lteWei(Wei a, Wei b) pure returns (bool) { return Wei.unwrap(a) <= Wei.unwrap(b); } function subWei(Wei a, Wei b) pure returns (Wei) { return Wei.wrap(Wei.unwrap(a) - Wei.unwrap(b)); } function addWei(Wei a, Wei b) pure returns (Wei) { return Wei.wrap(Wei.unwrap(a) + Wei.unwrap(b)); } function neqWei(Wei a, Wei b) pure returns (bool) { return Wei.unwrap(a) != Wei.unwrap(b); } function ltGas(Gas a, Gas b) pure returns (bool) { return Gas.unwrap(a) < Gas.unwrap(b); } function lteGas(Gas a, Gas b) pure returns (bool) { return Gas.unwrap(a) <= Gas.unwrap(b); } function subGas(Gas a, Gas b) pure returns (Gas) { return Gas.wrap(Gas.unwrap(a) - Gas.unwrap(b)); } function addTargetNative(TargetNative a, TargetNative b) pure returns (TargetNative) { return TargetNative.wrap(TargetNative.unwrap(a) + TargetNative.unwrap(b)); } function subTargetNative(TargetNative a, TargetNative b) pure returns (TargetNative) { return TargetNative.wrap(TargetNative.unwrap(a) - TargetNative.unwrap(b)); } function addLocalNative(LocalNative a, LocalNative b) pure returns (LocalNative) { return LocalNative.wrap(LocalNative.unwrap(a) + LocalNative.unwrap(b)); } function subLocalNative(LocalNative a, LocalNative b) pure returns (LocalNative) { return LocalNative.wrap(LocalNative.unwrap(a) - LocalNative.unwrap(b)); } function neqLocalNative(LocalNative a, LocalNative b) pure returns (bool) { return LocalNative.unwrap(a) != LocalNative.unwrap(b); } function leLocalNative(LocalNative a, LocalNative b) pure returns (bool) { return LocalNative.unwrap(a) < LocalNative.unwrap(b); } function leqLocalNative(LocalNative a, LocalNative b) pure returns (bool) { return LocalNative.unwrap(a) <= LocalNative.unwrap(b); } library WeiLib { using { toDollars, toGas, convertAsset, min, max, scale, unwrap, asGasPrice, asTargetNative, asLocalNative } for Wei; function min(Wei x, Wei maxVal) internal pure returns (Wei) { return x > maxVal ? maxVal : x; } function max(Wei x, Wei maxVal) internal pure returns (Wei) { return x < maxVal ? maxVal : x; } function asTargetNative(Wei w) internal pure returns (TargetNative) { return TargetNative.wrap(Wei.unwrap(w)); } function asLocalNative(Wei w) internal pure returns (LocalNative) { return LocalNative.wrap(Wei.unwrap(w)); } function toDollars(Wei w, WeiPrice price) internal pure returns (Dollar) { return Dollar.wrap(Wei.unwrap(w) * WeiPrice.unwrap(price)); } function toGas(Wei w, GasPrice price) internal pure returns (Gas) { return Gas.wrap(Wei.unwrap(w) / GasPrice.unwrap(price)); } function scale(Wei w, Gas num, Gas denom) internal pure returns (Wei) { return Wei.wrap(Wei.unwrap(w) * Gas.unwrap(num) / Gas.unwrap(denom)); } function unwrap(Wei w) internal pure returns (uint256) { return Wei.unwrap(w); } function asGasPrice(Wei w) internal pure returns (GasPrice) { return GasPrice.wrap(Wei.unwrap(w)); } function convertAsset( Wei w, WeiPrice fromPrice, WeiPrice toPrice, uint32 multiplierNum, uint32 multiplierDenom, bool roundUp ) internal pure returns (Wei) { Dollar numerator = w.toDollars(fromPrice).mul(multiplierNum); WeiPrice denom = toPrice.mul(multiplierDenom); Wei res = numerator.toWei(denom, roundUp); return res; } } library GasLib { using {toWei, unwrap} for Gas; function min(Gas x, Gas maxVal) internal pure returns (Gas) { return x < maxVal ? x : maxVal; } function toWei(Gas w, GasPrice price) internal pure returns (Wei) { return Wei.wrap(w.unwrap() * price.unwrap()); } function unwrap(Gas w) internal pure returns (uint256) { return Gas.unwrap(w); } } library DollarLib { using {toWei, mul, unwrap} for Dollar; function mul(Dollar a, uint256 b) internal pure returns (Dollar) { return Dollar.wrap(a.unwrap() * b); } function toWei(Dollar w, WeiPrice price, bool roundUp) internal pure returns (Wei) { return Wei.wrap((w.unwrap() + (roundUp ? price.unwrap() - 1 : 0)) / price.unwrap()); } function toGas(Dollar w, GasPrice price, WeiPrice weiPrice) internal pure returns (Gas) { return w.toWei(weiPrice, false).toGas(price); } function unwrap(Dollar w) internal pure returns (uint256) { return Dollar.unwrap(w); } } library WeiPriceLib { using {mul, unwrap} for WeiPrice; function mul(WeiPrice a, uint256 b) internal pure returns (WeiPrice) { return WeiPrice.wrap(a.unwrap() * b); } function unwrap(WeiPrice w) internal pure returns (uint256) { return WeiPrice.unwrap(w); } } library GasPriceLib { using {unwrap, priceAsWei} for GasPrice; function priceAsWei(GasPrice w) internal pure returns (Wei) { return Wei.wrap(w.unwrap()); } function unwrap(GasPrice w) internal pure returns (uint256) { return GasPrice.unwrap(w); } } library TargetNativeLib { using {unwrap, asNative} for TargetNative; function unwrap(TargetNative w) internal pure returns (uint256) { return TargetNative.unwrap(w); } function asNative(TargetNative w) internal pure returns (Wei) { return Wei.wrap(TargetNative.unwrap(w)); } } library LocalNativeLib { using {unwrap, asNative} for LocalNative; function unwrap(LocalNative w) internal pure returns (uint256) { return LocalNative.unwrap(w); } function asNative(LocalNative w) internal pure returns (Wei) { return Wei.wrap(LocalNative.unwrap(w)); } } /** * @dev Interface of the ERC-20 standard as defined in the ERC. */ 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 value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` 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 value) external returns (bool); } /** * @dev Interface for the optional metadata functions from the ERC-20 standard. */ 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); } /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } /** * @dev Standard ERC-20 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens. */ interface IERC20Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC20InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC20InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers. * @param spender Address that may be allowed to operate on tokens without being their owner. * @param allowance Amount of tokens a `spender` is allowed to operate with. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC20InvalidApprover(address approver); /** * @dev Indicates a failure with the `spender` to be approved. Used in approvals. * @param spender Address that may be allowed to operate on tokens without being their owner. */ error ERC20InvalidSpender(address spender); } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC-20 * applications. */ abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors { mapping(address account => uint256) private _balances; mapping(address account => mapping(address spender => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the default value returned by this function, unless * it's overridden. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `value`. */ function transfer(address to, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _transfer(owner, to, value); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, value); return true; } /** * @dev See {IERC20-transferFrom}. * * Skips emitting an {Approval} event indicating an allowance update. This is not * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `value`. * - the caller must have allowance for ``from``'s tokens of at least * `value`. */ function transferFrom(address from, address to, uint256 value) public virtual returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, value); _transfer(from, to, value); return true; } /** * @dev Moves a `value` amount of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _transfer(address from, address to, uint256 value) internal { if (from == address(0)) { revert ERC20InvalidSender(address(0)); } if (to == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(from, to, value); } /** * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from` * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding * this function. * * Emits a {Transfer} event. */ function _update(address from, address to, uint256 value) internal virtual { if (from == address(0)) { // Overflow check required: The rest of the code assumes that totalSupply never overflows _totalSupply += value; } else { uint256 fromBalance = _balances[from]; if (fromBalance < value) { revert ERC20InsufficientBalance(from, fromBalance, value); } unchecked { // Overflow not possible: value <= fromBalance <= totalSupply. _balances[from] = fromBalance - value; } } if (to == address(0)) { unchecked { // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply. _totalSupply -= value; } } else { unchecked { // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256. _balances[to] += value; } } emit Transfer(from, to, value); } /** * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0). * Relies on the `_update` mechanism * * Emits a {Transfer} event with `from` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _mint(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(address(0), account, value); } /** * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply. * Relies on the `_update` mechanism. * * Emits a {Transfer} event with `to` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead */ function _burn(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidSender(address(0)); } _update(account, address(0), value); } /** * @dev Sets `value` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. * * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument. */ function _approve(address owner, address spender, uint256 value) internal { _approve(owner, spender, value, true); } /** * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event. * * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any * `Approval` event during `transferFrom` operations. * * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to * true using the following override: * * ```solidity * function _approve(address owner, address spender, uint256 value, bool) internal virtual override { * super._approve(owner, spender, value, true); * } * ``` * * Requirements are the same as {_approve}. */ function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual { if (owner == address(0)) { revert ERC20InvalidApprover(address(0)); } if (spender == address(0)) { revert ERC20InvalidSpender(address(0)); } _allowances[owner][spender] = value; if (emitEvent) { emit Approval(owner, spender, value); } } /** * @dev Updates `owner` s allowance for `spender` based on spent `value`. * * Does not update the allowance value in case of infinite allowance. * Revert if not enough allowance is available. * * Does not emit an {Approval} event. */ function _spendAllowance(address owner, address spender, uint256 value) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { if (currentAllowance < value) { revert ERC20InsufficientAllowance(spender, currentAllowance, value); } unchecked { _approve(owner, spender, currentAllowance - value, false); } } } } // IWormholeRelayer interface interface IWormholeRelayer { function sendPayloadToEvm( uint16 targetChain, address targetAddress, bytes memory payload, TargetNative receiverValue, Gas gasLimit ) external payable returns (uint64 sequence); function quoteEVMDeliveryPrice( uint16 targetChain, TargetNative receiverValue, Gas gasLimit ) external view returns ( uint256 nativePriceQuote, uint256 targetChainRefundPerGasUnused ); } // IWormholeReceiver interface interface IWormholeReceiver { function receiveWormholeMessages( bytes memory payload, bytes[] memory additionalVaas, bytes32 sourceAddress, uint16 sourceChain, bytes32 deliveryHash ) external payable; } contract CrossChainToken is ERC20, IWormholeReceiver { mapping(uint256 => address) public bridges; mapping(uint16 => address) public registeredCounterparts; event TokenSent( address indexed sender, uint16 indexed targetChain, uint256 amount, uint64 sequence ); event TokenReceived( address indexed recipient, uint16 indexed sourceChain, uint256 amount ); constructor( string memory name_, string memory symbol_, address[] memory bridgeAddrs ) ERC20(name_, symbol_) { for (uint256 i = 0; i < bridgeAddrs.length; i++) { bridges[i] = bridgeAddrs[i]; } } function registerContract(uint16 chainId, address contractAddress) external { registeredCounterparts[chainId] = contractAddress; } function sendTokens( uint16 targetChain, uint256 bridgeIndex, uint256 amount, Gas gasLimit ) external payable { address targetContract = registeredCounterparts[targetChain]; require(targetContract != address(0), "Target chain not registered"); require(amount <= balanceOf(msg.sender), "Insufficient balance"); // Burn tokens from sender _burn(msg.sender, amount); // This function is unrelated to the native token TargetNative receiverValue = TargetNative.wrap(0); IWormholeRelayer relayer = IWormholeRelayer(bridges[bridgeIndex]); // Estimate fee (uint256 estimatedFee, ) = relayer.quoteEVMDeliveryPrice( targetChain, receiverValue, gasLimit ); require(msg.value >= estimatedFee, "Insufficient fee"); // Send payload via Wormhole uint64 sequence = relayer.sendPayloadToEvm{value: msg.value}( targetChain, targetContract, abi.encode(msg.sender, amount, bridgeIndex), receiverValue, gasLimit ); emit TokenSent(msg.sender, targetChain, amount, sequence); } function receiveWormholeMessages( bytes memory payload, bytes[] memory, bytes32, uint16 sourceChain, bytes32 ) external payable override { require(registeredCounterparts[sourceChain] != address(0), "Source chain not registered"); (address recipient, uint256 amount, uint256 bridgeIndex) = abi.decode( payload, (address, uint256, uint256) ); require(msg.sender == bridges[bridgeIndex], "Unauthorized caller"); _mint(recipient, amount); emit TokenReceived(recipient, sourceChain, amount); } function burn(address from, uint256 amount) external { _burn(from, amount); } function mint(address recipient, uint256 amount) external { _mint(recipient, amount); } function setBridge(uint256 index, address bridgeAddr) external { bridges[index] = bridgeAddr; } }
[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"address[]","name":"bridgeAddrs","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"uint16","name":"sourceChain","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"uint16","name":"targetChain","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint64","name":"sequence","type":"uint64"}],"name":"TokenSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"bridges","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"bytes[]","name":"","type":"bytes[]"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint16","name":"sourceChain","type":"uint16"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"receiveWormholeMessages","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"chainId","type":"uint16"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"registerContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"registeredCounterparts","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"targetChain","type":"uint16"},{"internalType":"uint256","name":"bridgeIndex","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"Gas","name":"gasLimit","type":"uint256"}],"name":"sendTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"bridgeAddr","type":"address"}],"name":"setBridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801562000010575f80fd5b50604051620015173803806200151783398101604081905262000033916200019b565b8282600362000043838262000335565b50600462000052828262000335565b5050505f5b8151811015620000c257818181518110620000765762000076620003fd565b6020908102919091018101515f8381526005909252604090912080546001600160a01b0319166001600160a01b0390921691909117905580620000b98162000411565b91505062000057565b5050505062000436565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b03811182821017156200010b576200010b620000cc565b604052919050565b5f82601f83011262000123575f80fd5b81516001600160401b038111156200013f576200013f620000cc565b602062000155601f8301601f19168201620000e0565b828152858284870101111562000169575f80fd5b5f5b83811015620001885785810183015182820184015282016200016b565b505f928101909101919091529392505050565b5f805f60608486031215620001ae575f80fd5b83516001600160401b0380821115620001c5575f80fd5b620001d38783880162000113565b9450602091508186015181811115620001ea575f80fd5b620001f88882890162000113565b9450506040860151818111156200020d575f80fd5b8601601f810188136200021e575f80fd5b805182811115620002335762000233620000cc565b8060051b925062000246848401620000e0565b818152928201840192848101908a85111562000260575f80fd5b928501925b848410156200029957835192506001600160a01b038316831462000288575f8081fd5b828252928501929085019062000265565b8096505050505050509250925092565b600181811c90821680620002be57607f821691505b602082108103620002dd57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000330575f81815260208120601f850160051c810160208610156200030b5750805b601f850160051c820191505b818110156200032c5782815560010162000317565b5050505b505050565b81516001600160401b03811115620003515762000351620000cc565b6200036981620003628454620002a9565b84620002e3565b602080601f8311600181146200039f575f8415620003875750858301515b5f19600386901b1c1916600185901b1785556200032c565b5f85815260208120601f198616915b82811015620003cf57888601518255948401946001909101908401620003ae565b5085821015620003ed57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52603260045260245ffd5b5f600182016200042f57634e487b7160e01b5f52601160045260245ffd5b5060010190565b6110d380620004445f395ff3fe6080604052600436106100fa575f3560e01c8063529dca32116100925780639dc29fac116100625780639dc29fac146102d2578063a3c44705146102f1578063a9059cbb1461033d578063a9963d291461035c578063dd62ed3e14610390575f80fd5b8063529dca321461022a5780635a0d4f791461023d57806370a082311461028a57806395d89b41146102be575f80fd5b80632e0ca474116100cd5780632e0ca47414610194578063313ce567146101dd57806340c10f19146101f85780634f85cede14610217575f80fd5b806306fdde03146100fe578063095ea7b31461012857806318160ddd1461015757806323b872dd14610175575b5f80fd5b348015610109575f80fd5b506101126103d4565b60405161011f9190610c34565b60405180910390f35b348015610133575f80fd5b50610147610142366004610c64565b610464565b604051901515815260200161011f565b348015610162575f80fd5b506002545b60405190815260200161011f565b348015610180575f80fd5b5061014761018f366004610c8e565b61047d565b34801561019f575f80fd5b506101db6101ae366004610ccc565b5f9182526005602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b005b3480156101e8575f80fd5b506040516012815260200161011f565b348015610203575f80fd5b506101db610212366004610c64565b6104a0565b6101db610225366004610d10565b6104ae565b6101db610238366004610df7565b610743565b348015610248575f80fd5b506101db610257366004610ef7565b61ffff919091165f90815260066020526040902080546001600160a01b0319166001600160a01b03909216919091179055565b348015610295575f80fd5b506101676102a4366004610f21565b6001600160a01b03165f9081526020819052604090205490565b3480156102c9575f80fd5b50610112610881565b3480156102dd575f80fd5b506101db6102ec366004610c64565b610890565b3480156102fc575f80fd5b5061032561030b366004610f3c565b60056020525f90815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161011f565b348015610348575f80fd5b50610147610357366004610c64565b61089a565b348015610367575f80fd5b50610325610376366004610f53565b60066020525f90815260409020546001600160a01b031681565b34801561039b575f80fd5b506101676103aa366004610f6c565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6060600380546103e390610f88565b80601f016020809104026020016040519081016040528092919081815260200182805461040f90610f88565b801561045a5780601f106104315761010080835404028352916020019161045a565b820191905f5260205f20905b81548152906001019060200180831161043d57829003601f168201915b5050505050905090565b5f336104718185856108a7565b60019150505b92915050565b5f3361048a8582856108b9565b610495858585610934565b506001949350505050565b6104aa8282610991565b5050565b61ffff84165f908152600660205260409020546001600160a01b03168061051c5760405162461bcd60e51b815260206004820152601b60248201527f54617267657420636861696e206e6f742072656769737465726564000000000060448201526064015b60405180910390fd5b335f908152602081905260409020548311156105715760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610513565b61057b33846109c5565b5f8481526005602052604080822054905163c23ee3c360e01b815261ffff8816600482015260248101839052604481018590526001600160a01b03909116908290829063c23ee3c3906064016040805180830381865afa1580156105e1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106059190610fc0565b5090508034101561064b5760405162461bcd60e51b815260206004820152601060248201526f496e73756666696369656e742066656560801b6044820152606401610513565b6040805133602082015280820188905260608082018a90528251808303909101815260808201928390526347f66e8160e11b9092525f916001600160a01b03851691638fecdd029134916106aa918e918b91908b908e90608401610fe2565b60206040518083038185885af11580156106c6573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906106eb9190611023565b6040805189815267ffffffffffffffff8316602082015291925061ffff8b169133917f015c3be6f91ca7365029dda15005668717e497421ac8086dd657a39081353148910160405180910390a3505050505050505050565b61ffff82165f908152600660205260409020546001600160a01b03166107ab5760405162461bcd60e51b815260206004820152601b60248201527f536f7572636520636861696e206e6f74207265676973746572656400000000006044820152606401610513565b5f805f878060200190518101906107c2919061104a565b5f8181526005602052604090205492955090935091506001600160a01b031633146108255760405162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b6044820152606401610513565b61082f8383610991565b8461ffff16836001600160a01b03167f16e6492ac2521dd450b41f39fe926c6e25a5db81e25b9d5eeff14bfa526066528460405161086f91815260200190565b60405180910390a35050505050505050565b6060600480546103e390610f88565b6104aa82826109c5565b5f33610471818585610934565b6108b483838360016109f9565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f19811461092e578181101561092057604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610513565b61092e84848484035f6109f9565b50505050565b6001600160a01b03831661095d57604051634b637e8f60e11b81525f6004820152602401610513565b6001600160a01b0382166109865760405163ec442f0560e01b81525f6004820152602401610513565b6108b4838383610acb565b6001600160a01b0382166109ba5760405163ec442f0560e01b81525f6004820152602401610513565b6104aa5f8383610acb565b6001600160a01b0382166109ee57604051634b637e8f60e11b81525f6004820152602401610513565b6104aa825f83610acb565b6001600160a01b038416610a225760405163e602df0560e01b81525f6004820152602401610513565b6001600160a01b038316610a4b57604051634a1406b160e11b81525f6004820152602401610513565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561092e57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610abd91815260200190565b60405180910390a350505050565b6001600160a01b038316610af5578060025f828254610aea919061107e565b90915550610b659050565b6001600160a01b0383165f9081526020819052604090205481811015610b475760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610513565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610b8157600280548290039055610b9f565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610be491815260200190565b60405180910390a3505050565b5f81518084525f5b81811015610c1557602081850181015186830182015201610bf9565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f610c466020830184610bf1565b9392505050565b6001600160a01b0381168114610c61575f80fd5b50565b5f8060408385031215610c75575f80fd5b8235610c8081610c4d565b946020939093013593505050565b5f805f60608486031215610ca0575f80fd5b8335610cab81610c4d565b92506020840135610cbb81610c4d565b929592945050506040919091013590565b5f8060408385031215610cdd575f80fd5b823591506020830135610cef81610c4d565b809150509250929050565b803561ffff81168114610d0b575f80fd5b919050565b5f805f8060808587031215610d23575f80fd5b610d2c85610cfa565b966020860135965060408601359560600135945092505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610d8357610d83610d46565b604052919050565b5f82601f830112610d9a575f80fd5b813567ffffffffffffffff811115610db457610db4610d46565b610dc7601f8201601f1916602001610d5a565b818152846020838601011115610ddb575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f60a08688031215610e0b575f80fd5b853567ffffffffffffffff80821115610e22575f80fd5b610e2e89838a01610d8b565b9650602091508188013581811115610e44575f80fd5b8801601f81018a13610e54575f80fd5b803582811115610e6657610e66610d46565b8060051b610e75858201610d5a565b918252828101850191858101908d841115610e8e575f80fd5b86850192505b83831015610ec957823586811115610eab575f8081fd5b610eb98f8983890101610d8b565b8352509186019190860190610e94565b809a505050505050505060408601359250610ee660608701610cfa565b949793965091946080013592915050565b5f8060408385031215610f08575f80fd5b610f1183610cfa565b91506020830135610cef81610c4d565b5f60208284031215610f31575f80fd5b8135610c4681610c4d565b5f60208284031215610f4c575f80fd5b5035919050565b5f60208284031215610f63575f80fd5b610c4682610cfa565b5f8060408385031215610f7d575f80fd5b8235610f1181610c4d565b600181811c90821680610f9c57607f821691505b602082108103610fba57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f8060408385031215610fd1575f80fd5b505080516020909101519092909150565b61ffff861681526001600160a01b038516602082015260a0604082018190525f9061100f90830186610bf1565b606083019490945250608001529392505050565b5f60208284031215611033575f80fd5b815167ffffffffffffffff81168114610c46575f80fd5b5f805f6060848603121561105c575f80fd5b835161106781610c4d565b602085015160409095015190969495509392505050565b8082018082111561047757634e487b7160e01b5f52601160045260245ffdfea2646970667358221220909e327a655f0900607256ca797027cd91826ddc3c21d12ba0fd580d1581382764736f6c63430008150033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000f43726f7373436861696e546f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034343540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000083dff5d28c4e642f0a087a4a01422248ae559ff900000000000000000000000091159a346dff707822e0a4d108170433075c8b44
Deployed Bytecode
0x6080604052600436106100fa575f3560e01c8063529dca32116100925780639dc29fac116100625780639dc29fac146102d2578063a3c44705146102f1578063a9059cbb1461033d578063a9963d291461035c578063dd62ed3e14610390575f80fd5b8063529dca321461022a5780635a0d4f791461023d57806370a082311461028a57806395d89b41146102be575f80fd5b80632e0ca474116100cd5780632e0ca47414610194578063313ce567146101dd57806340c10f19146101f85780634f85cede14610217575f80fd5b806306fdde03146100fe578063095ea7b31461012857806318160ddd1461015757806323b872dd14610175575b5f80fd5b348015610109575f80fd5b506101126103d4565b60405161011f9190610c34565b60405180910390f35b348015610133575f80fd5b50610147610142366004610c64565b610464565b604051901515815260200161011f565b348015610162575f80fd5b506002545b60405190815260200161011f565b348015610180575f80fd5b5061014761018f366004610c8e565b61047d565b34801561019f575f80fd5b506101db6101ae366004610ccc565b5f9182526005602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b005b3480156101e8575f80fd5b506040516012815260200161011f565b348015610203575f80fd5b506101db610212366004610c64565b6104a0565b6101db610225366004610d10565b6104ae565b6101db610238366004610df7565b610743565b348015610248575f80fd5b506101db610257366004610ef7565b61ffff919091165f90815260066020526040902080546001600160a01b0319166001600160a01b03909216919091179055565b348015610295575f80fd5b506101676102a4366004610f21565b6001600160a01b03165f9081526020819052604090205490565b3480156102c9575f80fd5b50610112610881565b3480156102dd575f80fd5b506101db6102ec366004610c64565b610890565b3480156102fc575f80fd5b5061032561030b366004610f3c565b60056020525f90815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161011f565b348015610348575f80fd5b50610147610357366004610c64565b61089a565b348015610367575f80fd5b50610325610376366004610f53565b60066020525f90815260409020546001600160a01b031681565b34801561039b575f80fd5b506101676103aa366004610f6c565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6060600380546103e390610f88565b80601f016020809104026020016040519081016040528092919081815260200182805461040f90610f88565b801561045a5780601f106104315761010080835404028352916020019161045a565b820191905f5260205f20905b81548152906001019060200180831161043d57829003601f168201915b5050505050905090565b5f336104718185856108a7565b60019150505b92915050565b5f3361048a8582856108b9565b610495858585610934565b506001949350505050565b6104aa8282610991565b5050565b61ffff84165f908152600660205260409020546001600160a01b03168061051c5760405162461bcd60e51b815260206004820152601b60248201527f54617267657420636861696e206e6f742072656769737465726564000000000060448201526064015b60405180910390fd5b335f908152602081905260409020548311156105715760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610513565b61057b33846109c5565b5f8481526005602052604080822054905163c23ee3c360e01b815261ffff8816600482015260248101839052604481018590526001600160a01b03909116908290829063c23ee3c3906064016040805180830381865afa1580156105e1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106059190610fc0565b5090508034101561064b5760405162461bcd60e51b815260206004820152601060248201526f496e73756666696369656e742066656560801b6044820152606401610513565b6040805133602082015280820188905260608082018a90528251808303909101815260808201928390526347f66e8160e11b9092525f916001600160a01b03851691638fecdd029134916106aa918e918b91908b908e90608401610fe2565b60206040518083038185885af11580156106c6573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906106eb9190611023565b6040805189815267ffffffffffffffff8316602082015291925061ffff8b169133917f015c3be6f91ca7365029dda15005668717e497421ac8086dd657a39081353148910160405180910390a3505050505050505050565b61ffff82165f908152600660205260409020546001600160a01b03166107ab5760405162461bcd60e51b815260206004820152601b60248201527f536f7572636520636861696e206e6f74207265676973746572656400000000006044820152606401610513565b5f805f878060200190518101906107c2919061104a565b5f8181526005602052604090205492955090935091506001600160a01b031633146108255760405162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21031b0b63632b960691b6044820152606401610513565b61082f8383610991565b8461ffff16836001600160a01b03167f16e6492ac2521dd450b41f39fe926c6e25a5db81e25b9d5eeff14bfa526066528460405161086f91815260200190565b60405180910390a35050505050505050565b6060600480546103e390610f88565b6104aa82826109c5565b5f33610471818585610934565b6108b483838360016109f9565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f19811461092e578181101561092057604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610513565b61092e84848484035f6109f9565b50505050565b6001600160a01b03831661095d57604051634b637e8f60e11b81525f6004820152602401610513565b6001600160a01b0382166109865760405163ec442f0560e01b81525f6004820152602401610513565b6108b4838383610acb565b6001600160a01b0382166109ba5760405163ec442f0560e01b81525f6004820152602401610513565b6104aa5f8383610acb565b6001600160a01b0382166109ee57604051634b637e8f60e11b81525f6004820152602401610513565b6104aa825f83610acb565b6001600160a01b038416610a225760405163e602df0560e01b81525f6004820152602401610513565b6001600160a01b038316610a4b57604051634a1406b160e11b81525f6004820152602401610513565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561092e57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610abd91815260200190565b60405180910390a350505050565b6001600160a01b038316610af5578060025f828254610aea919061107e565b90915550610b659050565b6001600160a01b0383165f9081526020819052604090205481811015610b475760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610513565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610b8157600280548290039055610b9f565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610be491815260200190565b60405180910390a3505050565b5f81518084525f5b81811015610c1557602081850181015186830182015201610bf9565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f610c466020830184610bf1565b9392505050565b6001600160a01b0381168114610c61575f80fd5b50565b5f8060408385031215610c75575f80fd5b8235610c8081610c4d565b946020939093013593505050565b5f805f60608486031215610ca0575f80fd5b8335610cab81610c4d565b92506020840135610cbb81610c4d565b929592945050506040919091013590565b5f8060408385031215610cdd575f80fd5b823591506020830135610cef81610c4d565b809150509250929050565b803561ffff81168114610d0b575f80fd5b919050565b5f805f8060808587031215610d23575f80fd5b610d2c85610cfa565b966020860135965060408601359560600135945092505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610d8357610d83610d46565b604052919050565b5f82601f830112610d9a575f80fd5b813567ffffffffffffffff811115610db457610db4610d46565b610dc7601f8201601f1916602001610d5a565b818152846020838601011115610ddb575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f60a08688031215610e0b575f80fd5b853567ffffffffffffffff80821115610e22575f80fd5b610e2e89838a01610d8b565b9650602091508188013581811115610e44575f80fd5b8801601f81018a13610e54575f80fd5b803582811115610e6657610e66610d46565b8060051b610e75858201610d5a565b918252828101850191858101908d841115610e8e575f80fd5b86850192505b83831015610ec957823586811115610eab575f8081fd5b610eb98f8983890101610d8b565b8352509186019190860190610e94565b809a505050505050505060408601359250610ee660608701610cfa565b949793965091946080013592915050565b5f8060408385031215610f08575f80fd5b610f1183610cfa565b91506020830135610cef81610c4d565b5f60208284031215610f31575f80fd5b8135610c4681610c4d565b5f60208284031215610f4c575f80fd5b5035919050565b5f60208284031215610f63575f80fd5b610c4682610cfa565b5f8060408385031215610f7d575f80fd5b8235610f1181610c4d565b600181811c90821680610f9c57607f821691505b602082108103610fba57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f8060408385031215610fd1575f80fd5b505080516020909101519092909150565b61ffff861681526001600160a01b038516602082015260a0604082018190525f9061100f90830186610bf1565b606083019490945250608001529392505050565b5f60208284031215611033575f80fd5b815167ffffffffffffffff81168114610c46575f80fd5b5f805f6060848603121561105c575f80fd5b835161106781610c4d565b602085015160409095015190969495509392505050565b8082018082111561047757634e487b7160e01b5f52601160045260245ffdfea2646970667358221220909e327a655f0900607256ca797027cd91826ddc3c21d12ba0fd580d1581382764736f6c63430008150033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000f43726f7373436861696e546f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034343540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000083dff5d28c4e642f0a087a4a01422248ae559ff900000000000000000000000091159a346dff707822e0a4d108170433075c8b44
-----Decoded View---------------
Arg [0] : name_ (string): CrossChainToken
Arg [1] : symbol_ (string): CCT
Arg [2] : bridgeAddrs (address[]): 0x83DFF5D28C4e642f0a087A4A01422248AE559ff9,0x91159a346DfF707822E0a4d108170433075C8b44
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [4] : 43726f7373436861696e546f6b656e0000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 4343540000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [8] : 00000000000000000000000083dff5d28c4e642f0a087a4a01422248ae559ff9
Arg [9] : 00000000000000000000000091159a346dff707822e0a4d108170433075c8b44
Deployed Bytecode Sourcemap
25005:3121:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14746:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17039:190;;;;;;;;;;-1:-1:-1;17039:190:0;;;;;:::i;:::-;;:::i;:::-;;;1288:14:1;;1281:22;1263:41;;1251:2;1236:18;17039:190:0;1123:187:1;15848:99:0;;;;;;;;;;-1:-1:-1;15927:12:0;;15848:99;;;1461:25:1;;;1449:2;1434:18;15848:99:0;1315:177:1;17839:249:0;;;;;;;;;;-1:-1:-1;17839:249:0;;;;;:::i;:::-;;:::i;28014:109::-;;;;;;;;;;-1:-1:-1;28014:109:0;;;;;:::i;:::-;28088:14;;;;:7;:14;;;;;;:27;;-1:-1:-1;;;;;;28088:27:0;-1:-1:-1;;;;;28088:27:0;;;;;;;;;28014:109;;;15699:84;;;;;;;;;;-1:-1:-1;15699:84:0;;15773:2;2420:36:1;;2408:2;2393:18;15699:84:0;2278:184:1;27905:101:0;;;;;;;;;;-1:-1:-1;27905:101:0;;;;;:::i;:::-;;:::i;25899:1260::-;;;;;;:::i;:::-;;:::i;27167:631::-;;;;;;:::i;:::-;;:::i;25733:158::-;;;;;;;;;;-1:-1:-1;25733:158:0;;;;;:::i;:::-;25834:31;;;;;;;;;:22;:31;;;;;:49;;-1:-1:-1;;;;;;25834:49:0;-1:-1:-1;;;;;25834:49:0;;;;;;;;;25733:158;16010:118;;;;;;;;;;-1:-1:-1;16010:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;16102:18:0;16075:7;16102:18;;;;;;;;;;;;16010:118;14956:95;;;;;;;;;;;;;:::i;27806:91::-;;;;;;;;;;-1:-1:-1;27806:91:0;;;;;:::i;:::-;;:::i;25065:42::-;;;;;;;;;;-1:-1:-1;25065:42:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;25065:42:0;;;;;;-1:-1:-1;;;;;6496:32:1;;;6478:51;;6466:2;6451:18;25065:42:0;6332:203:1;16333:182:0;;;;;;;;;;-1:-1:-1;16333:182:0;;;;;:::i;:::-;;:::i;25114:56::-;;;;;;;;;;-1:-1:-1;25114:56:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;25114:56:0;;;16578:142;;;;;;;;;;-1:-1:-1;16578:142:0;;;;;:::i;:::-;-1:-1:-1;;;;;16685:18:0;;;16658:7;16685:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;16578:142;14746:91;14791:13;14824:5;14817:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14746:91;:::o;17039:190::-;17112:4;11078:10;17168:31;11078:10;17184:7;17193:5;17168:8;:31::i;:::-;17217:4;17210:11;;;17039:190;;;;;:::o;17839:249::-;17926:4;11078:10;17984:37;18000:4;11078:10;18015:5;17984:15;:37::i;:::-;18032:26;18042:4;18048:2;18052:5;18032:9;:26::i;:::-;-1:-1:-1;18076:4:0;;17839:249;-1:-1:-1;;;;17839:249:0:o;27905:101::-;27974:24;27980:9;27991:6;27974:5;:24::i;:::-;27905:101;;:::o;25899:1260::-;26086:35;;;26061:22;26086:35;;;:22;:35;;;;;;-1:-1:-1;;;;;26086:35:0;;26132:68;;;;-1:-1:-1;;;26132:68:0;;7709:2:1;26132:68:0;;;7691:21:1;7748:2;7728:18;;;7721:30;7787:29;7767:18;;;7760:57;7834:18;;26132:68:0;;;;;;;;;26239:10;16075:7;16102:18;;;;;;;;;;;26219:6;:31;;26211:64;;;;-1:-1:-1;;;26211:64:0;;8065:2:1;26211:64:0;;;8047:21:1;8104:2;8084:18;;;8077:30;-1:-1:-1;;;8123:18:1;;;8116:50;8183:18;;26211:64:0;7863:344:1;26211:64:0;26324:25;26330:10;26342:6;26324:5;:25::i;:::-;26421:26;26527:20;;;:7;:20;;;;;;;26613:117;;-1:-1:-1;;;26613:117:0;;8494:6:1;8482:19;;26613:117:0;;;8464:38:1;8518:18;;;8511:34;;;8561:18;;;8554:34;;;-1:-1:-1;;;;;26527:20:0;;;;26421:26;;26527:20;;26613:29;;8437:18:1;;26613:117:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26586:144;;;26762:12;26749:9;:25;;26741:54;;;;-1:-1:-1;;;26741:54:0;;9051:2:1;26741:54:0;;;9033:21:1;9090:2;9070:18;;;9063:30;-1:-1:-1;;;9109:18:1;;;9102:46;9165:18;;26741:54:0;8849:340:1;26741:54:0;26976:43;;;26987:10;26976:43;;;9396:51:1;9463:18;;;9456:34;;;9506:18;;;;9499:34;;;26976:43:0;;;;;;;;;;9369:18:1;;;26976:43:0;;;;-1:-1:-1;;;26864:217:0;;;-1:-1:-1;;;;;;;26864:24:0;;;;;26896:9;;26864:217;;26921:11;;26947:14;;26976:43;27034:13;;27062:8;;26864:217;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27099:52;;;10608:25:1;;;10681:18;10669:31;;10664:2;10649:18;;10642:59;26846:235:0;;-1:-1:-1;27099:52:0;;;;27109:10;;27099:52;;10581:18:1;27099:52:0;;;;;;;26050:1109;;;;;25899:1260;;;;:::o;27167:631::-;27373:35;;;27420:1;27373:35;;;:22;:35;;;;;;-1:-1:-1;;;;;27373:35:0;27365:89;;;;-1:-1:-1;;;27365:89:0;;10914:2:1;27365:89:0;;;10896:21:1;10953:2;10933:18;;;10926:30;10992:29;10972:18;;;10965:57;11039:18;;27365:89:0;10712:351:1;27365:89:0;27468:17;27487:14;27503:19;27551:7;27526:85;;;;;;;;;;;;:::i;:::-;27646:20;;;;:7;:20;;;;;;27467:144;;-1:-1:-1;27467:144:0;;-1:-1:-1;27646:20:0;-1:-1:-1;;;;;;27646:20:0;27632:10;:34;27624:66;;;;-1:-1:-1;;;27624:66:0;;11656:2:1;27624:66:0;;;11638:21:1;11695:2;11675:18;;;11668:30;-1:-1:-1;;;11714:18:1;;;11707:49;11773:18;;27624:66:0;11454:343:1;27624:66:0;27703:24;27709:9;27720:6;27703:5;:24::i;:::-;27770:11;27745:45;;27759:9;-1:-1:-1;;;;;27745:45:0;;27783:6;27745:45;;;;1461:25:1;;1449:2;1434:18;;1315:177;27745:45:0;;;;;;;;27354:444;;;27167:631;;;;;:::o;14956:95::-;15003:13;15036:7;15029:14;;;;;:::i;27806:91::-;27870:19;27876:4;27882:6;27870:5;:19::i;16333:182::-;16402:4;11078:10;16458:27;11078:10;16475:2;16479:5;16458:9;:27::i;21898:130::-;21983:37;21992:5;21999:7;22008:5;22015:4;21983:8;:37::i;:::-;21898:130;;;:::o;23630:487::-;-1:-1:-1;;;;;16685:18:0;;;23730:24;16685:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;23797:37:0;;23793:317;;23874:5;23855:16;:24;23851:132;;;23907:60;;-1:-1:-1;;;23907:60:0;;-1:-1:-1;;;;;9414:32:1;;23907:60:0;;;9396:51:1;9463:18;;;9456:34;;;9506:18;;;9499:34;;;9369:18;;23907:60:0;9194:345:1;23851:132:0;24026:57;24035:5;24042:7;24070:5;24051:16;:24;24077:5;24026:8;:57::i;:::-;23719:398;23630:487;;;:::o;18473:308::-;-1:-1:-1;;;;;18557:18:0;;18553:88;;18599:30;;-1:-1:-1;;;18599:30:0;;18626:1;18599:30;;;6478:51:1;6451:18;;18599:30:0;6332:203:1;18553:88:0;-1:-1:-1;;;;;18655:16:0;;18651:88;;18695:32;;-1:-1:-1;;;18695:32:0;;18724:1;18695:32;;;6478:51:1;6451:18;;18695:32:0;6332:203:1;18651:88:0;18749:24;18757:4;18763:2;18767:5;18749:7;:24::i;20593:213::-;-1:-1:-1;;;;;20664:21:0;;20660:93;;20709:32;;-1:-1:-1;;;20709:32:0;;20738:1;20709:32;;;6478:51:1;6451:18;;20709:32:0;6332:203:1;20660:93:0;20763:35;20779:1;20783:7;20792:5;20763:7;:35::i;21134:211::-;-1:-1:-1;;;;;21205:21:0;;21201:91;;21250:30;;-1:-1:-1;;;21250:30:0;;21277:1;21250:30;;;6478:51:1;6451:18;;21250:30:0;6332:203:1;21201:91:0;21302:35;21310:7;21327:1;21331:5;21302:7;:35::i;22895:443::-;-1:-1:-1;;;;;23008:19:0;;23004:91;;23051:32;;-1:-1:-1;;;23051:32:0;;23080:1;23051:32;;;6478:51:1;6451:18;;23051:32:0;6332:203:1;23004:91:0;-1:-1:-1;;;;;23109:21:0;;23105:92;;23154:31;;-1:-1:-1;;;23154:31:0;;23182:1;23154:31;;;6478:51:1;6451:18;;23154:31:0;6332:203:1;23105:92:0;-1:-1:-1;;;;;23207:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:35;;;23253:78;;;;23304:7;-1:-1:-1;;;;;23288:31:0;23297:5;-1:-1:-1;;;;;23288:31:0;;23313:5;23288:31;;;;1461:25:1;;1449:2;1434:18;;1315:177;23288:31:0;;;;;;;;22895:443;;;;:::o;19105:1135::-;-1:-1:-1;;;;;19195:18:0;;19191:552;;19349:5;19333:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;19191:552:0;;-1:-1:-1;19191:552:0;;-1:-1:-1;;;;;19409:15:0;;19387:19;19409:15;;;;;;;;;;;19443:19;;;19439:117;;;19490:50;;-1:-1:-1;;;19490:50:0;;-1:-1:-1;;;;;9414:32:1;;19490:50:0;;;9396:51:1;9463:18;;;9456:34;;;9506:18;;;9499:34;;;9369:18;;19490:50:0;9194:345:1;19439:117:0;-1:-1:-1;;;;;19679:15:0;;:9;:15;;;;;;;;;;19697:19;;;;19679:37;;19191:552;-1:-1:-1;;;;;19759:16:0;;19755:435;;19925:12;:21;;;;;;;19755:435;;;-1:-1:-1;;;;;20141:13:0;;:9;:13;;;;;;;;;;:22;;;;;;19755:435;20222:2;-1:-1:-1;;;;;20207:25:0;20216:4;-1:-1:-1;;;;;20207:25:0;;20226:5;20207:25;;;;1461::1;;1449:2;1434:18;;1315:177;20207:25:0;;;;;;;;19105:1135;;;:::o;14:423:1:-;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:162;170:6;167:1;164:13;156:162;;;232:4;288:13;;;284:22;;278:29;260:11;;;256:20;;249:59;185:12;156:162;;;160:3;363:1;356:4;347:6;342:3;338:16;334:27;327:38;426:4;419:2;415:7;410:2;402:6;398:15;394:29;389:3;385:39;381:50;374:57;;;14:423;;;;:::o;442:220::-;591:2;580:9;573:21;554:4;611:45;652:2;641:9;637:18;629:6;611:45;:::i;:::-;603:53;442:220;-1:-1:-1;;;442:220:1:o;667:131::-;-1:-1:-1;;;;;742:31:1;;732:42;;722:70;;788:1;785;778:12;722:70;667:131;:::o;803:315::-;871:6;879;932:2;920:9;911:7;907:23;903:32;900:52;;;948:1;945;938:12;900:52;987:9;974:23;1006:31;1031:5;1006:31;:::i;:::-;1056:5;1108:2;1093:18;;;;1080:32;;-1:-1:-1;;;803:315:1:o;1497:456::-;1574:6;1582;1590;1643:2;1631:9;1622:7;1618:23;1614:32;1611:52;;;1659:1;1656;1649:12;1611:52;1698:9;1685:23;1717:31;1742:5;1717:31;:::i;:::-;1767:5;-1:-1:-1;1824:2:1;1809:18;;1796:32;1837:33;1796:32;1837:33;:::i;:::-;1497:456;;1889:7;;-1:-1:-1;;;1943:2:1;1928:18;;;;1915:32;;1497:456::o;1958:315::-;2026:6;2034;2087:2;2075:9;2066:7;2062:23;2058:32;2055:52;;;2103:1;2100;2093:12;2055:52;2139:9;2126:23;2116:33;;2199:2;2188:9;2184:18;2171:32;2212:31;2237:5;2212:31;:::i;:::-;2262:5;2252:15;;;1958:315;;;;;:::o;2467:159::-;2534:20;;2594:6;2583:18;;2573:29;;2563:57;;2616:1;2613;2606:12;2563:57;2467:159;;;:::o;2631:410::-;2737:6;2745;2753;2761;2814:3;2802:9;2793:7;2789:23;2785:33;2782:53;;;2831:1;2828;2821:12;2782:53;2854:28;2872:9;2854:28;:::i;:::-;2844:38;2929:2;2914:18;;2901:32;;-1:-1:-1;2980:2:1;2965:18;;2952:32;;3031:2;3016:18;3003:32;;-1:-1:-1;2631:410:1;-1:-1:-1;;;2631:410:1:o;3046:127::-;3107:10;3102:3;3098:20;3095:1;3088:31;3138:4;3135:1;3128:15;3162:4;3159:1;3152:15;3178:275;3249:2;3243:9;3314:2;3295:13;;-1:-1:-1;;3291:27:1;3279:40;;3349:18;3334:34;;3370:22;;;3331:62;3328:88;;;3396:18;;:::i;:::-;3432:2;3425:22;3178:275;;-1:-1:-1;3178:275:1:o;3458:530::-;3500:5;3553:3;3546:4;3538:6;3534:17;3530:27;3520:55;;3571:1;3568;3561:12;3520:55;3607:6;3594:20;3633:18;3629:2;3626:26;3623:52;;;3655:18;;:::i;:::-;3699:55;3742:2;3723:13;;-1:-1:-1;;3719:27:1;3748:4;3715:38;3699:55;:::i;:::-;3779:2;3770:7;3763:19;3825:3;3818:4;3813:2;3805:6;3801:15;3797:26;3794:35;3791:55;;;3842:1;3839;3832:12;3791:55;3907:2;3900:4;3892:6;3888:17;3881:4;3872:7;3868:18;3855:55;3955:1;3930:16;;;3948:4;3926:27;3919:38;;;;3934:7;3458:530;-1:-1:-1;;;3458:530:1:o;3993:1573::-;4130:6;4138;4146;4154;4162;4215:3;4203:9;4194:7;4190:23;4186:33;4183:53;;;4232:1;4229;4222:12;4183:53;4272:9;4259:23;4301:18;4342:2;4334:6;4331:14;4328:34;;;4358:1;4355;4348:12;4328:34;4381:49;4422:7;4413:6;4402:9;4398:22;4381:49;:::i;:::-;4371:59;;4449:2;4439:12;;4504:2;4493:9;4489:18;4476:32;4533:2;4523:8;4520:16;4517:36;;;4549:1;4546;4539:12;4517:36;4572:24;;4627:4;4619:13;;4615:27;-1:-1:-1;4605:55:1;;4656:1;4653;4646:12;4605:55;4692:2;4679:16;4714:2;4710;4707:10;4704:36;;;4720:18;;:::i;:::-;4766:2;4763:1;4759:10;4789:28;4813:2;4809;4805:11;4789:28;:::i;:::-;4851:15;;;4921:11;;;4917:20;;;4882:12;;;;4949:19;;;4946:39;;;4981:1;4978;4971:12;4946:39;5013:2;5009;5005:11;4994:22;;5025:352;5041:6;5036:3;5033:15;5025:352;;;5127:3;5114:17;5163:2;5150:11;5147:19;5144:109;;;5207:1;5236:2;5232;5225:14;5144:109;5278:56;5326:7;5321:2;5307:11;5303:2;5299:20;5295:29;5278:56;:::i;:::-;5266:69;;-1:-1:-1;5058:12:1;;;;5355;;;;5025:352;;;5396:5;5386:15;;;;;;;;;5448:2;5437:9;5433:18;5420:32;5410:42;;5471:37;5504:2;5493:9;5489:18;5471:37;:::i;:::-;3993:1573;;;;-1:-1:-1;3993:1573:1;;5555:3;5540:19;5527:33;;3993:1573;-1:-1:-1;;3993:1573:1:o;5571:319::-;5638:6;5646;5699:2;5687:9;5678:7;5674:23;5670:32;5667:52;;;5715:1;5712;5705:12;5667:52;5738:28;5756:9;5738:28;:::i;:::-;5728:38;;5816:2;5805:9;5801:18;5788:32;5829:31;5854:5;5829:31;:::i;5895:247::-;5954:6;6007:2;5995:9;5986:7;5982:23;5978:32;5975:52;;;6023:1;6020;6013:12;5975:52;6062:9;6049:23;6081:31;6106:5;6081:31;:::i;6147:180::-;6206:6;6259:2;6247:9;6238:7;6234:23;6230:32;6227:52;;;6275:1;6272;6265:12;6227:52;-1:-1:-1;6298:23:1;;6147:180;-1:-1:-1;6147:180:1:o;6540:184::-;6598:6;6651:2;6639:9;6630:7;6626:23;6622:32;6619:52;;;6667:1;6664;6657:12;6619:52;6690:28;6708:9;6690:28;:::i;6729:388::-;6797:6;6805;6858:2;6846:9;6837:7;6833:23;6829:32;6826:52;;;6874:1;6871;6864:12;6826:52;6913:9;6900:23;6932:31;6957:5;6932:31;:::i;7122:380::-;7201:1;7197:12;;;;7244;;;7265:61;;7319:4;7311:6;7307:17;7297:27;;7265:61;7372:2;7364:6;7361:14;7341:18;7338:38;7335:161;;7418:10;7413:3;7409:20;7406:1;7399:31;7453:4;7450:1;7443:15;7481:4;7478:1;7471:15;7335:161;;7122:380;;;:::o;8599:245::-;8678:6;8686;8739:2;8727:9;8718:7;8714:23;8710:32;8707:52;;;8755:1;8752;8745:12;8707:52;-1:-1:-1;;8778:16:1;;8834:2;8819:18;;;8813:25;8778:16;;8813:25;;-1:-1:-1;8599:245:1:o;9544:594::-;9865:6;9853:19;;9835:38;;-1:-1:-1;;;;;9909:32:1;;9904:2;9889:18;;9882:60;9929:3;9973:2;9958:18;;9951:31;;;-1:-1:-1;;9999:46:1;;10025:19;;10017:6;9999:46;:::i;:::-;10076:2;10061:18;;10054:34;;;;-1:-1:-1;10119:3:1;10104:19;10097:35;9991:54;9544:594;-1:-1:-1;;;9544:594:1:o;10143:288::-;10212:6;10265:2;10253:9;10244:7;10240:23;10236:32;10233:52;;;10281:1;10278;10271:12;10233:52;10313:9;10307:16;10363:18;10356:5;10352:30;10345:5;10342:41;10332:69;;10397:1;10394;10387:12;11068:381;11164:6;11172;11180;11233:2;11221:9;11212:7;11208:23;11204:32;11201:52;;;11249:1;11246;11239:12;11201:52;11281:9;11275:16;11300:31;11325:5;11300:31;:::i;:::-;11395:2;11380:18;;11374:25;11439:2;11424:18;;;11418:25;11350:5;;11374:25;;-1:-1:-1;11418:25:1;11068:381;-1:-1:-1;;;11068:381:1:o;11802:222::-;11867:9;;;11888:10;;;11885:133;;;11940:10;11935:3;11931:20;11928:1;11921:31;11975:4;11972:1;11965:15;12003:4;12000:1;11993:15
Swarm Source
ipfs://909e327a655f0900607256ca797027cd91826ddc3c21d12ba0fd580d15813827
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.