Contract 0x841ce48f9446c8e281d3f1444cb859b4a6d0738c 17

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x9316d43f642aa5a3b48f0a75205afa74df3a37a166b3a485590eaff8e9221695Refund93406432022-04-05 12:23:56178 days 4 hrs ago0x04d0ce00950bddb7a55998dc50bb1a4ecd45ce03 IN  0x841ce48f9446c8e281d3f1444cb859b4a6d0738c0 ETH0.000284612256 ETH
0x5ce040e7a44dc3d4cb471599e3629253136fc71705c2d055b9b1c3cb7b0b7730Refund36012802021-12-05 23:42:22298 days 17 hrs ago0xaed1ad3bac98779bff4524071cc3de8cf6817f01 IN  0x841ce48f9446c8e281d3f1444cb859b4a6d0738c0 ETH0.000973602369 ETH
0x33922e3ce49ec007b86cce98e7be29406e31e18bd74be66fa42315b10270dd5fRefund34682342021-11-30 19:56:53303 days 21 hrs ago0xc75a0ff40db54203d66bff76315ed25d66037ce1 IN  0x841ce48f9446c8e281d3f1444cb859b4a6d0738c0 ETH0.000789358139 ETH
0xe2705b0812719a56efa0e3e04441d1d5119e8b2088ecafcce4d7393277ac7113Confirm34543572021-11-30 8:16:10304 days 8 hrs ago0x0b65e9206a0d078008bbf87d3f0e8977b652a43a IN  0x841ce48f9446c8e281d3f1444cb859b4a6d0738c0 ETH0.000874551028 ETH
0x517674adac2c63aa64438abc9b2b2093cb91144f5e94339665e2baa9b968cda9Transfer Out34543362021-11-30 8:12:16304 days 9 hrs ago0x0b65e9206a0d078008bbf87d3f0e8977b652a43a IN  0x841ce48f9446c8e281d3f1444cb859b4a6d0738c0 ETH0.002377846023 ETH
0x9bc72a3c77f87cb22924a4a4b5be34eb3511590907084b0ee34efcdc04aeb82dConfirm34543342021-11-30 8:12:16304 days 9 hrs ago0xa547ace36eea69f22f0f599998d54ca567179815 IN  0x841ce48f9446c8e281d3f1444cb859b4a6d0738c0 ETH0.000874246868 ETH
0x07bf26993af104a2b026a639cc2554c2c478eea7b5d9e6167f69c4464d28ba24Transfer Out34543132021-11-30 8:10:06304 days 9 hrs ago0xa547ace36eea69f22f0f599998d54ca567179815 IN  0x841ce48f9446c8e281d3f1444cb859b4a6d0738c0 ETH0.002378995704 ETH
0x3e76786c01b60fe6ca29659f5eaca729a3675ace9aea87b0b748e0ea07960f0fTransfer In34498812021-11-30 4:11:14304 days 13 hrs ago0xc75a0ff40db54203d66bff76315ed25d66037ce1 IN  0x841ce48f9446c8e281d3f1444cb859b4a6d0738c0 ETH0.002408061261 ETH
0xbba35637f11d736a6dd309a132b30c5b2b8ab9e2fa79a0ea37dcaeb686fca168Confirm34450152021-11-29 23:44:23304 days 17 hrs ago0xc75a0ff40db54203d66bff76315ed25d66037ce1 IN  0x841ce48f9446c8e281d3f1444cb859b4a6d0738c0 ETH0.001103895054 ETH
0x4aae1dca146ba5a0d9b14304a48e62a2a4e221c138048f7847a8f4d887220da4Transfer In34449812021-11-29 23:41:55304 days 17 hrs ago0xc75a0ff40db54203d66bff76315ed25d66037ce1 IN  0x841ce48f9446c8e281d3f1444cb859b4a6d0738c0 ETH0.002412380833 ETH
0xe378e74b8615042580164e4eea4b7f440e03a8e648382560da116286145aceaeConfirm34424372021-11-29 20:45:15304 days 20 hrs ago0x1689c4c13acc1877737465c4a4443aaee4f0c05f IN  0x841ce48f9446c8e281d3f1444cb859b4a6d0738c0 ETH0.000872388427 ETH
0xab579fd8c7eeb9f94e6258fce831633931b8e2c81f7699a7d9953daba5dcac97Transfer Out34423762021-11-29 20:39:39304 days 20 hrs ago0x1689c4c13acc1877737465c4a4443aaee4f0c05f IN  0x841ce48f9446c8e281d3f1444cb859b4a6d0738c0 ETH0.002368207475 ETH
0xc6add87c008297158396d2c47e6e2959ff8e722f62a608bc9b0c3307ecc4a480Confirm34417962021-11-29 19:58:37304 days 21 hrs ago0xbe34f5eea53fc23eaad5bcf53c2e8cc0e2136f7f IN  0x841ce48f9446c8e281d3f1444cb859b4a6d0738c0 ETH0.000840537489 ETH
0x6078f985c65c3882f825abda7c02ff7fe7cd40300298dd12377e1c8ee7467846Transfer Out34417362021-11-29 19:54:19304 days 21 hrs ago0xbe34f5eea53fc23eaad5bcf53c2e8cc0e2136f7f IN  0x841ce48f9446c8e281d3f1444cb859b4a6d0738c0 ETH0.002291727336 ETH
0x734b6831c5da9e6bfc0bd515235a887683d739559c99deaa79c47ee87cfbaa7aConfirm34416732021-11-29 19:49:10304 days 21 hrs ago0xbe34f5eea53fc23eaad5bcf53c2e8cc0e2136f7f IN  0x841ce48f9446c8e281d3f1444cb859b4a6d0738c0 ETH0.000837936242 ETH
0x0b21cc2f2a45e566be461c9506fc38ca76073e46d5081ea8aac413ef214c9b2aTransfer Out34415702021-11-29 19:43:06304 days 21 hrs ago0xbe34f5eea53fc23eaad5bcf53c2e8cc0e2136f7f IN  0x841ce48f9446c8e281d3f1444cb859b4a6d0738c0 ETH0.002505913334 ETH
0xaf9f54fb06189cbf0b67d0437e0f5a3a9f5d2965a98425ceff28e87b4709b34aConfirm34393642021-11-29 17:45:03304 days 23 hrs ago0x64f7354fb18b7cee35746078e1521b93fee6e061 IN  0x841ce48f9446c8e281d3f1444cb859b4a6d0738c0 ETH0.000821787579 ETH
0x38b619dff6dd599bdfbbf128cd712fdb70153d31aa7c1c5f80fbbebfa8d75096Transfer Out34393162021-11-29 17:43:25304 days 23 hrs ago0x64f7354fb18b7cee35746078e1521b93fee6e061 IN  0x841ce48f9446c8e281d3f1444cb859b4a6d0738c0 ETH0.00245474379 ETH
0x1a8ae734f89ee8fd86df0a4c2c9f317154f23a7cab857db589f59e8e5aadf710Confirm34382972021-11-29 16:58:07305 days 15 mins ago0xc75a0ff40db54203d66bff76315ed25d66037ce1 IN  0x841ce48f9446c8e281d3f1444cb859b4a6d0738c0 ETH0.001009961746 ETH
0xe4931ed99ac9344fba04085457d008523c1a5275ef56c4104530875fa9f7e3f2Transfer In34382102021-11-29 16:56:59305 days 16 mins ago0xc75a0ff40db54203d66bff76315ed25d66037ce1 IN  0x841ce48f9446c8e281d3f1444cb859b4a6d0738c0 ETH0.002207737605 ETH
0x25643ea4639dfb33b660786bcf358f81932ca8b5829393eaacab0b8fead91fa3Confirm34313292021-11-29 11:44:19305 days 5 hrs ago0xc75a0ff40db54203d66bff76315ed25d66037ce1 IN  0x841ce48f9446c8e281d3f1444cb859b4a6d0738c0 ETH0.000987061763 ETH
0x0aa5ce3adc7929d282135ce621c36eaacf0a25f6dd1202fb4a4780f959ff2eb5Transfer In34312792021-11-29 11:41:25305 days 5 hrs ago0xc75a0ff40db54203d66bff76315ed25d66037ce1 IN  0x841ce48f9446c8e281d3f1444cb859b4a6d0738c0 ETH0.002148519705 ETH
0xc2c69244deede613eeeeb582ed75249f9252f1f697450ffec06fd2a1f19330c7Confirm34295562021-11-29 10:15:46305 days 6 hrs ago0xc75a0ff40db54203d66bff76315ed25d66037ce1 IN  0x841ce48f9446c8e281d3f1444cb859b4a6d0738c0 ETH0.000986325443 ETH
0x7ac70ebbdf4be6f3f393331349b82605d21ba1985b4546a2557371adae9a89beTransfer In34294502021-11-29 10:11:49305 days 7 hrs ago0xc75a0ff40db54203d66bff76315ed25d66037ce1 IN  0x841ce48f9446c8e281d3f1444cb859b4a6d0738c0 ETH0.002148566051 ETH
0x1a6f22f9b6ed2a64c03a40086885572360bb0d75f0e24c60405617ffdfe955fcConfirm34291852021-11-29 9:58:05305 days 7 hrs ago0xc16251b5401087902e0956a2968cb3e0e4a52760 IN  0x841ce48f9446c8e281d3f1444cb859b4a6d0738c0 ETH0.000994118053 ETH
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x5ce040e7a44dc3d4cb471599e3629253136fc71705c2d055b9b1c3cb7b0b773036012802021-12-05 23:42:22298 days 17 hrs ago 0x841ce48f9446c8e281d3f1444cb859b4a6d0738c 0x8b194beae1d3e0788a1a35173978001acdfba6680 ETH
0x5ce040e7a44dc3d4cb471599e3629253136fc71705c2d055b9b1c3cb7b0b773036012802021-12-05 23:42:22298 days 17 hrs ago 0x841ce48f9446c8e281d3f1444cb859b4a6d0738c 0x82af49447d8a07e3bd95bd0d56f35241523fbab10 ETH
0x33922e3ce49ec007b86cce98e7be29406e31e18bd74be66fa42315b10270dd5f34682342021-11-30 19:56:53303 days 21 hrs ago 0x841ce48f9446c8e281d3f1444cb859b4a6d0738c 0x8b194beae1d3e0788a1a35173978001acdfba6680 ETH
0x33922e3ce49ec007b86cce98e7be29406e31e18bd74be66fa42315b10270dd5f34682342021-11-30 19:56:53303 days 21 hrs ago 0x841ce48f9446c8e281d3f1444cb859b4a6d0738c 0x82af49447d8a07e3bd95bd0d56f35241523fbab10 ETH
0xe2705b0812719a56efa0e3e04441d1d5119e8b2088ecafcce4d7393277ac711334543572021-11-30 8:16:10304 days 8 hrs ago 0x841ce48f9446c8e281d3f1444cb859b4a6d0738c 0x1efb3f88bc88f03fd1804a5c53b7141bbef5ded80 ETH
0xe2705b0812719a56efa0e3e04441d1d5119e8b2088ecafcce4d7393277ac711334543572021-11-30 8:16:10304 days 8 hrs ago 0x841ce48f9446c8e281d3f1444cb859b4a6d0738c 0xff970a61a04b1ca14834a43f5de4533ebddb5cc80 ETH
0x517674adac2c63aa64438abc9b2b2093cb91144f5e94339665e2baa9b968cda934543362021-11-30 8:12:16304 days 9 hrs ago 0x841ce48f9446c8e281d3f1444cb859b4a6d0738c 0x1efb3f88bc88f03fd1804a5c53b7141bbef5ded80 ETH
0x517674adac2c63aa64438abc9b2b2093cb91144f5e94339665e2baa9b968cda934543362021-11-30 8:12:16304 days 9 hrs ago 0x841ce48f9446c8e281d3f1444cb859b4a6d0738c 0xff970a61a04b1ca14834a43f5de4533ebddb5cc80 ETH
0x9bc72a3c77f87cb22924a4a4b5be34eb3511590907084b0ee34efcdc04aeb82d34543342021-11-30 8:12:16304 days 9 hrs ago 0x841ce48f9446c8e281d3f1444cb859b4a6d0738c 0xf31e1ae27e7cd057c1d6795a5a083e0453d39b500 ETH
0x9bc72a3c77f87cb22924a4a4b5be34eb3511590907084b0ee34efcdc04aeb82d34543342021-11-30 8:12:16304 days 9 hrs ago 0x841ce48f9446c8e281d3f1444cb859b4a6d0738c 0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb90 ETH
0x07bf26993af104a2b026a639cc2554c2c478eea7b5d9e6167f69c4464d28ba2434543132021-11-30 8:10:06304 days 9 hrs ago 0x841ce48f9446c8e281d3f1444cb859b4a6d0738c 0xf31e1ae27e7cd057c1d6795a5a083e0453d39b500 ETH
0x07bf26993af104a2b026a639cc2554c2c478eea7b5d9e6167f69c4464d28ba2434543132021-11-30 8:10:06304 days 9 hrs ago 0x841ce48f9446c8e281d3f1444cb859b4a6d0738c 0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb90 ETH
0x3e76786c01b60fe6ca29659f5eaca729a3675ace9aea87b0b748e0ea07960f0f34498812021-11-30 4:11:14304 days 13 hrs ago 0x841ce48f9446c8e281d3f1444cb859b4a6d0738c 0x8b194beae1d3e0788a1a35173978001acdfba6680 ETH
0x3e76786c01b60fe6ca29659f5eaca729a3675ace9aea87b0b748e0ea07960f0f34498812021-11-30 4:11:14304 days 13 hrs ago 0x841ce48f9446c8e281d3f1444cb859b4a6d0738c 0x82af49447d8a07e3bd95bd0d56f35241523fbab10 ETH
0xbba35637f11d736a6dd309a132b30c5b2b8ab9e2fa79a0ea37dcaeb686fca16834450152021-11-29 23:44:23304 days 17 hrs ago 0x841ce48f9446c8e281d3f1444cb859b4a6d0738c 0x3f770ac673856f105b586bb393d122721265ad460 ETH
0xbba35637f11d736a6dd309a132b30c5b2b8ab9e2fa79a0ea37dcaeb686fca16834450152021-11-29 23:44:23304 days 17 hrs ago 0x841ce48f9446c8e281d3f1444cb859b4a6d0738c0x3a8b787f78d775aecfeea15706d4221b40f345ab0 ETH
0x4aae1dca146ba5a0d9b14304a48e62a2a4e221c138048f7847a8f4d887220da434449812021-11-29 23:41:55304 days 17 hrs ago 0x841ce48f9446c8e281d3f1444cb859b4a6d0738c 0x3f770ac673856f105b586bb393d122721265ad460 ETH
0x4aae1dca146ba5a0d9b14304a48e62a2a4e221c138048f7847a8f4d887220da434449812021-11-29 23:41:55304 days 17 hrs ago 0x841ce48f9446c8e281d3f1444cb859b4a6d0738c0x3a8b787f78d775aecfeea15706d4221b40f345ab0 ETH
0xe378e74b8615042580164e4eea4b7f440e03a8e648382560da116286145aceae34424372021-11-29 20:45:15304 days 20 hrs ago 0x841ce48f9446c8e281d3f1444cb859b4a6d0738c 0xf31e1ae27e7cd057c1d6795a5a083e0453d39b500 ETH
0xe378e74b8615042580164e4eea4b7f440e03a8e648382560da116286145aceae34424372021-11-29 20:45:15304 days 20 hrs ago 0x841ce48f9446c8e281d3f1444cb859b4a6d0738c 0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb90 ETH
0xab579fd8c7eeb9f94e6258fce831633931b8e2c81f7699a7d9953daba5dcac9734423762021-11-29 20:39:39304 days 20 hrs ago 0x841ce48f9446c8e281d3f1444cb859b4a6d0738c 0xf31e1ae27e7cd057c1d6795a5a083e0453d39b500 ETH
0xab579fd8c7eeb9f94e6258fce831633931b8e2c81f7699a7d9953daba5dcac9734423762021-11-29 20:39:39304 days 20 hrs ago 0x841ce48f9446c8e281d3f1444cb859b4a6d0738c 0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb90 ETH
0xc6add87c008297158396d2c47e6e2959ff8e722f62a608bc9b0c3307ecc4a48034417962021-11-29 19:58:37304 days 21 hrs ago 0x841ce48f9446c8e281d3f1444cb859b4a6d0738c 0x8b194beae1d3e0788a1a35173978001acdfba6680 ETH
0xc6add87c008297158396d2c47e6e2959ff8e722f62a608bc9b0c3307ecc4a48034417962021-11-29 19:58:37304 days 21 hrs ago 0x841ce48f9446c8e281d3f1444cb859b4a6d0738c 0x82af49447d8a07e3bd95bd0d56f35241523fbab10 ETH
0x6078f985c65c3882f825abda7c02ff7fe7cd40300298dd12377e1c8ee746784634417362021-11-29 19:54:19304 days 21 hrs ago 0x841ce48f9446c8e281d3f1444cb859b4a6d0738c 0x8b194beae1d3e0788a1a35173978001acdfba6680 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CBridge

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 800 runs

Other Settings:
default evmVersion, GNU GPLv3 license
/**
 *Submitted for verification at Arbiscan on 2021-08-30
*/

// Sources flattened with hardhat v2.4.1 https://hardhat.org

// File @openzeppelin/contracts/token/ERC20/[email protected]

// SPDX-License-Identifier: GPL-3.0-only

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, 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 `sender` to `recipient` 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 sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @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);
}


// File @openzeppelin/contracts/utils/[email protected]

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


// File @openzeppelin/contracts/token/ERC20/utils/[email protected]

pragma solidity ^0.8.0;


/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
        }
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}


// File contracts/CBridge.sol

pragma solidity >=0.8.0 <0.9.0;


contract CBridge {
    using SafeERC20 for IERC20;

    enum TransferStatus {
        Null,
        Pending,
        Confirmed,
        Refunded
    }
    struct Transfer {
        address sender;
        address receiver;
        address token;
        uint256 amount;
        bytes32 hashlock; // hash of the preimage
        uint64 timelock; // UNIX timestamp seconds - locked UNTIL this time
        TransferStatus status;
    }

    mapping(bytes32 => Transfer) public transfers;

    event LogNewTransferOut(
        bytes32 transferId,
        address sender,
        address receiver,
        address token,
        uint256 amount,
        bytes32 hashlock, // hash of the preimage
        uint64 timelock, // UNIX timestamp seconds - locked UNTIL this time
        uint64 dstChainId,
        address dstAddress
    );
    event LogNewTransferIn(
        bytes32 transferId,
        address sender,
        address receiver,
        address token,
        uint256 amount,
        bytes32 hashlock, // hash of the preimage
        uint64 timelock, // UNIX timestamp seconds - locked UNTIL this time
        uint64 srcChainId,
        bytes32 srcTransferId // outbound transferId at src chain
    );
    event LogTransferConfirmed(bytes32 transferId, bytes32 preimage);
    event LogTransferRefunded(bytes32 transferId);

    /**
     * @dev transfer sets up a new outbound transfer with hash time lock.
     */
    function transferOut(
        address _bridge,
        address _token,
        uint256 _amount,
        bytes32 _hashlock,
        uint64 _timelock,
        uint64 _dstChainId,
        address _dstAddress
    ) external {
        bytes32 transferId = _transfer(_bridge, _token, _amount, _hashlock, _timelock);
        emit LogNewTransferOut(
            transferId,
            msg.sender,
            _bridge,
            _token,
            _amount,
            _hashlock,
            _timelock,
            _dstChainId,
            _dstAddress
        );
    }

    /**
     * @dev transfer sets up a new inbound transfer with hash time lock.
     */
    function transferIn(
        address _dstAddress,
        address _token,
        uint256 _amount,
        bytes32 _hashlock,
        uint64 _timelock,
        uint64 _srcChainId,
        bytes32 _srcTransferId
    ) external {
        bytes32 transferId = _transfer(_dstAddress, _token, _amount, _hashlock, _timelock);
        emit LogNewTransferIn(
            transferId,
            msg.sender,
            _dstAddress,
            _token,
            _amount,
            _hashlock,
            _timelock,
            _srcChainId,
            _srcTransferId
        );
    }

    /**
     * @dev confirm a transfer.
     *
     * @param _transferId Id of pending transfer.
     * @param _preimage key for the hashlock
     */
    function confirm(bytes32 _transferId, bytes32 _preimage) external {
        Transfer memory t = transfers[_transferId];

        require(t.status == TransferStatus.Pending, "not pending transfer");
        require(t.hashlock == keccak256(abi.encodePacked(_preimage)), "incorrect preimage");

        transfers[_transferId].status = TransferStatus.Confirmed;

        IERC20(t.token).safeTransfer(t.receiver, t.amount);
        emit LogTransferConfirmed(_transferId, _preimage);
    }

    /**
     * @dev refund a transfer after timeout.
     *
     * @param _transferId Id of pending transfer.
     */
    function refund(bytes32 _transferId) external {
        Transfer memory t = transfers[_transferId];

        require(t.status == TransferStatus.Pending, "not pending transfer");
        require(t.timelock <= block.timestamp, "timelock not yet passed");

        transfers[_transferId].status = TransferStatus.Refunded;

        IERC20(t.token).safeTransfer(t.sender, t.amount);
        emit LogTransferRefunded(_transferId);
    }

    /**
     * @dev transfer sets up a new transfer with hash time lock.
     */
    function _transfer(
        address _receiver,
        address _token,
        uint256 _amount,
        bytes32 _hashlock,
        uint64 _timelock
    ) private returns (bytes32 transferId) {
        require(_amount > 0, "invalid amount");
        require(_timelock > block.timestamp, "invalid timelock");

        transferId = keccak256(abi.encodePacked(msg.sender, _receiver, _hashlock, block.chainid));
        require(transfers[transferId].status == TransferStatus.Null, "transfer exists");

        IERC20(_token).safeTransferFrom(msg.sender, address(this), _amount);

        transfers[transferId] = Transfer(
            msg.sender,
            _receiver,
            _token,
            _amount,
            _hashlock,
            _timelock,
            TransferStatus.Pending
        );
        return transferId;
    }
}

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"transferId","type":"bytes32"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"hashlock","type":"bytes32"},{"indexed":false,"internalType":"uint64","name":"timelock","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"srcChainId","type":"uint64"},{"indexed":false,"internalType":"bytes32","name":"srcTransferId","type":"bytes32"}],"name":"LogNewTransferIn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"transferId","type":"bytes32"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"hashlock","type":"bytes32"},{"indexed":false,"internalType":"uint64","name":"timelock","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"dstChainId","type":"uint64"},{"indexed":false,"internalType":"address","name":"dstAddress","type":"address"}],"name":"LogNewTransferOut","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"transferId","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"preimage","type":"bytes32"}],"name":"LogTransferConfirmed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"transferId","type":"bytes32"}],"name":"LogTransferRefunded","type":"event"},{"inputs":[{"internalType":"bytes32","name":"_transferId","type":"bytes32"},{"internalType":"bytes32","name":"_preimage","type":"bytes32"}],"name":"confirm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_transferId","type":"bytes32"}],"name":"refund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_dstAddress","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32","name":"_hashlock","type":"bytes32"},{"internalType":"uint64","name":"_timelock","type":"uint64"},{"internalType":"uint64","name":"_srcChainId","type":"uint64"},{"internalType":"bytes32","name":"_srcTransferId","type":"bytes32"}],"name":"transferIn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_bridge","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32","name":"_hashlock","type":"bytes32"},{"internalType":"uint64","name":"_timelock","type":"uint64"},{"internalType":"uint64","name":"_dstChainId","type":"uint64"},{"internalType":"address","name":"_dstAddress","type":"address"}],"name":"transferOut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"transfers","outputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32","name":"hashlock","type":"bytes32"},{"internalType":"uint64","name":"timelock","type":"uint64"},{"internalType":"enum CBridge.TransferStatus","name":"status","type":"uint8"}],"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b50610fa8806100206000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c806357f784ba1161005057806357f784ba146101045780637249fbb614610117578063f63eba251461012a57600080fd5b80633c64f04b1461006c57806346b40027146100ef575b600080fd5b6100d361007a366004610e50565b6000602081905290815260409020805460018201546002830154600384015460048501546005909501546001600160a01b03948516959385169490921692909167ffffffffffffffff811690600160401b900460ff1687565b6040516100e69796959493929190610ea5565b60405180910390f35b6101026100fd366004610d49565b61013d565b005b610102610112366004610e68565b6101de565b610102610125366004610e50565b610417565b610102610138366004610dc0565b61062d565b600061014c88888888886106bf565b604080518281523360208201526001600160a01b03808c1692820192909252818a1660608201526080810189905260a0810188905267ffffffffffffffff80881660c0830152861660e08201529084166101008201529091507f2991ed59ec037d5602bdc81fb1f3fec360f9e68fd3c1a4efb49fb3f66a88e02190610120015b60405180910390a15050505050505050565b600082815260208181526040808320815160e08101835281546001600160a01b0390811682526001830154811694820194909452600282015490931691830191909152600380820154606084015260048201546080840152600582015467ffffffffffffffff811660a085015260c0840191600160401b90910460ff169081111561027957634e487b7160e01b600052602160045260246000fd5b600381111561029857634e487b7160e01b600052602160045260246000fd5b905250905060018160c0015160038111156102c357634e487b7160e01b600052602160045260246000fd5b146103155760405162461bcd60e51b815260206004820152601460248201527f6e6f742070656e64696e67207472616e7366657200000000000000000000000060448201526064015b60405180910390fd5b604080516020810184905201604051602081830303815290604052805190602001208160800151146103895760405162461bcd60e51b815260206004820152601260248201527f696e636f727265637420707265696d6167650000000000000000000000000000604482015260640161030c565b60008381526020818152604091829020600501805468ff00000000000000001916680200000000000000001790558201516060830151918301516103d9926001600160a01b0390911691906109cc565b60408051848152602081018490527fb7ae890c7a4721f7ed769dabfeee74f0e0f5bcdaad9cab432ccea4d9fa435b50910160405180910390a1505050565b600081815260208181526040808320815160e08101835281546001600160a01b0390811682526001830154811694820194909452600282015490931691830191909152600380820154606084015260048201546080840152600582015467ffffffffffffffff811660a085015260c0840191600160401b90910460ff16908111156104b257634e487b7160e01b600052602160045260246000fd5b60038111156104d157634e487b7160e01b600052602160045260246000fd5b905250905060018160c0015160038111156104fc57634e487b7160e01b600052602160045260246000fd5b146105495760405162461bcd60e51b815260206004820152601460248201527f6e6f742070656e64696e67207472616e73666572000000000000000000000000604482015260640161030c565b428160a0015167ffffffffffffffff1611156105a75760405162461bcd60e51b815260206004820152601760248201527f74696d656c6f636b206e6f742079657420706173736564000000000000000000604482015260640161030c565b60008281526020819052604090819020600501805468ff000000000000000019166803000000000000000017905581516060830151918301516105f6926001600160a01b0390911691906109cc565b6040518281527f70a8f332cabb778f79acc5b97cbb4543970a2f1a34bd0773e4b3012931f752dc9060200160405180910390a15050565b600061063c88888888886106bf565b604080518281523360208201526001600160a01b03808c169282019290925290891660608201526080810188905260a0810187905267ffffffffffffffff80871660c0830152851660e082015261010081018490529091507f252a438c8e02dde6c26723283b3c95b1bf2550b882734770523f1d6767636f9c90610120016101cc565b60008084116107105760405162461bcd60e51b815260206004820152600e60248201527f696e76616c696420616d6f756e74000000000000000000000000000000000000604482015260640161030c565b428267ffffffffffffffff16116107695760405162461bcd60e51b815260206004820152601060248201527f696e76616c69642074696d656c6f636b00000000000000000000000000000000604482015260640161030c565b6040516bffffffffffffffffffffffff1933606090811b8216602084015288901b1660348201526048810184905246606882015260880160408051601f198184030181529190528051602090910120905060008082815260208190526040902060050154600160401b900460ff1660038111156107f657634e487b7160e01b600052602160045260246000fd5b146108435760405162461bcd60e51b815260206004820152600f60248201527f7472616e73666572206578697374730000000000000000000000000000000000604482015260640161030c565b6108586001600160a01b038616333087610a61565b6040518060e00160405280336001600160a01b03168152602001876001600160a01b03168152602001866001600160a01b031681526020018581526020018481526020018367ffffffffffffffff168152602001600160038111156108cd57634e487b7160e01b600052602160045260246000fd5b905260008281526020818152604091829020835181546001600160a01b039182167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617835592850151600183018054918316918516919091179055928401516002820180549190941692169190911790915560608201516003808301919091556080830151600483015560a083015160058301805467ffffffffffffffff90921667ffffffffffffffff1983168117825560c086015193919268ffffffffffffffffff19161790600160401b9084908111156109bc57634e487b7160e01b600052602160045260246000fd5b0217905550505095945050505050565b6040516001600160a01b038316602482015260448101829052610a5c90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152610a9f565b505050565b6040516001600160a01b0380851660248301528316604482015260648101829052610a999085906323b872dd60e01b906084016109f8565b50505050565b6000610af4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610b849092919063ffffffff16565b805190915015610a5c5780806020019051810190610b129190610e30565b610a5c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161030c565b6060610b938484600085610b9d565b90505b9392505050565b606082471015610c155760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161030c565b843b610c635760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161030c565b600080866001600160a01b03168587604051610c7f9190610e89565b60006040518083038185875af1925050503d8060008114610cbc576040519150601f19603f3d011682016040523d82523d6000602084013e610cc1565b606091505b5091509150610cd1828286610cdc565b979650505050505050565b60608315610ceb575081610b96565b825115610cfb5782518084602001fd5b8160405162461bcd60e51b815260040161030c9190610f13565b80356001600160a01b0381168114610d2c57600080fd5b919050565b803567ffffffffffffffff81168114610d2c57600080fd5b600080600080600080600060e0888a031215610d63578283fd5b610d6c88610d15565b9650610d7a60208901610d15565b95506040880135945060608801359350610d9660808901610d31565b9250610da460a08901610d31565b9150610db260c08901610d15565b905092959891949750929550565b600080600080600080600060e0888a031215610dda578283fd5b610de388610d15565b9650610df160208901610d15565b95506040880135945060608801359350610e0d60808901610d31565b9250610e1b60a08901610d31565b915060c0880135905092959891949750929550565b600060208284031215610e41578081fd5b81518015158114610b96578182fd5b600060208284031215610e61578081fd5b5035919050565b60008060408385031215610e7a578182fd5b50508035926020909101359150565b60008251610e9b818460208701610f46565b9190910192915050565b6001600160a01b038881168252878116602083015286166040820152606081018590526080810184905267ffffffffffffffff831660a082015260e0810160048310610f0157634e487b7160e01b600052602160045260246000fd5b8260c083015298975050505050505050565b6020815260008251806020840152610f32816040850160208701610f46565b601f01601f19169190910160400192915050565b60005b83811015610f61578181015183820152602001610f49565b83811115610a99575050600091015256fea26469706673582212203f576b683b544859852e2612f7dba9316d83a2b49a4f7764b07147c61931e03a64736f6c63430008040033

Deployed ByteCode Sourcemap

14847:4932:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15304:45;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15304:45:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15304:45:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;16318:584;;;;;;:::i;:::-;;:::i;:::-;;17766:493;;;;;;:::i;:::-;;:::i;18390:440::-;;;;;;:::i;:::-;;:::i;17002:600::-;;;;;;:::i;:::-;;:::i;16318:584::-;16557:18;16578:57;16588:7;16597:6;16605:7;16614:9;16625;16578;:57::i;:::-;16651:243;;;5492:25:1;;;16708:10:0;5609:2:1;5594:18;;5587:43;-1:-1:-1;;;;;5666:15:1;;;5646:18;;;5639:43;;;;5718:15;;;5713:2;5698:18;;5691:43;5765:3;5750:19;;5743:35;;;5809:3;5794:19;;5787:35;;;5841:18;5896:15;;;5890:3;5875:19;;5868:44;5949:15;;5943:3;5928:19;;5921:44;6002:15;;;5996:3;5981:19;;5974:44;16557:78:0;;-1:-1:-1;16651:243:0;;5479:3:1;5464:19;16651:243:0;;;;;;;;16318:584;;;;;;;;:::o;17766:493::-;17843:17;17863:22;;;;;;;;;;;17843:42;;;;;;;;;-1:-1:-1;;;;;17843:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17843:42:0;;;;;;;;;;;-1:-1:-1;;;17843:42:0;;;;;;;;;;;;;;;-1:-1:-1;;;17843:42:0;;;;;;;;;;;-1:-1:-1;17843:42:0;-1:-1:-1;17918:22:0;17906:1;:8;;;:34;;;;;;-1:-1:-1;;;17906:34:0;;;;;;;;;;17898:67;;;;-1:-1:-1;;;17898:67:0;;9560:2:1;17898:67:0;;;9542:21:1;9599:2;9579:18;;;9572:30;9638:22;9618:18;;;9611:50;9678:18;;17898:67:0;;;;;;;;;18008:27;;;;;;3009:19:1;;;3044:12;18008:27:0;;;;;;;;;;;;17998:38;;;;;;17984:1;:10;;;:52;17976:83;;;;-1:-1:-1;;;17976:83:0;;8110:2:1;17976:83:0;;;8092:21:1;8149:2;8129:18;;;8122:30;8188:20;8168:18;;;8161:48;8226:18;;17976:83:0;8082:168:1;17976:83:0;18072:9;:22;;;;;;;;;;;;:29;;:56;;-1:-1:-1;;18072:56:0;;;;;18170:10;;;18182:8;;;;18148:7;;;;18141:50;;-1:-1:-1;;;;;18141:28:0;;;;18170:10;18141:28;:50::i;:::-;18207:44;;;7098:25:1;;;7154:2;7139:18;;7132:34;;;18207:44:0;;7071:18:1;18207:44:0;;;;;;;17766:493;;;:::o;18390:440::-;18447:17;18467:22;;;;;;;;;;;18447:42;;;;;;;;;-1:-1:-1;;;;;18447:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18447:42:0;;;;;;;;;;;-1:-1:-1;;;18447:42:0;;;;;;;;;;;;;;;-1:-1:-1;;;18447:42:0;;;;;;;;;;;-1:-1:-1;18447:42:0;-1:-1:-1;18522:22:0;18510:1;:8;;;:34;;;;;;-1:-1:-1;;;18510:34:0;;;;;;;;;;18502:67;;;;-1:-1:-1;;;18502:67:0;;9560:2:1;18502:67:0;;;9542:21:1;9599:2;9579:18;;;9572:30;9638:22;9618:18;;;9611:50;9678:18;;18502:67:0;9532:170:1;18502:67:0;18602:15;18588:1;:10;;;:29;;;;18580:65;;;;-1:-1:-1;;;18580:65:0;;9208:2:1;18580:65:0;;;9190:21:1;9247:2;9227:18;;;9220:30;9286:25;9266:18;;;9259:53;9329:18;;18580:65:0;9180:173:1;18580:65:0;18658:9;:22;;;;;;;;;;;;:29;;:55;;-1:-1:-1;;18658:55:0;;;;;18755:8;;18765;;;;18733:7;;;;18726:48;;-1:-1:-1;;;;;18726:28:0;;;;18755:8;18726:28;:48::i;:::-;18790:32;;5089:25:1;;;18790:32:0;;5077:2:1;5062:18;18790:32:0;;;;;;;18390:440;;:::o;17002:600::-;17247:18;17268:61;17278:11;17291:6;17299:7;17308:9;17319;17268;:61::i;:::-;17345:249;;;6396:25:1;;;17401:10:0;6513:2:1;6498:18;;6491:43;-1:-1:-1;;;;;6570:15:1;;;6550:18;;;6543:43;;;;6622:15;;;6617:2;6602:18;;6595:43;6669:3;6654:19;;6647:35;;;6713:3;6698:19;;6691:35;;;6745:18;6800:15;;;6794:3;6779:19;;6772:44;6853:15;;6847:3;6832:19;;6825:44;6900:3;6885:19;;6878:35;;;17247:82:0;;-1:-1:-1;17345:249:0;;6383:3:1;6368:19;17345:249:0;6350:569:1;18922:854:0;19099:18;19148:1;19138:7;:11;19130:38;;;;-1:-1:-1;;;19130:38:0;;7767:2:1;19130:38:0;;;7749:21:1;7806:2;7786:18;;;7779:30;7845:16;7825:18;;;7818:44;7879:18;;19130:38:0;7739:164:1;19130:38:0;19199:15;19187:9;:27;;;19179:56;;;;-1:-1:-1;;;19179:56:0;;10678:2:1;19179:56:0;;;10660:21:1;10717:2;10697:18;;;10690:30;10756:18;10736;;;10729:46;10792:18;;19179:56:0;10650:166:1;19179:56:0;19271:65;;-1:-1:-1;;19288:10:0;2694:2:1;2690:15;;;2686:24;;19271:65:0;;;2674:37:1;2745:15;;;2741:24;2727:12;;;2720:46;2782:12;;;2775:28;;;19322:13:0;2819:12:1;;;2812:28;2856:13;;19271:65:0;;;-1:-1:-1;;19271:65:0;;;;;;;;;19261:76;;19271:65;19261:76;;;;;-1:-1:-1;19388:19:0;19356:9;:21;;;;;;;;;;:28;;;-1:-1:-1;;;19356:28:0;;;;:51;;;;;;-1:-1:-1;;;19356:51:0;;;;;;;;;;19348:79;;;;-1:-1:-1;;;19348:79:0;;8864:2:1;19348:79:0;;;8846:21:1;8903:2;8883:18;;;8876:30;8942:17;8922:18;;;8915:45;8977:18;;19348:79:0;8836:165:1;19348:79:0;19440:67;-1:-1:-1;;;;;19440:31:0;;19472:10;19492:4;19499:7;19440:31;:67::i;:::-;19544:196;;;;;;;;19567:10;-1:-1:-1;;;;;19544:196:0;;;;;19592:9;-1:-1:-1;;;;;19544:196:0;;;;;19616:6;-1:-1:-1;;;;;19544:196:0;;;;;19637:7;19544:196;;;;19659:9;19544:196;;;;19683:9;19544:196;;;;;;19707:22;19544:196;;;;;;-1:-1:-1;;;19544:196:0;;;;;;;;;;;19520:9;:21;;;;;;;;;;;;:220;;;;-1:-1:-1;;;;;19520:220:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19520:220:0;;;;;;;;;;;;;-1:-1:-1;;19520:220:0;;;-1:-1:-1;;;19520:220:0;;;;;;;;-1:-1:-1;;;19520:220:0;;;;;;;;;;;;;-1:-1:-1;;;18922:854:0;;;;;;;:::o;11573:177::-;11683:58;;-1:-1:-1;;;;;4833:55:1;;11683:58:0;;;4815:74:1;4905:18;;;4898:34;;;11656:86:0;;11676:5;;-1:-1:-1;;;11706:23:0;4788:18:1;;11683:58:0;;;;-1:-1:-1;;11683:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;11656:19;:86::i;:::-;11573:177;;;:::o;11758:205::-;11886:68;;-1:-1:-1;;;;;4519:15:1;;;11886:68:0;;;4501:34:1;4571:15;;4551:18;;;4544:43;4603:18;;;4596:34;;;11859:96:0;;11879:5;;-1:-1:-1;;;11909:27:0;4413:18:1;;11886:68:0;4395:241:1;11859:96:0;11758:205;;;;:::o;14007:761::-;14431:23;14457:69;14485:4;14457:69;;;;;;;;;;;;;;;;;14465:5;-1:-1:-1;;;;;14457:27:0;;;:69;;;;;:::i;:::-;14541:17;;14431:95;;-1:-1:-1;14541:21:0;14537:224;;14683:10;14672:30;;;;;;;;;;;;:::i;:::-;14664:85;;;;-1:-1:-1;;;14664:85:0;;10267:2:1;14664:85:0;;;10249:21:1;10306:2;10286:18;;;10279:30;10345:34;10325:18;;;10318:62;10416:12;10396:18;;;10389:40;10446:19;;14664:85:0;10239:232:1;6601:195:0;6704:12;6736:52;6758:6;6766:4;6772:1;6775:12;6736:21;:52::i;:::-;6729:59;;6601:195;;;;;;:::o;7653:530::-;7780:12;7838:5;7813:21;:30;;7805:81;;;;-1:-1:-1;;;7805:81:0;;8457:2:1;7805:81:0;;;8439:21:1;8496:2;8476:18;;;8469:30;8535:34;8515:18;;;8508:62;8606:8;8586:18;;;8579:36;8632:19;;7805:81:0;8429:228:1;7805:81:0;4050:20;;7897:60;;;;-1:-1:-1;;;7897:60:0;;9909:2:1;7897:60:0;;;9891:21:1;9948:2;9928:18;;;9921:30;9987:31;9967:18;;;9960:59;10036:18;;7897:60:0;9881:179:1;7897:60:0;8031:12;8045:23;8072:6;-1:-1:-1;;;;;8072:11:0;8092:5;8100:4;8072:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8030:75;;;;8123:52;8141:7;8150:10;8162:12;8123:17;:52::i;:::-;8116:59;7653:530;-1:-1:-1;;;;;;;7653:530:0:o;10193:742::-;10308:12;10337:7;10333:595;;;-1:-1:-1;10368:10:0;10361:17;;10333:595;10482:17;;:21;10478:439;;10745:10;10739:17;10806:15;10793:10;10789:2;10785:19;10778:44;10693:148;10888:12;10881:20;;-1:-1:-1;;;10881:20:0;;;;;;;;:::i;14:196:1:-;82:20;;-1:-1:-1;;;;;131:54:1;;121:65;;111:2;;200:1;197;190:12;111:2;63:147;;;:::o;215:171::-;282:20;;342:18;331:30;;321:41;;311:2;;376:1;373;366:12;391:628;502:6;510;518;526;534;542;550;603:3;591:9;582:7;578:23;574:33;571:2;;;625:6;617;610:22;571:2;653:29;672:9;653:29;:::i;:::-;643:39;;701:38;735:2;724:9;720:18;701:38;:::i;:::-;691:48;;786:2;775:9;771:18;758:32;748:42;;837:2;826:9;822:18;809:32;799:42;;860:38;893:3;882:9;878:19;860:38;:::i;:::-;850:48;;917:38;950:3;939:9;935:19;917:38;:::i;:::-;907:48;;974:39;1008:3;997:9;993:19;974:39;:::i;:::-;964:49;;561:458;;;;;;;;;;:::o;1024:622::-;1135:6;1143;1151;1159;1167;1175;1183;1236:3;1224:9;1215:7;1211:23;1207:33;1204:2;;;1258:6;1250;1243:22;1204:2;1286:29;1305:9;1286:29;:::i;:::-;1276:39;;1334:38;1368:2;1357:9;1353:18;1334:38;:::i;:::-;1324:48;;1419:2;1408:9;1404:18;1391:32;1381:42;;1470:2;1459:9;1455:18;1442:32;1432:42;;1493:38;1526:3;1515:9;1511:19;1493:38;:::i;:::-;1483:48;;1550:38;1583:3;1572:9;1568:19;1550:38;:::i;:::-;1540:48;;1635:3;1624:9;1620:19;1607:33;1597:43;;1194:452;;;;;;;;;;:::o;1651:297::-;1718:6;1771:2;1759:9;1750:7;1746:23;1742:32;1739:2;;;1792:6;1784;1777:22;1739:2;1829:9;1823:16;1882:5;1875:13;1868:21;1861:5;1858:32;1848:2;;1909:6;1901;1894:22;1953:190;2012:6;2065:2;2053:9;2044:7;2040:23;2036:32;2033:2;;;2086:6;2078;2071:22;2033:2;-1:-1:-1;2114:23:1;;2023:120;-1:-1:-1;2023:120:1:o;2148:258::-;2216:6;2224;2277:2;2265:9;2256:7;2252:23;2248:32;2245:2;;;2298:6;2290;2283:22;2245:2;-1:-1:-1;;2326:23:1;;;2396:2;2381:18;;;2368:32;;-1:-1:-1;2235:171:1:o;3067:274::-;3196:3;3234:6;3228:13;3250:53;3296:6;3291:3;3284:4;3276:6;3272:17;3250:53;:::i;:::-;3319:16;;;;;3204:137;-1:-1:-1;;3204:137:1:o;3346:887::-;-1:-1:-1;;;;;3754:15:1;;;3736:34;;3806:15;;;3801:2;3786:18;;3779:43;3858:15;;3853:2;3838:18;;3831:43;3905:2;3890:18;;3883:34;;;3948:3;3933:19;;3926:35;;;4010:18;3998:31;;3992:3;3977:19;;3970:60;3662:3;3647:19;;4060:1;4049:13;;4039:2;;4105:10;4100:3;4096:20;4093:1;4086:31;4140:4;4137:1;4130:15;4168:4;4165:1;4158:15;4039:2;4220:6;4214:3;4203:9;4199:19;4192:35;3629:604;;;;;;;;;;:::o;7177:383::-;7326:2;7315:9;7308:21;7289:4;7358:6;7352:13;7401:6;7396:2;7385:9;7381:18;7374:34;7417:66;7476:6;7471:2;7460:9;7456:18;7451:2;7443:6;7439:15;7417:66;:::i;:::-;7544:2;7523:15;-1:-1:-1;;7519:29:1;7504:45;;;;7551:2;7500:54;;7298:262;-1:-1:-1;;7298:262:1:o;10821:258::-;10893:1;10903:113;10917:6;10914:1;10911:13;10903:113;;;10993:11;;;10987:18;10974:11;;;10967:39;10939:2;10932:10;10903:113;;;11034:6;11031:1;11028:13;11025:2;;;-1:-1:-1;;11069:1:1;11051:16;;11044:27;10874:205::o

Metadata Hash

3f576b683b544859852e2612f7dba9316d83a2b49a4f7764b07147c61931e03a
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.