ETH Price: $3,390.44 (+5.56%)
Gas: 2.3 Gwei

Contract

0x3Aba3807454C4C62A48f13D4725359ba58eeA610
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

Advanced mode:
Parent Transaction Hash Block
From
To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SyncusCalculator

Compiler Version
v0.7.5+commit.eb77ed08

Optimization Enabled:
Yes with 200 runs

Other Settings:
istanbul EvmVersion
File 1 of 13 : SyncusCalculator.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;
import "./lib/ISyncusCalculator.sol";
import "./lib/FixedPoint.sol";
import "./lib/SafeMath.sol";
import "./lib/IERC20.sol";
import "./lib/IUniswapV2Pair.sol";
import "./Ownable.sol";
import "./lib/IPriceFeed.sol";

contract SyncusCalculator is Ownable, ISyncusCalculator {
    using FixedPoint for *;
    using SafeMath for uint;
    using SafeMath for uint112;

    address public immutable Sync;

    IPriceFeed public priceFeed =
        IPriceFeed(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419);

    constructor(address _Sync) {
        require(_Sync != address(0), "Sync is the zero address");
        Sync = _Sync;
    }

    function getKValue(address _pair) public view returns (uint k_) {
        uint token0Decimals = IERC20(IUniswapV2Pair(_pair).token0()).decimals();
        uint token1Decimals = IERC20(IUniswapV2Pair(_pair).token1()).decimals();
        (uint reserve0, uint reserve1, ) = IUniswapV2Pair(_pair).getReserves();
        uint sumDecimals = token0Decimals.add(token1Decimals);
        uint pairDecimals = IERC20(_pair).decimals();

        if (sumDecimals > pairDecimals) {
            uint decimals = sumDecimals.sub(pairDecimals);
            k_ = reserve0.mul(reserve1).div(10 ** decimals);
        } else if (sumDecimals == pairDecimals) {
            k_ = reserve0.mul(reserve1);
        } else {
            uint decimals = pairDecimals.sub(sumDecimals);
            k_ = reserve0.mul(reserve1).mul(10 ** decimals);
        }
    }

    function getTotalValue(address _pair) public view returns (uint _value) {
        _value = getKValue(_pair).sqrrt().mul(2);
    }

    function valuation(
        address _pair,
        uint amount_
    ) external view override returns (uint _value) {
        uint totalValue = getTotalValue(_pair);
        uint totalSupply = IUniswapV2Pair(_pair).totalSupply();

        _value = totalValue
            .mul(FixedPoint.fraction(amount_, totalSupply).decode112with18())
            .div(1e18);
    }

    function markdown(address _pair) external view override returns (uint) {
        (uint reserve0, uint reserve1, ) = IUniswapV2Pair(_pair).getReserves();

        uint reserve;
        if (IUniswapV2Pair(_pair).token0() == Sync) {
            reserve = reserve1;
        } else {
            reserve = reserve0;
        }
        return
            reserve.mul(2 * (10 ** IERC20(Sync).decimals())).div(
                getTotalValue(_pair)
            );
    }

    function valuationEther(
        uint _amount
    ) external view override returns (uint _value) {
        uint256 ethValue = priceFeed.latestAnswer();

        ethValue = ethValue.div(10 ** 8);
        _value = (_amount.div(10 ** 18).mul(ethValue)).mul(10 ** 9); 
    }
}

File 2 of 13 : ISyncusCalculator.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;

interface ISyncusCalculator {
    function valuation(
        address pair_,
        uint amount_
    ) external view returns (uint _value);

    function valuationEther(uint amount_) external view returns (uint _value);

    function markdown(address _pair) external view returns (uint);
}

File 3 of 13 : FixedPoint.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;
import "./FullMath.sol";
import "./BitMath.sol";
import "./Babylonian.sol";

library FixedPoint {
    // range: [0, 2**112 - 1]
    // resolution: 1 / 2**112
    struct uq112x112 {
        uint224 _x;
    }

    // range: [0, 2**144 - 1]
    // resolution: 1 / 2**112
    struct uq144x112 {
        uint256 _x;
    }

    uint8 private constant RESOLUTION = 112;
    uint256 private constant Q112 = 0x10000000000000000000000000000;
    uint256 private constant Q224 =
        0x100000000000000000000000000000000000000000000000000000000;
    uint256 private constant LOWER_MASK = 0xffffffffffffffffffffffffffff; // decimal of UQ*x112 (lower 112 bits)

    // decode a UQ112x112 into a uint112 by truncating after the radix point
    function decode(uq112x112 memory self) internal pure returns (uint112) {
        return uint112(self._x >> RESOLUTION);
    }

    // decode a uq112x112 into a uint with 18 decimals of precision
    function decode112with18(
        uq112x112 memory self
    ) internal pure returns (uint) {
        return uint(self._x) / 5192296858534827;
    }

    function fraction(
        uint256 numerator,
        uint256 denominator
    ) internal pure returns (uq112x112 memory) {
        require(denominator > 0, "FixedPoint::fraction: division by zero");
        if (numerator == 0) return FixedPoint.uq112x112(0);

        if (numerator <= uint144(-1)) {
            uint256 result = (numerator << RESOLUTION) / denominator;
            require(result <= uint224(-1), "FixedPoint::fraction: overflow");
            return uq112x112(uint224(result));
        } else {
            uint256 result = FullMath.mulDiv(numerator, Q112, denominator);
            require(result <= uint224(-1), "FixedPoint::fraction: overflow");
            return uq112x112(uint224(result));
        }
    }

    // square root of a UQ112x112
    // lossy between 0/1 and 40 bits
    function sqrt(
        uq112x112 memory self
    ) internal pure returns (uq112x112 memory) {
        if (self._x <= uint144(-1)) {
            return uq112x112(uint224(Babylonian.sqrt(uint256(self._x) << 112)));
        }

        uint8 safeShiftBits = 255 - BitMath.mostSignificantBit(self._x);
        safeShiftBits -= safeShiftBits % 2;
        return
            uq112x112(
                uint224(
                    Babylonian.sqrt(uint256(self._x) << safeShiftBits) <<
                        ((112 - safeShiftBits) / 2)
                )
            );
    }
}

File 4 of 13 : SafeMath.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function add32(uint32 a, uint32 b) internal pure returns (uint32) {
        uint32 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function sub32(uint32 a, uint32 b) internal pure returns (uint32) {
        return sub32(a, b, "SafeMath: subtraction overflow");
    }

    function sub32(
        uint32 a,
        uint32 b,
        string memory errorMessage
    ) internal pure returns (uint32) {
        require(b <= a, errorMessage);
        uint32 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function mul32(uint32 a, uint32 b) internal pure returns (uint32) {
        if (a == 0) {
            return 0;
        }

        uint32 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }

    function sqrrt(uint256 a) internal pure returns (uint c) {
        if (a > 3) {
            c = a;
            uint b = add(div(a, 2), 1);
            while (b < c) {
                c = b;
                b = div(add(div(a, b), b), 2);
            }
        } else if (a != 0) {
            c = 1;
        }
    }

    function percentageAmount(
        uint256 total_,
        uint8 percentage_
    ) internal pure returns (uint256 percentAmount_) {
        return div(mul(total_, percentage_), 1000);
    }

    function substractPercentage(
        uint256 total_,
        uint8 percentageToSub_
    ) internal pure returns (uint256 result_) {
        return sub(total_, div(mul(total_, percentageToSub_), 1000));
    }

    function percentageOfTotal(
        uint256 part_,
        uint256 total_
    ) internal pure returns (uint256 percent_) {
        return div(mul(part_, 100), total_);
    }

    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow, so we distribute
        return (a / 2) + (b / 2) + (((a % 2) + (b % 2)) / 2);
    }

    function quadraticPricing(
        uint256 payment_,
        uint256 multiplier_
    ) internal pure returns (uint256) {
        return sqrrt(mul(multiplier_, payment_));
    }

    function bondingCurve(
        uint256 supply_,
        uint256 multiplier_
    ) internal pure returns (uint256) {
        return mul(multiplier_, supply_);
    }
}

File 5 of 13 : IERC20.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;

interface IERC20 {
    function decimals() external view returns (uint8);

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

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

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

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

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

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

File 6 of 13 : IUniswapV2Pair.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;
import "./IUniswapV2ERC20.sol";

interface IUniswapV2Pair is IUniswapV2ERC20 {
    function token0() external pure returns (address);

    function token1() external pure returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 _reserve0,
            uint112 _reserve1,
            uint32 _blockTimestampLast
        );
}

File 7 of 13 : Ownable.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;
import "./lib/IOwnable.sol";

contract Ownable is IOwnable {
    address internal _owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

    function owner() public view override returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual override onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(
        address newOwner_
    ) public virtual override onlyOwner {
        require(
            newOwner_ != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner_);
        _owner = newOwner_;
    }
}

File 8 of 13 : IPriceFeed.sol
// SPDX-License-Identifier: AGPL-3.0-or-later

pragma solidity 0.7.5;

interface IPriceFeed {
    function latestAnswer() external view returns (uint256);
}

File 9 of 13 : FullMath.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;

library FullMath {
    function fullMul(uint256 x, uint256 y) private pure returns (uint256 l, uint256 h) {
        uint256 mm = mulmod(x, y, uint256(-1));
        l = x * y;
        h = mm - l;
        if (mm < l) h -= 1;
    }

    function fullDiv(
        uint256 l,
        uint256 h,
        uint256 d
    ) private pure returns (uint256) {
        uint256 pow2 = d & -d;
        d /= pow2;
        l /= pow2;
        l += h * ((-pow2) / pow2 + 1);
        uint256 r = 1;
        r *= 2 - d * r;
        r *= 2 - d * r;
        r *= 2 - d * r;
        r *= 2 - d * r;
        r *= 2 - d * r;
        r *= 2 - d * r;
        r *= 2 - d * r;
        r *= 2 - d * r;
        return l * r;
    }

    function mulDiv(
        uint256 x,
        uint256 y,
        uint256 d
    ) internal pure returns (uint256) {
        (uint256 l, uint256 h) = fullMul(x, y);
        uint256 mm = mulmod(x, y, d);
        if (mm > l) h -= 1;
        l -= mm;
        require(h < d, 'FullMath::mulDiv: overflow');
        return fullDiv(l, h, d);
    }
}

File 10 of 13 : BitMath.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;


library BitMath {

    function mostSignificantBit(uint256 x) internal pure returns (uint8 r) {
        require(x > 0, 'BitMath::mostSignificantBit: zero');

        if (x >= 0x100000000000000000000000000000000) {
            x >>= 128;
            r += 128;
        }
        if (x >= 0x10000000000000000) {
            x >>= 64;
            r += 64;
        }
        if (x >= 0x100000000) {
            x >>= 32;
            r += 32;
        }
        if (x >= 0x10000) {
            x >>= 16;
            r += 16;
        }
        if (x >= 0x100) {
            x >>= 8;
            r += 8;
        }
        if (x >= 0x10) {
            x >>= 4;
            r += 4;
        }
        if (x >= 0x4) {
            x >>= 2;
            r += 2;
        }
        if (x >= 0x2) r += 1;
    }
}

File 11 of 13 : Babylonian.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;


library Babylonian {

    function sqrt(uint256 x) internal pure returns (uint256) {
        if (x == 0) return 0;

        uint256 xx = x;
        uint256 r = 1;
        if (xx >= 0x100000000000000000000000000000000) {
            xx >>= 128;
            r <<= 64;
        }
        if (xx >= 0x10000000000000000) {
            xx >>= 64;
            r <<= 32;
        }
        if (xx >= 0x100000000) {
            xx >>= 32;
            r <<= 16;
        }
        if (xx >= 0x10000) {
            xx >>= 16;
            r <<= 8;
        }
        if (xx >= 0x100) {
            xx >>= 8;
            r <<= 4;
        }
        if (xx >= 0x10) {
            xx >>= 4;
            r <<= 2;
        }
        if (xx >= 0x8) {
            r <<= 1;
        }
        r = (r + x / r) >> 1;
        r = (r + x / r) >> 1;
        r = (r + x / r) >> 1;
        r = (r + x / r) >> 1;
        r = (r + x / r) >> 1;
        r = (r + x / r) >> 1;
        r = (r + x / r) >> 1; // Seven iterations should be enough
        uint256 r1 = x / r;
        return (r < r1 ? r : r1);
    }
}

File 12 of 13 : IUniswapV2ERC20.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;

interface IUniswapV2ERC20 {
    function totalSupply() external view returns (uint);
}

File 13 of 13 : IOwnable.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;

interface IOwnable {
    function owner() external view returns (address);

    function renounceOwnership() external;

    function transferOwnership(address newOwner_) external;
}

Settings
{
  "remappings": [
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
    "forge-std/=lib/forge-std/src/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/",
    "openzeppelin/=lib/openzeppelin-contracts/contracts/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs"
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "istanbul",
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_Sync","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"Sync","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"getKValue","outputs":[{"internalType":"uint256","name":"k_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"getTotalValue","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"markdown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceFeed","outputs":[{"internalType":"contract IPriceFeed","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"valuation","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"valuationEther","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"}]

60a0604052600180546001600160a01b031916735f4ec3df9cbd43714fe2740f5e3616155c5b841917905534801561003657600080fd5b506040516111b43803806111b48339818101604052602081101561005957600080fd5b5051600080546001600160a01b03191633178082556040516001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36001600160a01b0381166100ff576040805162461bcd60e51b815260206004820152601860248201527f53796e6320697320746865207a65726f20616464726573730000000000000000604482015290519081900360640190fd5b606081901b6001600160601b0319166080526001600160a01b031661107961013b6000398061032d52806103cb528061093a52506110796000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063715018a611610066578063715018a614610170578063741bef1a1461017a5780638da5cb5b1461019e578063da35e06c146101a6578063f2fde38b146101ae5761009e565b806325545c6b146100a357806332da80a3146100d25780634249719f146100f8578063490084ef14610124578063686375491461014a575b600080fd5b6100c0600480360360208110156100b957600080fd5b50356101d4565b60408051918252519081900360200190f35b6100c0600480360360208110156100e857600080fd5b50356001600160a01b031661028c565b6100c06004803603604081101561010e57600080fd5b506001600160a01b03813516906020013561046f565b6100c06004803603602081101561013a57600080fd5b50356001600160a01b0316610517565b6100c06004803603602081101561016057600080fd5b50356001600160a01b0316610853565b610178610871565b005b61018261091a565b604080516001600160a01b039092168252519081900360200190f35b610182610929565b610182610938565b610178600480360360208110156101c457600080fd5b50356001600160a01b031661095c565b600080600160009054906101000a90046001600160a01b03166001600160a01b03166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561022557600080fd5b505afa158015610239573d6000803e3d6000fd5b505050506040513d602081101561024f57600080fd5b50519050610261816305f5e100610a5b565b9050610285633b9aca0061027f838187670de0b6b3a7640000610a5b565b90610a9d565b9392505050565b6000806000836001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156102ca57600080fd5b505afa1580156102de573d6000803e3d6000fd5b505050506040513d60608110156102f457600080fd5b50805160209182015160408051630dfe168160e01b815290516001600160701b0393841696509290911693506000926001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169390891692630dfe1681926004808301939192829003018186803b15801561037557600080fd5b505afa158015610389573d6000803e3d6000fd5b505050506040513d602081101561039f57600080fd5b50516001600160a01b031614156103b75750806103ba565b50815b6104646103c686610853565b61045e7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561042257600080fd5b505afa158015610436573d6000803e3d6000fd5b505050506040513d602081101561044c57600080fd5b5051849060ff16600a0a600202610a9d565b90610a5b565b93505050505b919050565b60008061047b84610853565b90506000846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104b857600080fd5b505afa1580156104cc573d6000803e3d6000fd5b505050506040513d60208110156104e257600080fd5b5051905061050e670de0b6b3a764000061045e6105076105028886610af6565b610c6d565b8590610a9d565b95945050505050565b600080826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561055357600080fd5b505afa158015610567573d6000803e3d6000fd5b505050506040513d602081101561057d57600080fd5b50516040805163313ce56760e01b815290516001600160a01b039092169163313ce56791600480820192602092909190829003018186803b1580156105c157600080fd5b505afa1580156105d5573d6000803e3d6000fd5b505050506040513d60208110156105eb57600080fd5b50516040805163d21220a760e01b8152905160ff90921692506000916001600160a01b0386169163d21220a7916004808301926020929190829003018186803b15801561063757600080fd5b505afa15801561064b573d6000803e3d6000fd5b505050506040513d602081101561066157600080fd5b50516040805163313ce56760e01b815290516001600160a01b039092169163313ce56791600480820192602092909190829003018186803b1580156106a557600080fd5b505afa1580156106b9573d6000803e3d6000fd5b505050506040513d60208110156106cf57600080fd5b505160408051630240bc6b60e21b8152905160ff909216925060009182916001600160a01b03881691630902f1ac91600480820192606092909190829003018186803b15801561071e57600080fd5b505afa158015610732573d6000803e3d6000fd5b505050506040513d606081101561074857600080fd5b5080516020909101516001600160701b039182169350169050600061076d8585610c85565b90506000876001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156107aa57600080fd5b505afa1580156107be573d6000803e3d6000fd5b505050506040513d60208110156107d457600080fd5b505160ff1690508082111561080b5760006107ef8383610cdf565b9050610803600a82900a61045e8787610a9d565b975050610848565b808214156108245761081d8484610a9d565b9650610848565b60006108308284610cdf565b9050610844600a82900a61027f8787610a9d565b9750505b505050505050919050565b600061086b600261027f61086685610517565b610d21565b92915050565b6000546001600160a01b031633146108d0576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6001546001600160a01b031681565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b031633146109bb576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116610a005760405162461bcd60e51b8152600401808060200182810382526026815260200180610fd76026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600061028583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610d8b565b600082610aac5750600061086b565b82820282848281610ab957fe5b04146102855760405162461bcd60e51b81526004018080602001828103825260218152602001806110236021913960400191505060405180910390fd5b610afe610fc4565b60008211610b3d5760405162461bcd60e51b8152600401808060200182810382526026815260200180610ffd6026913960400191505060405180910390fd5b82610b57575060408051602081019091526000815261086b565b71ffffffffffffffffffffffffffffffffffff8311610bfe57600082607085901b81610b7f57fe5b0490506001600160e01b03811115610bde576040805162461bcd60e51b815260206004820152601e60248201527f4669786564506f696e743a3a6672616374696f6e3a206f766572666c6f770000604482015290519081900360640190fd5b6040518060200160405280826001600160e01b031681525091505061086b565b6000610c0f84600160701b85610e2d565b90506001600160e01b03811115610bde576040805162461bcd60e51b815260206004820152601e60248201527f4669786564506f696e743a3a6672616374696f6e3a206f766572666c6f770000604482015290519081900360640190fd5b516612725dd1d243ab6001600160e01b039091160490565b600082820183811015610285576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600061028583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610ecd565b60006003821115610d7d5750806000610d45610d3e836002610a5b565b6001610c85565b90505b81811015610d7757809150610d70610d69610d638584610a5b565b83610c85565b6002610a5b565b9050610d48565b5061046a565b811561046a57506001919050565b60008183610e175760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610ddc578181015183820152602001610dc4565b50505050905090810190601f168015610e095780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581610e2357fe5b0495945050505050565b6000806000610e3c8686610f27565b9150915060008480610e4a57fe5b868809905082811115610e5e576001820391505b8083039250848210610eb7576040805162461bcd60e51b815260206004820152601a60248201527f46756c6c4d6174683a3a6d756c4469763a206f766572666c6f77000000000000604482015290519081900360640190fd5b610ec2838387610f54565b979650505050505050565b60008184841115610f1f5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610ddc578181015183820152602001610dc4565b505050900390565b6000808060001984860990508385029250828103915082811015610f4c576001820391505b509250929050565b60008181038216808381610f6457fe5b049250808581610f7057fe5b049450808160000381610f7f57fe5b60028581038087028203028087028203028087028203028087028203028087028203028087028203029586029003909402930460010193909302939093010292915050565b6040805160208101909152600081529056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734669786564506f696e743a3a6672616374696f6e3a206469766973696f6e206279207a65726f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220aec67616c0e268c2aadadd8949b0e231039441607a4d0906954db9d54676666a64736f6c63430007050033000000000000000000000000a41d2f8ee4f47d3b860a149765a7df8c3287b7f0

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061009e5760003560e01c8063715018a611610066578063715018a614610170578063741bef1a1461017a5780638da5cb5b1461019e578063da35e06c146101a6578063f2fde38b146101ae5761009e565b806325545c6b146100a357806332da80a3146100d25780634249719f146100f8578063490084ef14610124578063686375491461014a575b600080fd5b6100c0600480360360208110156100b957600080fd5b50356101d4565b60408051918252519081900360200190f35b6100c0600480360360208110156100e857600080fd5b50356001600160a01b031661028c565b6100c06004803603604081101561010e57600080fd5b506001600160a01b03813516906020013561046f565b6100c06004803603602081101561013a57600080fd5b50356001600160a01b0316610517565b6100c06004803603602081101561016057600080fd5b50356001600160a01b0316610853565b610178610871565b005b61018261091a565b604080516001600160a01b039092168252519081900360200190f35b610182610929565b610182610938565b610178600480360360208110156101c457600080fd5b50356001600160a01b031661095c565b600080600160009054906101000a90046001600160a01b03166001600160a01b03166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561022557600080fd5b505afa158015610239573d6000803e3d6000fd5b505050506040513d602081101561024f57600080fd5b50519050610261816305f5e100610a5b565b9050610285633b9aca0061027f838187670de0b6b3a7640000610a5b565b90610a9d565b9392505050565b6000806000836001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156102ca57600080fd5b505afa1580156102de573d6000803e3d6000fd5b505050506040513d60608110156102f457600080fd5b50805160209182015160408051630dfe168160e01b815290516001600160701b0393841696509290911693506000926001600160a01b037f000000000000000000000000a41d2f8ee4f47d3b860a149765a7df8c3287b7f081169390891692630dfe1681926004808301939192829003018186803b15801561037557600080fd5b505afa158015610389573d6000803e3d6000fd5b505050506040513d602081101561039f57600080fd5b50516001600160a01b031614156103b75750806103ba565b50815b6104646103c686610853565b61045e7f000000000000000000000000a41d2f8ee4f47d3b860a149765a7df8c3287b7f06001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561042257600080fd5b505afa158015610436573d6000803e3d6000fd5b505050506040513d602081101561044c57600080fd5b5051849060ff16600a0a600202610a9d565b90610a5b565b93505050505b919050565b60008061047b84610853565b90506000846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104b857600080fd5b505afa1580156104cc573d6000803e3d6000fd5b505050506040513d60208110156104e257600080fd5b5051905061050e670de0b6b3a764000061045e6105076105028886610af6565b610c6d565b8590610a9d565b95945050505050565b600080826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561055357600080fd5b505afa158015610567573d6000803e3d6000fd5b505050506040513d602081101561057d57600080fd5b50516040805163313ce56760e01b815290516001600160a01b039092169163313ce56791600480820192602092909190829003018186803b1580156105c157600080fd5b505afa1580156105d5573d6000803e3d6000fd5b505050506040513d60208110156105eb57600080fd5b50516040805163d21220a760e01b8152905160ff90921692506000916001600160a01b0386169163d21220a7916004808301926020929190829003018186803b15801561063757600080fd5b505afa15801561064b573d6000803e3d6000fd5b505050506040513d602081101561066157600080fd5b50516040805163313ce56760e01b815290516001600160a01b039092169163313ce56791600480820192602092909190829003018186803b1580156106a557600080fd5b505afa1580156106b9573d6000803e3d6000fd5b505050506040513d60208110156106cf57600080fd5b505160408051630240bc6b60e21b8152905160ff909216925060009182916001600160a01b03881691630902f1ac91600480820192606092909190829003018186803b15801561071e57600080fd5b505afa158015610732573d6000803e3d6000fd5b505050506040513d606081101561074857600080fd5b5080516020909101516001600160701b039182169350169050600061076d8585610c85565b90506000876001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156107aa57600080fd5b505afa1580156107be573d6000803e3d6000fd5b505050506040513d60208110156107d457600080fd5b505160ff1690508082111561080b5760006107ef8383610cdf565b9050610803600a82900a61045e8787610a9d565b975050610848565b808214156108245761081d8484610a9d565b9650610848565b60006108308284610cdf565b9050610844600a82900a61027f8787610a9d565b9750505b505050505050919050565b600061086b600261027f61086685610517565b610d21565b92915050565b6000546001600160a01b031633146108d0576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6001546001600160a01b031681565b6000546001600160a01b031690565b7f000000000000000000000000a41d2f8ee4f47d3b860a149765a7df8c3287b7f081565b6000546001600160a01b031633146109bb576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116610a005760405162461bcd60e51b8152600401808060200182810382526026815260200180610fd76026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600061028583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610d8b565b600082610aac5750600061086b565b82820282848281610ab957fe5b04146102855760405162461bcd60e51b81526004018080602001828103825260218152602001806110236021913960400191505060405180910390fd5b610afe610fc4565b60008211610b3d5760405162461bcd60e51b8152600401808060200182810382526026815260200180610ffd6026913960400191505060405180910390fd5b82610b57575060408051602081019091526000815261086b565b71ffffffffffffffffffffffffffffffffffff8311610bfe57600082607085901b81610b7f57fe5b0490506001600160e01b03811115610bde576040805162461bcd60e51b815260206004820152601e60248201527f4669786564506f696e743a3a6672616374696f6e3a206f766572666c6f770000604482015290519081900360640190fd5b6040518060200160405280826001600160e01b031681525091505061086b565b6000610c0f84600160701b85610e2d565b90506001600160e01b03811115610bde576040805162461bcd60e51b815260206004820152601e60248201527f4669786564506f696e743a3a6672616374696f6e3a206f766572666c6f770000604482015290519081900360640190fd5b516612725dd1d243ab6001600160e01b039091160490565b600082820183811015610285576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600061028583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610ecd565b60006003821115610d7d5750806000610d45610d3e836002610a5b565b6001610c85565b90505b81811015610d7757809150610d70610d69610d638584610a5b565b83610c85565b6002610a5b565b9050610d48565b5061046a565b811561046a57506001919050565b60008183610e175760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610ddc578181015183820152602001610dc4565b50505050905090810190601f168015610e095780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581610e2357fe5b0495945050505050565b6000806000610e3c8686610f27565b9150915060008480610e4a57fe5b868809905082811115610e5e576001820391505b8083039250848210610eb7576040805162461bcd60e51b815260206004820152601a60248201527f46756c6c4d6174683a3a6d756c4469763a206f766572666c6f77000000000000604482015290519081900360640190fd5b610ec2838387610f54565b979650505050505050565b60008184841115610f1f5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610ddc578181015183820152602001610dc4565b505050900390565b6000808060001984860990508385029250828103915082811015610f4c576001820391505b509250929050565b60008181038216808381610f6457fe5b049250808581610f7057fe5b049450808160000381610f7f57fe5b60028581038087028203028087028203028087028203028087028203028087028203028087028203029586029003909402930460010193909302939093010292915050565b6040805160208101909152600081529056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734669786564506f696e743a3a6672616374696f6e3a206469766973696f6e206279207a65726f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220aec67616c0e268c2aadadd8949b0e231039441607a4d0906954db9d54676666a64736f6c63430007050033

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

000000000000000000000000a41d2f8ee4f47d3b860a149765a7df8c3287b7f0

-----Decoded View---------------
Arg [0] : _Sync (address): 0xa41d2f8Ee4F47D3B860A149765A7dF8c3287b7F0

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000a41d2f8ee4f47d3b860a149765a7df8c3287b7f0


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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.