ETH Price: $3,485.14 (+2.25%)

Contract

0x64C5cc449bD253D7fd57751c9080ACcd0216126d
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Swap Token To To...103281662020-06-24 11:20:001644 days ago1592997600IN
DeFi Saver: Exchange
0.0138 ETH0.0249446546
Swap Token To To...102980352020-06-19 19:18:441649 days ago1592594324IN
DeFi Saver: Exchange
0.0105 ETH0.0162410430
Swap Token To To...102902582020-06-18 14:33:321650 days ago1592490812IN
DeFi Saver: Exchange
0.2132 ETH0.0114368241
Swap Token To To...102901322020-06-18 14:08:131650 days ago1592489293IN
DeFi Saver: Exchange
8.7123 ETH0.0194331935
Swap Token To To...102810042020-06-17 4:04:071652 days ago1592366647IN
DeFi Saver: Exchange
0.0054 ETH0.0249782436
Swap Token To To...102789072020-06-16 20:12:231652 days ago1592338343IN
DeFi Saver: Exchange
5.2884 ETH0.0120555527
Swap Token To To...102775592020-06-16 15:19:471652 days ago1592320787IN
DeFi Saver: Exchange
0.0567 ETH0.0827391351
Swap Token To To...102775312020-06-16 15:13:471652 days ago1592320427IN
DeFi Saver: Exchange
0.0159 ETH0.0321869147
Swap Token To To...102775022020-06-16 15:08:141652 days ago1592320094IN
DeFi Saver: Exchange
0.00795 ETH0.0512977550
Swap Token To To...102774722020-06-16 15:00:371652 days ago1592319637IN
DeFi Saver: Exchange
0.0078 ETH0.0658870550
Swap Token To To...102772152020-06-16 14:04:201652 days ago1592316260IN
DeFi Saver: Exchange
0.0081 ETH0.0512615550
Swap Token To To...102769202020-06-16 12:56:481652 days ago1592312208IN
DeFi Saver: Exchange
0.00675 ETH0.0438340545
Swap Token To To...102768682020-06-16 12:46:271652 days ago1592311587IN
DeFi Saver: Exchange
0.00675 ETH0.0450174145
Swap Token To To...102763822020-06-16 10:50:211652 days ago1592304621IN
DeFi Saver: Exchange
0.0123 ETH0.0277501240
Swap Token To To...102763752020-06-16 10:49:191652 days ago1592304559IN
DeFi Saver: Exchange
0.00615 ETH0.025193840
Swap Token To To...102760812020-06-16 9:46:391652 days ago1592300799IN
DeFi Saver: Exchange
0.018 ETH0.0423802638
Swap Token To To...102760712020-06-16 9:45:201652 days ago1592300720IN
DeFi Saver: Exchange
0.01845 ETH0.0572193640
Swap Token To To...102760002020-06-16 9:28:501652 days ago1592299730IN
DeFi Saver: Exchange
0.006 ETH0.0418923240
Swap Token To To...102759802020-06-16 9:23:341652 days ago1592299414IN
DeFi Saver: Exchange
0.018 ETH0.0524449739
Swap Token To To...102759052020-06-16 9:07:411652 days ago1592298461IN
DeFi Saver: Exchange
0.036 ETH0.0617473135
Swap Token To To...102758472020-06-16 8:56:451652 days ago1592297805IN
DeFi Saver: Exchange
0.0117 ETH0.0244983935
Swap Token To To...102698332020-06-15 10:45:191653 days ago1592217919IN
DeFi Saver: Exchange
0.0075 ETH0.0562407433
Swap Token To To...102644242020-06-14 14:35:031654 days ago1592145303IN
DeFi Saver: Exchange
0.003105 ETH0.0193304717
Swap Token To To...102593152020-06-13 19:42:441655 days ago1592077364IN
DeFi Saver: Exchange
0.002265 ETH0.0067319214
Swap Token To To...102542472020-06-13 0:57:361656 days ago1592009856IN
DeFi Saver: Exchange
21.903015 ETH0.0446336218.3
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
103281662020-06-24 11:20:001644 days ago1592997600
DeFi Saver: Exchange
0.42686525 ETH
103281662020-06-24 11:20:001644 days ago1592997600
DeFi Saver: Exchange
0.41996525 ETH
103281662020-06-24 11:20:001644 days ago1592997600
DeFi Saver: Exchange
0.0069 ETH
103281662020-06-24 11:20:001644 days ago1592997600
DeFi Saver: Exchange
0.0138 ETH
102980352020-06-19 19:18:441649 days ago1592594324
DeFi Saver: Exchange
0.4478626 ETH
102980352020-06-19 19:18:441649 days ago1592594324
DeFi Saver: Exchange
0.4418626 ETH
102980352020-06-19 19:18:441649 days ago1592594324
DeFi Saver: Exchange
0.006 ETH
102980352020-06-19 19:18:441649 days ago1592594324
DeFi Saver: Exchange
0.0105 ETH
102902582020-06-18 14:33:321650 days ago1592490812
DeFi Saver: Exchange
0.0132 ETH
102902582020-06-18 14:33:321650 days ago1592490812
DeFi Saver: Exchange
0.19975 ETH
102902582020-06-18 14:33:321650 days ago1592490812
DeFi Saver: Exchange
0.00025 ETH
102901322020-06-18 14:08:131650 days ago1592489293
DeFi Saver: Exchange
0.0123 ETH
102901322020-06-18 14:08:131650 days ago1592489293
DeFi Saver: Exchange
8.689125 ETH
102901322020-06-18 14:08:131650 days ago1592489293
DeFi Saver: Exchange
0.010875 ETH
102810042020-06-17 4:04:071652 days ago1592366647
DeFi Saver: Exchange
25.84013295 ETH
102810042020-06-17 4:04:071652 days ago1592366647
DeFi Saver: Exchange
25.84013295 ETH
102810042020-06-17 4:04:071652 days ago1592366647
DeFi Saver: Exchange
0.0054 ETH
102789072020-06-16 20:12:231652 days ago1592338343
DeFi Saver: Exchange
0.0084 ETH
102789072020-06-16 20:12:231652 days ago1592338343
DeFi Saver: Exchange
5.2734 ETH
102789072020-06-16 20:12:231652 days ago1592338343
DeFi Saver: Exchange
0.0066 ETH
102775592020-06-16 15:19:471652 days ago1592320787
DeFi Saver: Exchange
147.47173298 ETH
102775592020-06-16 15:19:471652 days ago1592320787
DeFi Saver: Exchange
147.45328298 ETH
102775592020-06-16 15:19:471652 days ago1592320787
DeFi Saver: Exchange
0.01845 ETH
102775592020-06-16 15:19:471652 days ago1592320787
DeFi Saver: Exchange
0.0567 ETH
102775312020-06-16 15:13:471652 days ago1592320427
DeFi Saver: Exchange
0.11051633 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SaverExchange

Compiler Version
v0.5.7+commit.6da8b019

Optimization Enabled:
Yes with 20000 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-04-20
*/

pragma solidity ^0.5.0;


interface ERC20 {
    function totalSupply() external view returns (uint256 supply);

    function balanceOf(address _owner) external view returns (uint256 balance);

    function transfer(address _to, uint256 _value) external returns (bool success);

    function transferFrom(address _from, address _to, uint256 _value)
        external
        returns (bool success);

    function approve(address _spender, uint256 _value) external returns (bool success);

    function allowance(address _owner, address _spender) external view returns (uint256 remaining);

    function decimals() external view returns (uint256 digits);

    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}

interface ExchangeInterface {
    function swapEtherToToken(uint256 _ethAmount, address _tokenAddress, uint256 _maxAmount)
        external
        payable
        returns (uint256, uint256);

    function swapTokenToEther(address _tokenAddress, uint256 _amount, uint256 _maxAmount)
        external
        returns (uint256);

    function swapTokenToToken(address _src, address _dest, uint256 _amount)
        external
        payable
        returns (uint256);

    function getExpectedRate(address src, address dest, uint256 srcQty)
        external
        view
        returns (uint256 expectedRate);
}

contract TokenInterface {
    function allowance(address, address) public returns (uint256);

    function balanceOf(address) public returns (uint256);

    function approve(address, uint256) public;

    function transfer(address, uint256) public returns (bool);

    function transferFrom(address, address, uint256) public returns (bool);

    function deposit() public payable;

    function withdraw(uint256) public;
}

contract DSMath {
    function add(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require((z = x + y) >= x);
    }

    function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require((z = x - y) <= x);
    }

    function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require(y == 0 || (z = x * y) / y == x);
    }

    function div(uint256 x, uint256 y) internal pure returns (uint256 z) {
        return x / y;
    }

    function min(uint256 x, uint256 y) internal pure returns (uint256 z) {
        return x <= y ? x : y;
    }

    function max(uint256 x, uint256 y) internal pure returns (uint256 z) {
        return x >= y ? x : y;
    }

    function imin(int256 x, int256 y) internal pure returns (int256 z) {
        return x <= y ? x : y;
    }

    function imax(int256 x, int256 y) internal pure returns (int256 z) {
        return x >= y ? x : y;
    }

    uint256 constant WAD = 10**18;
    uint256 constant RAY = 10**27;

    function wmul(uint256 x, uint256 y) internal pure returns (uint256 z) {
        z = add(mul(x, y), WAD / 2) / WAD;
    }

    function rmul(uint256 x, uint256 y) internal pure returns (uint256 z) {
        z = add(mul(x, y), RAY / 2) / RAY;
    }

    function wdiv(uint256 x, uint256 y) internal pure returns (uint256 z) {
        z = add(mul(x, WAD), y / 2) / y;
    }

    function rdiv(uint256 x, uint256 y) internal pure returns (uint256 z) {
        z = add(mul(x, RAY), y / 2) / y;
    }

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    function rpow(uint256 x, uint256 n) internal pure returns (uint256 z) {
        z = n % 2 != 0 ? x : RAY;

        for (n /= 2; n != 0; n /= 2) {
            x = rmul(x, x);

            if (n % 2 != 0) {
                z = rmul(z, x);
            }
        }
    }
}

contract SaverExchangeConstantAddresses {
    address public constant KYBER_ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
    address public constant WETH_ADDRESS = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address payable public constant WALLET_ID = 0x322d58b9E75a6918f7e7849AEe0fF09369977e08;
    address public constant DISCOUNT_ADDRESS = 0x1b14E8D511c9A4395425314f849bD737BAF8208F;

    address public constant KYBER_WRAPPER = 0x8F337bD3b7F2b05d9A8dC8Ac518584e833424893;
    address public constant UNISWAP_WRAPPER = 0x1e30124FDE14533231216D95F7798cD0061e5cf8;
    address public constant OASIS_WRAPPER = 0x891f5A171f865031b0f3Eb9723bb8f68C901c9FE;

    
    address public constant ERC20_PROXY_0X = 0x95E6F48254609A6ee006F7D493c8e5fB97094ceF;
}

contract Discount {
    address public owner;
    mapping(address => CustomServiceFee) public serviceFees;

    uint256 constant MAX_SERVICE_FEE = 400;

    struct CustomServiceFee {
        bool active;
        uint256 amount;
    }

    constructor() public {
        owner = msg.sender;
    }

    function isCustomFeeSet(address _user) public view returns (bool) {
        return serviceFees[_user].active;
    }

    function getCustomServiceFee(address _user) public view returns (uint256) {
        return serviceFees[_user].amount;
    }

    function setServiceFee(address _user, uint256 _fee) public {
        require(msg.sender == owner, "Only owner");
        require(_fee >= MAX_SERVICE_FEE || _fee == 0);

        serviceFees[_user] = CustomServiceFee({active: true, amount: _fee});
    }

    function disableServiceFee(address _user) public {
        require(msg.sender == owner, "Only owner");

        serviceFees[_user] = CustomServiceFee({active: false, amount: 0});
    }
}

contract SaverExchange is DSMath, SaverExchangeConstantAddresses {
    uint256 public constant SERVICE_FEE = 800; 

    event Swap(
        address src,
        address dest,
        uint256 amountSold,
        uint256 amountBought,
        address wrapper
    );

    function swapTokenToToken(
        address _src,
        address _dest,
        uint256 _amount,
        uint256 _minPrice,
        uint256 _exchangeType,
        address _exchangeAddress,
        bytes memory _callData,
        uint256 _0xPrice
    ) public payable {
        
        address[3] memory orderAddresses = [_exchangeAddress, _src, _dest];

        if (orderAddresses[1] == KYBER_ETH_ADDRESS) {
            require(msg.value >= _amount, "msg.value smaller than amount");
        } else {
            require(
                ERC20(orderAddresses[1]).transferFrom(msg.sender, address(this), _amount),
                "Not able to withdraw wanted amount"
            );
        }

        uint256 fee = takeFee(_amount, orderAddresses[1]);
        _amount = sub(_amount, fee);
        
        uint256[2] memory tokens;
        address wrapper;
        uint256 price;
        bool success;

        
        tokens[1] = _amount;

        if (_exchangeType == 4) {
            if (orderAddresses[1] != KYBER_ETH_ADDRESS) {
                ERC20(orderAddresses[1]).approve(address(ERC20_PROXY_0X), _amount);
            }

            (success, tokens[0], ) = takeOrder(
                orderAddresses,
                _callData,
                address(this).balance,
                _amount
            );
            
            require(success && tokens[0] > 0, "0x transaction failed");
            wrapper = address(_exchangeAddress);
        }

        if (tokens[0] == 0) {
            (wrapper, price) = getBestPrice(
                _amount,
                orderAddresses[1],
                orderAddresses[2],
                _exchangeType
            );

            require(price > _minPrice || _0xPrice > _minPrice, "Slippage hit");

            
            if (_0xPrice >= price) {
                if (orderAddresses[1] != KYBER_ETH_ADDRESS) {
                    ERC20(orderAddresses[1]).approve(address(ERC20_PROXY_0X), _amount);
                }
                (success, tokens[0], tokens[1]) = takeOrder(
                    orderAddresses,
                    _callData,
                    address(this).balance,
                    _amount
                );
                
                if (success && tokens[0] > 0) {
                    wrapper = address(_exchangeAddress);
                    emit Swap(orderAddresses[1], orderAddresses[2], _amount, tokens[0], wrapper);
                }
            }

            if (tokens[1] > 0) {
                
                if (tokens[1] != _amount) {
                    (wrapper, price) = getBestPrice(
                        tokens[1],
                        orderAddresses[1],
                        orderAddresses[2],
                        _exchangeType
                    );
                }

                
                require(price > _minPrice, "Slippage hit onchain price");
                if (orderAddresses[1] == KYBER_ETH_ADDRESS) {
                    (tokens[0], ) = ExchangeInterface(wrapper).swapEtherToToken.value(tokens[1])(
                        tokens[1],
                        orderAddresses[2],
                        uint256(-1)
                    );
                } else {
                    ERC20(orderAddresses[1]).transfer(wrapper, tokens[1]);

                    if (orderAddresses[2] == KYBER_ETH_ADDRESS) {
                        tokens[0] = ExchangeInterface(wrapper).swapTokenToEther(
                            orderAddresses[1],
                            tokens[1],
                            uint256(-1)
                        );
                    } else {
                        tokens[0] = ExchangeInterface(wrapper).swapTokenToToken(
                            orderAddresses[1],
                            orderAddresses[2],
                            tokens[1]
                        );
                    }
                }

                emit Swap(orderAddresses[1], orderAddresses[2], _amount, tokens[0], wrapper);
            }
        }

        
        if (address(this).balance > 0) {
            msg.sender.transfer(address(this).balance);
        }

        
        if (orderAddresses[2] != KYBER_ETH_ADDRESS) {
            if (ERC20(orderAddresses[2]).balanceOf(address(this)) > 0) {
                ERC20(orderAddresses[2]).transfer(
                    msg.sender,
                    ERC20(orderAddresses[2]).balanceOf(address(this))
                );
            }
        }

        if (orderAddresses[1] != KYBER_ETH_ADDRESS) {
            if (ERC20(orderAddresses[1]).balanceOf(address(this)) > 0) {
                ERC20(orderAddresses[1]).transfer(
                    msg.sender,
                    ERC20(orderAddresses[1]).balanceOf(address(this))
                );
            }
        }
    }

    
    
    
    
    
    function takeOrder(
        address[3] memory _addresses,
        bytes memory _data,
        uint256 _value,
        uint256 _amount
    ) private returns (bool, uint256, uint256) {
        bool success;

        
        (success, ) = _addresses[0].call.value(_value)(_data);

        uint256 tokensLeft = _amount;
        uint256 tokensReturned = 0;
        if (success) {
            
            if (_addresses[1] == KYBER_ETH_ADDRESS) {
                tokensLeft = address(this).balance;
            } else {
                tokensLeft = ERC20(_addresses[1]).balanceOf(address(this));
            }

            
            if (_addresses[2] == KYBER_ETH_ADDRESS) {
                TokenInterface(WETH_ADDRESS).withdraw(
                    TokenInterface(WETH_ADDRESS).balanceOf(address(this))
                );
                tokensReturned = address(this).balance;
            } else {
                tokensReturned = ERC20(_addresses[2]).balanceOf(address(this));
            }
        }

        return (success, tokensReturned, tokensLeft);
    }

    
    
    
    
    
    function getBestPrice(
        uint256 _amount,
        address _srcToken,
        address _destToken,
        uint256 _exchangeType
    ) public returns (address, uint256) {
        uint256 expectedRateKyber;
        uint256 expectedRateUniswap;
        uint256 expectedRateOasis;

        if (_exchangeType == 1) {
            return (OASIS_WRAPPER, getExpectedRate(OASIS_WRAPPER, _srcToken, _destToken, _amount));
        }

        if (_exchangeType == 2) {
            return (KYBER_WRAPPER, getExpectedRate(KYBER_WRAPPER, _srcToken, _destToken, _amount));
        }

        if (_exchangeType == 3) {
            expectedRateUniswap = getExpectedRate(UNISWAP_WRAPPER, _srcToken, _destToken, _amount);
            expectedRateUniswap = expectedRateUniswap * (10**(18 - getDecimals(_destToken)));
            return (UNISWAP_WRAPPER, expectedRateUniswap);
        }

        expectedRateKyber = getExpectedRate(KYBER_WRAPPER, _srcToken, _destToken, _amount);
        expectedRateUniswap = getExpectedRate(UNISWAP_WRAPPER, _srcToken, _destToken, _amount);
        expectedRateUniswap = expectedRateUniswap * (10**(18 - getDecimals(_destToken)));
        expectedRateOasis = getExpectedRate(OASIS_WRAPPER, _srcToken, _destToken, _amount);
        expectedRateOasis = expectedRateOasis * (10**(18 - getDecimals(_destToken)));

        if (
            (expectedRateKyber >= expectedRateUniswap) && (expectedRateKyber >= expectedRateOasis)
        ) {
            return (KYBER_WRAPPER, expectedRateKyber);
        }

        if (
            (expectedRateOasis >= expectedRateKyber) && (expectedRateOasis >= expectedRateUniswap)
        ) {
            return (OASIS_WRAPPER, expectedRateOasis);
        }

        if (
            (expectedRateUniswap >= expectedRateKyber) && (expectedRateUniswap >= expectedRateOasis)
        ) {
            return (UNISWAP_WRAPPER, expectedRateUniswap);
        }
    }

    function getExpectedRate(
        address _wrapper,
        address _srcToken,
        address _destToken,
        uint256 _amount
    ) public returns (uint256) {
        bool success;
        bytes memory result;

        (success, result) = _wrapper.call(
            abi.encodeWithSignature(
                "getExpectedRate(address,address,uint256)",
                _srcToken,
                _destToken,
                _amount
            )
        );

        if (success) {
            return sliceUint(result, 0);
        } else {
            return 0;
        }
    }

    
    
    
    function takeFee(uint256 _amount, address _token) internal returns (uint256 feeAmount) {
        uint256 fee = SERVICE_FEE;

        if (Discount(DISCOUNT_ADDRESS).isCustomFeeSet(msg.sender)) {
            fee = Discount(DISCOUNT_ADDRESS).getCustomServiceFee(msg.sender);
        }

        if (fee == 0) {
            feeAmount = 0;
        } else {
            feeAmount = _amount / SERVICE_FEE;
            if (_token == KYBER_ETH_ADDRESS) {
                WALLET_ID.transfer(feeAmount);
            } else {
                ERC20(_token).transfer(WALLET_ID, feeAmount);
            }
        }
    }

    function getDecimals(address _token) internal view returns (uint256) {
        
        if (_token == address(0xE0B7927c4aF23765Cb51314A0E0521A9645F0E2A)) {
            return 9;
        }
        
        if (_token == address(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48)) {
            return 6;
        }
        
        if (_token == address(0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599)) {
            return 8;
        }

        return 18;
    }

    function sliceUint(bytes memory bs, uint256 start) internal pure returns (uint256) {
        require(bs.length >= start + 32, "slicing out of range");

        uint256 x;
        assembly {
            x := mload(add(bs, add(0x20, start)))
        }

        return x;
    }

    
    function() external payable {}
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"WETH_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"KYBER_ETH_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"},{"name":"_srcToken","type":"address"},{"name":"_destToken","type":"address"},{"name":"_exchangeType","type":"uint256"}],"name":"getBestPrice","outputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"SERVICE_FEE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_wrapper","type":"address"},{"name":"_srcToken","type":"address"},{"name":"_destToken","type":"address"},{"name":"_amount","type":"uint256"}],"name":"getExpectedRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_src","type":"address"},{"name":"_dest","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_minPrice","type":"uint256"},{"name":"_exchangeType","type":"uint256"},{"name":"_exchangeAddress","type":"address"},{"name":"_callData","type":"bytes"},{"name":"_0xPrice","type":"uint256"}],"name":"swapTokenToToken","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"DISCOUNT_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"KYBER_WRAPPER","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"OASIS_WRAPPER","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERC20_PROXY_0X","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"WALLET_ID","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UNISWAP_WRAPPER","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"src","type":"address"},{"indexed":false,"name":"dest","type":"address"},{"indexed":false,"name":"amountSold","type":"uint256"},{"indexed":false,"name":"amountBought","type":"uint256"},{"indexed":false,"name":"wrapper","type":"address"}],"name":"Swap","type":"event"}]

608060405234801561001057600080fd5b50611fa6806100206000396000f3fe6080604052600436106100c75760003560e01c8063a46a66c911610074578063d0cc72891161004e578063d0cc728914610347578063d3661fa51461035c578063ddaa293c14610371576100c7565b8063a46a66c914610308578063b175afa11461031d578063c917c2d314610332576100c7565b806350c86de5116100a557806350c86de5146101a25780637474ff5e146101c9578063874072611461021f576100c7565b8063040141e5146100c957806329f7fc9e146101075780632ec1f0091461011c575b005b3480156100d557600080fd5b506100de610386565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561011357600080fd5b506100de61039e565b34801561012857600080fd5b506101726004803603608081101561013f57600080fd5b5080359073ffffffffffffffffffffffffffffffffffffffff6020820135811691604081013590911690606001356103b6565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260208301919091528051918290030190f35b3480156101ae57600080fd5b506101b76105de565b60408051918252519081900360200190f35b3480156101d557600080fd5b506101b7600480360360808110156101ec57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201351690606001356105e4565b6100c7600480360361010081101561023657600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235811692602081013582169260408201359260608301359260808101359260a08201359092169181019060e0810160c082013564010000000081111561029157600080fd5b8201836020820111156102a357600080fd5b803590602001918460018302840111640100000000831117156102c557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550509135925061075a915050565b34801561031457600080fd5b506100de611716565b34801561032957600080fd5b506100de61172e565b34801561033e57600080fd5b506100de611746565b34801561035357600080fd5b506100de61175e565b34801561036857600080fd5b506100de611776565b34801561037d57600080fd5b506100de61178e565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b600080600080600085600114156104085773891f5a171f865031b0f3eb9723bb8f68c901c9fe6103fc73891f5a171f865031b0f3eb9723bb8f68c901c9fe8a8a8d6105e4565b945094505050506105d5565b856002141561044657738f337bd3b7f2b05d9a8dc8ac518584e8334248936103fc738f337bd3b7f2b05d9a8dc8ac518584e8334248938a8a8d6105e4565b85600314156104a55761046f731e30124fde14533231216d95f7798cd0061e5cf889898c6105e4565b915061047a876117a6565b731e30124fde14533231216d95f7798cd0061e5cf89550601203600a0a9190910292506105d5915050565b6104c5738f337bd3b7f2b05d9a8dc8ac518584e83342489389898c6105e4565b92506104e7731e30124fde14533231216d95f7798cd0061e5cf889898c6105e4565b91506104f2876117a6565b601203600a0a8202915061051c73891f5a171f865031b0f3eb9723bb8f68c901c9fe89898c6105e4565b9050610527876117a6565b601203600a0a0281831080159061053e5750808310155b1561056557738f337bd3b7f2b05d9a8dc8ac518584e83342489383945094505050506105d5565b8281101580156105755750818110155b1561059b5773891f5a171f865031b0f3eb9723bb8f68c901c9fe945092506105d5915050565b8282101580156105ab5750808210155b156105d15750731e30124fde14533231216d95f7798cd0061e5cf8935091506105d59050565b5050505b94509492505050565b61032081565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f809a9e55000000000000000000000000000000000000000000000000000000001781529251825160009485946060948b16939092909182918083835b602083106106c457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610687565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610726576040519150601f19603f3d011682016040523d82523d6000602084013e61072b565b606091505b509092509050811561074b5761074281600061185f565b92505050610752565b6000925050505b949350505050565b610762611f1c565b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff85811682528a811660208301819052908a16928201929092529073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561082b578634101561082657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d73672e76616c756520736d616c6c6572207468616e20616d6f756e74000000604482015290519081900360640190fd5b610929565b602080820151604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018b9052905173ffffffffffffffffffffffffffffffffffffffff909216926323b872dd926064808401938290030181600087803b1580156108a857600080fd5b505af11580156108bc573d6000803e3d6000fd5b505050506040513d60208110156108d257600080fd5b5051610929576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611f596022913960400191505060405180910390fd5b600061093c8883600160200201516118e3565b90506109488882611b69565b9750610952611f3a565b602081018990526000808060048a1415610af857602086015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610a6a57856001602002015173ffffffffffffffffffffffffffffffffffffffff1663095ea7b37395e6f48254609a6ee006f7d493c8e5fb97094cef8e6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610a3d57600080fd5b505af1158015610a51573d6000803e3d6000fd5b505050506040513d6020811015610a6757600080fd5b50505b610a77868930318f611b79565b5085529050808015610a895750835115155b610af457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f3078207472616e73616374696f6e206661696c65640000000000000000000000604482015290519081900360640190fd5b8892505b83516112c857610b168c8760015b602002015160408901518d6103b6565b90935091508a821180610b2857508a87115b610b9357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f536c697070616765206869740000000000000000000000000000000000000000604482015290519081900360640190fd5b818710610dba57602086015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610c9e57856001602002015173ffffffffffffffffffffffffffffffffffffffff1663095ea7b37395e6f48254609a6ee006f7d493c8e5fb97094cef8e6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610c7157600080fd5b505af1158015610c85573d6000803e3d6000fd5b505050506040513d6020811015610c9b57600080fd5b50505b610cab868930318f611b79565b602087015285529050808015610cc15750835115155b15610dba578892507fb39c9bc43f811e1a7ce159c5f147458fdb80266bf23c17322013316e27e086d0866001602002015187600260200201518e876000602002015187604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019550505050505060405180910390a15b6020840151156112c85760208401518c14610de6576020840151610de090876001610b06565b90935091505b8a8211610e5457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f536c69707061676520686974206f6e636861696e207072696365000000000000604482015290519081900360640190fd5b602086015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415610f6857602084015160408088015181517f43ac1dc60000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff91821660248201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60448201528251918716936343ac1dc693909260648084019382900301818588803b158015610f2d57600080fd5b505af1158015610f41573d6000803e3d6000fd5b50505050506040513d6040811015610f5857600080fd5b50518460005b60200201526111d7565b60208087015185820151604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015260248201939093529051919092169263a9059cbb92604480820193918290030181600087803b158015610fe857600080fd5b505af1158015610ffc573d6000803e3d6000fd5b505050506040513d602081101561101257600080fd5b5050604086015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156111215760208087015185820151604080517f3bba21dc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416600482015260248101929092527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60448301525191861692633bba21dc926064808401938290030181600087803b1580156110ed57600080fd5b505af1158015611101573d6000803e3d6000fd5b505050506040513d602081101561111757600080fd5b5051846000610f5e565b6020808701516040808901518784015182517f13712c9f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9485166004820152918416602483015260448201529051918616926313712c9f926064808401938290030181600087803b1580156111a857600080fd5b505af11580156111bc573d6000803e3d6000fd5b505050506040513d60208110156111d257600080fd5b505184525b7fb39c9bc43f811e1a7ce159c5f147458fdb80266bf23c17322013316e27e086d0866001602002015187600260200201518e876000602002015187604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019550505050505060405180910390a15b3031156112fe576040513390303180156108fc02916000818181858888f193505050501580156112fc573d6000803e3d6000fd5b505b604086015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146115055760408087015181517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152915160009273ffffffffffffffffffffffffffffffffffffffff909216916370a08231916024808301926020929190829003018186803b1580156113a757600080fd5b505afa1580156113bb573d6000803e3d6000fd5b505050506040513d60208110156113d157600080fd5b505111156115055760408087015181517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152915173ffffffffffffffffffffffffffffffffffffffff9091169163a9059cbb91339184916370a0823191602480820192602092909190829003018186803b15801561145557600080fd5b505afa158015611469573d6000803e3d6000fd5b505050506040513d602081101561147f57600080fd5b50516040805163ffffffff851660e01b815273ffffffffffffffffffffffffffffffffffffffff909316600484015260248301919091525160448083019260209291908290030181600087803b1580156114d857600080fd5b505af11580156114ec573d6000803e3d6000fd5b505050506040513d602081101561150257600080fd5b50505b602086015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1461170657602080870151604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009373ffffffffffffffffffffffffffffffffffffffff909316926370a082319260248082019391829003018186803b1580156115ac57600080fd5b505afa1580156115c0573d6000803e3d6000fd5b505050506040513d60208110156115d657600080fd5b5051111561170657602080870151604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff9092169263a9059cbb92339285926370a0823192602480840193829003018186803b15801561165657600080fd5b505afa15801561166a573d6000803e3d6000fd5b505050506040513d602081101561168057600080fd5b50516040805163ffffffff851660e01b815273ffffffffffffffffffffffffffffffffffffffff909316600484015260248301919091525160448083019260209291908290030181600087803b1580156116d957600080fd5b505af11580156116ed573d6000803e3d6000fd5b505050506040513d602081101561170357600080fd5b50505b5050505050505050505050505050565b731b14e8d511c9a4395425314f849bd737baf8208f81565b738f337bd3b7f2b05d9a8dc8ac518584e83342489381565b73891f5a171f865031b0f3eb9723bb8f68c901c9fe81565b7395e6f48254609a6ee006f7d493c8e5fb97094cef81565b73322d58b9e75a6918f7e7849aee0ff09369977e0881565b731e30124fde14533231216d95f7798cd0061e5cf881565b600073ffffffffffffffffffffffffffffffffffffffff821673e0b7927c4af23765cb51314a0e0521a9645f0e2a14156117e25750600961185a565b73ffffffffffffffffffffffffffffffffffffffff821673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48141561181c5750600661185a565b73ffffffffffffffffffffffffffffffffffffffff8216732260fac5e5542a773aa44fbcfedf7c193bc2c59914156118565750600861185a565b5060125b919050565b600081602001835110156118d457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f736c6963696e67206f7574206f662072616e6765000000000000000000000000604482015290519081900360640190fd5b50818101602001515b92915050565b604080517fb371deac000000000000000000000000000000000000000000000000000000008152336004820152905160009161032091731b14e8d511c9a4395425314f849bd737baf8208f9163b371deac916024808301926020929190829003018186803b15801561195457600080fd5b505afa158015611968573d6000803e3d6000fd5b505050506040513d602081101561197e57600080fd5b505115611a1e57604080517f6eeb54310000000000000000000000000000000000000000000000000000000081523360048201529051731b14e8d511c9a4395425314f849bd737baf8208f91636eeb5431916024808301926020929190829003018186803b1580156119ef57600080fd5b505afa158015611a03573d6000803e3d6000fd5b505050506040513d6020811015611a1957600080fd5b505190505b80611a2c5760009150611b62565b6103208404915073ffffffffffffffffffffffffffffffffffffffff831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611aac5760405173322d58b9e75a6918f7e7849aee0ff09369977e089083156108fc029084906000818181858888f19350505050158015611aa6573d6000803e3d6000fd5b50611b62565b604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815273322d58b9e75a6918f7e7849aee0ff09369977e08600482015260248101849052905173ffffffffffffffffffffffffffffffffffffffff85169163a9059cbb9160448083019260209291908290030181600087803b158015611b3557600080fd5b505af1158015611b49573d6000803e3d6000fd5b505050506040513d6020811015611b5f57600080fd5b50505b5092915050565b808203828111156118dd57600080fd5b60008080808781602002015173ffffffffffffffffffffffffffffffffffffffff1686886040518082805190602001908083835b60208310611bea57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611bad565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611c4c576040519150601f19603f3d011682016040523d82523d6000602084013e611c51565b606091505b5090915085905060008215611f0d5760208a015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611c9f5730319150611d3c565b6020808b0151604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff909216926370a0823192602480840193829003018186803b158015611d0d57600080fd5b505afa158015611d21573d6000803e3d6000fd5b505050506040513d6020811015611d3757600080fd5b505191505b60408a015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611e6d57604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc291632e1a7d4d9183916370a082319160248083019260209291908290030181600087803b158015611de657600080fd5b505af1158015611dfa573d6000803e3d6000fd5b505050506040513d6020811015611e1057600080fd5b50516040805163ffffffff841660e01b8152600481019290925251602480830192600092919082900301818387803b158015611e4b57600080fd5b505af1158015611e5f573d6000803e3d6000fd5b505030319250611f0d915050565b6040808b015181517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152915173ffffffffffffffffffffffffffffffffffffffff909116916370a08231916024808301926020929190829003018186803b158015611ede57600080fd5b505afa158015611ef2573d6000803e3d6000fd5b505050506040513d6020811015611f0857600080fd5b505190505b91999198509650945050505050565b60405180606001604052806003906020820280388339509192915050565b6040518060400160405280600290602082028038833950919291505056fe4e6f742061626c6520746f2077697468647261772077616e74656420616d6f756e74a165627a7a72305820fc1890355dec31c5e20f09f797962686ea85bb6f5e9a613356b2dee5598fcff30029

Deployed Bytecode

0x6080604052600436106100c75760003560e01c8063a46a66c911610074578063d0cc72891161004e578063d0cc728914610347578063d3661fa51461035c578063ddaa293c14610371576100c7565b8063a46a66c914610308578063b175afa11461031d578063c917c2d314610332576100c7565b806350c86de5116100a557806350c86de5146101a25780637474ff5e146101c9578063874072611461021f576100c7565b8063040141e5146100c957806329f7fc9e146101075780632ec1f0091461011c575b005b3480156100d557600080fd5b506100de610386565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561011357600080fd5b506100de61039e565b34801561012857600080fd5b506101726004803603608081101561013f57600080fd5b5080359073ffffffffffffffffffffffffffffffffffffffff6020820135811691604081013590911690606001356103b6565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260208301919091528051918290030190f35b3480156101ae57600080fd5b506101b76105de565b60408051918252519081900360200190f35b3480156101d557600080fd5b506101b7600480360360808110156101ec57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201351690606001356105e4565b6100c7600480360361010081101561023657600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235811692602081013582169260408201359260608301359260808101359260a08201359092169181019060e0810160c082013564010000000081111561029157600080fd5b8201836020820111156102a357600080fd5b803590602001918460018302840111640100000000831117156102c557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550509135925061075a915050565b34801561031457600080fd5b506100de611716565b34801561032957600080fd5b506100de61172e565b34801561033e57600080fd5b506100de611746565b34801561035357600080fd5b506100de61175e565b34801561036857600080fd5b506100de611776565b34801561037d57600080fd5b506100de61178e565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b600080600080600085600114156104085773891f5a171f865031b0f3eb9723bb8f68c901c9fe6103fc73891f5a171f865031b0f3eb9723bb8f68c901c9fe8a8a8d6105e4565b945094505050506105d5565b856002141561044657738f337bd3b7f2b05d9a8dc8ac518584e8334248936103fc738f337bd3b7f2b05d9a8dc8ac518584e8334248938a8a8d6105e4565b85600314156104a55761046f731e30124fde14533231216d95f7798cd0061e5cf889898c6105e4565b915061047a876117a6565b731e30124fde14533231216d95f7798cd0061e5cf89550601203600a0a9190910292506105d5915050565b6104c5738f337bd3b7f2b05d9a8dc8ac518584e83342489389898c6105e4565b92506104e7731e30124fde14533231216d95f7798cd0061e5cf889898c6105e4565b91506104f2876117a6565b601203600a0a8202915061051c73891f5a171f865031b0f3eb9723bb8f68c901c9fe89898c6105e4565b9050610527876117a6565b601203600a0a0281831080159061053e5750808310155b1561056557738f337bd3b7f2b05d9a8dc8ac518584e83342489383945094505050506105d5565b8281101580156105755750818110155b1561059b5773891f5a171f865031b0f3eb9723bb8f68c901c9fe945092506105d5915050565b8282101580156105ab5750808210155b156105d15750731e30124fde14533231216d95f7798cd0061e5cf8935091506105d59050565b5050505b94509492505050565b61032081565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f809a9e55000000000000000000000000000000000000000000000000000000001781529251825160009485946060948b16939092909182918083835b602083106106c457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610687565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610726576040519150601f19603f3d011682016040523d82523d6000602084013e61072b565b606091505b509092509050811561074b5761074281600061185f565b92505050610752565b6000925050505b949350505050565b610762611f1c565b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff85811682528a811660208301819052908a16928201929092529073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561082b578634101561082657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d73672e76616c756520736d616c6c6572207468616e20616d6f756e74000000604482015290519081900360640190fd5b610929565b602080820151604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018b9052905173ffffffffffffffffffffffffffffffffffffffff909216926323b872dd926064808401938290030181600087803b1580156108a857600080fd5b505af11580156108bc573d6000803e3d6000fd5b505050506040513d60208110156108d257600080fd5b5051610929576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611f596022913960400191505060405180910390fd5b600061093c8883600160200201516118e3565b90506109488882611b69565b9750610952611f3a565b602081018990526000808060048a1415610af857602086015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610a6a57856001602002015173ffffffffffffffffffffffffffffffffffffffff1663095ea7b37395e6f48254609a6ee006f7d493c8e5fb97094cef8e6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610a3d57600080fd5b505af1158015610a51573d6000803e3d6000fd5b505050506040513d6020811015610a6757600080fd5b50505b610a77868930318f611b79565b5085529050808015610a895750835115155b610af457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f3078207472616e73616374696f6e206661696c65640000000000000000000000604482015290519081900360640190fd5b8892505b83516112c857610b168c8760015b602002015160408901518d6103b6565b90935091508a821180610b2857508a87115b610b9357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f536c697070616765206869740000000000000000000000000000000000000000604482015290519081900360640190fd5b818710610dba57602086015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610c9e57856001602002015173ffffffffffffffffffffffffffffffffffffffff1663095ea7b37395e6f48254609a6ee006f7d493c8e5fb97094cef8e6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610c7157600080fd5b505af1158015610c85573d6000803e3d6000fd5b505050506040513d6020811015610c9b57600080fd5b50505b610cab868930318f611b79565b602087015285529050808015610cc15750835115155b15610dba578892507fb39c9bc43f811e1a7ce159c5f147458fdb80266bf23c17322013316e27e086d0866001602002015187600260200201518e876000602002015187604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019550505050505060405180910390a15b6020840151156112c85760208401518c14610de6576020840151610de090876001610b06565b90935091505b8a8211610e5457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f536c69707061676520686974206f6e636861696e207072696365000000000000604482015290519081900360640190fd5b602086015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415610f6857602084015160408088015181517f43ac1dc60000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff91821660248201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60448201528251918716936343ac1dc693909260648084019382900301818588803b158015610f2d57600080fd5b505af1158015610f41573d6000803e3d6000fd5b50505050506040513d6040811015610f5857600080fd5b50518460005b60200201526111d7565b60208087015185820151604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015260248201939093529051919092169263a9059cbb92604480820193918290030181600087803b158015610fe857600080fd5b505af1158015610ffc573d6000803e3d6000fd5b505050506040513d602081101561101257600080fd5b5050604086015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156111215760208087015185820151604080517f3bba21dc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416600482015260248101929092527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60448301525191861692633bba21dc926064808401938290030181600087803b1580156110ed57600080fd5b505af1158015611101573d6000803e3d6000fd5b505050506040513d602081101561111757600080fd5b5051846000610f5e565b6020808701516040808901518784015182517f13712c9f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9485166004820152918416602483015260448201529051918616926313712c9f926064808401938290030181600087803b1580156111a857600080fd5b505af11580156111bc573d6000803e3d6000fd5b505050506040513d60208110156111d257600080fd5b505184525b7fb39c9bc43f811e1a7ce159c5f147458fdb80266bf23c17322013316e27e086d0866001602002015187600260200201518e876000602002015187604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019550505050505060405180910390a15b3031156112fe576040513390303180156108fc02916000818181858888f193505050501580156112fc573d6000803e3d6000fd5b505b604086015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146115055760408087015181517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152915160009273ffffffffffffffffffffffffffffffffffffffff909216916370a08231916024808301926020929190829003018186803b1580156113a757600080fd5b505afa1580156113bb573d6000803e3d6000fd5b505050506040513d60208110156113d157600080fd5b505111156115055760408087015181517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152915173ffffffffffffffffffffffffffffffffffffffff9091169163a9059cbb91339184916370a0823191602480820192602092909190829003018186803b15801561145557600080fd5b505afa158015611469573d6000803e3d6000fd5b505050506040513d602081101561147f57600080fd5b50516040805163ffffffff851660e01b815273ffffffffffffffffffffffffffffffffffffffff909316600484015260248301919091525160448083019260209291908290030181600087803b1580156114d857600080fd5b505af11580156114ec573d6000803e3d6000fd5b505050506040513d602081101561150257600080fd5b50505b602086015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1461170657602080870151604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009373ffffffffffffffffffffffffffffffffffffffff909316926370a082319260248082019391829003018186803b1580156115ac57600080fd5b505afa1580156115c0573d6000803e3d6000fd5b505050506040513d60208110156115d657600080fd5b5051111561170657602080870151604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff9092169263a9059cbb92339285926370a0823192602480840193829003018186803b15801561165657600080fd5b505afa15801561166a573d6000803e3d6000fd5b505050506040513d602081101561168057600080fd5b50516040805163ffffffff851660e01b815273ffffffffffffffffffffffffffffffffffffffff909316600484015260248301919091525160448083019260209291908290030181600087803b1580156116d957600080fd5b505af11580156116ed573d6000803e3d6000fd5b505050506040513d602081101561170357600080fd5b50505b5050505050505050505050505050565b731b14e8d511c9a4395425314f849bd737baf8208f81565b738f337bd3b7f2b05d9a8dc8ac518584e83342489381565b73891f5a171f865031b0f3eb9723bb8f68c901c9fe81565b7395e6f48254609a6ee006f7d493c8e5fb97094cef81565b73322d58b9e75a6918f7e7849aee0ff09369977e0881565b731e30124fde14533231216d95f7798cd0061e5cf881565b600073ffffffffffffffffffffffffffffffffffffffff821673e0b7927c4af23765cb51314a0e0521a9645f0e2a14156117e25750600961185a565b73ffffffffffffffffffffffffffffffffffffffff821673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48141561181c5750600661185a565b73ffffffffffffffffffffffffffffffffffffffff8216732260fac5e5542a773aa44fbcfedf7c193bc2c59914156118565750600861185a565b5060125b919050565b600081602001835110156118d457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f736c6963696e67206f7574206f662072616e6765000000000000000000000000604482015290519081900360640190fd5b50818101602001515b92915050565b604080517fb371deac000000000000000000000000000000000000000000000000000000008152336004820152905160009161032091731b14e8d511c9a4395425314f849bd737baf8208f9163b371deac916024808301926020929190829003018186803b15801561195457600080fd5b505afa158015611968573d6000803e3d6000fd5b505050506040513d602081101561197e57600080fd5b505115611a1e57604080517f6eeb54310000000000000000000000000000000000000000000000000000000081523360048201529051731b14e8d511c9a4395425314f849bd737baf8208f91636eeb5431916024808301926020929190829003018186803b1580156119ef57600080fd5b505afa158015611a03573d6000803e3d6000fd5b505050506040513d6020811015611a1957600080fd5b505190505b80611a2c5760009150611b62565b6103208404915073ffffffffffffffffffffffffffffffffffffffff831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611aac5760405173322d58b9e75a6918f7e7849aee0ff09369977e089083156108fc029084906000818181858888f19350505050158015611aa6573d6000803e3d6000fd5b50611b62565b604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815273322d58b9e75a6918f7e7849aee0ff09369977e08600482015260248101849052905173ffffffffffffffffffffffffffffffffffffffff85169163a9059cbb9160448083019260209291908290030181600087803b158015611b3557600080fd5b505af1158015611b49573d6000803e3d6000fd5b505050506040513d6020811015611b5f57600080fd5b50505b5092915050565b808203828111156118dd57600080fd5b60008080808781602002015173ffffffffffffffffffffffffffffffffffffffff1686886040518082805190602001908083835b60208310611bea57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611bad565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611c4c576040519150601f19603f3d011682016040523d82523d6000602084013e611c51565b606091505b5090915085905060008215611f0d5760208a015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611c9f5730319150611d3c565b6020808b0151604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff909216926370a0823192602480840193829003018186803b158015611d0d57600080fd5b505afa158015611d21573d6000803e3d6000fd5b505050506040513d6020811015611d3757600080fd5b505191505b60408a015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611e6d57604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc291632e1a7d4d9183916370a082319160248083019260209291908290030181600087803b158015611de657600080fd5b505af1158015611dfa573d6000803e3d6000fd5b505050506040513d6020811015611e1057600080fd5b50516040805163ffffffff841660e01b8152600481019290925251602480830192600092919082900301818387803b158015611e4b57600080fd5b505af1158015611e5f573d6000803e3d6000fd5b505030319250611f0d915050565b6040808b015181517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152915173ffffffffffffffffffffffffffffffffffffffff909116916370a08231916024808301926020929190829003018186803b158015611ede57600080fd5b505afa158015611ef2573d6000803e3d6000fd5b505050506040513d6020811015611f0857600080fd5b505190505b91999198509650945050505050565b60405180606001604052806003906020820280388339509192915050565b6040518060400160405280600290602082028038833950919291505056fe4e6f742061626c6520746f2077697468647261772077616e74656420616d6f756e74a165627a7a72305820fc1890355dec31c5e20f09f797962686ea85bb6f5e9a613356b2dee5598fcff30029

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

OVERVIEW

Smart contract containing DeFi Saver Exchange logic.

Validator Index Block Amount
View All Withdrawals

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