Contract 0x1766733112408b95239aD1951925567CB1203084 12

 
Txn Hash
Method
Block
From
To
Value
0x00e95c6c7f135d8baac01363eaa09b36d1235d49507d9709011d6e39cd4c37920x60c06040120941832021-03-23 8:57:58502 days 7 hrs ago0xa507e5eb062e6b51d2cdfeab6173bd8fe1624577 IN  Create: SushiSwapSwapperV10 Ether0.14847147136
[ Download CSV Export 
View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SushiSwapSwapperV1

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2021-03-23
*/

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

// Version 11-Mar-2021

// File @boringcrypto/boring-solidity/contracts/libraries/[email protected]
// License-Identifier: MIT

/// @notice A library for performing overflow-/underflow-safe math,
/// updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math).
library BoringMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
        require((c = a + b) >= b, "BoringMath: Add Overflow");
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {
        require((c = a - b) <= a, "BoringMath: Underflow");
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
        require(b == 0 || (c = a * b) / b == a, "BoringMath: Mul Overflow");
    }
}

// File @sushiswap/core/contracts/uniswapv2/interfaces/[email protected]
// License-Identifier: GPL-3.0
interface IUniswapV2Factory {
    function getPair(address tokenA, address tokenB) external view returns (address pair);
}

// File @sushiswap/core/contracts/uniswapv2/interfaces/[email protected]
// License-Identifier: GPL-3.0
interface IUniswapV2Pair {
    function token0() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;
}

// File @boringcrypto/boring-solidity/contracts/interfaces/[email protected]
// License-Identifier: MIT
interface IERC20 {

}

// File @sushiswap/bentobox-sdk/contracts/[email protected]
// License-Identifier: MIT
interface IBentoBoxV1 {
    function deposit(
        IERC20 token_,
        address from,
        address to,
        uint256 amount,
        uint256 share
    ) external payable returns (uint256 amountOut, uint256 shareOut);

    function toAmount(
        IERC20 token,
        uint256 share,
        bool roundUp
    ) external view returns (uint256 amount);

    function toShare(
        IERC20 token,
        uint256 amount,
        bool roundUp
    ) external view returns (uint256 share);

    function transfer(
        IERC20 token,
        address from,
        address to,
        uint256 share
    ) external;

    function withdraw(
        IERC20 token_,
        address from,
        address to,
        uint256 amount,
        uint256 share
    ) external returns (uint256 amountOut, uint256 shareOut);
}

// File contracts/swappers/SushiSwapSwapper.sol
// License-Identifier: MIT
contract SushiSwapSwapperV1 {
    using BoringMath for uint256;

    // Local variables
    IBentoBoxV1 public immutable bentoBox;
    IUniswapV2Factory public immutable factory;
    bytes32 public pairCodeHash;

    constructor(
        IBentoBoxV1 bentoBox_,
        IUniswapV2Factory factory_,
        bytes32 pairCodeHash_
    ) public {
        bentoBox = bentoBox_;
        factory = factory_;
        pairCodeHash = pairCodeHash_;
    }

    // Given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset
    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) internal pure returns (uint256 amountOut) {
        uint256 amountInWithFee = amountIn.mul(997);
        uint256 numerator = amountInWithFee.mul(reserveOut);
        uint256 denominator = reserveIn.mul(1000).add(amountInWithFee);
        amountOut = numerator / denominator;
    }

    // Given an output amount of an asset and pair reserves, returns a required input amount of the other asset
    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) internal pure returns (uint256 amountIn) {
        uint256 numerator = reserveIn.mul(amountOut).mul(1000);
        uint256 denominator = reserveOut.sub(amountOut).mul(997);
        amountIn = (numerator / denominator).add(1);
    }

    // Swaps to a flexible amount, from an exact input amount
    /// @notice Withdraws 'amountFrom' of token 'from' from the BentoBox account for this swapper.
    /// Swaps it for at least 'amountToMin' of token 'to'.
    /// Transfers the swapped tokens of 'to' into the BentoBox using a plain ERC20 transfer.
    /// Returns the amount of tokens 'to' transferred to BentoBox.
    /// (The BentoBox skim function will be used by the caller to get the swapped funds).
    function swap(
        IERC20 fromToken,
        IERC20 toToken,
        address recipient,
        uint256 shareToMin,
        uint256 shareFrom
    ) public returns (uint256 extraShare, uint256 shareReturned) {
        (IERC20 token0, IERC20 token1) = fromToken < toToken ? (fromToken, toToken) : (toToken, fromToken);
        IUniswapV2Pair pair =
            IUniswapV2Pair(
                uint256(
                    keccak256(abi.encodePacked(hex"ff", factory, keccak256(abi.encodePacked(address(token0), address(token1))), pairCodeHash))
                )
            );

        (uint256 amountFrom, ) = bentoBox.withdraw(fromToken, address(this), address(pair), 0, shareFrom);

        (uint256 reserve0, uint256 reserve1, ) = pair.getReserves();
        uint256 amountTo;
        if (toToken > fromToken) {
            amountTo = getAmountOut(amountFrom, reserve0, reserve1);
            pair.swap(0, amountTo, address(bentoBox), new bytes(0));
        } else {
            amountTo = getAmountOut(amountFrom, reserve1, reserve0);
            pair.swap(amountTo, 0, address(bentoBox), new bytes(0));
        }
        (, shareReturned) = bentoBox.deposit(toToken, address(bentoBox), recipient, amountTo, 0);
        extraShare = shareReturned.sub(shareToMin);
    }

    // Swaps to an exact amount, from a flexible input amount
    /// @notice Calculates the amount of token 'from' needed to complete the swap (amountFrom),
    /// this should be less than or equal to amountFromMax.
    /// Withdraws 'amountFrom' of token 'from' from the BentoBox account for this swapper.
    /// Swaps it for exactly 'exactAmountTo' of token 'to'.
    /// Transfers the swapped tokens of 'to' into the BentoBox using a plain ERC20 transfer.
    /// Transfers allocated, but unused 'from' tokens within the BentoBox to 'refundTo' (amountFromMax - amountFrom).
    /// Returns the amount of 'from' tokens withdrawn from BentoBox (amountFrom).
    /// (The BentoBox skim function will be used by the caller to get the swapped funds).
    function swapExact(
        IERC20 fromToken,
        IERC20 toToken,
        address recipient,
        address refundTo,
        uint256 shareFromSupplied,
        uint256 shareToExact
    ) public returns (uint256 shareUsed, uint256 shareReturned) {
        IUniswapV2Pair pair;
        {
            (IERC20 token0, IERC20 token1) = fromToken < toToken ? (fromToken, toToken) : (toToken, fromToken);
            pair = IUniswapV2Pair(
                uint256(
                    keccak256(abi.encodePacked(hex"ff", factory, keccak256(abi.encodePacked(address(token0), address(token1))), pairCodeHash))
                )
            );
        }
        (uint256 reserve0, uint256 reserve1, ) = pair.getReserves();

        uint256 amountToExact = bentoBox.toAmount(toToken, shareToExact, true);

        uint256 amountFrom;
        if (toToken > fromToken) {
            amountFrom = getAmountIn(amountToExact, reserve0, reserve1);
            (, shareUsed) = bentoBox.withdraw(fromToken, address(this), address(pair), amountFrom, 0);
            pair.swap(0, amountToExact, address(bentoBox), "");
        } else {
            amountFrom = getAmountIn(amountToExact, reserve1, reserve0);
            (, shareUsed) = bentoBox.withdraw(fromToken, address(this), address(pair), amountFrom, 0);
            pair.swap(amountToExact, 0, address(bentoBox), "");
        }
        bentoBox.deposit(toToken, address(bentoBox), recipient, 0, shareToExact);
        shareReturned = shareFromSupplied.sub(shareUsed);
        if (shareReturned > 0) {
            bentoBox.transfer(fromToken, address(this), refundTo, shareReturned);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IBentoBoxV1","name":"bentoBox_","type":"address"},{"internalType":"contract IUniswapV2Factory","name":"factory_","type":"address"},{"internalType":"bytes32","name":"pairCodeHash_","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"bentoBox","outputs":[{"internalType":"contract IBentoBoxV1","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairCodeHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"fromToken","type":"address"},{"internalType":"contract IERC20","name":"toToken","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"shareToMin","type":"uint256"},{"internalType":"uint256","name":"shareFrom","type":"uint256"}],"name":"swap","outputs":[{"internalType":"uint256","name":"extraShare","type":"uint256"},{"internalType":"uint256","name":"shareReturned","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"fromToken","type":"address"},{"internalType":"contract IERC20","name":"toToken","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"address","name":"refundTo","type":"address"},{"internalType":"uint256","name":"shareFromSupplied","type":"uint256"},{"internalType":"uint256","name":"shareToExact","type":"uint256"}],"name":"swapExact","outputs":[{"internalType":"uint256","name":"shareUsed","type":"uint256"},{"internalType":"uint256","name":"shareReturned","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]

60c060405234801561001057600080fd5b506040516113593803806113598339818101604052606081101561003357600080fd5b50805160208201516040909201516001600160601b0319606092831b81166080529290911b90911660a05260005560805160601c60a05160601c61128e6100cb6000398061024652806109de5280610ac45250806103a8528061044d528061059d528061062a528061077a528061083a528061093f52806109b45280610b845280610d1f5280610e635280610f95525061128e6000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80639aab9248116100505780639aab92481461010f578063c45a015514610129578063e343fe121461013157610067565b80634622be901461006c5780636b2ace87146100de575b600080fd5b6100c5600480360360c081101561008257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135821691604082013581169160608101359091169060808101359060a00135610180565b6040805192835260208301919091528051918290030190f35b6100e66109b2565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101176109d6565b60408051918252519081900360200190f35b6100e66109dc565b6100c5600480360360a081101561014757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101358216916040820135169060608101359060800135610a00565b60008060008060008973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16106101c257898b6101c5565b8a8a5b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b8116603483015282516028818403018152604883018452805190850120600080547fff0000000000000000000000000000000000000000000000000000000000000060688601527f0000000000000000000000000000000000000000000000000000000000000000881b9093166069850152607d840191909152609d808401929092528351808403909201825260bd8301808552825192909501919091207f0902f1ac00000000000000000000000000000000000000000000000000000000909452915192965090945084935073ffffffffffffffffffffffffffffffffffffffff861692630902f1ac9260c180840193829003018186803b15801561030257600080fd5b505afa158015610316573d6000803e3d6000fd5b505050506040513d606081101561032c57600080fd5b508051602091820151604080517f5662311800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f81166004830152602482018c90526001604483015291516dffffffffffffffffffffffffffff94851697509390921694506000937f0000000000000000000000000000000000000000000000000000000000000000909116926356623118926064808201939291829003018186803b1580156103ed57600080fd5b505afa158015610401573d6000803e3d6000fd5b505050506040513d602081101561041757600080fd5b50519050600073ffffffffffffffffffffffffffffffffffffffff808e16908d16111561061b5761044982858561104c565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166397da6d308e30888560006040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001955050505050506040805180830381600087803b15801561052057600080fd5b505af1158015610534573d6000803e3d6000fd5b505050506040513d604081101561054a57600080fd5b5060200151604080517f022c0d9f0000000000000000000000000000000000000000000000000000000081526000600482018190526024820186905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116604484015260806064840152608483018290529251939a509188169263022c0d9f9260c48084019391929182900301818387803b1580156105fe57600080fd5b505af1158015610612573d6000803e3d6000fd5b505050506107f4565b61062682848661104c565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166397da6d308e30888560006040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001955050505050506040805180830381600087803b1580156106fd57600080fd5b505af1158015610711573d6000803e3d6000fd5b505050506040513d604081101561072757600080fd5b5060200151604080517f022c0d9f0000000000000000000000000000000000000000000000000000000081526004810185905260006024820181905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116604484015260806064840152608483018290529251939a509188169263022c0d9f9260c48084019391929182900301818387803b1580156107db57600080fd5b505af11580156107ef573d6000803e3d6000fd5b505050505b604080517f02b9446c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301819052908e166044830152600060648301819052608483018c9052835191936302b9446c9360a4808201949293918390030190829087803b1580156108a357600080fd5b505af11580156108b7573d6000803e3d6000fd5b505050506040513d60408110156108cd57600080fd5b506108da9050898861109a565b955085156109a257604080517ff18d03cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f811660048301523060248301528c811660448301526064820189905291517f00000000000000000000000000000000000000000000000000000000000000009092169163f18d03cc9160848082019260009290919082900301818387803b15801561098957600080fd5b505af115801561099d573d6000803e3d6000fd5b505050505b5050505050965096945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806000808773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1610610a40578789610a43565b88885b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606085811b821660208085019190915285821b8316603485015284516028818603018152604885018652805190820120600080547fff0000000000000000000000000000000000000000000000000000000000000060688801527f000000000000000000000000000000000000000000000000000000000000000090941b9094166069860152607d850152609d808501929092528451808503909201825260bd8401808652825192909101919091207f97da6d300000000000000000000000000000000000000000000000000000000090915273ffffffffffffffffffffffffffffffffffffffff8f811660c18501523060e1850152818116610101850152610121840183905261014184018c905284519698509496509490937f000000000000000000000000000000000000000000000000000000000000000016926397da6d3092610161808201939182900301818787803b158015610bc857600080fd5b505af1158015610bdc573d6000803e3d6000fd5b505050506040513d6040811015610bf257600080fd5b5051604080517f0902f1ac0000000000000000000000000000000000000000000000000000000081529051919250600091829173ffffffffffffffffffffffffffffffffffffffff861691630902f1ac91600480820192606092909190829003018186803b158015610c6357600080fd5b505afa158015610c77573d6000803e3d6000fd5b505050506040513d6060811015610c8d57600080fd5b5080516020909101516dffffffffffffffffffffffffffff9182169350169050600073ffffffffffffffffffffffffffffffffffffffff808f16908e161115610e1457610cdb848484611112565b60408051600080825260208201928390527f022c0d9f00000000000000000000000000000000000000000000000000000000835260248201818152604483018590527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8181166064860152608060848601908152855160a48701819052979850908c169663022c0d9f96949589959394909390929160c4850191908083838b5b83811015610da8578181015183820152602001610d90565b50505050905090810190601f168015610dd55780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015610df757600080fd5b505af1158015610e0b573d6000803e3d6000fd5b50505050610f4f565b610e1f848385611112565b60408051600080825260208201928390527f022c0d9f00000000000000000000000000000000000000000000000000000000835260248201848152604483018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8181166064860152608060848601908152855160a48701819052979850908c169663022c0d9f9689969394929160c4850191908083838a5b83811015610ee7578181015183820152602001610ecf565b50505050905090810190601f168015610f145780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015610f3657600080fd5b505af1158015610f4a573d6000803e3d6000fd5b505050505b604080517f02b9446c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301819052908f16604483015260648201849052600060848301819052835191936302b9446c9360a4808201949293918390030190829087803b158015610ffe57600080fd5b505af1158015611012573d6000803e3d6000fd5b505050506040513d604081101561102857600080fd5b50602001519750611039888c61109a565b9850505050505050509550959350505050565b6000806110656103e861105f8688611160565b90611160565b905060006110796103e561105f868961109a565b9050611090600182848161108957fe5b04906111e6565b9695505050505050565b8082038281111561110c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f426f72696e674d6174683a20556e646572666c6f770000000000000000000000604482015290519081900360640190fd5b92915050565b600080611121856103e5611160565b9050600061112f8285611160565b9050600061114983611143886103e8611160565b906111e6565b905080828161115457fe5b04979650505050505050565b600081158061117b5750508082028282828161117857fe5b04145b61110c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f426f72696e674d6174683a204d756c204f766572666c6f770000000000000000604482015290519081900360640190fd5b8181018181101561110c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f426f72696e674d6174683a20416464204f766572666c6f770000000000000000604482015290519081900360640190fdfea264697066735822122065190a8d773a15f7e4691be99a9b5012a69dc94a7842579953ece7491552b67c64736f6c634300060c0033000000000000000000000000f5bce5077908a1b7370b9ae04adc565ebd643966000000000000000000000000c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ace18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000f5bce5077908a1b7370b9ae04adc565ebd643966000000000000000000000000c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ace18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303

-----Decoded View---------------
Arg [0] : bentoBox_ (address): 0xf5bce5077908a1b7370b9ae04adc565ebd643966
Arg [1] : factory_ (address): 0xc0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac
Arg [2] : pairCodeHash_ (bytes32): 0xe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000f5bce5077908a1b7370b9ae04adc565ebd643966
Arg [1] : 000000000000000000000000c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac
Arg [2] : e18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303


Deployed ByteCode Sourcemap

2787:5686:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6793:1677;;;;;;;;;;;;;;;;-1:-1:-1;6793:1677:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2883:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2976:27;;;:::i;:::-;;;;;;;;;;;;;;;;2927:42;;;:::i;4719:1305::-;;;;;;;;;;;;;;;;-1:-1:-1;4719:1305:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;6793:1677::-;7009:17;7028:21;7062:19;7108:13;7123;7152:7;7140:19;;:9;:19;;;:65;;7186:7;7195:9;7140:65;;;7163:9;7174:7;7140:65;7345:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7335:61;;;;;;-1:-1:-1;7398:12:0;;7300:111;;;;;7326:7;7300:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7290:122;;;;;;;;;;7509:18;;;;;;7290:122;;-1:-1:-1;;;;;;;7345:50:0;7509:16;;;;;:18;;;;;;;;;;:16;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7509:18:0;;;;;;;;7564:46;;;;;:17;:46;;;;;;;;;;;;;7605:4;7564:46;;;;;;7468:59;;;;;-1:-1:-1;7468:59:0;;;;;-1:-1:-1;;;7564:8:0;:17;;;;;;:46;;;;;7509:18;7564:46;;;;;;:17;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7564:46:0;;-1:-1:-1;7623:18:0;7656:19;;;;;;;;7652:541;;;7705:46;7717:13;7732:8;7742;7705:11;:46::i;:::-;7692:59;;7782:8;:17;;;7800:9;7819:4;7834;7841:10;7853:1;7782:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7782:73:0;;;;7870:50;;;;;7880:1;7870:50;;;;;;;;;;;;:9;7906:8;7870:50;;;;;;;;;;;;;;;;;;;7782:73;;-1:-1:-1;7870:9:0;;;;;;:50;;;;;7880:1;;7870:50;;;;;;7880:1;7870:9;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7652:541;;;7966:46;7978:13;7993:8;8003;7966:11;:46::i;:::-;7953:59;;8043:8;:17;;;8061:9;8080:4;8095;8102:10;8114:1;8043:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8043:73:0;;;;8131:50;;;;;;;;;;;-1:-1:-1;8131:50:0;;;;;;:9;8167:8;8131:50;;;;;;;;;;;;;;;;;;;8043:73;;-1:-1:-1;8131:9:0;;;;;;:50;;;;;-1:-1:-1;;8131:50:0;;;;;;-1:-1:-1;8131:9:0;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7652:541;8203:72;;;;;;:16;:72;;;;;;;:8;:16;;:72;;;;;;;;;;;;;8259:1;8203:72;;;;;;;;;;;;;;:16;;;;:72;;;;;;;;;;;;;;;:16;:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8302:32:0;;-1:-1:-1;8302:17:0;8324:9;8302:21;:32::i;:::-;8286:48;-1:-1:-1;8349:17:0;;8345:118;;8383:68;;;;;;:17;:68;;;;;;;8420:4;8383:68;;;;;;;;;;;;;;;;;;;:8;:17;;;;;;:68;;;;;-1:-1:-1;;8383:68:0;;;;;;;;-1:-1:-1;8383:17:0;:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8345:118;6793:1677;;;;;;;;;;;;;;:::o;2883:37::-;;;:::o;2976:27::-;;;;:::o;2927:42::-;;;:::o;4719:1305::-;4893:18;4913:21;4948:13;4963;4992:7;4980:19;;:9;:19;;;:65;;5026:7;5035:9;4980:65;;;5003:9;5014:7;4980:65;5209:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5199:61;;;;;;5056:19;5262:12;;5164:111;;;;;5190:7;5164:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5154:122;;;;;;;;;;5348:72;;;;5209:50;5348:72;;;;;;;5385:4;5348:72;;;;;;;;;;;;;;;;;;;;;;;;;4947:98;;-1:-1:-1;4947:98:0;;-1:-1:-1;5154:122:0;5056:19;;5348:8;:17;;;;:72;;;;;;;;;;;5056:19;5348:17;:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5348:72:0;;5474:18;;;;;;;5348:72;;-1:-1:-1;5434:16:0;;;;5474;;;;;;:18;;;;;;;;;;;;;;;:16;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5474:18:0;;;;;;;5433:59;;;;;-1:-1:-1;5433:59:0;;-1:-1:-1;5503:16:0;5534:19;;;;;;;;5530:335;;;5581:44;5594:10;5606:8;5616;5581:12;:44::i;:::-;5682:12;;;5650:1;5682:12;;;;;;;;;;5640:55;;;;;;;;;;;;;;;5671:8;5640:9;:55;;;;;;;;;;;;;;;;;;;;;;5570;;-1:-1:-1;5640:9:0;;;;;;5650:1;;5570:55;;5671:8;;5682:12;;5640:55;;;;;;;5682:12;5640:55;;5682:12;5650:1;5640:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5530:335;;;5739:44;5752:10;5764:8;5774;5739:12;:44::i;:::-;5840:12;;;5818:1;5840:12;;;;;;;;;;5798:55;;;;;;;;;;;;;;;5829:8;5798:9;:55;;;;;;;;;;;;;;;;;;;;;;5728;;-1:-1:-1;5798:9:0;;;;;;5728:55;;5829:8;;5798:55;;;;;;5840:12;5798:55;;5840:12;5818:1;5798:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5530:335;5895:68;;;;;;:16;:68;;;;;;;:8;:16;;:68;;;;;;;;;;;;;;;;;;;5961:1;5895:68;;;;;;;;:16;;;;:68;;;;;;;;;;;;;;;:16;:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5895:68:0;;;;-1:-1:-1;5987:29:0;5895:68;6005:10;5987:17;:29::i;:::-;5974:42;;4719:1305;;;;;;;;;;;;;;;:::o;3887:348::-;4023:16;;4072:34;4101:4;4072:24;:9;4086;4072:13;:24::i;:::-;:28;;:34::i;:::-;4052:54;-1:-1:-1;4117:19:0;4139:34;4169:3;4139:25;:10;4154:9;4139:14;:25::i;:34::-;4117:56;;4195:32;4225:1;4208:11;4196:9;:23;;;;;;;4195:29;:32::i;:::-;4184:43;3887:348;-1:-1:-1;;;;;;3887:348:0:o;525:138::-;618:5;;;613:16;;;;605:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;525:138;;;;:::o;3368:398::-;3504:17;;3560;:8;3573:3;3560:12;:17::i;:::-;3534:43;-1:-1:-1;3588:17:0;3608:31;3534:43;3628:10;3608:19;:31::i;:::-;3588:51;-1:-1:-1;3650:19:0;3672:40;3696:15;3672:19;:9;3686:4;3672:13;:19::i;:::-;:23;;:40::i;:::-;3650:62;;3747:11;3735:9;:23;;;;;;;3368:398;-1:-1:-1;;;;;;;3368:398:0:o;671:155::-;729:9;759:6;;;:30;;-1:-1:-1;;774:5:0;;;788:1;783;774:5;783:1;769:15;;;;;:20;759:30;751:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;376:141;469:5;;;464:16;;;;456:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

ipfs://65190a8d773a15f7e4691be99a9b5012a69dc94a7842579953ece7491552b67c
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

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.