Arbitrum Sepolia Testnet

Contract

0x43A8a85A2E8bc98D1c54c3244C3b61230b3cf5E6
Source Code Source Code

Overview

ETH Balance

0 ETH

More Info

Multichain Info

N/A
Transaction Hash
Method
Block
From
To
Amount
Claim Swap2301448712026-01-03 0:25:3720 days ago1767399937IN
0x43A8a85A...30b3cf5E6
0 ETH0.000001940.02004
Participate Swap2301448682026-01-03 0:25:3620 days ago1767399936IN
0x43A8a85A...30b3cf5E6
0 ETH0.00000180.020024
Initiate Swap2301448652026-01-03 0:25:3620 days ago1767399936IN
0x43A8a85A...30b3cf5E6
0 ETH0.000006980.02
Claim Swap2301447232026-01-03 0:24:5620 days ago1767399896IN
0x43A8a85A...30b3cf5E6
0 ETH0.000001940.02
Participate Swap2301447162026-01-03 0:24:5420 days ago1767399894IN
0x43A8a85A...30b3cf5E6
0 ETH0.00000180.02004
Initiate Swap2301447122026-01-03 0:24:5220 days ago1767399892IN
0x43A8a85A...30b3cf5E6
0 ETH0.000006980.02
Claim Swap2301434582026-01-03 0:18:5320 days ago1767399533IN
0x43A8a85A...30b3cf5E6
0 ETH0.000001940.02
Participate Swap2301434552026-01-03 0:18:5220 days ago1767399532IN
0x43A8a85A...30b3cf5E6
0 ETH0.000001790.020016
Initiate Swap2301434512026-01-03 0:18:5120 days ago1767399531IN
0x43A8a85A...30b3cf5E6
0 ETH0.000006980.02001
Claim Swap2301430972026-01-03 0:17:0720 days ago1767399427IN
0x43A8a85A...30b3cf5E6
0 ETH0.000001960.020244
Participate Swap2301430902026-01-03 0:17:0520 days ago1767399425IN
0x43A8a85A...30b3cf5E6
0 ETH0.000001790.020002
Initiate Swap2301430822026-01-03 0:17:0320 days ago1767399423IN
0x43A8a85A...30b3cf5E6
0 ETH0.000006980.02
Claim Swap2301406012026-01-03 0:04:5920 days ago1767398699IN
0x43A8a85A...30b3cf5E6
0 ETH0.000002050.021176
Participate Swap2301405942026-01-03 0:04:5720 days ago1767398697IN
0x43A8a85A...30b3cf5E6
0 ETH0.000001790.020002
Initiate Swap2301405872026-01-03 0:04:5520 days ago1767398695IN
0x43A8a85A...30b3cf5E6
0 ETH0.000006990.02003
Claim Swap2301403142026-01-03 0:03:2720 days ago1767398607IN
0x43A8a85A...30b3cf5E6
0 ETH0.000001940.020022
Participate Swap2301403102026-01-03 0:03:2620 days ago1767398606IN
0x43A8a85A...30b3cf5E6
0 ETH0.00000180.020034
Initiate Swap2301403082026-01-03 0:03:2520 days ago1767398605IN
0x43A8a85A...30b3cf5E6
0 ETH0.000006980.020016
Claim Swap2301400702026-01-03 0:02:1220 days ago1767398532IN
0x43A8a85A...30b3cf5E6
0 ETH0.000001940.020006
Participate Swap2301400672026-01-03 0:02:1220 days ago1767398532IN
0x43A8a85A...30b3cf5E6
0 ETH0.00000180.020044
Initiate Swap2301400652026-01-03 0:02:1120 days ago1767398531IN
0x43A8a85A...30b3cf5E6
0 ETH0.000006990.020022
Claim Swap2301397592026-01-03 0:00:3320 days ago1767398433IN
0x43A8a85A...30b3cf5E6
0 ETH0.000002280.020002
Participate Swap2301397522026-01-03 0:00:3120 days ago1767398431IN
0x43A8a85A...30b3cf5E6
0 ETH0.000001790.02
Initiate Swap2301397452026-01-03 0:00:2920 days ago1767398429IN
0x43A8a85A...30b3cf5E6
0 ETH0.000006980.02
Add Whitelisted ...2301397092026-01-03 0:00:1820 days ago1767398418IN
0x43A8a85A...30b3cf5E6
0 ETH0.00000090.02
View all transactions

Parent Transaction Hash Block From To Amount
View All Internal Transactions

Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
XFTMultiAssetSwap

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

// SPDX-License-Identifier: MIT
pragma solidity 0.8.18;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";

contract XFTMultiAssetSwap is ReentrancyGuard {
    
    struct TokenEntry {
        IERC20 token;
        uint256 amount;
    }
    
    struct Swap {
        address initiator;
        address participant;
        TokenEntry[] initiatorTokens;
        uint256 basketPriceUSD;
        IERC20 participantToken;
        uint256 participantAmount;
        bytes32 hashlock;
        uint256 timelock;
        bool initiatorDeposited;
        bool participantDeposited;
        bool completed;
        bool refunded;
    }
    
    mapping(bytes32 => Swap) public swaps;
    mapping(address => bool) public whitelistedTokens;
    bytes32[] public allSwapIds;
    
    address public constant USDXT = 0xC1BF9854E43b84f3abec5f5d1C72F0a6f602034b;
    
    event SwapInitiated(
        bytes32 indexed swapId,
        address indexed initiator,
        address indexed participant,
        uint256 totalTokenCount,
        uint256 basketPriceUSD,
        address participantToken,
        uint256 participantAmount,
        bytes32 hashlock,
        uint256 timelock
    );
    
    event SwapParticipated(
        bytes32 indexed swapId,
        address indexed participant,
        address participantToken,
        uint256 amount
    );
    
    event SwapCompleted(
        bytes32 indexed swapId,
        bytes32 preimage
    );
    
    event SwapRefunded(
        bytes32 indexed swapId,
        address indexed refunder
    );
    
    event TokenWhitelisted(address indexed token, bool whitelisted);
    
    modifier swapExists(bytes32 _swapId) {
        require(swaps[_swapId].initiator != address(0), "Swap does not exist");
        _;
    }
    
    modifier onlyInitiator(bytes32 _swapId) {
        require(msg.sender == swaps[_swapId].initiator, "Only initiator allowed");
        _;
    }
    
    modifier onlyParticipant(bytes32 _swapId) {
        require(msg.sender == swaps[_swapId].participant, "Only participant allowed");
        _;
    }
    
    constructor() {
        whitelistedTokens[USDXT] = true;
        emit TokenWhitelisted(USDXT, true);
    }
    
    function addWhitelistedToken(address token) external {
        whitelistedTokens[token] = true;
        emit TokenWhitelisted(token, true);
    }
    
    // Step 1: Alice initiates swap with basket + asking price
    function initiateSwap(
        bytes32 _swapId,
        address _participant,
        address[] calldata _initiatorTokens,
        uint256[] calldata _initiatorAmounts,
        uint256 _basketPriceUSD,
        address _participantToken,
        bytes32 _hashlock,
        uint256 _timelock
    ) external nonReentrant {
        require(swaps[_swapId].initiator == address(0), "Swap exists");
        require(_participant != address(0), "Invalid participant");
        require(_participant != msg.sender, "Self swap not allowed");
        require(_initiatorTokens.length == _initiatorAmounts.length, "Array length mismatch");
        require(_initiatorTokens.length > 0, "No initiator tokens");
        require(_basketPriceUSD > 0, "Invalid basket price");
        require(whitelistedTokens[_participantToken], "Participant token not whitelisted");
        require(_timelock > block.timestamp + 1 hours, "Timelock too short");
        require(_hashlock != bytes32(0), "Invalid hashlock");
        
        uint256 totalTokenCount = 0;
        for (uint256 i = 0; i < _initiatorAmounts.length; i++) {
            require(_initiatorAmounts[i] > 0, "Invalid initiator amount");
            totalTokenCount += _initiatorAmounts[i];
        }
        require(totalTokenCount > 0, "Zero total tokens");
        
        Swap storage swap = swaps[_swapId];
        swap.initiator = msg.sender;
        swap.participant = _participant;
        swap.basketPriceUSD = _basketPriceUSD;
        swap.participantToken = IERC20(_participantToken);
        swap.participantAmount = _basketPriceUSD;
        swap.hashlock = _hashlock;
        swap.timelock = _timelock;
        swap.initiatorDeposited = false;
        swap.participantDeposited = false;
        swap.completed = false;
        swap.refunded = false;
        
        // Store basket tokens
        for (uint256 i = 0; i < _initiatorTokens.length; i++) {
            swap.initiatorTokens.push(TokenEntry({
                token: IERC20(_initiatorTokens[i]),
                amount: _initiatorAmounts[i]
            }));
        }
        
        // Alice deposits her basket tokens
        for (uint256 i = 0; i < swap.initiatorTokens.length; i++) {
            require(
                swap.initiatorTokens[i].token.transferFrom(
                    msg.sender, 
                    address(this), 
                    swap.initiatorTokens[i].amount
                ),
                "Initiator transfer failed"
            );
        }
        
        swap.initiatorDeposited = true;
        allSwapIds.push(_swapId);
        
        emit SwapInitiated(
            _swapId,
            msg.sender,
            _participant,
            totalTokenCount,
            _basketPriceUSD,
            _participantToken,
            _basketPriceUSD,
            _hashlock,
            _timelock
        );
    }
    
    // Step 2: Bob accepts by depositing USDXT
    function participateSwap(bytes32 _swapId)
        external
        nonReentrant
        swapExists(_swapId)
        onlyParticipant(_swapId)
    {
        Swap storage swap = swaps[_swapId];
        require(!swap.participantDeposited, "Already participated");
        require(!swap.completed, "Swap completed");
        require(!swap.refunded, "Swap refunded");
        require(block.timestamp < swap.timelock, "Swap expired");
        require(swap.initiatorDeposited, "Initiator not deposited");
        
        // Bob deposits USDXT equal to Alice's asking price
        require(
            swap.participantToken.transferFrom(
                msg.sender,
                address(this),
                swap.participantAmount
            ),
            "Participant transfer failed"
        );
        
        swap.participantDeposited = true;
        
        emit SwapParticipated(
            _swapId, 
            msg.sender, 
            address(swap.participantToken), 
            swap.participantAmount
        );
    }
    
    // Step 3: ATOMIC SWAP - Anyone can claim with correct preimage
    function claimSwap(bytes32 _swapId, bytes32 _preimage)
        external
        nonReentrant
        swapExists(_swapId)
    {
        Swap storage swap = swaps[_swapId];
        require(!swap.completed, "Swap completed");
        require(!swap.refunded, "Swap refunded");
        require(swap.initiatorDeposited && swap.participantDeposited, "Both deposits required");
        require(block.timestamp < swap.timelock, "Swap expired");
        require(sha256(abi.encodePacked(_preimage)) == swap.hashlock, "Bad preimage");
        
        swap.completed = true;
        
        // ATOMIC TRANSFER: Alice gets USDXT, Bob gets basket
        require(
            swap.participantToken.transfer(
                swap.initiator,
                swap.participantAmount
            ),
            "USDXT to Alice failed"
        );
        
        for (uint256 i = 0; i < swap.initiatorTokens.length; i++) {
            require(
                swap.initiatorTokens[i].token.transfer(
                    swap.participant,
                    swap.initiatorTokens[i].amount
                ),
                "Basket to Bob failed"
            );
        }
        
        emit SwapCompleted(_swapId, _preimage);
    }
    
    // Refund after timelock expires
    function refundSwap(bytes32 _swapId)
        external
        nonReentrant
        swapExists(_swapId)
    {
        Swap storage swap = swaps[_swapId];
        require(!swap.completed, "Swap completed");
        require(!swap.refunded, "Swap refunded");
        require(block.timestamp >= swap.timelock, "Too early");
        require(
            msg.sender == swap.initiator || msg.sender == swap.participant,
            "Not swap party"
        );
        
        swap.refunded = true;
        
        // Refund Alice's basket
        if (swap.initiatorDeposited) {
            for (uint256 i = 0; i < swap.initiatorTokens.length; i++) {
                require(
                    swap.initiatorTokens[i].token.transfer(
                        swap.initiator,
                        swap.initiatorTokens[i].amount
                    ),
                    "Refund Alice failed"
                );
            }
        }
        
        // Refund Bob's USDXT
        if (swap.participantDeposited) {
            require(
                swap.participantToken.transfer(
                    swap.participant,
                    swap.participantAmount
                ),
                "Refund Bob failed"
            );
        }
        
        emit SwapRefunded(_swapId, msg.sender);
    }
    
    // SIMPLE VIEW FUNCTIONS
    
    function getSwap(bytes32 _swapId)
        external
        view
        returns (
            address initiator,
            address participant,
            uint256 basketPriceUSD,
            uint256 participantAmount,
            bytes32 hashlock,
            uint256 timelock,
            bool initiatorDeposited,
            bool participantDeposited,
            bool completed,
            bool refunded
        )
    {
        Swap storage swap = swaps[_swapId];
        return (
            swap.initiator,
            swap.participant,
            swap.basketPriceUSD,
            swap.participantAmount,
            swap.hashlock,
            swap.timelock,
            swap.initiatorDeposited,
            swap.participantDeposited,
            swap.completed,
            swap.refunded
        );
    }
    
    function getBasketTokens(bytes32 _swapId)
        external
        view
        returns (address[] memory tokens, uint256[] memory amounts)
    {
        Swap storage swap = swaps[_swapId];
        uint256 length = swap.initiatorTokens.length;
        
        tokens = new address[](length);
        amounts = new uint256[](length);
        
        for (uint256 i = 0; i < length; i++) {
            tokens[i] = address(swap.initiatorTokens[i].token);
            amounts[i] = swap.initiatorTokens[i].amount;
        }
    }
    
    function getAllSwaps() external view returns (bytes32[] memory) {
        return allSwapIds;
    }
    
    function getActiveSwaps() external view returns (bytes32[] memory activeSwapIds) {
        uint256 activeCount = 0;
        
        for (uint256 i = 0; i < allSwapIds.length; i++) {
            Swap storage swap = swaps[allSwapIds[i]];
            if (!swap.completed && !swap.refunded && swap.initiatorDeposited && !swap.participantDeposited && block.timestamp < swap.timelock) {
                activeCount++;
            }
        }
        
        activeSwapIds = new bytes32[](activeCount);
        uint256 index = 0;
        
        for (uint256 i = 0; i < allSwapIds.length; i++) {
            Swap storage swap = swaps[allSwapIds[i]];
            if (!swap.completed && !swap.refunded && swap.initiatorDeposited && !swap.participantDeposited && block.timestamp < swap.timelock) {
                activeSwapIds[index] = allSwapIds[i];
                index++;
            }
        }
    }
    
    function getSwapStatus(bytes32 _swapId) external view returns (string memory) {
        Swap storage swap = swaps[_swapId];
        
        if (swap.initiator == address(0)) {
            return "DOES_NOT_EXIST";
        } else if (swap.completed) {
            return "COMPLETED";
        } else if (swap.refunded) {
            return "REFUNDED";
        } else if (block.timestamp >= swap.timelock) {
            return "EXPIRED";
        } else if (!swap.initiatorDeposited) {
            return "PENDING_ALICE_DEPOSIT";
        } else if (!swap.participantDeposited) {
            return "PENDING_BOB_ACCEPTANCE";
        } else {
            return "READY_FOR_CLAIM";
        }
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
}

Settings
{
  "viaIR": true,
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"swapId","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"preimage","type":"bytes32"}],"name":"SwapCompleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"swapId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"initiator","type":"address"},{"indexed":true,"internalType":"address","name":"participant","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalTokenCount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"basketPriceUSD","type":"uint256"},{"indexed":false,"internalType":"address","name":"participantToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"participantAmount","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"hashlock","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"timelock","type":"uint256"}],"name":"SwapInitiated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"swapId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"participant","type":"address"},{"indexed":false,"internalType":"address","name":"participantToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapParticipated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"swapId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"refunder","type":"address"}],"name":"SwapRefunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"bool","name":"whitelisted","type":"bool"}],"name":"TokenWhitelisted","type":"event"},{"inputs":[],"name":"USDXT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"addWhitelistedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allSwapIds","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_swapId","type":"bytes32"},{"internalType":"bytes32","name":"_preimage","type":"bytes32"}],"name":"claimSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getActiveSwaps","outputs":[{"internalType":"bytes32[]","name":"activeSwapIds","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllSwaps","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_swapId","type":"bytes32"}],"name":"getBasketTokens","outputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_swapId","type":"bytes32"}],"name":"getSwap","outputs":[{"internalType":"address","name":"initiator","type":"address"},{"internalType":"address","name":"participant","type":"address"},{"internalType":"uint256","name":"basketPriceUSD","type":"uint256"},{"internalType":"uint256","name":"participantAmount","type":"uint256"},{"internalType":"bytes32","name":"hashlock","type":"bytes32"},{"internalType":"uint256","name":"timelock","type":"uint256"},{"internalType":"bool","name":"initiatorDeposited","type":"bool"},{"internalType":"bool","name":"participantDeposited","type":"bool"},{"internalType":"bool","name":"completed","type":"bool"},{"internalType":"bool","name":"refunded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_swapId","type":"bytes32"}],"name":"getSwapStatus","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_swapId","type":"bytes32"},{"internalType":"address","name":"_participant","type":"address"},{"internalType":"address[]","name":"_initiatorTokens","type":"address[]"},{"internalType":"uint256[]","name":"_initiatorAmounts","type":"uint256[]"},{"internalType":"uint256","name":"_basketPriceUSD","type":"uint256"},{"internalType":"address","name":"_participantToken","type":"address"},{"internalType":"bytes32","name":"_hashlock","type":"bytes32"},{"internalType":"uint256","name":"_timelock","type":"uint256"}],"name":"initiateSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_swapId","type":"bytes32"}],"name":"participateSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_swapId","type":"bytes32"}],"name":"refundSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"swaps","outputs":[{"internalType":"address","name":"initiator","type":"address"},{"internalType":"address","name":"participant","type":"address"},{"internalType":"uint256","name":"basketPriceUSD","type":"uint256"},{"internalType":"contract IERC20","name":"participantToken","type":"address"},{"internalType":"uint256","name":"participantAmount","type":"uint256"},{"internalType":"bytes32","name":"hashlock","type":"bytes32"},{"internalType":"uint256","name":"timelock","type":"uint256"},{"internalType":"bool","name":"initiatorDeposited","type":"bool"},{"internalType":"bool","name":"participantDeposited","type":"bool"},{"internalType":"bool","name":"completed","type":"bool"},{"internalType":"bool","name":"refunded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistedTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

608080604052346100745760016000557fef81a9943b96c8df4ef243401c9bf5159146166211356898b52d382086168d92602073c1bf9854e43b84f3abec5f5d1c72f0a6f602034b9283600052600282526040600020600160ff1982541617905560018152a2604051611c1c908161007a8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c80631818a9fa1461141d5780631d03a89e14610cd35780632f263f2814610c9b578063363cb34d14610c335780633da0e66e14610b8c5780634c00057514610b3f5780637319cade146108ba578063ccd65d2b1461088b578063cfd53d06146106c0578063d6cfeae014610635578063daf9c210146105f6578063eb84e7f214610541578063f298495b146103e85763fe2510ee146100b657600080fd5b346103e3576020806003193601126103e3576004356100d36118f2565b8060005260019182815260018060a01b036100f681604060002054161515611948565b8260005283825260406000209060088201805461011960ff8260101c161561198a565b61012960ff8260181c16156119c7565b600784015442106103b25782845416331480156103a4575b1561036e5763ff000000198116630100000017825560ff1661026f575b5460081c60ff16610199575b50505033907fc672feaa452bd52b0000f3d29c943cd9331556ab05529d49e984311220c16c19600080a3600055005b6004828101548684015460059094015460405163a9059cbb60e01b81529484166001600160a01b03169285019290925260248401919091528391839116816000816044810103925af190811561026357600091610236575b50156101fe57808061016a565b6064906040519062461bcd60e51b8252600482015260116024820152701499599d5b9908109bd88819985a5b1959607a1b6044820152fd5b6102569150823d841161025c575b61024e818361189c565b8101906118da565b386101f1565b503d610244565b6040513d6000823e3d90fd5b600283016000875b610283575b505061015e565b8154811015610369576102e6868561029b84866118be565b50541686885416908b6102ae86886118be565b50015460405163a9059cbb60e01b81526001600160a01b03909316600484015260248301529092839190829060009082906044820190565b03925af19081156102635760009161034c575b5015610311579061030a8892611861565b9091610277565b60405162461bcd60e51b81526004810187905260136024820152721499599d5b9908105b1a58d94819985a5b1959606a1b6044820152606490fd5b6103639150873d891161025c5761024e818361189c565b386102f9565b61027c565b60405162461bcd60e51b815260048101869052600e60248201526d4e6f74207377617020706172747960901b6044820152606490fd5b508287850154163314610141565b60405162461bcd60e51b8152600481018690526009602482015268546f6f206561726c7960b81b6044820152606490fd5b600080fd5b346103e3576020806003193601126103e35760043560005260019081815260026040600020019182549161041b83611a3e565b92610429604051948561189c565b80845261043581611a3e565b9482850191601f1980970136843761044c81611a3e565b9161045a604051938461189c565b81835261046682611a3e565b838601980136893760005b8281106104ee57505050604051946040860190604087525180915260608601929060005b8181106104d2575050508482038584015251808252908201949160005b8281106104bf5785870386f35b83518752958101959281019284016104b2565b82516001600160a01b0316855293850193918501918601610495565b8061050261053692849b999b9897986118be565b50546001600160a01b0316610517828b611a56565b528961052382856118be565b5001546105308287611a56565b52611861565b979597949394610471565b346103e35760203660031901126103e3576004356000526001602052610160604060002060ff60018060a01b03808354169281600182015416916003820154906004830154166005830154906006840154926008600786015495015495604051988952602089015260408801526060870152608086015260a085015260c0840152818116151560e0840152818160081c161515610100840152818160101c16151561012084015260181c161515610140820152f35b346103e35760203660031901126103e3576001600160a01b0361061761176f565b166000526002602052602060ff604060002054166040519015158152f35b346103e35760003660031901126103e357604051806003549182815260208091019260036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b916000905b8282106106a9576106a5856106998189038261189c565b60405191829182611826565b0390f35b835486529485019460019384019390910190610682565b346103e35760003660031901126103e35760008060038054915b8281106107e557506106eb83611a3e565b926106f9604051948561189c565b808452610708601f1991611a3e565b01602090368286013760009060005b84811061072c57604051806106a58882611826565b610735816117b6565b905490851b1c6000526001825260406000206008908181015460ff90818160101c161593846107d6575b846107cc575b846107bf575b505050816107b1575b50610788575b61078390611861565b610717565b916107a961078391610799856117b6565b905490871b1c610530828a611a56565b92905061077a565b600791500154421087610774565b1c1615915088808061076b565b8183169450610765565b9350818160181c16159361075f565b6107ee816117b6565b905490831b1c600052600160205260406000206008908181015460ff90818160101c1615938461087c575b84610872575b84610865575b50505081610857575b50610842575b61083d90611861565b6106da565b9261084f61083d91611861565b939050610834565b60079150015442108561082e565b1c16159150868080610825565b818316945061081f565b9350818160181c161593610819565b346103e35760003660031901126103e357602060405173c1bf9854e43b84f3abec5f5d1c72f0a6f602034b8152f35b346103e3576020806003193601126103e3576004356108d76118f2565b60008181526001835260409020546001600160a01b03906108fb9082161515611948565b816000526001835280600160406000200154163303610afa57816000526001835260406000209260088401805460ff8160081c16610abe578061094560ff809360101c161561198a565b610954828260181c16156119c7565b61096360078801544210611a03565b1615610a795760048581018054600590970180546040516323b872dd60e01b81523394810194909452306024850152604484015296909391908290829060649082906000908a165af190811561026357600091610a5c575b5015610a185750805461010061ff001990911617905554925460408051929094166001600160a01b03168252602082015233927f36a01c935797536d077135d008f5d95df22b54744528d9cd0f795ab881c52a9191a36001600055005b6064906040519062461bcd60e51b82526004820152601b60248201527f5061727469636970616e74207472616e73666572206661696c656400000000006044820152fd5b610a739150823d841161025c5761024e818361189c565b876109bb565b60405162461bcd60e51b815260048101839052601760248201527f496e69746961746f72206e6f74206465706f73697465640000000000000000006044820152606490fd5b60405162461bcd60e51b8152600481018490526014602482015273105b1c9958591e481c185c9d1a58da5c185d195960621b6044820152606490fd5b60405162461bcd60e51b815260048101849052601860248201527f4f6e6c79207061727469636970616e7420616c6c6f77656400000000000000006044820152606490fd5b346103e35760203660031901126103e357610b5b600435611a6a565b60408051809260208252610b7e8151809281602086015260208686019101611803565b601f01601f19168101030190f35b346103e35760203660031901126103e3576004356000526001602052610140604060002060ff60018060a01b0391828154169260018201541690600381015460058201546006830154916008600785015494015494604051978852602088015260408701526060860152608085015260a0840152818116151560c0840152818160081c16151560e0840152818160101c16151561010084015260181c161515610120820152f35b346103e35760203660031901126103e3576001600160a01b03610c5461176f565b168060005260026020526040600020600160ff198254161790557fef81a9943b96c8df4ef243401c9bf5159146166211356898b52d382086168d92602060405160018152a2005b346103e35760203660031901126103e3576004356003548110156103e357610cc46020916117b6565b90549060031b1c604051908152f35b346103e3576101003660031901126103e3576024356001600160a01b03811681036103e35760443567ffffffffffffffff81116103e357610d18903690600401611785565b909160643567ffffffffffffffff81116103e357610d3a903690600401611785565b60a43594909291906001600160a01b03861686036103e357610d5a6118f2565b6004356000908152600160205260409020546001600160a01b03166113ea576001600160a01b038316156113af576001600160a01b0383163314611372578385036113355784156112fa57608435156112be576001600160a01b03861660009081526002602052604090205460ff161561126f57610e1042018042116111a25760e43511156112355760c435156111fd5760009360005b81811061116c57508415611133576004356000526001602052604060002095336001600160601b0360a01b8854161787556001870160018060a01b0386166001600160601b0360a01b82541617905560843560038801556004870160018060a01b0389166001600160601b0360a01b825416179055608435600588015560c435600688015560e435600788015563ffffffff19600888015416600888015560005b81811061106457505050505060005b6002840154811015610f995760006020610f0e610ec184600289016118be565b50546001600160a01b03166001610edb8660028b016118be565b5001546040516323b872dd60e01b8152336004820152306024820152604481019190915293849283919082906064820190565b03925af190811561026357600091610f7a575b5015610f3557610f3090611861565b610ea1565b60405162461bcd60e51b815260206004820152601960248201527f496e69746961746f72207472616e73666572206661696c6564000000000000006044820152606490fd5b610f93915060203d60201161025c5761024e818361189c565b86610f21565b5060088301805460ff191660011790556003548490600160401b81101561104e57806001610fca92016003556117b6565b81549060031b90600435821b91600019901b1916179055604051928352608435602084015260018060a01b03166040830152608435606083015260c435608083015260e43560a083015260018060a01b03169033907fc8bea22eed072b9aab051e260502f9c16ac334a1e82898448c564da3aac4fc8c60c060043592a46001600055005b634e487b7160e01b600052604160045260246000fd5b61106f818386611870565b35906001600160a01b03821682036103e35761108c818588611870565b356040519283604081011067ffffffffffffffff60408601111761104e57604084810190526001600160a01b0316835260208301526002890154600160401b81101561104e578060016110e8920160028c015560028b016118be565b61111d576001602061111894828060a01b038151166001600160601b0360a01b8554161784550151910155611861565b610e92565b634e487b7160e01b600052600060045260246000fd5b60405162461bcd60e51b81526020600482015260116024820152705a65726f20746f74616c20746f6b656e7360781b6044820152606490fd5b94611178868386611870565b35156111b857611189868386611870565b3581018091116111a25761119d9095611861565b610df1565b634e487b7160e01b600052601160045260246000fd5b60405162461bcd60e51b815260206004820152601860248201527f496e76616c696420696e69746961746f7220616d6f756e7400000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601060248201526f496e76616c696420686173686c6f636b60801b6044820152606490fd5b60405162461bcd60e51b8152602060048201526012602482015271151a5b595b1bd8dac81d1bdbc81cda1bdc9d60721b6044820152606490fd5b60405162461bcd60e51b815260206004820152602160248201527f5061727469636970616e7420746f6b656e206e6f742077686974656c697374656044820152601960fa1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206261736b657420707269636560601b6044820152606490fd5b60405162461bcd60e51b81526020600482015260136024820152724e6f20696e69746961746f7220746f6b656e7360681b6044820152606490fd5b60405162461bcd60e51b8152602060048201526015602482015274082e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b6044820152606490fd5b60405162461bcd60e51b815260206004820152601560248201527414d95b19881cddd85c081b9bdd08185b1b1bddd959605a1b6044820152606490fd5b60405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081c185c9d1a58da5c185b9d606a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152600b60248201526a537761702065786973747360a81b6044820152606490fd5b346103e35760403660031901126103e35760043560249081359161143f6118f2565b8160005260019260209184835260018060a01b039061146682604060002054161515611948565b84600052858452604060002060088101805461148860ff8260101c161561198a565b61149860ff8260181c16156119c7565b60ff811680611762575b15611725576114b660078401544210611a03565b8660006114e3604051838101908a82528481526114d281611880565b604051928392839251928391611803565b8101039060025afa15610263576000516006840154036116f2576201000062ff000019919091161790556004818101548254600584015460405163a9059cbb60e01b8082529288166001600160a01b03169481019490945260248401529291908790829060449082906000908a165af1908115610263576000916116d5575b50156116995787919293600083600284019301935b6115ad575b89897f7430d80e0e3cfb925010ff8993f6a56392199211e297fc7825278f29980ccf518a8a604051908152a2600055005b82548110156116945761160988836115c584876118be565b50541684875416908d6115d886896118be565b5001546040518a81526001600160a01b03909316600484015260248301529092839190829060009082906044820190565b03925af190811561026357600091611677575b501561163c57906116318a9695949392611861565b909192939495611577565b60405162461bcd60e51b8152600481018990526014818801527310985cdad95d081d1bc8109bd88819985a5b195960621b6044820152606490fd5b61168e9150893d8b1161025c5761024e818361189c565b8b61161c565b61157c565b60405162461bcd60e51b815260048101879052601581850152741554d11615081d1bc8105b1a58d94819985a5b1959605a1b6044820152606490fd5b6116ec9150873d891161025c5761024e818361189c565b89611562565b60405162461bcd60e51b815260048101889052600c818601526b42616420707265696d61676560a01b6044820152606490fd5b60405162461bcd60e51b81526004810188905260168186015275109bdd1a0819195c1bdcda5d1cc81c995c5d5a5c995960521b6044820152606490fd5b5060ff8160081c166114a2565b600435906001600160a01b03821682036103e357565b9181601f840112156103e35782359167ffffffffffffffff83116103e3576020808501948460051b0101116103e357565b6003548110156117ed5760036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0190600090565b634e487b7160e01b600052603260045260246000fd5b60005b8381106118165750506000910152565b8181015183820152602001611806565b6020908160408183019282815285518094520193019160005b82811061184d575050505090565b83518552938101939281019260010161183f565b60001981146111a25760010190565b91908110156117ed5760051b0190565b6040810190811067ffffffffffffffff82111761104e57604052565b90601f8019910116810190811067ffffffffffffffff82111761104e57604052565b80548210156117ed5760005260206000209060011b0190600090565b908160209103126103e3575180151581036103e35790565b600260005414611903576002600055565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b1561194f57565b60405162461bcd60e51b815260206004820152601360248201527214ddd85c08191bd95cc81b9bdd08195e1a5cdd606a1b6044820152606490fd5b1561199157565b60405162461bcd60e51b815260206004820152600e60248201526d14ddd85c0818dbdb5c1b195d195960921b6044820152606490fd5b156119ce57565b60405162461bcd60e51b815260206004820152600d60248201526c14ddd85c081c99599d5b991959609a1b6044820152606490fd5b15611a0a57565b60405162461bcd60e51b815260206004820152600c60248201526b14ddd85c08195e1c1a5c995960a21b6044820152606490fd5b67ffffffffffffffff811161104e5760051b60200190565b80518210156117ed5760209160051b010190565b60005260206001815260408060002060018060a01b0381541615600014611ab457506d1113d154d7d393d517d1561254d560921b905191611aaa83611880565b600e835282015290565b60088101549060ff8260101c16600014611aed5750506810d3d354131155115160ba1b905191611ae383611880565b6009835282015290565b60ff8260181c16600014611b1f57505067149151955391115160c21b905191611b1583611880565b6008835282015290565b600701544210611b4b5750661156141254915160ca1b905191611b4183611880565b6007835282015290565b60ff8116611b8357507414115391125391d7d0531250d157d1115413d4d255605a1b905191611b7983611880565b6015835282015290565b60081c60ff16611bbd577550454e44494e475f424f425f414343455054414e434560501b905191611bb383611880565b6016835282015290565b6e52454144595f464f525f434c41494d60881b905191611bdc83611880565b600f83528201529056fea2646970667358221220aa8265e9309f4858f979f87c26da4d9ccf7172f79feeadf01f969164da40253c64736f6c63430008120033

Deployed Bytecode

0x6080604052600436101561001257600080fd5b60003560e01c80631818a9fa1461141d5780631d03a89e14610cd35780632f263f2814610c9b578063363cb34d14610c335780633da0e66e14610b8c5780634c00057514610b3f5780637319cade146108ba578063ccd65d2b1461088b578063cfd53d06146106c0578063d6cfeae014610635578063daf9c210146105f6578063eb84e7f214610541578063f298495b146103e85763fe2510ee146100b657600080fd5b346103e3576020806003193601126103e3576004356100d36118f2565b8060005260019182815260018060a01b036100f681604060002054161515611948565b8260005283825260406000209060088201805461011960ff8260101c161561198a565b61012960ff8260181c16156119c7565b600784015442106103b25782845416331480156103a4575b1561036e5763ff000000198116630100000017825560ff1661026f575b5460081c60ff16610199575b50505033907fc672feaa452bd52b0000f3d29c943cd9331556ab05529d49e984311220c16c19600080a3600055005b6004828101548684015460059094015460405163a9059cbb60e01b81529484166001600160a01b03169285019290925260248401919091528391839116816000816044810103925af190811561026357600091610236575b50156101fe57808061016a565b6064906040519062461bcd60e51b8252600482015260116024820152701499599d5b9908109bd88819985a5b1959607a1b6044820152fd5b6102569150823d841161025c575b61024e818361189c565b8101906118da565b386101f1565b503d610244565b6040513d6000823e3d90fd5b600283016000875b610283575b505061015e565b8154811015610369576102e6868561029b84866118be565b50541686885416908b6102ae86886118be565b50015460405163a9059cbb60e01b81526001600160a01b03909316600484015260248301529092839190829060009082906044820190565b03925af19081156102635760009161034c575b5015610311579061030a8892611861565b9091610277565b60405162461bcd60e51b81526004810187905260136024820152721499599d5b9908105b1a58d94819985a5b1959606a1b6044820152606490fd5b6103639150873d891161025c5761024e818361189c565b386102f9565b61027c565b60405162461bcd60e51b815260048101869052600e60248201526d4e6f74207377617020706172747960901b6044820152606490fd5b508287850154163314610141565b60405162461bcd60e51b8152600481018690526009602482015268546f6f206561726c7960b81b6044820152606490fd5b600080fd5b346103e3576020806003193601126103e35760043560005260019081815260026040600020019182549161041b83611a3e565b92610429604051948561189c565b80845261043581611a3e565b9482850191601f1980970136843761044c81611a3e565b9161045a604051938461189c565b81835261046682611a3e565b838601980136893760005b8281106104ee57505050604051946040860190604087525180915260608601929060005b8181106104d2575050508482038584015251808252908201949160005b8281106104bf5785870386f35b83518752958101959281019284016104b2565b82516001600160a01b0316855293850193918501918601610495565b8061050261053692849b999b9897986118be565b50546001600160a01b0316610517828b611a56565b528961052382856118be565b5001546105308287611a56565b52611861565b979597949394610471565b346103e35760203660031901126103e3576004356000526001602052610160604060002060ff60018060a01b03808354169281600182015416916003820154906004830154166005830154906006840154926008600786015495015495604051988952602089015260408801526060870152608086015260a085015260c0840152818116151560e0840152818160081c161515610100840152818160101c16151561012084015260181c161515610140820152f35b346103e35760203660031901126103e3576001600160a01b0361061761176f565b166000526002602052602060ff604060002054166040519015158152f35b346103e35760003660031901126103e357604051806003549182815260208091019260036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b916000905b8282106106a9576106a5856106998189038261189c565b60405191829182611826565b0390f35b835486529485019460019384019390910190610682565b346103e35760003660031901126103e35760008060038054915b8281106107e557506106eb83611a3e565b926106f9604051948561189c565b808452610708601f1991611a3e565b01602090368286013760009060005b84811061072c57604051806106a58882611826565b610735816117b6565b905490851b1c6000526001825260406000206008908181015460ff90818160101c161593846107d6575b846107cc575b846107bf575b505050816107b1575b50610788575b61078390611861565b610717565b916107a961078391610799856117b6565b905490871b1c610530828a611a56565b92905061077a565b600791500154421087610774565b1c1615915088808061076b565b8183169450610765565b9350818160181c16159361075f565b6107ee816117b6565b905490831b1c600052600160205260406000206008908181015460ff90818160101c1615938461087c575b84610872575b84610865575b50505081610857575b50610842575b61083d90611861565b6106da565b9261084f61083d91611861565b939050610834565b60079150015442108561082e565b1c16159150868080610825565b818316945061081f565b9350818160181c161593610819565b346103e35760003660031901126103e357602060405173c1bf9854e43b84f3abec5f5d1c72f0a6f602034b8152f35b346103e3576020806003193601126103e3576004356108d76118f2565b60008181526001835260409020546001600160a01b03906108fb9082161515611948565b816000526001835280600160406000200154163303610afa57816000526001835260406000209260088401805460ff8160081c16610abe578061094560ff809360101c161561198a565b610954828260181c16156119c7565b61096360078801544210611a03565b1615610a795760048581018054600590970180546040516323b872dd60e01b81523394810194909452306024850152604484015296909391908290829060649082906000908a165af190811561026357600091610a5c575b5015610a185750805461010061ff001990911617905554925460408051929094166001600160a01b03168252602082015233927f36a01c935797536d077135d008f5d95df22b54744528d9cd0f795ab881c52a9191a36001600055005b6064906040519062461bcd60e51b82526004820152601b60248201527f5061727469636970616e74207472616e73666572206661696c656400000000006044820152fd5b610a739150823d841161025c5761024e818361189c565b876109bb565b60405162461bcd60e51b815260048101839052601760248201527f496e69746961746f72206e6f74206465706f73697465640000000000000000006044820152606490fd5b60405162461bcd60e51b8152600481018490526014602482015273105b1c9958591e481c185c9d1a58da5c185d195960621b6044820152606490fd5b60405162461bcd60e51b815260048101849052601860248201527f4f6e6c79207061727469636970616e7420616c6c6f77656400000000000000006044820152606490fd5b346103e35760203660031901126103e357610b5b600435611a6a565b60408051809260208252610b7e8151809281602086015260208686019101611803565b601f01601f19168101030190f35b346103e35760203660031901126103e3576004356000526001602052610140604060002060ff60018060a01b0391828154169260018201541690600381015460058201546006830154916008600785015494015494604051978852602088015260408701526060860152608085015260a0840152818116151560c0840152818160081c16151560e0840152818160101c16151561010084015260181c161515610120820152f35b346103e35760203660031901126103e3576001600160a01b03610c5461176f565b168060005260026020526040600020600160ff198254161790557fef81a9943b96c8df4ef243401c9bf5159146166211356898b52d382086168d92602060405160018152a2005b346103e35760203660031901126103e3576004356003548110156103e357610cc46020916117b6565b90549060031b1c604051908152f35b346103e3576101003660031901126103e3576024356001600160a01b03811681036103e35760443567ffffffffffffffff81116103e357610d18903690600401611785565b909160643567ffffffffffffffff81116103e357610d3a903690600401611785565b60a43594909291906001600160a01b03861686036103e357610d5a6118f2565b6004356000908152600160205260409020546001600160a01b03166113ea576001600160a01b038316156113af576001600160a01b0383163314611372578385036113355784156112fa57608435156112be576001600160a01b03861660009081526002602052604090205460ff161561126f57610e1042018042116111a25760e43511156112355760c435156111fd5760009360005b81811061116c57508415611133576004356000526001602052604060002095336001600160601b0360a01b8854161787556001870160018060a01b0386166001600160601b0360a01b82541617905560843560038801556004870160018060a01b0389166001600160601b0360a01b825416179055608435600588015560c435600688015560e435600788015563ffffffff19600888015416600888015560005b81811061106457505050505060005b6002840154811015610f995760006020610f0e610ec184600289016118be565b50546001600160a01b03166001610edb8660028b016118be565b5001546040516323b872dd60e01b8152336004820152306024820152604481019190915293849283919082906064820190565b03925af190811561026357600091610f7a575b5015610f3557610f3090611861565b610ea1565b60405162461bcd60e51b815260206004820152601960248201527f496e69746961746f72207472616e73666572206661696c6564000000000000006044820152606490fd5b610f93915060203d60201161025c5761024e818361189c565b86610f21565b5060088301805460ff191660011790556003548490600160401b81101561104e57806001610fca92016003556117b6565b81549060031b90600435821b91600019901b1916179055604051928352608435602084015260018060a01b03166040830152608435606083015260c435608083015260e43560a083015260018060a01b03169033907fc8bea22eed072b9aab051e260502f9c16ac334a1e82898448c564da3aac4fc8c60c060043592a46001600055005b634e487b7160e01b600052604160045260246000fd5b61106f818386611870565b35906001600160a01b03821682036103e35761108c818588611870565b356040519283604081011067ffffffffffffffff60408601111761104e57604084810190526001600160a01b0316835260208301526002890154600160401b81101561104e578060016110e8920160028c015560028b016118be565b61111d576001602061111894828060a01b038151166001600160601b0360a01b8554161784550151910155611861565b610e92565b634e487b7160e01b600052600060045260246000fd5b60405162461bcd60e51b81526020600482015260116024820152705a65726f20746f74616c20746f6b656e7360781b6044820152606490fd5b94611178868386611870565b35156111b857611189868386611870565b3581018091116111a25761119d9095611861565b610df1565b634e487b7160e01b600052601160045260246000fd5b60405162461bcd60e51b815260206004820152601860248201527f496e76616c696420696e69746961746f7220616d6f756e7400000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601060248201526f496e76616c696420686173686c6f636b60801b6044820152606490fd5b60405162461bcd60e51b8152602060048201526012602482015271151a5b595b1bd8dac81d1bdbc81cda1bdc9d60721b6044820152606490fd5b60405162461bcd60e51b815260206004820152602160248201527f5061727469636970616e7420746f6b656e206e6f742077686974656c697374656044820152601960fa1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206261736b657420707269636560601b6044820152606490fd5b60405162461bcd60e51b81526020600482015260136024820152724e6f20696e69746961746f7220746f6b656e7360681b6044820152606490fd5b60405162461bcd60e51b8152602060048201526015602482015274082e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b6044820152606490fd5b60405162461bcd60e51b815260206004820152601560248201527414d95b19881cddd85c081b9bdd08185b1b1bddd959605a1b6044820152606490fd5b60405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081c185c9d1a58da5c185b9d606a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152600b60248201526a537761702065786973747360a81b6044820152606490fd5b346103e35760403660031901126103e35760043560249081359161143f6118f2565b8160005260019260209184835260018060a01b039061146682604060002054161515611948565b84600052858452604060002060088101805461148860ff8260101c161561198a565b61149860ff8260181c16156119c7565b60ff811680611762575b15611725576114b660078401544210611a03565b8660006114e3604051838101908a82528481526114d281611880565b604051928392839251928391611803565b8101039060025afa15610263576000516006840154036116f2576201000062ff000019919091161790556004818101548254600584015460405163a9059cbb60e01b8082529288166001600160a01b03169481019490945260248401529291908790829060449082906000908a165af1908115610263576000916116d5575b50156116995787919293600083600284019301935b6115ad575b89897f7430d80e0e3cfb925010ff8993f6a56392199211e297fc7825278f29980ccf518a8a604051908152a2600055005b82548110156116945761160988836115c584876118be565b50541684875416908d6115d886896118be565b5001546040518a81526001600160a01b03909316600484015260248301529092839190829060009082906044820190565b03925af190811561026357600091611677575b501561163c57906116318a9695949392611861565b909192939495611577565b60405162461bcd60e51b8152600481018990526014818801527310985cdad95d081d1bc8109bd88819985a5b195960621b6044820152606490fd5b61168e9150893d8b1161025c5761024e818361189c565b8b61161c565b61157c565b60405162461bcd60e51b815260048101879052601581850152741554d11615081d1bc8105b1a58d94819985a5b1959605a1b6044820152606490fd5b6116ec9150873d891161025c5761024e818361189c565b89611562565b60405162461bcd60e51b815260048101889052600c818601526b42616420707265696d61676560a01b6044820152606490fd5b60405162461bcd60e51b81526004810188905260168186015275109bdd1a0819195c1bdcda5d1cc81c995c5d5a5c995960521b6044820152606490fd5b5060ff8160081c166114a2565b600435906001600160a01b03821682036103e357565b9181601f840112156103e35782359167ffffffffffffffff83116103e3576020808501948460051b0101116103e357565b6003548110156117ed5760036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0190600090565b634e487b7160e01b600052603260045260246000fd5b60005b8381106118165750506000910152565b8181015183820152602001611806565b6020908160408183019282815285518094520193019160005b82811061184d575050505090565b83518552938101939281019260010161183f565b60001981146111a25760010190565b91908110156117ed5760051b0190565b6040810190811067ffffffffffffffff82111761104e57604052565b90601f8019910116810190811067ffffffffffffffff82111761104e57604052565b80548210156117ed5760005260206000209060011b0190600090565b908160209103126103e3575180151581036103e35790565b600260005414611903576002600055565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b1561194f57565b60405162461bcd60e51b815260206004820152601360248201527214ddd85c08191bd95cc81b9bdd08195e1a5cdd606a1b6044820152606490fd5b1561199157565b60405162461bcd60e51b815260206004820152600e60248201526d14ddd85c0818dbdb5c1b195d195960921b6044820152606490fd5b156119ce57565b60405162461bcd60e51b815260206004820152600d60248201526c14ddd85c081c99599d5b991959609a1b6044820152606490fd5b15611a0a57565b60405162461bcd60e51b815260206004820152600c60248201526b14ddd85c08195e1c1a5c995960a21b6044820152606490fd5b67ffffffffffffffff811161104e5760051b60200190565b80518210156117ed5760209160051b010190565b60005260206001815260408060002060018060a01b0381541615600014611ab457506d1113d154d7d393d517d1561254d560921b905191611aaa83611880565b600e835282015290565b60088101549060ff8260101c16600014611aed5750506810d3d354131155115160ba1b905191611ae383611880565b6009835282015290565b60ff8260181c16600014611b1f57505067149151955391115160c21b905191611b1583611880565b6008835282015290565b600701544210611b4b5750661156141254915160ca1b905191611b4183611880565b6007835282015290565b60ff8116611b8357507414115391125391d7d0531250d157d1115413d4d255605a1b905191611b7983611880565b6015835282015290565b60081c60ff16611bbd577550454e44494e475f424f425f414343455054414e434560501b905191611bb383611880565b6016835282015290565b6e52454144595f464f525f434c41494d60881b905191611bdc83611880565b600f83528201529056fea2646970667358221220aa8265e9309f4858f979f87c26da4d9ccf7172f79feeadf01f969164da40253c64736f6c63430008120033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
0x43A8a85A2E8bc98D1c54c3244C3b61230b3cf5E6
Loading...
Loading
Loading...
Loading
[ 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.