ETH Price: $1,980.27 (-5.16%)

Contract

0xeb5DF44d56B0d4cCd63734A99881B2F3f002ECC2
 

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Swap118465732021-02-13 5:58:271847 days ago1613195907IN
Atomic Blue 1
5.5 ETH0.02007941130
Swap118453942021-02-13 1:36:091847 days ago1613180169IN
Atomic Blue 1
3 ETH0.02677574192
Swap118452562021-02-13 1:07:391848 days ago1613178459IN
Atomic Blue 1
0.02 ETH0.04083697127
Swap118452382021-02-13 1:04:071848 days ago1613178247IN
Atomic Blue 1
0.03 ETH0.04807185174
Swap118452232021-02-13 1:01:141848 days ago1613178074IN
Atomic Blue 1
0.03 ETH0.05637547201
Swap118451892021-02-13 0:51:471848 days ago1613177507IN
Atomic Blue 1
0.0675 ETH0.03674379131
Swap118443882021-02-12 21:47:211848 days ago1613166441IN
Atomic Blue 1
0.55 ETH0.02054001129.111
Multi Path Swap118441402021-02-12 20:55:501848 days ago1613163350IN
Atomic Blue 1
0.03 ETH0.07416976140
Swap118439642021-02-12 20:19:401848 days ago1613161180IN
Atomic Blue 1
0.02 ETH0.04315177237
Swap118438552021-02-12 19:57:001848 days ago1613159820IN
Atomic Blue 1
0.1 ETH0.03434008191
Multi Path Swap118438462021-02-12 19:55:391848 days ago1613159739IN
Atomic Blue 1
7 ETH0.04373967130
Multi Path Swap118438272021-02-12 19:50:241848 days ago1613159424IN
Atomic Blue 1
0.1 ETH0.2059396202
Swap118437762021-02-12 19:42:061848 days ago1613158926IN
Atomic Blue 1
1 ETH0.01875323122
Multi Path Swap118436622021-02-12 19:18:501848 days ago1613157530IN
Atomic Blue 1
5 ETH0.0650349252
Swap118435162021-02-12 18:45:421848 days ago1613155542IN
Atomic Blue 1
1 ETH0.05575464361
Swap118434602021-02-12 18:32:431848 days ago1613154763IN
Atomic Blue 1
0.5 ETH0.03919193272
Multi Path Swap118431752021-02-12 17:27:151848 days ago1613150835IN
Atomic Blue 1
30 ETH0.07485583302
Swap118430952021-02-12 17:08:211848 days ago1613149701IN
Atomic Blue 1
1 ETH0.02934455190
Swap118430482021-02-12 16:59:591848 days ago1613149199IN
Atomic Blue 1
15 ETH0.07875699178
Swap118429622021-02-12 16:43:091848 days ago1613148189IN
Atomic Blue 1
0.5 ETH0.04464337225
Swap118429012021-02-12 16:29:271848 days ago1613147367IN
Atomic Blue 1
20 ETH0.05899242282
Swap118426432021-02-12 15:28:321848 days ago1613143712IN
Atomic Blue 1
0.5563 ETH0.02724752178
Swap118423652021-02-12 14:26:201848 days ago1613139980IN
Atomic Blue 1
0.01 ETH0.04342571119
Swap118423612021-02-12 14:25:291848 days ago1613139929IN
Atomic Blue 1
1 ETH0.02023229131
Swap118423502021-02-12 14:23:461848 days ago1613139826IN
Atomic Blue 1
1 ETH0.02698607136
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
-119030402021-02-21 22:28:461839 days ago1613946526
Atomic Blue 1
1 ETH
-119030402021-02-21 22:28:461839 days ago1613946526
Atomic Blue 1
1 ETH
-119030242021-02-21 22:24:351839 days ago1613946275
Atomic Blue 1
3.8 ETH
-119030242021-02-21 22:24:351839 days ago1613946275
Atomic Blue 1
3.8 ETH
-118888932021-02-19 18:09:511841 days ago1613758191
Atomic Blue 1
1.5 ETH
-118888932021-02-19 18:09:511841 days ago1613758191
Atomic Blue 1
1.5 ETH
-118570642021-02-14 20:42:351846 days ago1613335355
Atomic Blue 1
0.50015508 ETH
-118570642021-02-14 20:42:351846 days ago1613335355
Atomic Blue 1
0.50015508 ETH
-118536622021-02-14 8:15:381846 days ago1613290538
Atomic Blue 1
6.28234908 ETH
-118536622021-02-14 8:15:381846 days ago1613290538
Atomic Blue 1
6.28234908 ETH
-118517582021-02-14 1:22:471846 days ago1613265767
Atomic Blue 1
0.68913405 ETH
-118517582021-02-14 1:22:471846 days ago1613265767
Atomic Blue 1
0.68913405 ETH
-118496922021-02-13 17:35:411847 days ago1613237741
Atomic Blue 1
24.68353671 ETH
-118496922021-02-13 17:35:411847 days ago1613237741
Atomic Blue 1
26.7404981 ETH
-118496922021-02-13 17:35:411847 days ago1613237741
Atomic Blue 1
51.42403482 ETH
-118490292021-02-13 15:10:311847 days ago1613229031
Atomic Blue 1
52.17203891 ETH
-118490292021-02-13 15:10:311847 days ago1613229031
Atomic Blue 1
52.17203891 ETH
-118468062021-02-13 6:53:331847 days ago1613199213
Atomic Blue 1
0.23831879 ETH
-118468062021-02-13 6:53:331847 days ago1613199213
Atomic Blue 1
0.23831879 ETH
-118465732021-02-13 5:58:271847 days ago1613195907
Atomic Blue 1
5.5 ETH
-118453942021-02-13 1:36:091847 days ago1613180169
Atomic Blue 1
3 ETH
-118452562021-02-13 1:07:391848 days ago1613178459
Atomic Blue 1
0.02 ETH
-118452382021-02-13 1:04:071848 days ago1613178247
Atomic Blue 1
0.03 ETH
-118452232021-02-13 1:01:141848 days ago1613178074
Atomic Blue 1
0.03 ETH
-118451892021-02-13 0:51:471848 days ago1613177507
Atomic Blue 1
0.0675 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AtomicBlue

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2020-10-15
*/

pragma solidity 0.6.12;
pragma experimental ABIEncoderV2;

contract AtomicTypes{
    struct SwapParams{
        Token sellToken; 
        uint256 input;
        Token buyToken;
        uint minOutput;
    }
    
    struct DistributionParams{
        IAtomicExchange[] exchangeModules;
        bytes[] exchangeData;
        uint256[] chunks;
    }
    
    event Trade(
        address indexed sellToken,
        uint256 sellAmount,
        address indexed buyToken,
        uint256 buyAmount,
        address indexed trader,
        address receiver
    );
}

contract AtomicUtils{    
    // ETH and its wrappers
    address constant WETHAddress = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    IWETH constant WETH = IWETH(WETHAddress);
    Token constant ETH = Token(address(0));
    address constant EEEAddress = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
    Token constant EEE = Token(EEEAddress);
    
    // Universal function to query this contracts balance, supporting  and Token
    function balanceOf(Token token) internal view returns(uint balance){
        if(isETH(token)){
            return address(this).balance;
        }else{
            return token.balanceOf(address(this));
        }
    }
    
    // Universal send function, supporting ETH and Token
    function send(Token token, address payable recipient, uint amount) internal {
        if(isETH(token)){
            require(
                recipient.send(amount),
                "Sending of ETH failed."
            );
        }else{
            Token(token).transfer(recipient, amount);
            require(
                validateOptionalERC20Return(),
                "ERC20 token transfer failed."
            );
        }
    }
    
    // Universal function to claim tokens from msg.sender
    function claimTokenFromSenderTo(Token _token, uint _amount, address _receiver) internal {
        if (isETH(_token)) {
            require(msg.value == _amount);
            // dont forward ETH
        }else{
            require(msg.value  == 0);
            _token.transferFrom(msg.sender, _receiver, _amount);
        }
    }
    
    // Token approval function supporting non-compliant tokens
    function approve(Token _token, address _spender, uint _amount) internal {
        if (!isETH(_token)) {
            _token.approve(_spender, _amount);
            require(
                validateOptionalERC20Return(),
                "ERC20 approval failed."
            );
        }
    }
    
    // Validate return data of non-compliant erc20s
    function validateOptionalERC20Return() pure internal returns (bool){
        uint256 success = 0;

        assembly {
            switch returndatasize()             // Check the number of bytes the token contract returned
            case 0 {                            // Nothing returned, but contract did not throw > assume our transfer succeeded
                success := 1
            }
            case 32 {                           // 32 bytes returned, result is the returned bool
                returndatacopy(0, 0, 32)
                success := mload(0)
            }
        }

        return success != 0;
    }

    function isETH(Token token) pure internal  returns (bool){
        if(
            address(token) == address(0)
            || address(token) == EEEAddress
        ){
            return true;
        }else{
            return false;
        }
    }

    function isWETH(Token token) pure internal  returns (bool){
        if(address(token) == WETHAddress){
            return true;
        }else{
            return false;
        }
    }
    
    // Source: https://github.com/GNSPS/solidity-bytes-utils/blob/master/contracts/BytesLib.sol
    function sliceBytes(
        bytes memory _bytes,
        uint256 _start,
        uint256 _length
    )
    internal
    pure
    returns (bytes memory)
    {
        require(_bytes.length >= (_start + _length), "Read out of bounds");

        bytes memory tempBytes;

        assembly {
            switch iszero(_length)
            case 0 {
            // Get a location of some free memory and store it in tempBytes as
            // Solidity does for memory variables.
                tempBytes := mload(0x40)

            // The first word of the slice result is potentially a partial
            // word read from the original array. To read it, we calculate
            // the length of that partial word and start copying that many
            // bytes into the array. The first word we copy will start with
            // data we don't care about, but the last `lengthmod` bytes will
            // land at the beginning of the contents of the new array. When
            // we're done copying, we overwrite the full first word with
            // the actual length of the slice.
                let lengthmod := and(_length, 31)

            // The multiplication in the next line is necessary
            // because when slicing multiples of 32 bytes (lengthmod == 0)
            // the following copy loop was copying the origin's length
            // and then ending prematurely not copying everything it should.
                let mc := add(add(tempBytes, lengthmod), mul(0x20, iszero(lengthmod)))
                let end := add(mc, _length)

                for {
                // The multiplication in the next line has the same exact purpose
                // as the one above.
                    let cc := add(add(add(_bytes, lengthmod), mul(0x20, iszero(lengthmod))), _start)
                } lt(mc, end) {
                    mc := add(mc, 0x20)
                    cc := add(cc, 0x20)
                } {
                    mstore(mc, mload(cc))
                }

                mstore(tempBytes, _length)

            //update free-memory pointer
            //allocating the array padded to 32 bytes like the compiler does now
                mstore(0x40, and(add(mc, 31), not(31)))
            }
            //if we want a zero-length slice let's just return a zero-length array
            default {
                tempBytes := mload(0x40)

                mstore(0x40, add(tempBytes, 0x20))
            }
        }

        return tempBytes;
    }
}


abstract contract IAtomicExchange is AtomicTypes{
    function swap(
        SwapParams memory _swap,
        bytes memory data
    )  external payable virtual returns(
        uint output
    );
}

contract AtomicBlue is AtomicUtils, AtomicTypes{
    // IMPORTANT NOTICE:
    // NEVER set a token allowance to this contract, as everybody can do arbitrary calls from it.
    // When swapping tokens always go through AtomicTokenProxy.
    // This contract assumes token to swap has already been transfered to it when being called. Ether can be sent directly with the call.

    // perform a distributed swap and transfer outcome to _receipient
    function swapAndSend(
        SwapParams memory _swap,
        
        DistributionParams memory _distribution,
        
        address payable _receipient
    ) public payable returns (uint _output){
        // execute swaps on behalf of trader
        _output = doDistributedSwap(_swap, _distribution);

        // check if output of swap is sufficient        
        require(_output >= _swap.minOutput, "Slippage limit exceeded.");
        
        // send swap output to receipient
        send(_swap.buyToken, _receipient, _output);
        
        emit Trade(
            address(_swap.sellToken),
            _swap.input,
            address(_swap.buyToken),
            _output,
            msg.sender,
            _receipient
        );
    }
    
    function multiPathSwapAndSend(
        SwapParams memory _swap,
        
        Token[] calldata _path,
        
        DistributionParams[] memory _distribution,
        
        address payable _receipient
    ) public payable returns (uint _output){
        // verify path
        require(
            _path[0] == _swap.sellToken
            && _path[_path.length - 1] == _swap.buyToken
            && _path.length >= 2
        );
        
        // execute swaps on behalf of trader
        _output = _swap.input;
        for(uint i = 1; i < _path.length; i++){
            _output = doDistributedSwap(SwapParams({
                sellToken : _path[i - 1],
                input     : _output,      // output of last swap is input for this one
                buyToken  : _path[i],
                minOutput : 0            // we check the total outcome in the end
            }), _distribution[i - 1]);
        }

        // check if output of swap is sufficient        
        require(_output >= _swap.minOutput, "Slippage limit exceeded.");
        
        // send swap output to sender
        send(_swap.buyToken, _receipient, _output);
        
        emit Trade(
            address(_swap.sellToken),
            _swap.input,
            address(_swap.buyToken),
            _output,
            msg.sender,
            _receipient
        );
    }
    
    
    // internal function to perform a distributed swap
    function doDistributedSwap(
        SwapParams memory _swap,
        
        DistributionParams memory _distribution
    ) internal returns(uint){
        
        // count totalChunks
        uint totalChunks = 0;
        for(uint i = 0; i < _distribution.chunks.length; i++){
            totalChunks += _distribution.chunks[i];   
        }
        
        // route trades to the different exchanges
        for(uint i = 0; i < _distribution.exchangeModules.length; i++){
            IAtomicExchange exchange = _distribution.exchangeModules[i];
            
            uint thisInput = _swap.input * _distribution.chunks[i] / totalChunks;
            
            if(address(exchange) == address(0)){
                // trade is not using an exchange module but a direct call
                (address target, uint value, bytes memory callData) = abi.decode(_distribution.exchangeData[i], (address, uint, bytes));
                
                (bool success, bytes memory data) = address(target).call.value(value)(callData);
            
                require(success, "Exchange call reverted.");
            }else{
                // delegate call to the exchange module
                (bool success, bytes memory data) = address(exchange).delegatecall(
                    abi.encodePacked(// This encodes the function to call and the parameters we are passing to the settlement function
                        exchange.swap.selector, 
                        abi.encode(
                            SwapParams({
                                sellToken : _swap.sellToken,
                                input     : thisInput,
                                buyToken  : _swap.buyToken,
                                minOutput : 1 // we are checking the combined output in the end
                            }),
                            _distribution.exchangeData[i]
                        )
                    )
                );
            
                require(success, "Exchange module reverted.");
            }
        }
        
        return balanceOf(_swap.buyToken);
    }
    
    // perform a distributed swap
    function swap(
        SwapParams memory _swap,
        DistributionParams memory _distribution
    ) public payable returns (uint _output){
        return swapAndSend(_swap, _distribution, msg.sender);
    }
    
    // perform a multi-path distributed swap
    function multiPathSwap(
        SwapParams memory _swap,
        Token[] calldata _path,
        DistributionParams[] memory _distribution
    ) public payable returns (uint _output){
        return multiPathSwapAndSend(_swap, _path, _distribution, msg.sender);
    }

    // allow ETH receivals
    receive() external payable {}
}

contract AtomicTokenProxy is AtomicUtils, AtomicTypes{
    AtomicBlue constant atomic = AtomicBlue(0xeb5DF44d56B0d4cCd63734A99881B2F3f002ECC2);

    // perform a distributed swap and transfer outcome to _receipient
    function swapAndSend(
        SwapParams calldata _swap,
        
        DistributionParams calldata _distribution,
        
        address payable _receipient
    ) public payable returns (uint _output){
        // deposit tokens to executor
        claimTokenFromSenderTo(_swap.sellToken, _swap.input, address(atomic));
        
        // execute swaps on behalf of sender
        _output = atomic.swapAndSend.value(msg.value)(_swap, _distribution, _receipient);
    }
    
    // perform a multi-path distributed swap and transfer outcome to _receipient
    function multiPathSwapAndSend(
        SwapParams calldata _swap,
        
        Token[] calldata _path,
        
        DistributionParams[] calldata _distribution,
        
        address payable _receipient
    ) public payable returns (uint _output){
        // deposit tokens to executor
        claimTokenFromSenderTo(_swap.sellToken, _swap.input, address(atomic));
        
        // execute swaps on behalf of sender
        _output = atomic.multiPathSwapAndSend.value(msg.value)(
            _swap,
            _path,
            _distribution,
            _receipient
        );
    }
    
    // perform a distributed swap
    function swap(
        SwapParams calldata _swap,
        DistributionParams calldata _distribution
    ) public payable returns (uint _output){
        return swapAndSend(_swap, _distribution, msg.sender);
    }
    
    // perform a distributed swap and burn optimal gastoken amount afterwards
    function swapWithGasTokens(
        SwapParams calldata _swap,
        DistributionParams calldata _distribution,
        IGasToken _gasToken,
        uint _gasQtyPerToken
    ) public payable returns (uint _output){
        uint startGas = gasleft();
        _output = swapAndSend(_swap, _distribution, msg.sender);
        _gasToken.freeFromUpTo(msg.sender, (startGas - gasleft() + 25000) / _gasQtyPerToken);
    }
    
    // perform a multi-path distributed swap
    function multiPathSwap(
        SwapParams calldata _swap,
        Token[] calldata _path,
        DistributionParams[] calldata _distribution
    ) public payable returns (uint _output){
        return multiPathSwapAndSend(_swap, _path, _distribution, msg.sender);
    }
    
    // perform a multi-path distributed swap and burn optimal gastoken amount afterwards
    function multiPathSwapWithGasTokens(
        SwapParams calldata _swap,
        Token[] calldata _path,
        DistributionParams[] calldata _distribution,
        IGasToken _gasToken,
        uint _gasQtyPerToken
    ) public payable returns (uint _output){
        uint startGas = gasleft();
        _output = multiPathSwapAndSend(_swap, _path, _distribution, msg.sender);
        _gasToken.freeFromUpTo(msg.sender, (startGas - gasleft() + 25000) / _gasQtyPerToken);
    }
    
    // perform a distributed swap, send outcome to _receipient and burn optimal gastoken amount afterwards
    function swapAndSendWithGasTokens(
        SwapParams calldata _swap,
        DistributionParams calldata _distribution,
        address payable _receipient,
        IGasToken _gasToken,
        uint _gasQtyPerToken
    ) public payable returns (uint _output){
        uint startGas = gasleft();
        _output = swapAndSend(_swap, _distribution, _receipient);
        _gasToken.freeFromUpTo(msg.sender, (startGas - gasleft() + 25000) / _gasQtyPerToken);
    }
    
    // perform a multi-path distributed swap, send outcome to _receipient and burn optimal gastoken amount afterwards
    function multiPathSwapAndSendWithGasTokens(
        SwapParams calldata _swap,
        Token[] calldata _path,
        DistributionParams[] calldata _distribution,
        address payable _receipient,
        IGasToken _gasToken,
        uint _gasQtyPerToken
    ) public payable returns (uint _output){
        uint startGas = gasleft();
        _output = multiPathSwapAndSend(_swap, _path, _distribution, _receipient);
        _gasToken.freeFromUpTo(msg.sender, (startGas - gasleft() + 25000) / _gasQtyPerToken);
    }
}


// Interfaces:

contract Token {
    function totalSupply() view public returns (uint256 supply) {}

    function balanceOf(address _owner) view public returns (uint256 balance) {}

    function transfer(address _to, uint256 _value) public {}

    function transferFrom(address _from, address _to, uint256 _value)  public {}

    function approve(address _spender, uint256 _value) public {}

    function allowance(address _owner, address _spender) view public returns (uint256 remaining) {}

    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);

    uint256 public decimals;
    string public name;
}

contract IWETH is Token {
    function deposit() public payable {}

    function withdraw(uint256 amount) public {}
}

contract IGasToken {
    function freeUpTo(uint256 value) public returns (uint256) {}

    function free(uint256 value) public returns (uint256) {}
    
    function freeFrom(address from, uint256 value) public returns (uint256) {}

    function freeFromUpTo(address from, uint256 value) public returns (uint256) {}
}

Contract Security Audit

Contract ABI

API
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sellToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"sellAmount","type":"uint256"},{"indexed":true,"internalType":"address","name":"buyToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"buyAmount","type":"uint256"},{"indexed":true,"internalType":"address","name":"trader","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"}],"name":"Trade","type":"event"},{"inputs":[{"components":[{"internalType":"contract Token","name":"sellToken","type":"address"},{"internalType":"uint256","name":"input","type":"uint256"},{"internalType":"contract Token","name":"buyToken","type":"address"},{"internalType":"uint256","name":"minOutput","type":"uint256"}],"internalType":"struct AtomicTypes.SwapParams","name":"_swap","type":"tuple"},{"internalType":"contract Token[]","name":"_path","type":"address[]"},{"components":[{"internalType":"contract IAtomicExchange[]","name":"exchangeModules","type":"address[]"},{"internalType":"bytes[]","name":"exchangeData","type":"bytes[]"},{"internalType":"uint256[]","name":"chunks","type":"uint256[]"}],"internalType":"struct AtomicTypes.DistributionParams[]","name":"_distribution","type":"tuple[]"}],"name":"multiPathSwap","outputs":[{"internalType":"uint256","name":"_output","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"contract Token","name":"sellToken","type":"address"},{"internalType":"uint256","name":"input","type":"uint256"},{"internalType":"contract Token","name":"buyToken","type":"address"},{"internalType":"uint256","name":"minOutput","type":"uint256"}],"internalType":"struct AtomicTypes.SwapParams","name":"_swap","type":"tuple"},{"internalType":"contract Token[]","name":"_path","type":"address[]"},{"components":[{"internalType":"contract IAtomicExchange[]","name":"exchangeModules","type":"address[]"},{"internalType":"bytes[]","name":"exchangeData","type":"bytes[]"},{"internalType":"uint256[]","name":"chunks","type":"uint256[]"}],"internalType":"struct AtomicTypes.DistributionParams[]","name":"_distribution","type":"tuple[]"},{"internalType":"address payable","name":"_receipient","type":"address"}],"name":"multiPathSwapAndSend","outputs":[{"internalType":"uint256","name":"_output","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"contract Token","name":"sellToken","type":"address"},{"internalType":"uint256","name":"input","type":"uint256"},{"internalType":"contract Token","name":"buyToken","type":"address"},{"internalType":"uint256","name":"minOutput","type":"uint256"}],"internalType":"struct AtomicTypes.SwapParams","name":"_swap","type":"tuple"},{"components":[{"internalType":"contract IAtomicExchange[]","name":"exchangeModules","type":"address[]"},{"internalType":"bytes[]","name":"exchangeData","type":"bytes[]"},{"internalType":"uint256[]","name":"chunks","type":"uint256[]"}],"internalType":"struct AtomicTypes.DistributionParams","name":"_distribution","type":"tuple"}],"name":"swap","outputs":[{"internalType":"uint256","name":"_output","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"contract Token","name":"sellToken","type":"address"},{"internalType":"uint256","name":"input","type":"uint256"},{"internalType":"contract Token","name":"buyToken","type":"address"},{"internalType":"uint256","name":"minOutput","type":"uint256"}],"internalType":"struct AtomicTypes.SwapParams","name":"_swap","type":"tuple"},{"components":[{"internalType":"contract IAtomicExchange[]","name":"exchangeModules","type":"address[]"},{"internalType":"bytes[]","name":"exchangeData","type":"bytes[]"},{"internalType":"uint256[]","name":"chunks","type":"uint256[]"}],"internalType":"struct AtomicTypes.DistributionParams","name":"_distribution","type":"tuple"},{"internalType":"address payable","name":"_receipient","type":"address"}],"name":"swapAndSend","outputs":[{"internalType":"uint256","name":"_output","type":"uint256"}],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b50611086806100206000396000f3fe6080604052600436106100435760003560e01c806333a2901e1461004f57806398933bec14610078578063b11456bd1461008b578063bbf6c9f11461009e5761004a565b3661004a57005b600080fd5b61006261005d366004610d11565b6100b1565b60405161006f9190610f75565b60405180910390f35b610062610086366004610c37565b610167565b610062610099366004610bbf565b61034c565b6100626100ac366004610cc4565b610364565b60006100bd848461037a565b905083606001518110156100ec5760405162461bcd60e51b81526004016100e390610ea2565b60405180910390fd5b6100fb84604001518383610611565b336001600160a01b031684604001516001600160a01b031685600001516001600160a01b03167f6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d8760200151858760405161015893929190610f7e565b60405180910390a49392505050565b84516000906001600160a01b03168585838161017f57fe5b90506020020160208101906101949190610b9c565b6001600160a01b03161480156101e3575060408601516001600160a01b0316858560001981018181106101c357fe5b90506020020160208101906101d89190610b9c565b6001600160a01b0316145b80156101f0575060028410155b6101f957600080fd5b50602085015160015b848110156102aa576102a0604051806080016040528088886001860381811061022757fe5b905060200201602081019061023c9190610b9c565b6001600160a01b0316815260200184815260200188888581811061025c57fe5b90506020020160208101906102719190610b9c565b6001600160a01b03168152602001600081525085600184038151811061029357fe5b602002602001015161037a565b9150600101610202565b5085606001518110156102cf5760405162461bcd60e51b81526004016100e390610ea2565b6102de86604001518383610611565b336001600160a01b031686604001516001600160a01b031687600001516001600160a01b03167f6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d8960200151858760405161033b93929190610f7e565b60405180910390a495945050505050565b600061035b8585858533610167565b95945050505050565b60006103718383336100b1565b90505b92915050565b600080805b8360400151518110156103b5578360400151818151811061039c57fe5b602002602001015182019150808060010191505061037f565b5060005b8351518110156105fb576000846000015182815181106103d557fe5b60200260200101519050600083866040015184815181106103f257fe5b60200260200101518860200151028161040757fe5b0490506001600160a01b0382166104d95760008060608860200151868151811061042d57fe5b60200260200101518060200190518101906104489190610b0a565b92509250925060006060846001600160a01b0316848460405161046b9190610dbb565b60006040518083038185875af1925050503d80600081146104a8576040519150601f19603f3d011682016040523d82523d6000602084013e6104ad565b606091505b5091509150816104cf5760405162461bcd60e51b81526004016100e390610e34565b50505050506105f1565b60006060836001600160a01b03166373ccae0860e01b60405180608001604052808c600001516001600160a01b031681526020018681526020018c604001516001600160a01b0316815260200160018152508a60200151888151811061053b57fe5b6020026020010151604051602001610554929190610f10565b60408051601f19818403018152908290526105729291602001610d8a565b60408051601f198184030181529082905261058c91610dbb565b600060405180830381855af49150503d80600081146105c7576040519150601f19603f3d011682016040523d82523d6000602084013e6105cc565b606091505b5091509150816105ee5760405162461bcd60e51b81526004016100e390610e6b565b50505b50506001016103b9565b5061060984604001516106ee565b949350505050565b61061a83610789565b15610665576040516001600160a01b0383169082156108fc029083906000818181858888f193505050506106605760405162461bcd60e51b81526004016100e390610e04565b6106e9565b60405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb906106939085908590600401610deb565b600060405180830381600087803b1580156106ad57600080fd5b505af11580156106c1573d6000803e3d6000fd5b505050506106cd6107d2565b6106e95760405162461bcd60e51b81526004016100e390610ed9565b505050565b60006106f982610789565b15610705575047610784565b6040516370a0823160e01b81526001600160a01b038316906370a0823190610731903090600401610dd7565b60206040518083038186803b15801561074957600080fd5b505afa15801561075d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107819190610d72565b90505b919050565b60006001600160a01b03821615806107bd57506001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b156107ca57506001610784565b506000610784565b6000803d80156107e957602081146107f2576107fe565b600191506107fe565b60206000803e60005191505b501515905090565b600082601f830112610816578081fd5b813561082961082482610fc4565b610f9d565b818152915060208083019084810160005b848110156108a2578135870188603f82011261085557600080fd5b8381013561086561082482610fe4565b81815260408b8184860101111561087b57600080fd5b8281850188840137506000918101860191909152855250928201929082019060010161083a565b505050505092915050565b60008083601f8401126108be578182fd5b50813567ffffffffffffffff8111156108d5578182fd5b60208301915083602080830285010111156108ef57600080fd5b9250929050565b600082601f830112610906578081fd5b813561091461082482610fc4565b818152915060208083019084810160005b848110156108a25761093c888484358a01016109b7565b84529282019290820190600101610925565b600082601f83011261095e578081fd5b813561096c61082482610fc4565b81815291506020808301908481018184028601820187101561098d57600080fd5b60005b848110156108a257813584529282019290820190600101610990565b803561037481611038565b6000606082840312156109c8578081fd5b6109d26060610f9d565b9050813567ffffffffffffffff808211156109ec57600080fd5b818401915084601f830112610a0057600080fd5b8135610a0e61082482610fc4565b808282526020808301925080860189828387028901011115610a2f57600080fd5b600096505b84871015610a5a57610a468a826109ac565b845260019690960195928101928101610a34565b5081875280880135955084861115610a7157600080fd5b610a7d89878a01610806565b908701525050506040840135915080821115610a9857600080fd5b50610aa58482850161094e565b60408301525092915050565b600060808284031215610ac2578081fd5b610acc6080610f9d565b90508135610ad981611038565b8152602082810135908201526040820135610af381611038565b806040830152506060820135606082015292915050565b600080600060608486031215610b1e578283fd5b8351610b2981611038565b60208501516040860151919450925067ffffffffffffffff811115610b4c578182fd5b8401601f81018613610b5c578182fd5b8051610b6a61082482610fe4565b818152876020838501011115610b7e578384fd5b610b8f826020830160208601611008565b8093505050509250925092565b600060208284031215610bad578081fd5b8135610bb881611038565b9392505050565b60008060008060c08587031215610bd4578081fd5b610bde8686610ab1565b9350608085013567ffffffffffffffff80821115610bfa578283fd5b610c06888389016108ad565b909550935060a0870135915080821115610c1e578283fd5b50610c2b878288016108f6565b91505092959194509250565b600080600080600060e08688031215610c4e578081fd5b610c588787610ab1565b9450608086013567ffffffffffffffff80821115610c74578283fd5b610c8089838a016108ad565b909650945060a0880135915080821115610c98578283fd5b50610ca5888289016108f6565b92505060c0860135610cb681611038565b809150509295509295909350565b60008060a08385031215610cd6578182fd5b610ce08484610ab1565b9150608083013567ffffffffffffffff811115610cfb578182fd5b610d07858286016109b7565b9150509250929050565b600080600060c08486031215610d25578081fd5b610d2f8585610ab1565b9250608084013567ffffffffffffffff811115610d4a578182fd5b610d56868287016109b7565b92505060a0840135610d6781611038565b809150509250925092565b600060208284031215610d83578081fd5b5051919050565b6001600160e01b0319831681528151600090610dad816004850160208701611008565b919091016004019392505050565b60008251610dcd818460208701611008565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b60208082526016908201527529b2b73234b7339037b31022aa24103330b4b632b21760511b604082015260600190565b60208082526017908201527f45786368616e67652063616c6c2072657665727465642e000000000000000000604082015260600190565b60208082526019908201527f45786368616e6765206d6f64756c652072657665727465642e00000000000000604082015260600190565b60208082526018908201527f536c697070616765206c696d69742065786365656465642e0000000000000000604082015260600190565b6020808252601c908201527f455243323020746f6b656e207472616e73666572206661696c65642e00000000604082015260600190565b600060018060a01b0380855116835260208501516020840152806040860151166040840152506060840151606083015260a0608083015282518060a0840152610f608160c0850160208701611008565b601f01601f19169190910160c0019392505050565b90815260200190565b92835260208301919091526001600160a01b0316604082015260600190565b60405181810167ffffffffffffffff81118282101715610fbc57600080fd5b604052919050565b600067ffffffffffffffff821115610fda578081fd5b5060209081020190565b600067ffffffffffffffff821115610ffa578081fd5b50601f01601f191660200190565b60005b8381101561102357818101518382015260200161100b565b83811115611032576000848401525b50505050565b6001600160a01b038116811461104d57600080fd5b5056fea26469706673582212202f6c8d03f675f1e974e716e2d04f57028fba676551a05cac69044094c03e9e7e64736f6c634300060c0033

Deployed Bytecode

0x6080604052600436106100435760003560e01c806333a2901e1461004f57806398933bec14610078578063b11456bd1461008b578063bbf6c9f11461009e5761004a565b3661004a57005b600080fd5b61006261005d366004610d11565b6100b1565b60405161006f9190610f75565b60405180910390f35b610062610086366004610c37565b610167565b610062610099366004610bbf565b61034c565b6100626100ac366004610cc4565b610364565b60006100bd848461037a565b905083606001518110156100ec5760405162461bcd60e51b81526004016100e390610ea2565b60405180910390fd5b6100fb84604001518383610611565b336001600160a01b031684604001516001600160a01b031685600001516001600160a01b03167f6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d8760200151858760405161015893929190610f7e565b60405180910390a49392505050565b84516000906001600160a01b03168585838161017f57fe5b90506020020160208101906101949190610b9c565b6001600160a01b03161480156101e3575060408601516001600160a01b0316858560001981018181106101c357fe5b90506020020160208101906101d89190610b9c565b6001600160a01b0316145b80156101f0575060028410155b6101f957600080fd5b50602085015160015b848110156102aa576102a0604051806080016040528088886001860381811061022757fe5b905060200201602081019061023c9190610b9c565b6001600160a01b0316815260200184815260200188888581811061025c57fe5b90506020020160208101906102719190610b9c565b6001600160a01b03168152602001600081525085600184038151811061029357fe5b602002602001015161037a565b9150600101610202565b5085606001518110156102cf5760405162461bcd60e51b81526004016100e390610ea2565b6102de86604001518383610611565b336001600160a01b031686604001516001600160a01b031687600001516001600160a01b03167f6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d8960200151858760405161033b93929190610f7e565b60405180910390a495945050505050565b600061035b8585858533610167565b95945050505050565b60006103718383336100b1565b90505b92915050565b600080805b8360400151518110156103b5578360400151818151811061039c57fe5b602002602001015182019150808060010191505061037f565b5060005b8351518110156105fb576000846000015182815181106103d557fe5b60200260200101519050600083866040015184815181106103f257fe5b60200260200101518860200151028161040757fe5b0490506001600160a01b0382166104d95760008060608860200151868151811061042d57fe5b60200260200101518060200190518101906104489190610b0a565b92509250925060006060846001600160a01b0316848460405161046b9190610dbb565b60006040518083038185875af1925050503d80600081146104a8576040519150601f19603f3d011682016040523d82523d6000602084013e6104ad565b606091505b5091509150816104cf5760405162461bcd60e51b81526004016100e390610e34565b50505050506105f1565b60006060836001600160a01b03166373ccae0860e01b60405180608001604052808c600001516001600160a01b031681526020018681526020018c604001516001600160a01b0316815260200160018152508a60200151888151811061053b57fe5b6020026020010151604051602001610554929190610f10565b60408051601f19818403018152908290526105729291602001610d8a565b60408051601f198184030181529082905261058c91610dbb565b600060405180830381855af49150503d80600081146105c7576040519150601f19603f3d011682016040523d82523d6000602084013e6105cc565b606091505b5091509150816105ee5760405162461bcd60e51b81526004016100e390610e6b565b50505b50506001016103b9565b5061060984604001516106ee565b949350505050565b61061a83610789565b15610665576040516001600160a01b0383169082156108fc029083906000818181858888f193505050506106605760405162461bcd60e51b81526004016100e390610e04565b6106e9565b60405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb906106939085908590600401610deb565b600060405180830381600087803b1580156106ad57600080fd5b505af11580156106c1573d6000803e3d6000fd5b505050506106cd6107d2565b6106e95760405162461bcd60e51b81526004016100e390610ed9565b505050565b60006106f982610789565b15610705575047610784565b6040516370a0823160e01b81526001600160a01b038316906370a0823190610731903090600401610dd7565b60206040518083038186803b15801561074957600080fd5b505afa15801561075d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107819190610d72565b90505b919050565b60006001600160a01b03821615806107bd57506001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b156107ca57506001610784565b506000610784565b6000803d80156107e957602081146107f2576107fe565b600191506107fe565b60206000803e60005191505b501515905090565b600082601f830112610816578081fd5b813561082961082482610fc4565b610f9d565b818152915060208083019084810160005b848110156108a2578135870188603f82011261085557600080fd5b8381013561086561082482610fe4565b81815260408b8184860101111561087b57600080fd5b8281850188840137506000918101860191909152855250928201929082019060010161083a565b505050505092915050565b60008083601f8401126108be578182fd5b50813567ffffffffffffffff8111156108d5578182fd5b60208301915083602080830285010111156108ef57600080fd5b9250929050565b600082601f830112610906578081fd5b813561091461082482610fc4565b818152915060208083019084810160005b848110156108a25761093c888484358a01016109b7565b84529282019290820190600101610925565b600082601f83011261095e578081fd5b813561096c61082482610fc4565b81815291506020808301908481018184028601820187101561098d57600080fd5b60005b848110156108a257813584529282019290820190600101610990565b803561037481611038565b6000606082840312156109c8578081fd5b6109d26060610f9d565b9050813567ffffffffffffffff808211156109ec57600080fd5b818401915084601f830112610a0057600080fd5b8135610a0e61082482610fc4565b808282526020808301925080860189828387028901011115610a2f57600080fd5b600096505b84871015610a5a57610a468a826109ac565b845260019690960195928101928101610a34565b5081875280880135955084861115610a7157600080fd5b610a7d89878a01610806565b908701525050506040840135915080821115610a9857600080fd5b50610aa58482850161094e565b60408301525092915050565b600060808284031215610ac2578081fd5b610acc6080610f9d565b90508135610ad981611038565b8152602082810135908201526040820135610af381611038565b806040830152506060820135606082015292915050565b600080600060608486031215610b1e578283fd5b8351610b2981611038565b60208501516040860151919450925067ffffffffffffffff811115610b4c578182fd5b8401601f81018613610b5c578182fd5b8051610b6a61082482610fe4565b818152876020838501011115610b7e578384fd5b610b8f826020830160208601611008565b8093505050509250925092565b600060208284031215610bad578081fd5b8135610bb881611038565b9392505050565b60008060008060c08587031215610bd4578081fd5b610bde8686610ab1565b9350608085013567ffffffffffffffff80821115610bfa578283fd5b610c06888389016108ad565b909550935060a0870135915080821115610c1e578283fd5b50610c2b878288016108f6565b91505092959194509250565b600080600080600060e08688031215610c4e578081fd5b610c588787610ab1565b9450608086013567ffffffffffffffff80821115610c74578283fd5b610c8089838a016108ad565b909650945060a0880135915080821115610c98578283fd5b50610ca5888289016108f6565b92505060c0860135610cb681611038565b809150509295509295909350565b60008060a08385031215610cd6578182fd5b610ce08484610ab1565b9150608083013567ffffffffffffffff811115610cfb578182fd5b610d07858286016109b7565b9150509250929050565b600080600060c08486031215610d25578081fd5b610d2f8585610ab1565b9250608084013567ffffffffffffffff811115610d4a578182fd5b610d56868287016109b7565b92505060a0840135610d6781611038565b809150509250925092565b600060208284031215610d83578081fd5b5051919050565b6001600160e01b0319831681528151600090610dad816004850160208701611008565b919091016004019392505050565b60008251610dcd818460208701611008565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b60208082526016908201527529b2b73234b7339037b31022aa24103330b4b632b21760511b604082015260600190565b60208082526017908201527f45786368616e67652063616c6c2072657665727465642e000000000000000000604082015260600190565b60208082526019908201527f45786368616e6765206d6f64756c652072657665727465642e00000000000000604082015260600190565b60208082526018908201527f536c697070616765206c696d69742065786365656465642e0000000000000000604082015260600190565b6020808252601c908201527f455243323020746f6b656e207472616e73666572206661696c65642e00000000604082015260600190565b600060018060a01b0380855116835260208501516020840152806040860151166040840152506060840151606083015260a0608083015282518060a0840152610f608160c0850160208701611008565b601f01601f19169190910160c0019392505050565b90815260200190565b92835260208301919091526001600160a01b0316604082015260600190565b60405181810167ffffffffffffffff81118282101715610fbc57600080fd5b604052919050565b600067ffffffffffffffff821115610fda578081fd5b5060209081020190565b600067ffffffffffffffff821115610ffa578081fd5b50601f01601f191660200190565b60005b8381101561102357818101518382015260200161100b565b83811115611032576000848401525b50505050565b6001600160a01b038116811461104d57600080fd5b5056fea26469706673582212202f6c8d03f675f1e974e716e2d04f57028fba676551a05cac69044094c03e9e7e64736f6c634300060c0033

Deployed Bytecode Sourcemap

6599:5543:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7055:779;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7846:1405;;;;;;:::i;:::-;;:::i;11801:273::-;;;;;;:::i;:::-;;:::i;11530:213::-;;;;;;:::i;:::-;;:::i;7055:779::-;7249:12;7329:39;7347:5;7354:13;7329:17;:39::i;:::-;7319:49;;7458:5;:15;;;7447:7;:26;;7439:63;;;;-1:-1:-1;;;7439:63:0;;;;;;;:::i;:::-;;;;;;;;;7566:42;7571:5;:14;;;7587:11;7600:7;7566:4;:42::i;:::-;7779:10;-1:-1:-1;;;;;7634:192:0;7727:5;:14;;;-1:-1:-1;;;;;7634:192:0;7662:5;:15;;;-1:-1:-1;;;;;7634:192:0;;7693:5;:11;;;7757:7;7804:11;7634:192;;;;;;;;:::i;:::-;;;;;;;;7055:779;;;;;:::o;7846:1405::-;8176:15;;8094:12;;-1:-1:-1;;;;;8164:27:0;:5;;8094:12;8164:8;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8164:27:0;;:85;;;;-1:-1:-1;8235:14:0;;;;-1:-1:-1;;;;;8208:41:0;:5;;-1:-1:-1;;8214:16:0;;8208:23;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8208:41:0;;8164:85;:119;;;;-1:-1:-1;8282:1:0;8266:17;;;8164:119;8142:152;;;;;;-1:-1:-1;8371:11:0;;;;8406:1;8393:397;8409:16;;;8393:397;;;8456:322;8474:281;;;;;;;;8516:5;;8526:1;8522;:5;8516:12;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8474:281:0;;;;;8559:7;8474:281;;;;8647:5;;8653:1;8647:8;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8474:281:0;;;;;8686:1;8474:281;;;8757:13;8775:1;8771;:5;8757:20;;;;;;;;;;;;;;8456:17;:322::i;:::-;8446:332;-1:-1:-1;8427:3:0;;8393:397;;;;8879:5;:15;;;8868:7;:26;;8860:63;;;;-1:-1:-1;;;8860:63:0;;;;;;;:::i;:::-;8983:42;8988:5;:14;;;9004:11;9017:7;8983:4;:42::i;:::-;9196:10;-1:-1:-1;;;;;9051:192:0;9144:5;:14;;;-1:-1:-1;;;;;9051:192:0;9079:5;:15;;;-1:-1:-1;;;;;9051:192:0;;9110:5;:11;;;9174:7;9221:11;9051:192;;;;;;;;:::i;:::-;;;;;;;;7846:1405;;;;;;;:::o;11801:273::-;11974:12;12005:61;12026:5;12033;;12040:13;12055:10;12005:20;:61::i;:::-;11998:68;11801:273;-1:-1:-1;;;;;11801:273:0:o;11530:213::-;11659:12;11690:45;11702:5;11709:13;11724:10;11690:11;:45::i;:::-;11683:52;;11530:213;;;;;:::o;9325:2158::-;9470:4;;;9557:121;9577:13;:20;;;:27;9573:1;:31;9557:121;;;9640:13;:20;;;9661:1;9640:23;;;;;;;;;;;;;;9625:38;;;;9606:3;;;;;;;9557:121;;;;9754:6;9750:1673;9770:29;;:36;9766:40;;9750:1673;;;9827:24;9854:13;:29;;;9884:1;9854:32;;;;;;;;;;;;;;9827:59;;9915:14;9972:11;9946:13;:20;;;9967:1;9946:23;;;;;;;;;;;;;;9932:5;:11;;;:37;:51;;;;;;;-1:-1:-1;;;;;;10015:31:0;;10012:1400;;10143:14;10159:10;10171:21;10207:13;:26;;;10234:1;10207:29;;;;;;;;;;;;;;10196:65;;;;;;;;;;;;:::i;:::-;10142:119;;;;;;10299:12;10313:17;10342:6;-1:-1:-1;;;;;10334:20:0;10361:5;10368:8;10334:43;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10298:79;;;;10418:7;10410:43;;;;-1:-1:-1;;;10410:43:0;;;;;;;:::i;:::-;10012:1400;;;;;;;;10550:12;10564:17;10593:8;-1:-1:-1;;;;;10585:30:0;10778:22;;;10869:320;;;;;;;;10927:5;:15;;;-1:-1:-1;;;;;10869:320:0;;;;;10989:9;10869:320;;;;11045:5;:14;;;-1:-1:-1;;;;;10869:320:0;;;;;11106:1;10869:320;;;11220:13;:26;;;11247:1;11220:29;;;;;;;;;;;;;;10828:448;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;10828:448:0;;;;;;;;;;10638:661;;;10828:448;10638:661;;:::i;:::-;;;;-1:-1:-1;;10638:661:0;;;;;;;;;;10585:733;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10549:769;;;;11359:7;11351:45;;;;-1:-1:-1;;;11351:45:0;;;;;;;:::i;:::-;10012:1400;;;-1:-1:-1;;9808:3:0;;9750:1673;;;;11450:25;11460:5;:14;;;11450:9;:25::i;:::-;11443:32;9325:2158;-1:-1:-1;;;;9325:2158:0:o;1326:448::-;1416:12;1422:5;1416;:12::i;:::-;1413:354;;;1470:22;;-1:-1:-1;;;;;1470:14:0;;;:22;;;;;1485:6;;1470:22;;;;1485:6;1470:14;:22;;;;;;;1444:106;;;;-1:-1:-1;;;1444:106:0;;;;;;;:::i;:::-;1413:354;;;1581:40;;-1:-1:-1;;;1581:40:0;;-1:-1:-1;;;;;1581:21:0;;;;;:40;;1603:9;;1614:6;;1581:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1662:29;:27;:29::i;:::-;1636:119;;;;-1:-1:-1;;;1636:119:0;;;;;;;:::i;:::-;1326:448;;;:::o;1032:224::-;1086:12;1113;1119:5;1113;:12::i;:::-;1110:139;;;-1:-1:-1;1148:21:0;1141:28;;1110:139;1207:30;;-1:-1:-1;;;1207:30:0;;-1:-1:-1;;;;;1207:15:0;;;;;:30;;1231:4;;1207:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1200:37;;1110:139;1032:224;;;:::o;3270:257::-;3322:4;-1:-1:-1;;;;;3355:28:0;;;;:73;;-1:-1:-1;;;;;;3400:28:0;;850:42;3400:28;3355:73;3338:182;;;-1:-1:-1;3461:4:0;3454:11;;3338:182;-1:-1:-1;3503:5:0;3496:12;;2619:643;2681:4;;2760:16;2859:160;;;;3038:2;3033:179;;;;2753:459;;2859:160;3003:1;2992:12;;2859:160;;3033:179;3157:2;3154:1;3151;3136:24;3195:1;3189:8;3178:19;;2753:459;-1:-1:-1;3242:12:0;;;-1:-1:-1;2619:643:0;:::o;331:705:-1:-;;457:3;450:4;442:6;438:17;434:27;424:2;;-1:-1;;465:12;424:2;512:6;499:20;534:89;549:73;615:6;549:73;:::i;:::-;534:89;:::i;:::-;651:21;;;525:98;-1:-1;695:4;708:14;;;;683:17;;;803:1;788:242;813:6;810:1;807:13;788:242;;;896:3;883:17;687:6;871:30;3933:3;3914:17;871:30;3914:17;3910:27;3900:2;;803:1;;3941:12;3900:2;695:4;871:30;;3975:20;4010:64;4025:48;4066:6;4025:48;:::i;4010:64::-;4094:6;4087:5;4080:21;4118:17;4198:3;4118:17;4189:6;871:30;4180:16;;4177:25;4174:2;;;803:1;;4205:12;4174:2;24557:6;4118:17;871:30;4118:17;695:4;4156:5;4152:16;24534:30;-1:-1;803:1;24595:16;;;;;24588:27;;;;908:59;;-1:-1;981:14;;;;1009;;;;835:1;828:9;788:242;;;792:14;;;;;417:619;;;;:::o;1888:366::-;;;2032:3;2025:4;2017:6;2013:17;2009:27;1999:2;;-1:-1;;2040:12;1999:2;-1:-1;2070:20;;2110:18;2099:30;;2096:2;;;-1:-1;;2132:12;2096:2;2176:4;2168:6;2164:17;2152:29;;2227:3;2176:4;;2211:6;2207:17;2168:6;2193:32;;2190:41;2187:2;;;2244:1;;2234:12;2187:2;1992:262;;;;;:::o;2310:780::-;;2461:3;2454:4;2446:6;2442:17;2438:27;2428:2;;-1:-1;;2469:12;2428:2;2516:6;2503:20;2538:114;2553:98;2644:6;2553:98;:::i;2538:114::-;2680:21;;;2529:123;-1:-1;2724:4;2737:14;;;;2712:17;;;2832:1;2817:267;2842:6;2839:1;2836:13;2817:267;;;2949:71;3016:3;2724:4;2925:3;2912:17;2716:6;2900:30;;2949:71;:::i;:::-;2937:84;;3035:14;;;;3063;;;;2864:1;2857:9;2817:267;;3116:707;;3233:3;3226:4;3218:6;3214:17;3210:27;3200:2;;-1:-1;;3241:12;3200:2;3288:6;3275:20;3310:80;3325:64;3382:6;3325:64;:::i;3310:80::-;3418:21;;;3301:89;-1:-1;3462:4;3475:14;;;;3450:17;;;3564;;;3555:27;;;;3552:36;-1:-1;3549:2;;;3601:1;;3591:12;3549:2;3626:1;3611:206;3636:6;3633:1;3630:13;3611:206;;;7045:20;;3704:50;;3768:14;;;;3796;;;;3658:1;3651:9;3611:206;;4731:176;4821:20;;4846:56;4821:20;4846:56;:::i;5123:1006::-;;5246:4;5234:9;5229:3;5225:19;5221:30;5218:2;;;-1:-1;;5254:12;5218:2;5282:20;5246:4;5282:20;:::i;:::-;5273:29;;5376:17;5363:31;5414:18;;5406:6;5403:30;5400:2;;;5391:1;;5436:12;5400:2;5565:6;5554:9;5550:22;;;1219:3;1212:4;1204:6;1200:17;1196:27;1186:2;;-1:-1;;1227:12;1186:2;1274:6;1261:20;1296:103;1311:87;1391:6;1311:87;:::i;1296:103::-;1405:16;1441:6;1434:5;1427:21;1471:4;;1488:3;1484:14;1477:21;;1471:4;1463:6;1459:17;1593:3;1471:4;;1577:6;1573:17;1463:6;1564:27;;1561:36;1558:2;;;-1:-1;;1600:12;1558:2;-1:-1;1626:10;;1620:229;1645:6;1642:1;1639:13;1620:229;;;1725:60;1781:3;1769:10;1725:60;:::i;:::-;1713:73;;1667:1;1660:9;;;;;1800:14;;;;1828;;1620:229;;;1624:14;5481:97;5463:16;5456:123;1471:4;5665:9;5661:18;5648:32;5634:46;;5414:18;5692:6;5689:30;5686:2;;;-1:-1;;5722:12;5686:2;5767:83;5846:3;5837:6;5826:9;5822:22;5767:83;:::i;:::-;5749:16;;;5742:109;-1:-1;;;5942:2;5927:18;;5914:32;;-1:-1;5955:30;;;5952:2;;;-1:-1;;5988:12;5952:2;;6033:74;6103:3;6094:6;6083:9;6079:22;6033:74;:::i;:::-;5942:2;6019:5;6015:16;6008:100;;5212:917;;;;:::o;6172:799::-;;6287:4;6275:9;6270:3;6266:19;6262:30;6259:2;;;-1:-1;;6295:12;6259:2;6323:20;6287:4;6323:20;:::i;:::-;6314:29;;5008:6;4995:20;5020:47;5061:5;5020:47;:::i;:::-;6405:89;;6556:2;6610:22;;;7045:20;6571:16;;;6564:75;6704:2;6772:22;;4995:20;5020:47;4995:20;5020:47;:::i;:::-;6737:63;6704:2;6723:5;6719:16;6712:89;;6867:2;6925:9;6921:22;7045:20;6867:2;6886:5;6882:16;6875:75;6253:718;;;;:::o;7256:648::-;;;;7422:2;7410:9;7401:7;7397:23;7393:32;7390:2;;;-1:-1;;7428:12;7390:2;250:6;244:13;262:41;297:5;262:41;:::i;:::-;7599:2;7649:22;;7193:13;7739:2;7724:18;;7718:25;7480:82;;-1:-1;7193:13;-1:-1;7763:18;7752:30;;7749:2;;;-1:-1;;7785:12;7749:2;7856:22;;4386:4;4374:17;;4370:27;-1:-1;4360:2;;-1:-1;;4401:12;4360:2;4441:6;4435:13;4463:64;4478:48;4519:6;4478:48;:::i;4463:64::-;4547:6;4540:5;4533:21;4651:3;7599:2;4642:6;4575;4633:16;;4630:25;4627:2;;;-1:-1;;4658:12;4627:2;4678:39;4710:6;7599:2;4609:5;4605:16;7599:2;4575:6;4571:17;4678:39;:::i;:::-;7805:83;;;;;;7384:520;;;;;:::o;7911:269::-;;8029:2;8017:9;8008:7;8004:23;8000:32;7997:2;;;-1:-1;;8035:12;7997:2;5008:6;4995:20;5020:47;5061:5;5020:47;:::i;:::-;8087:77;7991:189;-1:-1;;;7991:189::o;8187:934::-;;;;;8459:3;8447:9;8438:7;8434:23;8430:33;8427:2;;;-1:-1;;8466:12;8427:2;8528:79;8599:7;8575:22;8528:79;:::i;:::-;8518:89;;8672:3;8661:9;8657:19;8644:33;8697:18;;8689:6;8686:30;8683:2;;;-1:-1;;8719:12;8683:2;8757:94;8843:7;8834:6;8823:9;8819:22;8757:94;:::i;:::-;8739:112;;-1:-1;8739:112;-1:-1;8916:3;8901:19;;8888:33;;-1:-1;8930:30;;;8927:2;;;-1:-1;;8963:12;8927:2;;8993:112;9097:7;9088:6;9077:9;9073:22;8993:112;:::i;:::-;8983:122;;;8421:700;;;;;;;:::o;9128:1076::-;;;;;;9425:3;9413:9;9404:7;9400:23;9396:33;9393:2;;;-1:-1;;9432:12;9393:2;9494:79;9565:7;9541:22;9494:79;:::i;:::-;9484:89;;9638:3;9627:9;9623:19;9610:33;9663:18;;9655:6;9652:30;9649:2;;;-1:-1;;9685:12;9649:2;9723:94;9809:7;9800:6;9789:9;9785:22;9723:94;:::i;:::-;9705:112;;-1:-1;9705:112;-1:-1;9882:3;9867:19;;9854:33;;-1:-1;9896:30;;;9893:2;;;-1:-1;;9929:12;9893:2;;9959:112;10063:7;10054:6;10043:9;10039:22;9959:112;:::i;:::-;9949:122;;;10108:3;10160:9;10156:22;80:20;105:41;140:5;105:41;:::i;:::-;10117:71;;;;9387:817;;;;;;;;:::o;10211:574::-;;;10392:3;10380:9;10371:7;10367:23;10363:33;10360:2;;;-1:-1;;10399:12;10360:2;10461:79;10532:7;10508:22;10461:79;:::i;:::-;10451:89;;10605:3;10594:9;10590:19;10577:33;10630:18;10622:6;10619:30;10616:2;;;-1:-1;;10652:12;10616:2;10682:87;10761:7;10752:6;10741:9;10737:22;10682:87;:::i;:::-;10672:97;;;10354:431;;;;;:::o;10792:716::-;;;;10998:3;10986:9;10977:7;10973:23;10969:33;10966:2;;;-1:-1;;11005:12;10966:2;11067:79;11138:7;11114:22;11067:79;:::i;:::-;11057:89;;11211:3;11200:9;11196:19;11183:33;11236:18;11228:6;11225:30;11222:2;;;-1:-1;;11258:12;11222:2;11288:87;11367:7;11358:6;11347:9;11343:22;11288:87;:::i;:::-;11278:97;;;11412:3;11464:9;11460:22;80:20;105:41;140:5;105:41;:::i;:::-;11421:71;;;;10960:548;;;;;:::o;11515:263::-;;11630:2;11618:9;11609:7;11605:23;11601:32;11598:2;;;-1:-1;;11636:12;11598:2;-1:-1;7193:13;;11592:186;-1:-1;11592:186::o;15875:405::-;-1:-1;;;;;;23281:78;;12141:56;;22479:12;;15875:405;;12830:52;22479:12;16142:1;16133:11;;12863:4;12852:16;;12830:52;:::i;:::-;12894:16;;;;16142:1;12894:16;;16035:245;-1:-1;;;16035:245::o;16287:271::-;;12719:5;22479:12;12830:52;12875:6;12870:3;12863:4;12856:5;12852:16;12830:52;:::i;:::-;12894:16;;;;;16421:137;-1:-1;;16421:137::o;16565:222::-;-1:-1;;;;;23666:54;;;;12005:37;;16692:2;16677:18;;16663:124::o;16794:349::-;-1:-1;;;;;23666:54;;;;11864:58;;17129:2;17114:18;;15706:37;16957:2;16942:18;;16928:215::o;17150:416::-;17350:2;17364:47;;;13298:2;17335:18;;;22623:19;-1:-1;;;22663:14;;;13314:45;13378:12;;;17321:245::o;17573:416::-;17773:2;17787:47;;;13629:2;17758:18;;;22623:19;13665:25;22663:14;;;13645:46;13710:12;;;17744:245::o;17996:416::-;18196:2;18210:47;;;13961:2;18181:18;;;22623:19;13997:27;22663:14;;;13977:48;14044:12;;;18167:245::o;18419:416::-;18619:2;18633:47;;;14295:2;18604:18;;;22623:19;14331:26;22663:14;;;14311:47;14377:12;;;18590:245::o;18842:416::-;19042:2;19056:47;;;14628:2;19027:18;;;22623:19;14664:30;22663:14;;;14644:51;14714:12;;;19013:245::o;19265:523::-;;2110:18;;23677:42;;;;15031:16;15025:23;23666:54;13004:3;12997:64;15211:4;15204:5;15200:16;15194:23;15211:4;15275:3;15271:14;15706:37;23677:42;15369:4;15362:5;15358:16;15352:23;23666:54;15369:4;15447:3;15443:14;12997:64;;15542:4;15535:5;15531:16;15525:23;15542:4;15606:3;15602:14;15706:37;19490:3;19661;19650:9;19646:19;19639:49;12351:5;22479:12;22635:6;19490:3;19479:9;19475:19;22623;12444:52;12489:6;22663:14;19479:9;22663:14;15211:4;12470:5;12466:16;12444:52;:::i;:::-;25070:7;25054:14;-1:-1;;25050:28;12508:39;;;;22663:14;12508:39;;19461:327;-1:-1;;;19461:327::o;19795:222::-;15706:37;;;19922:2;19907:18;;19893:124::o;20024:460::-;15706:37;;;20379:2;20364:18;;15706:37;;;;-1:-1;;;;;23666:54;20470:2;20455:18;;11864:58;20215:2;20200:18;;20186:298::o;20491:256::-;20553:2;20547:9;20579:17;;;20654:18;20639:34;;20675:22;;;20636:62;20633:2;;;20711:1;;20701:12;20633:2;20553;20720:22;20531:216;;-1:-1;20531:216::o;20754:313::-;;20922:18;20914:6;20911:30;20908:2;;;-1:-1;;20944:12;20908:2;-1:-1;20989:4;20977:17;;;21042:15;;20845:222::o;22064:321::-;;22207:18;22199:6;22196:30;22193:2;;;-1:-1;;22229:12;22193:2;-1:-1;25070:7;22283:17;-1:-1;;22279:33;22370:4;22360:15;;22130:255::o;24630:268::-;24695:1;24702:101;24716:6;24713:1;24710:13;24702:101;;;24783:11;;;24777:18;24764:11;;;24757:39;24738:2;24731:10;24702:101;;;24818:6;24815:1;24812:13;24809:2;;;24695:1;24874:6;24869:3;24865:16;24858:27;24809:2;;24679:219;;;:::o;25091:133::-;-1:-1;;;;;23666:54;;25158:43;;25148:2;;25215:1;;25205:12;25148:2;25142:82;:::o

Swarm Source

ipfs://2f6c8d03f675f1e974e716e2d04f57028fba676551a05cac69044094c03e9e7e

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.