S Price: $0.58079 (+7.58%)

Contract

0x3E3B04e1bF170522a5c5DDE628C4d365c0342239

Overview

S Balance

Sonic LogoSonic LogoSonic Logo0 S

S Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer With Re...56830472025-01-28 14:15:3154 days ago1738073731IN
0x3E3B04e1...5c0342239
0.22011757 S0.0060691955
Update Native To...39753482025-01-15 9:35:5667 days ago1736933756IN
0x3E3B04e1...5c0342239
0 S0.0014662331.5
Update Conversio...39749952025-01-15 9:32:5867 days ago1736933578IN
0x3E3B04e1...5c0342239
0 S0.0014669531.5
Update Conversio...39749782025-01-15 9:32:5367 days ago1736933573IN
0x3E3B04e1...5c0342239
0 S0.0014655631.5

Latest 6 internal transactions

Parent Transaction Hash Block From To
56832322025-01-28 14:16:5154 days ago1738073811
0x3E3B04e1...5c0342239
0.00522304 S
56832322025-01-28 14:16:5154 days ago1738073811
0x3E3B04e1...5c0342239
0.21330726 S
56832322025-01-28 14:16:5154 days ago1738073811
0x3E3B04e1...5c0342239
0.2185303 S
56830472025-01-28 14:15:3154 days ago1738073731
0x3E3B04e1...5c0342239
0.00641119 S
56830472025-01-28 14:15:3154 days ago1738073731
0x3E3B04e1...5c0342239
0.21370638 S
39741132025-01-15 9:24:4767 days ago1736933087  Contract Creation0 S
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EthConversionProxy

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 6 : EthConversionProxy.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import './ChainlinkConversionPath.sol';
import '@openzeppelin/contracts/security/ReentrancyGuard.sol';
import './legacy_openzeppelin/contracts/access/roles/WhitelistAdminRole.sol';

/**
 * @title EthConversionProxy
 * @notice This contract converts from chainlink then swaps ETH (or native token)
 *         before paying a request thanks to a conversion payment proxy.
 *         The inheritance from ReentrancyGuard is required to perform
 *         "transferExactEthWithReferenceAndFee" on the eth-fee-proxy contract
 */
contract EthConversionProxy is ReentrancyGuard, WhitelistAdminRole {
  address public paymentProxy;
  ChainlinkConversionPath public chainlinkConversionPath;
  address public nativeTokenHash;

  constructor(
    address _paymentProxyAddress,
    address _chainlinkConversionPathAddress,
    address _nativeTokenHash,
    address _owner
  ) {
    paymentProxy = _paymentProxyAddress;
    chainlinkConversionPath = ChainlinkConversionPath(_chainlinkConversionPathAddress);
    nativeTokenHash = _nativeTokenHash;
    renounceWhitelistAdmin();
    _addWhitelistAdmin(_owner);
  }

  // Event to declare a conversion with a reference
  event TransferWithConversionAndReference(
    uint256 amount,
    address currency,
    bytes indexed paymentReference,
    uint256 feeAmount,
    uint256 maxRateTimespan
  );

  // Event to declare a transfer with a reference
  // This event is emitted by this contract from a delegate call of the payment-proxy
  event TransferWithReferenceAndFee(
    address to,
    uint256 amount,
    bytes indexed paymentReference,
    uint256 feeAmount,
    address feeAddress
  );

  /**
   * @notice Performs an ETH transfer with a reference computing the payment amount based on the request amount
   * @param _to Transfer recipient of the payement
   * @param _requestAmount Request amount
   * @param _path Conversion path
   * @param _paymentReference Reference of the payment related
   * @param _feeAmount The amount of the payment fee
   * @param _feeAddress The fee recipient
   * @param _maxRateTimespan Max time span with the oldestrate, ignored if zero
   */
  function transferWithReferenceAndFee(
    address _to,
    uint256 _requestAmount,
    address[] calldata _path,
    bytes calldata _paymentReference,
    uint256 _feeAmount,
    address _feeAddress,
    uint256 _maxRateTimespan
  ) external payable {
    require(
      _path[_path.length - 1] == nativeTokenHash,
      'payment currency must be the native token'
    );

    (uint256 amountToPay, uint256 amountToPayInFees) = getConversions(
      _path,
      _requestAmount,
      _feeAmount,
      _maxRateTimespan
    );

    // Pay the request and fees
    (bool status, ) = paymentProxy.delegatecall(
      abi.encodeWithSignature(
        'transferExactEthWithReferenceAndFee(address,uint256,bytes,uint256,address)',
        _to,
        amountToPay,
        _paymentReference,
        amountToPayInFees,
        _feeAddress
      )
    );

    require(status, 'paymentProxy transferExactEthWithReferenceAndFee failed');

    // Event to declare a transfer with a reference
    emit TransferWithConversionAndReference(
      _requestAmount,
      // request currency
      _path[0],
      _paymentReference,
      _feeAmount,
      _maxRateTimespan
    );
  }

  function getConversions(
    address[] memory _path,
    uint256 _requestAmount,
    uint256 _feeAmount,
    uint256 _maxRateTimespan
  ) internal view returns (uint256 amountToPay, uint256 amountToPayInFees) {
    (uint256 rate, uint256 oldestTimestampRate, uint256 decimals) = chainlinkConversionPath.getRate(
      _path
    );

    // Check rate timespan
    require(
      _maxRateTimespan == 0 || block.timestamp - oldestTimestampRate <= _maxRateTimespan,
      'aggregator rate is outdated'
    );

    // Get the amount to pay in the native token
    amountToPay = (_requestAmount * rate) / decimals;
    amountToPayInFees = (_feeAmount * rate) / decimals;
  }

  /**
   * @notice Update the conversion path contract used to fetch conversions
   * @param _chainlinkConversionPathAddress address of the conversion path contract
   */
  function updateConversionPathAddress(address _chainlinkConversionPathAddress)
    external
    onlyWhitelistAdmin
  {
    chainlinkConversionPath = ChainlinkConversionPath(_chainlinkConversionPathAddress);
  }

  /**
   * @notice Update the conversion proxy used to process the payment
   * @param _paymentProxyAddress address of the ETH conversion proxy
   */
  function updateConversionProxyAddress(address _paymentProxyAddress) external onlyWhitelistAdmin {
    paymentProxy = _paymentProxyAddress;
  }

  /**
   * @notice Update the native token hash
   * @param _nativeTokenHash hash of the native token represented as an eth address
   */
  function updateNativeTokenHash(address _nativeTokenHash) external onlyWhitelistAdmin {
    nativeTokenHash = _nativeTokenHash;
  }
}

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

pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

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

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

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

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

File 3 of 6 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

File 4 of 6 : ChainlinkConversionPath.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import './legacy_openzeppelin/contracts/access/roles/WhitelistAdminRole.sol';

interface ERC20fraction {
  function decimals() external view returns (uint8);
}

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

  function latestAnswer() external view returns (int256);

  function latestTimestamp() external view returns (uint256);
}

/**
 * @title ChainlinkConversionPath
 *
 * @notice ChainlinkConversionPath is a contract computing currency conversion rates based on Chainlink aggretators
 */
contract ChainlinkConversionPath is WhitelistAdminRole {
  uint256 constant PRECISION = 1e18;
  uint256 constant NATIVE_TOKEN_DECIMALS = 18;
  uint256 constant FIAT_DECIMALS = 8;
  address public nativeTokenHash;

  /**
   * @param _nativeTokenHash hash of the native token
   * @param _owner Owner of the contract.
   */
  constructor(address _nativeTokenHash, address _owner) {
    nativeTokenHash = _nativeTokenHash;
    renounceWhitelistAdmin();
    _addWhitelistAdmin(_owner);
  }

  // Mapping of Chainlink aggregators (input currency => output currency => contract address)
  // input & output currencies are the addresses of the ERC20 contracts OR the sha3("currency code")
  mapping(address => mapping(address => address)) public allAggregators;

  // declare a new aggregator
  event AggregatorUpdated(address _input, address _output, address _aggregator);

  /**
   * @notice Update an aggregator
   * @param _input address representing the input currency
   * @param _output address representing the output currency
   * @param _aggregator address of the aggregator contract
   */
  function updateAggregator(
    address _input,
    address _output,
    address _aggregator
  ) external onlyWhitelistAdmin {
    allAggregators[_input][_output] = _aggregator;
    emit AggregatorUpdated(_input, _output, _aggregator);
  }

  /**
   * @notice Update a list of aggregators
   * @param _inputs list of addresses representing the input currencies
   * @param _outputs list of addresses representing the output currencies
   * @param _aggregators list of addresses of the aggregator contracts
   */
  function updateAggregatorsList(
    address[] calldata _inputs,
    address[] calldata _outputs,
    address[] calldata _aggregators
  ) external onlyWhitelistAdmin {
    require(_inputs.length == _outputs.length, 'arrays must have the same length');
    require(_inputs.length == _aggregators.length, 'arrays must have the same length');

    // For every conversions of the path
    for (uint256 i; i < _inputs.length; i++) {
      allAggregators[_inputs[i]][_outputs[i]] = _aggregators[i];
      emit AggregatorUpdated(_inputs[i], _outputs[i], _aggregators[i]);
    }
  }

  /**
   * @notice Computes the conversion of an amount through a list of intermediate conversions
   * @param _amountIn Amount to convert
   * @param _path List of addresses representing the currencies for the intermediate conversions
   * @return result The result after all the conversions
   * @return oldestRateTimestamp The oldest timestamp of the path
   */
  function getConversion(uint256 _amountIn, address[] calldata _path)
    external
    view
    returns (uint256 result, uint256 oldestRateTimestamp)
  {
    (uint256 rate, uint256 timestamp, uint256 decimals) = getRate(_path);

    // initialize the result
    result = (_amountIn * rate) / decimals;

    oldestRateTimestamp = timestamp;
  }

  /**
   * @notice Computes the conversion rate from a list of currencies
   * @param _path List of addresses representing the currencies for the conversions
   * @return rate The rate
   * @return oldestRateTimestamp The oldest timestamp of the path
   * @return decimals of the conversion rate
   */
  function getRate(address[] memory _path)
    public
    view
    returns (
      uint256 rate,
      uint256 oldestRateTimestamp,
      uint256 decimals
    )
  {
    // initialize the result with 18 decimals (for more precision)
    rate = PRECISION;
    decimals = PRECISION;
    oldestRateTimestamp = block.timestamp;

    // For every conversion of the path
    for (uint256 i; i < _path.length - 1; i++) {
      (
        AggregatorFraction aggregator,
        bool reverseAggregator,
        uint256 decimalsInput,
        uint256 decimalsOutput
      ) = getAggregatorAndDecimals(_path[i], _path[i + 1]);

      // store the latest timestamp of the path
      uint256 currentTimestamp = aggregator.latestTimestamp();
      if (currentTimestamp < oldestRateTimestamp) {
        oldestRateTimestamp = currentTimestamp;
      }

      // get the rate of the current step
      uint256 currentRate = uint256(aggregator.latestAnswer());
      // get the number of decimals of the current rate
      uint256 decimalsAggregator = uint256(aggregator.decimals());

      // mul with the difference of decimals before the current rate computation (for more precision)
      if (decimalsAggregator > decimalsInput) {
        rate = rate * (10**(decimalsAggregator - decimalsInput));
      }
      if (decimalsAggregator < decimalsOutput) {
        rate = rate * (10**(decimalsOutput - decimalsAggregator));
      }

      // Apply the current rate (if path uses an aggregator in the reverse way, div instead of mul)
      if (reverseAggregator) {
        rate = (rate * (10**decimalsAggregator)) / currentRate;
      } else {
        rate = (rate * currentRate) / (10**decimalsAggregator);
      }

      // div with the difference of decimals AFTER the current rate computation (for more precision)
      if (decimalsAggregator < decimalsInput) {
        rate = rate / (10**(decimalsInput - decimalsAggregator));
      }
      if (decimalsAggregator > decimalsOutput) {
        rate = rate / (10**(decimalsAggregator - decimalsOutput));
      }
    }
  }

  /**
   * @notice Gets aggregators and decimals of two currencies
   * @param _input input Address
   * @param _output output Address
   * @return aggregator to get the rate between the two currencies
   * @return reverseAggregator true if the aggregator returned give the rate from _output to _input
   * @return decimalsInput decimals of _input
   * @return decimalsOutput decimals of _output
   */
  function getAggregatorAndDecimals(address _input, address _output)
    private
    view
    returns (
      AggregatorFraction aggregator,
      bool reverseAggregator,
      uint256 decimalsInput,
      uint256 decimalsOutput
    )
  {
    // Try to get the right aggregator for the conversion
    aggregator = AggregatorFraction(allAggregators[_input][_output]);
    reverseAggregator = false;

    // if no aggregator found we try to find an aggregator in the reverse way
    if (address(aggregator) == address(0x00)) {
      aggregator = AggregatorFraction(allAggregators[_output][_input]);
      reverseAggregator = true;
    }

    require(address(aggregator) != address(0x00), 'No aggregator found');

    // get the decimals for the two currencies
    decimalsInput = getDecimals(_input);
    decimalsOutput = getDecimals(_output);
  }

  /**
   * @notice Gets decimals from an address currency
   * @param _addr address to check
   * @return decimals number of decimals
   */
  function getDecimals(address _addr) private view returns (uint256 decimals) {
    // by default we assume it is fiat
    decimals = FIAT_DECIMALS;
    // if address is the hash of the ETH currency
    if (_addr == nativeTokenHash) {
      decimals = NATIVE_TOKEN_DECIMALS;
    } else if (isContract(_addr)) {
      // otherwise, we get the decimals from the erc20 directly
      decimals = ERC20fraction(_addr).decimals();
    }
  }

  /**
   * @notice Checks if an address is a contract
   * @param _addr Address to check
   * @return true if the address hosts a contract, false otherwise
   */
  function isContract(address _addr) private view returns (bool) {
    uint32 size;
    // solium-disable security/no-inline-assembly
    assembly {
      size := extcodesize(_addr)
    }
    return (size > 0);
  }

  /**
   * @notice Update the native token hash
   * @param _nativeTokenHash hash of the native token represented as an eth address
   */
  function updateNativeTokenHash(address _nativeTokenHash) external onlyWhitelistAdmin {
    nativeTokenHash = _nativeTokenHash;
  }
}

File 5 of 6 : Roles.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/**
 * @title Roles
 * @dev Library for managing addresses assigned to a Role.
 */
library Roles {
  struct Role {
    mapping(address => bool) bearer;
  }

  /**
   * @dev Give an account access to this role.
   */
  function add(Role storage role, address account) internal {
    require(!has(role, account), 'Roles: account already has role');
    role.bearer[account] = true;
  }

  /**
   * @dev Remove an account's access to this role.
   */
  function remove(Role storage role, address account) internal {
    require(has(role, account), 'Roles: account does not have role');
    role.bearer[account] = false;
  }

  /**
   * @dev Check if an account has this role.
   * @return bool
   */
  function has(Role storage role, address account) internal view returns (bool) {
    require(account != address(0), 'Roles: account is the zero address');
    return role.bearer[account];
  }
}

File 6 of 6 : WhitelistAdminRole.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import '@openzeppelin/contracts/utils/Context.sol';
import '../Roles.sol';

/**
 * @title WhitelistAdminRole
 * @dev WhitelistAdmins are responsible for assigning and removing Whitelisted accounts.
 */
abstract contract WhitelistAdminRole is Context {
  using Roles for Roles.Role;

  event WhitelistAdminAdded(address indexed account);
  event WhitelistAdminRemoved(address indexed account);

  Roles.Role private _whitelistAdmins;

  constructor() {
    _addWhitelistAdmin(_msgSender());
  }

  modifier onlyWhitelistAdmin() {
    require(
      isWhitelistAdmin(_msgSender()),
      'WhitelistAdminRole: caller does not have the WhitelistAdmin role'
    );
    _;
  }

  function isWhitelistAdmin(address account) public view returns (bool) {
    return _whitelistAdmins.has(account);
  }

  function addWhitelistAdmin(address account) public onlyWhitelistAdmin {
    _addWhitelistAdmin(account);
  }

  function renounceWhitelistAdmin() public {
    _removeWhitelistAdmin(_msgSender());
  }

  function _addWhitelistAdmin(address account) internal {
    _whitelistAdmins.add(account);
    emit WhitelistAdminAdded(account);
  }

  function _removeWhitelistAdmin(address account) internal {
    _whitelistAdmins.remove(account);
    emit WhitelistAdminRemoved(account);
  }
}

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

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_paymentProxyAddress","type":"address"},{"internalType":"address","name":"_chainlinkConversionPathAddress","type":"address"},{"internalType":"address","name":"_nativeTokenHash","type":"address"},{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"currency","type":"address"},{"indexed":true,"internalType":"bytes","name":"paymentReference","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"feeAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxRateTimespan","type":"uint256"}],"name":"TransferWithConversionAndReference","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"bytes","name":"paymentReference","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"feeAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"feeAddress","type":"address"}],"name":"TransferWithReferenceAndFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"WhitelistAdminAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"WhitelistAdminRemoved","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addWhitelistAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"chainlinkConversionPath","outputs":[{"internalType":"contract ChainlinkConversionPath","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isWhitelistAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nativeTokenHash","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paymentProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceWhitelistAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_requestAmount","type":"uint256"},{"internalType":"address[]","name":"_path","type":"address[]"},{"internalType":"bytes","name":"_paymentReference","type":"bytes"},{"internalType":"uint256","name":"_feeAmount","type":"uint256"},{"internalType":"address","name":"_feeAddress","type":"address"},{"internalType":"uint256","name":"_maxRateTimespan","type":"uint256"}],"name":"transferWithReferenceAndFee","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_chainlinkConversionPathAddress","type":"address"}],"name":"updateConversionPathAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_paymentProxyAddress","type":"address"}],"name":"updateConversionProxyAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_nativeTokenHash","type":"address"}],"name":"updateNativeTokenHash","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162001ec038038062001ec08339818101604052810190620000379190620004d3565b60016000819055506200005f620000536200014d60201b60201c565b6200015560201b60201c565b83600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000132620001b660201b60201c565b62000143816200015560201b60201c565b50505050620006f8565b600033905090565b62000170816001620001d860201b620007e91790919060201c565b8073ffffffffffffffffffffffffffffffffffffffff167f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129960405160405180910390a250565b620001d6620001ca6200014d60201b60201c565b6200028b60201b60201c565b565b620001ea8282620002ec60201b60201c565b156200022d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200022490620005a6565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b620002a6816001620003b760201b620008911790919060201c565b8073ffffffffffffffffffffffffffffffffffffffff167f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16560405160405180910390a250565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000357906200063e565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b620003c98282620002ec60201b60201c565b6200040b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200040290620006d6565b60405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200049b826200046e565b9050919050565b620004ad816200048e565b8114620004b957600080fd5b50565b600081519050620004cd81620004a2565b92915050565b60008060008060808587031215620004f057620004ef62000469565b5b60006200050087828801620004bc565b94505060206200051387828801620004bc565b93505060406200052687828801620004bc565b92505060606200053987828801620004bc565b91505092959194509250565b600082825260208201905092915050565b7f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500600082015250565b60006200058e601f8362000545565b91506200059b8262000556565b602082019050919050565b60006020820190508181036000830152620005c1816200057f565b9050919050565b7f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006200062660228362000545565b91506200063382620005c8565b604082019050919050565b60006020820190508181036000830152620006598162000617565b9050919050565b7f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b6000620006be60218362000545565b9150620006cb8262000660565b604082019050919050565b60006020820190508181036000830152620006f181620006af565b9050919050565b6117b880620007086000396000f3fe6080604052600436106100915760003560e01c8063946647f111610059578063946647f114610153578063ac473c8a1461017e578063bb5f747b1461019a578063c0e6822f146101d7578063d515bb031461020057610091565b80633cd3efef146100965780634c5a628c146100c15780635536bcde146100d85780637362d9c8146101015780637a38d1cb1461012a575b600080fd5b3480156100a257600080fd5b506100ab61022b565b6040516100b89190610c4d565b60405180910390f35b3480156100cd57600080fd5b506100d6610251565b005b3480156100e457600080fd5b506100ff60048036038101906100fa9190610c9e565b610263565b005b34801561010d57600080fd5b5061012860048036038101906101239190610c9e565b6102f6565b005b34801561013657600080fd5b50610151600480360381019061014c9190610c9e565b610351565b005b34801561015f57600080fd5b506101686103e4565b6040516101759190610d2a565b60405180910390f35b61019860048036038101906101939190610e36565b61040a565b005b3480156101a657600080fd5b506101c160048036038101906101bc9190610c9e565b610713565b6040516101ce9190610f33565b60405180910390f35b3480156101e357600080fd5b506101fe60048036038101906101f99190610c9e565b610730565b005b34801561020c57600080fd5b506102156107c3565b6040516102229190610c4d565b60405180910390f35b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61026161025c610938565b610940565b565b61027361026e610938565b610713565b6102b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102a990610fd1565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610306610301610938565b610713565b610345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033c90610fd1565b60405180910390fd5b61034e8161099a565b50565b61036161035c610938565b610713565b6103a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039790610fd1565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16878760018a8a90506104559190611020565b81811061046557610464611054565b5b905060200201602081019061047a9190610c9e565b73ffffffffffffffffffffffffffffffffffffffff16146104d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104c7906110f5565b60405180910390fd5b600080610520898980806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508b87866109f4565b915091506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168c848a8a868a60405160240161057a96959493929190611182565b6040516020818303038152906040527fd7c95e98000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516106049190611258565b600060405180830381855af49150503d806000811461063f576040519150601f19603f3d011682016040523d82523d6000602084013e610644565b606091505b5050905080610688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067f906112e1565b60405180910390fd5b8787604051610698929190611326565b60405180910390207f96d0d1d75923f40b50f6fe74613b2c23239149607848fbca3941fee7ac041cdc8c8c8c60008181106106d6576106d5611054565b5b90506020020160208101906106eb9190610c9e565b89886040516106fd949392919061133f565b60405180910390a2505050505050505050505050565b6000610729826001610b4490919063ffffffff16565b9050919050565b61074061073b610938565b610713565b61077f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077690610fd1565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6107f38282610b44565b15610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082a906113d0565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61089b8282610b44565b6108da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d190611462565b60405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600033905090565b61095481600161089190919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16560405160405180910390a250565b6109ae8160016107e990919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129960405160405180910390a250565b6000806000806000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166397edd4fa8a6040518263ffffffff1660e01b8152600401610a579190611540565b60606040518083038186803b158015610a6f57600080fd5b505afa158015610a83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa79190611577565b9250925092506000861480610ac75750858242610ac49190611020565b11155b610b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afd90611616565b60405180910390fd5b808389610b139190611636565b610b1d91906116bf565b9450808388610b2c9190611636565b610b3691906116bf565b935050505094509492505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bac90611762565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610c3782610c0c565b9050919050565b610c4781610c2c565b82525050565b6000602082019050610c626000830184610c3e565b92915050565b600080fd5b600080fd5b610c7b81610c2c565b8114610c8657600080fd5b50565b600081359050610c9881610c72565b92915050565b600060208284031215610cb457610cb3610c68565b5b6000610cc284828501610c89565b91505092915050565b6000819050919050565b6000610cf0610ceb610ce684610c0c565b610ccb565b610c0c565b9050919050565b6000610d0282610cd5565b9050919050565b6000610d1482610cf7565b9050919050565b610d2481610d09565b82525050565b6000602082019050610d3f6000830184610d1b565b92915050565b6000819050919050565b610d5881610d45565b8114610d6357600080fd5b50565b600081359050610d7581610d4f565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610da057610d9f610d7b565b5b8235905067ffffffffffffffff811115610dbd57610dbc610d80565b5b602083019150836020820283011115610dd957610dd8610d85565b5b9250929050565b60008083601f840112610df657610df5610d7b565b5b8235905067ffffffffffffffff811115610e1357610e12610d80565b5b602083019150836001820283011115610e2f57610e2e610d85565b5b9250929050565b600080600080600080600080600060e08a8c031215610e5857610e57610c68565b5b6000610e668c828d01610c89565b9950506020610e778c828d01610d66565b98505060408a013567ffffffffffffffff811115610e9857610e97610c6d565b5b610ea48c828d01610d8a565b975097505060608a013567ffffffffffffffff811115610ec757610ec6610c6d565b5b610ed38c828d01610de0565b95509550506080610ee68c828d01610d66565b93505060a0610ef78c828d01610c89565b92505060c0610f088c828d01610d66565b9150509295985092959850929598565b60008115159050919050565b610f2d81610f18565b82525050565b6000602082019050610f486000830184610f24565b92915050565b600082825260208201905092915050565b7f57686974656c69737441646d696e526f6c653a2063616c6c657220646f65732060008201527f6e6f742068617665207468652057686974656c69737441646d696e20726f6c65602082015250565b6000610fbb604083610f4e565b9150610fc682610f5f565b604082019050919050565b60006020820190508181036000830152610fea81610fae565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061102b82610d45565b915061103683610d45565b92508282101561104957611048610ff1565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f7061796d656e742063757272656e6379206d75737420626520746865206e617460008201527f69766520746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006110df602983610f4e565b91506110ea82611083565b604082019050919050565b6000602082019050818103600083015261110e816110d2565b9050919050565b61111e81610d45565b82525050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006111618385611124565b935061116e838584611135565b61117783611144565b840190509392505050565b600060a0820190506111976000830189610c3e565b6111a46020830188611115565b81810360408301526111b7818688611155565b90506111c66060830185611115565b6111d36080830184610c3e565b979650505050505050565b600081519050919050565b600081905092915050565b60005b838110156112125780820151818401526020810190506111f7565b83811115611221576000848401525b50505050565b6000611232826111de565b61123c81856111e9565b935061124c8185602086016111f4565b80840191505092915050565b60006112648284611227565b915081905092915050565b7f7061796d656e7450726f7879207472616e73666572457861637445746857697460008201527f685265666572656e6365416e64466565206661696c6564000000000000000000602082015250565b60006112cb603783610f4e565b91506112d68261126f565b604082019050919050565b600060208201905081810360008301526112fa816112be565b9050919050565b600061130d83856111e9565b935061131a838584611135565b82840190509392505050565b6000611333828486611301565b91508190509392505050565b60006080820190506113546000830187611115565b6113616020830186610c3e565b61136e6040830185611115565b61137b6060830184611115565b95945050505050565b7f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500600082015250565b60006113ba601f83610f4e565b91506113c582611384565b602082019050919050565b600060208201905081810360008301526113e9816113ad565b9050919050565b7f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b600061144c602183610f4e565b9150611457826113f0565b604082019050919050565b6000602082019050818103600083015261147b8161143f565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6114b781610c2c565b82525050565b60006114c983836114ae565b60208301905092915050565b6000602082019050919050565b60006114ed82611482565b6114f7818561148d565b93506115028361149e565b8060005b8381101561153357815161151a88826114bd565b9750611525836114d5565b925050600181019050611506565b5085935050505092915050565b6000602082019050818103600083015261155a81846114e2565b905092915050565b60008151905061157181610d4f565b92915050565b6000806000606084860312156115905761158f610c68565b5b600061159e86828701611562565b93505060206115af86828701611562565b92505060406115c086828701611562565b9150509250925092565b7f61676772656761746f722072617465206973206f757464617465640000000000600082015250565b6000611600601b83610f4e565b915061160b826115ca565b602082019050919050565b6000602082019050818103600083015261162f816115f3565b9050919050565b600061164182610d45565b915061164c83610d45565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561168557611684610ff1565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006116ca82610d45565b91506116d583610d45565b9250826116e5576116e4611690565b5b828204905092915050565b7f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061174c602283610f4e565b9150611757826116f0565b604082019050919050565b6000602082019050818103600083015261177b8161173f565b905091905056fea264697066735822122093cd2aa90463e90c53046e6969f25b4b00bbbf5b3ac36e277f997a9d76887af964736f6c6343000809003300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063d2062aacf71e26dea7111ec556558fe8199384

Deployed Bytecode

0x6080604052600436106100915760003560e01c8063946647f111610059578063946647f114610153578063ac473c8a1461017e578063bb5f747b1461019a578063c0e6822f146101d7578063d515bb031461020057610091565b80633cd3efef146100965780634c5a628c146100c15780635536bcde146100d85780637362d9c8146101015780637a38d1cb1461012a575b600080fd5b3480156100a257600080fd5b506100ab61022b565b6040516100b89190610c4d565b60405180910390f35b3480156100cd57600080fd5b506100d6610251565b005b3480156100e457600080fd5b506100ff60048036038101906100fa9190610c9e565b610263565b005b34801561010d57600080fd5b5061012860048036038101906101239190610c9e565b6102f6565b005b34801561013657600080fd5b50610151600480360381019061014c9190610c9e565b610351565b005b34801561015f57600080fd5b506101686103e4565b6040516101759190610d2a565b60405180910390f35b61019860048036038101906101939190610e36565b61040a565b005b3480156101a657600080fd5b506101c160048036038101906101bc9190610c9e565b610713565b6040516101ce9190610f33565b60405180910390f35b3480156101e357600080fd5b506101fe60048036038101906101f99190610c9e565b610730565b005b34801561020c57600080fd5b506102156107c3565b6040516102229190610c4d565b60405180910390f35b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61026161025c610938565b610940565b565b61027361026e610938565b610713565b6102b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102a990610fd1565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610306610301610938565b610713565b610345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033c90610fd1565b60405180910390fd5b61034e8161099a565b50565b61036161035c610938565b610713565b6103a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039790610fd1565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16878760018a8a90506104559190611020565b81811061046557610464611054565b5b905060200201602081019061047a9190610c9e565b73ffffffffffffffffffffffffffffffffffffffff16146104d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104c7906110f5565b60405180910390fd5b600080610520898980806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508b87866109f4565b915091506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168c848a8a868a60405160240161057a96959493929190611182565b6040516020818303038152906040527fd7c95e98000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516106049190611258565b600060405180830381855af49150503d806000811461063f576040519150601f19603f3d011682016040523d82523d6000602084013e610644565b606091505b5050905080610688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067f906112e1565b60405180910390fd5b8787604051610698929190611326565b60405180910390207f96d0d1d75923f40b50f6fe74613b2c23239149607848fbca3941fee7ac041cdc8c8c8c60008181106106d6576106d5611054565b5b90506020020160208101906106eb9190610c9e565b89886040516106fd949392919061133f565b60405180910390a2505050505050505050505050565b6000610729826001610b4490919063ffffffff16565b9050919050565b61074061073b610938565b610713565b61077f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077690610fd1565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6107f38282610b44565b15610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082a906113d0565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61089b8282610b44565b6108da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d190611462565b60405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600033905090565b61095481600161089190919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16560405160405180910390a250565b6109ae8160016107e990919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129960405160405180910390a250565b6000806000806000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166397edd4fa8a6040518263ffffffff1660e01b8152600401610a579190611540565b60606040518083038186803b158015610a6f57600080fd5b505afa158015610a83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa79190611577565b9250925092506000861480610ac75750858242610ac49190611020565b11155b610b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afd90611616565b60405180910390fd5b808389610b139190611636565b610b1d91906116bf565b9450808388610b2c9190611636565b610b3691906116bf565b935050505094509492505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bac90611762565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610c3782610c0c565b9050919050565b610c4781610c2c565b82525050565b6000602082019050610c626000830184610c3e565b92915050565b600080fd5b600080fd5b610c7b81610c2c565b8114610c8657600080fd5b50565b600081359050610c9881610c72565b92915050565b600060208284031215610cb457610cb3610c68565b5b6000610cc284828501610c89565b91505092915050565b6000819050919050565b6000610cf0610ceb610ce684610c0c565b610ccb565b610c0c565b9050919050565b6000610d0282610cd5565b9050919050565b6000610d1482610cf7565b9050919050565b610d2481610d09565b82525050565b6000602082019050610d3f6000830184610d1b565b92915050565b6000819050919050565b610d5881610d45565b8114610d6357600080fd5b50565b600081359050610d7581610d4f565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610da057610d9f610d7b565b5b8235905067ffffffffffffffff811115610dbd57610dbc610d80565b5b602083019150836020820283011115610dd957610dd8610d85565b5b9250929050565b60008083601f840112610df657610df5610d7b565b5b8235905067ffffffffffffffff811115610e1357610e12610d80565b5b602083019150836001820283011115610e2f57610e2e610d85565b5b9250929050565b600080600080600080600080600060e08a8c031215610e5857610e57610c68565b5b6000610e668c828d01610c89565b9950506020610e778c828d01610d66565b98505060408a013567ffffffffffffffff811115610e9857610e97610c6d565b5b610ea48c828d01610d8a565b975097505060608a013567ffffffffffffffff811115610ec757610ec6610c6d565b5b610ed38c828d01610de0565b95509550506080610ee68c828d01610d66565b93505060a0610ef78c828d01610c89565b92505060c0610f088c828d01610d66565b9150509295985092959850929598565b60008115159050919050565b610f2d81610f18565b82525050565b6000602082019050610f486000830184610f24565b92915050565b600082825260208201905092915050565b7f57686974656c69737441646d696e526f6c653a2063616c6c657220646f65732060008201527f6e6f742068617665207468652057686974656c69737441646d696e20726f6c65602082015250565b6000610fbb604083610f4e565b9150610fc682610f5f565b604082019050919050565b60006020820190508181036000830152610fea81610fae565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061102b82610d45565b915061103683610d45565b92508282101561104957611048610ff1565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f7061796d656e742063757272656e6379206d75737420626520746865206e617460008201527f69766520746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006110df602983610f4e565b91506110ea82611083565b604082019050919050565b6000602082019050818103600083015261110e816110d2565b9050919050565b61111e81610d45565b82525050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006111618385611124565b935061116e838584611135565b61117783611144565b840190509392505050565b600060a0820190506111976000830189610c3e565b6111a46020830188611115565b81810360408301526111b7818688611155565b90506111c66060830185611115565b6111d36080830184610c3e565b979650505050505050565b600081519050919050565b600081905092915050565b60005b838110156112125780820151818401526020810190506111f7565b83811115611221576000848401525b50505050565b6000611232826111de565b61123c81856111e9565b935061124c8185602086016111f4565b80840191505092915050565b60006112648284611227565b915081905092915050565b7f7061796d656e7450726f7879207472616e73666572457861637445746857697460008201527f685265666572656e6365416e64466565206661696c6564000000000000000000602082015250565b60006112cb603783610f4e565b91506112d68261126f565b604082019050919050565b600060208201905081810360008301526112fa816112be565b9050919050565b600061130d83856111e9565b935061131a838584611135565b82840190509392505050565b6000611333828486611301565b91508190509392505050565b60006080820190506113546000830187611115565b6113616020830186610c3e565b61136e6040830185611115565b61137b6060830184611115565b95945050505050565b7f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500600082015250565b60006113ba601f83610f4e565b91506113c582611384565b602082019050919050565b600060208201905081810360008301526113e9816113ad565b9050919050565b7f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b600061144c602183610f4e565b9150611457826113f0565b604082019050919050565b6000602082019050818103600083015261147b8161143f565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6114b781610c2c565b82525050565b60006114c983836114ae565b60208301905092915050565b6000602082019050919050565b60006114ed82611482565b6114f7818561148d565b93506115028361149e565b8060005b8381101561153357815161151a88826114bd565b9750611525836114d5565b925050600181019050611506565b5085935050505092915050565b6000602082019050818103600083015261155a81846114e2565b905092915050565b60008151905061157181610d4f565b92915050565b6000806000606084860312156115905761158f610c68565b5b600061159e86828701611562565b93505060206115af86828701611562565b92505060406115c086828701611562565b9150509250925092565b7f61676772656761746f722072617465206973206f757464617465640000000000600082015250565b6000611600601b83610f4e565b915061160b826115ca565b602082019050919050565b6000602082019050818103600083015261162f816115f3565b9050919050565b600061164182610d45565b915061164c83610d45565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561168557611684610ff1565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006116ca82610d45565b91506116d583610d45565b9250826116e5576116e4611690565b5b828204905092915050565b7f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061174c602283610f4e565b9150611757826116f0565b604082019050919050565b6000602082019050818103600083015261177b8161173f565b905091905056fea264697066735822122093cd2aa90463e90c53046e6969f25b4b00bbbf5b3ac36e277f997a9d76887af964736f6c63430008090033

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

00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063d2062aacf71e26dea7111ec556558fe8199384

-----Decoded View---------------
Arg [0] : _paymentProxyAddress (address): 0x0000000000000000000000000000000000000000
Arg [1] : _chainlinkConversionPathAddress (address): 0x0000000000000000000000000000000000000000
Arg [2] : _nativeTokenHash (address): 0x0000000000000000000000000000000000000000
Arg [3] : _owner (address): 0x63d2062AAcF71e26dEa7111EC556558Fe8199384

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 00000000000000000000000063d2062aacf71e26dea7111ec556558fe8199384


Block Transaction 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
[ 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.