ETH Price: $3,412.68 (-1.45%)
Gas: 4 Gwei

Contract

0x7Ebf48a26253810629C191b56C3212Fd0D211c26
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Transfer With Re...202197722024-07-02 15:37:595 hrs ago1719934679IN
0x7Ebf48a2...d0D211c26
0.00324472 ETH0.001113258.61229795
Transfer With Re...202197142024-07-02 15:26:115 hrs ago1719933971IN
0x7Ebf48a2...d0D211c26
0.00324472 ETH0.001046638.09695509
Transfer With Re...202196342024-07-02 15:10:115 hrs ago1719933011IN
0x7Ebf48a2...d0D211c26
0.00755993 ETH0.001060738.25819824
Transfer With Re...202127142024-07-01 15:58:3528 hrs ago1719849515IN
0x7Ebf48a2...d0D211c26
0.29717339 ETH0.0012314511.21679697
Transfer With Re...202107882024-07-01 9:31:3535 hrs ago1719826295IN
0x7Ebf48a2...d0D211c26
0.01480608 ETH0.000557295.07615928
Transfer With Re...202106372024-07-01 9:00:4735 hrs ago1719824447IN
0x7Ebf48a2...d0D211c26
0.29612166 ETH0.000668176.08610875
Transfer With Re...202092402024-07-01 4:19:4740 hrs ago1719807587IN
0x7Ebf48a2...d0D211c26
0.02945336 ETH0.000318642.90274747
Transfer With Re...202052822024-06-30 15:05:112 days ago1719759911IN
0x7Ebf48a2...d0D211c26
0.01520245 ETH0.000447384.07500363
Transfer With Re...201964352024-06-29 9:25:473 days ago1719653147IN
0x7Ebf48a2...d0D211c26
0.01520863 ETH0.000216291.97010205
Transfer With Re...201959662024-06-29 7:51:113 days ago1719647471IN
0x7Ebf48a2...d0D211c26
0.22768306 ETH0.000254452.31742319
Transfer With Re...201951892024-06-29 5:14:593 days ago1719638099IN
0x7Ebf48a2...d0D211c26
0.30436414 ETH0.000338333.08178179
Transfer With Re...201918222024-06-28 17:57:234 days ago1719597443IN
0x7Ebf48a2...d0D211c26
0.03049049 ETH0.00040233.66444646
Transfer With Re...201913632024-06-28 16:25:114 days ago1719591911IN
0x7Ebf48a2...d0D211c26
0.06071108 ETH0.0014272313
Transfer With Re...201911232024-06-28 15:36:354 days ago1719588995IN
0x7Ebf48a2...d0D211c26
0.03025439 ETH0.000991329.02956584
Transfer With Re...201911102024-06-28 15:33:594 days ago1719588839IN
0x7Ebf48a2...d0D211c26
0.60508785 ETH0.001071299.75794482
Transfer With Re...201840022024-06-27 15:44:475 days ago1719503087IN
0x7Ebf48a2...d0D211c26
0.17334469 ETH0.0013662413.20580898
Transfer With Re...201690802024-06-25 13:45:357 days ago1719323135IN
0x7Ebf48a2...d0D211c26
0.0461913 ETH0.0011668510.62723049
Transfer With Re...201461902024-06-22 8:55:4710 days ago1719046547IN
0x7Ebf48a2...d0D211c26
0.01486047 ETH0.000288372.62640128
Transfer With Re...201409782024-06-21 15:25:2311 days ago1718983523IN
0x7Ebf48a2...d0D211c26
0.29685332 ETH0.000819387.46343502
Transfer With Re...201409632024-06-21 15:22:2311 days ago1718983343IN
0x7Ebf48a2...d0D211c26
0.05937066 ETH0.00073386.68390438
Transfer With Re...201409322024-06-21 15:16:1111 days ago1718982971IN
0x7Ebf48a2...d0D211c26
0.11874132 ETH0.000895328.15506431
Transfer With Re...201401672024-06-21 12:42:1111 days ago1718973731IN
0x7Ebf48a2...d0D211c26
0.00031625 ETH0.001052437.98733992
Transfer With Re...201390742024-06-21 9:03:1111 days ago1718960591IN
0x7Ebf48a2...d0D211c26
0.07474931 ETH0.0014978913.64213968
Transfer With Re...201318882024-06-20 8:56:4712 days ago1718873807IN
0x7Ebf48a2...d0D211c26
0.00030754 ETH0.0017330213.15258219
Transfer With Re...201217712024-06-18 22:58:3513 days ago1718751515IN
0x7Ebf48a2...d0D211c26
0.01491745 ETH0.000568315.175947
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
202197722024-07-02 15:37:595 hrs ago1719934679
0x7Ebf48a2...d0D211c26
0.0000945 ETH
202197722024-07-02 15:37:595 hrs ago1719934679
0x7Ebf48a2...d0D211c26
0.00315021 ETH
202197142024-07-02 15:26:115 hrs ago1719933971
0x7Ebf48a2...d0D211c26
0.0000945 ETH
202197142024-07-02 15:26:115 hrs ago1719933971
0x7Ebf48a2...d0D211c26
0.00315021 ETH
202196342024-07-02 15:10:115 hrs ago1719933011
0x7Ebf48a2...d0D211c26
0.00022019 ETH
202196342024-07-02 15:10:115 hrs ago1719933011
0x7Ebf48a2...d0D211c26
0.00733974 ETH
202127142024-07-01 15:58:3528 hrs ago1719849515
0x7Ebf48a2...d0D211c26
0.00865553 ETH
202127142024-07-01 15:58:3528 hrs ago1719849515
0x7Ebf48a2...d0D211c26
0.28851785 ETH
202107882024-07-01 9:31:3535 hrs ago1719826295
0x7Ebf48a2...d0D211c26
0.00043124 ETH
202107882024-07-01 9:31:3535 hrs ago1719826295
0x7Ebf48a2...d0D211c26
0.01437483 ETH
202106372024-07-01 9:00:4735 hrs ago1719824447
0x7Ebf48a2...d0D211c26
0.0086249 ETH
202106372024-07-01 9:00:4735 hrs ago1719824447
0x7Ebf48a2...d0D211c26
0.28749675 ETH
202092402024-07-01 4:19:4740 hrs ago1719807587
0x7Ebf48a2...d0D211c26
0.00085786 ETH
202092402024-07-01 4:19:4740 hrs ago1719807587
0x7Ebf48a2...d0D211c26
0.0285955 ETH
202052822024-06-30 15:05:112 days ago1719759911
0x7Ebf48a2...d0D211c26
0.00044278 ETH
202052822024-06-30 15:05:112 days ago1719759911
0x7Ebf48a2...d0D211c26
0.01475966 ETH
201964472024-06-29 9:28:113 days ago1719653291
0x7Ebf48a2...d0D211c26
0.0310079 ETH
201964472024-06-29 9:28:113 days ago1719653291
0x7Ebf48a2...d0D211c26
1.03359683 ETH
201964472024-06-29 9:28:113 days ago1719653291
0x7Ebf48a2...d0D211c26
1.06460473 ETH
201964352024-06-29 9:25:473 days ago1719653147
0x7Ebf48a2...d0D211c26
0.00044297 ETH
201964352024-06-29 9:25:473 days ago1719653147
0x7Ebf48a2...d0D211c26
0.01476566 ETH
201959662024-06-29 7:51:113 days ago1719647471
0x7Ebf48a2...d0D211c26
0.00663154 ETH
201959662024-06-29 7:51:113 days ago1719647471
0x7Ebf48a2...d0D211c26
0.22105152 ETH
201951892024-06-29 5:14:593 days ago1719638099
0x7Ebf48a2...d0D211c26
0.00886497 ETH
201951892024-06-29 5:14:593 days ago1719638099
0x7Ebf48a2...d0D211c26
0.29549917 ETH
View All Internal Transactions
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
    ) {
        paymentProxy = _paymentProxyAddress;
        chainlinkConversionPath = ChainlinkConversionPath(_chainlinkConversionPathAddress);
        nativeTokenHash = _nativeTokenHash;
    }

    // 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;
    }
}

File 2 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
     */
    constructor(address _nativeTokenHash) {
        nativeTokenHash = _nativeTokenHash;
    }

    // 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);
    }
}

File 3 of 6 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (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() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

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

        _;

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

File 4 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);
    }
}

File 5 of 6 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (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;
    }
}

File 6 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];
    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_paymentProxyAddress","type":"address"},{"internalType":"address","name":"_chainlinkConversionPathAddress","type":"address"},{"internalType":"address","name":"_nativeTokenHash","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"}]

60806040523480156200001157600080fd5b5060405162001bf438038062001bf483398181016040528101906200003791906200037c565b60016000819055506200005f620000536200012b60201b60201c565b6200013360201b60201c565b82600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050620004f3565b600033905090565b6200014e8160016200019460201b620007221790919060201c565b8073ffffffffffffffffffffffffffffffffffffffff167f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129960405160405180910390a250565b620001a682826200024760201b60201c565b15620001e9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001e09062000439565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620002bb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002b290620004d1565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003448262000317565b9050919050565b620003568162000337565b81146200036257600080fd5b50565b60008151905062000376816200034b565b92915050565b60008060006060848603121562000398576200039762000312565b5b6000620003a88682870162000365565b9350506020620003bb8682870162000365565b9250506040620003ce8682870162000365565b9150509250925092565b600082825260208201905092915050565b7f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500600082015250565b600062000421601f83620003d8565b91506200042e82620003e9565b602082019050919050565b60006020820190508181036000830152620004548162000412565b9050919050565b7f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000620004b9602283620003d8565b9150620004c6826200045b565b604082019050919050565b60006020820190508181036000830152620004ec81620004aa565b9050919050565b6116f180620005036000396000f3fe6080604052600436106100865760003560e01c80637a38d1cb116100595780637a38d1cb1461011f578063946647f114610148578063ac473c8a14610173578063bb5f747b1461018f578063d515bb03146101cc57610086565b80633cd3efef1461008b5780634c5a628c146100b65780635536bcde146100cd5780637362d9c8146100f6575b600080fd5b34801561009757600080fd5b506100a06101f7565b6040516100ad9190610b86565b60405180910390f35b3480156100c257600080fd5b506100cb61021d565b005b3480156100d957600080fd5b506100f460048036038101906100ef9190610bd7565b61022f565b005b34801561010257600080fd5b5061011d60048036038101906101189190610bd7565b6102c2565b005b34801561012b57600080fd5b5061014660048036038101906101419190610bd7565b61031d565b005b34801561015457600080fd5b5061015d6103b0565b60405161016a9190610c63565b60405180910390f35b61018d60048036038101906101889190610d6f565b6103d6565b005b34801561019b57600080fd5b506101b660048036038101906101b19190610bd7565b6106df565b6040516101c39190610e6c565b60405180910390f35b3480156101d857600080fd5b506101e16106fc565b6040516101ee9190610b86565b60405180910390f35b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61022d6102286107ca565b6107d2565b565b61023f61023a6107ca565b6106df565b61027e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161027590610f0a565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6102d26102cd6107ca565b6106df565b610311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030890610f0a565b60405180910390fd5b61031a8161082c565b50565b61032d6103286107ca565b6106df565b61036c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036390610f0a565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16878760018a8a90506104219190610f59565b81811061043157610430610f8d565b5b90506020020160208101906104469190610bd7565b73ffffffffffffffffffffffffffffffffffffffff161461049c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104939061102e565b60405180910390fd5b6000806104ec898980806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508b8786610886565b915091506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168c848a8a868a604051602401610546969594939291906110bb565b6040516020818303038152906040527fd7c95e98000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516105d09190611191565b600060405180830381855af49150503d806000811461060b576040519150601f19603f3d011682016040523d82523d6000602084013e610610565b606091505b5050905080610654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064b9061121a565b60405180910390fd5b878760405161066492919061125f565b60405180910390207f96d0d1d75923f40b50f6fe74613b2c23239149607848fbca3941fee7ac041cdc8c8c8c60008181106106a2576106a1610f8d565b5b90506020020160208101906106b79190610bd7565b89886040516106c99493929190611278565b60405180910390a2505050505050505050505050565b60006106f58260016109d690919063ffffffff16565b9050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61072c82826109d6565b1561076c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076390611309565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600033905090565b6107e6816001610a9e90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16560405160405180910390a250565b61084081600161072290919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129960405160405180910390a250565b6000806000806000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166397edd4fa8a6040518263ffffffff1660e01b81526004016108e991906113e7565b60606040518083038186803b15801561090157600080fd5b505afa158015610915573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610939919061141e565b925092509250600086148061095957508582426109569190610f59565b11155b610998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098f906114bd565b60405180910390fd5b8083896109a591906114dd565b6109af9190611566565b94508083886109be91906114dd565b6109c89190611566565b935050505094509492505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3e90611609565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610aa882826109d6565b610ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ade9061169b565b60405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610b7082610b45565b9050919050565b610b8081610b65565b82525050565b6000602082019050610b9b6000830184610b77565b92915050565b600080fd5b600080fd5b610bb481610b65565b8114610bbf57600080fd5b50565b600081359050610bd181610bab565b92915050565b600060208284031215610bed57610bec610ba1565b5b6000610bfb84828501610bc2565b91505092915050565b6000819050919050565b6000610c29610c24610c1f84610b45565b610c04565b610b45565b9050919050565b6000610c3b82610c0e565b9050919050565b6000610c4d82610c30565b9050919050565b610c5d81610c42565b82525050565b6000602082019050610c786000830184610c54565b92915050565b6000819050919050565b610c9181610c7e565b8114610c9c57600080fd5b50565b600081359050610cae81610c88565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610cd957610cd8610cb4565b5b8235905067ffffffffffffffff811115610cf657610cf5610cb9565b5b602083019150836020820283011115610d1257610d11610cbe565b5b9250929050565b60008083601f840112610d2f57610d2e610cb4565b5b8235905067ffffffffffffffff811115610d4c57610d4b610cb9565b5b602083019150836001820283011115610d6857610d67610cbe565b5b9250929050565b600080600080600080600080600060e08a8c031215610d9157610d90610ba1565b5b6000610d9f8c828d01610bc2565b9950506020610db08c828d01610c9f565b98505060408a013567ffffffffffffffff811115610dd157610dd0610ba6565b5b610ddd8c828d01610cc3565b975097505060608a013567ffffffffffffffff811115610e0057610dff610ba6565b5b610e0c8c828d01610d19565b95509550506080610e1f8c828d01610c9f565b93505060a0610e308c828d01610bc2565b92505060c0610e418c828d01610c9f565b9150509295985092959850929598565b60008115159050919050565b610e6681610e51565b82525050565b6000602082019050610e816000830184610e5d565b92915050565b600082825260208201905092915050565b7f57686974656c69737441646d696e526f6c653a2063616c6c657220646f65732060008201527f6e6f742068617665207468652057686974656c69737441646d696e20726f6c65602082015250565b6000610ef4604083610e87565b9150610eff82610e98565b604082019050919050565b60006020820190508181036000830152610f2381610ee7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610f6482610c7e565b9150610f6f83610c7e565b925082821015610f8257610f81610f2a565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f7061796d656e742063757272656e6379206d75737420626520746865206e617460008201527f69766520746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000611018602983610e87565b915061102382610fbc565b604082019050919050565b600060208201905081810360008301526110478161100b565b9050919050565b61105781610c7e565b82525050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b600061109a838561105d565b93506110a783858461106e565b6110b08361107d565b840190509392505050565b600060a0820190506110d06000830189610b77565b6110dd602083018861104e565b81810360408301526110f081868861108e565b90506110ff606083018561104e565b61110c6080830184610b77565b979650505050505050565b600081519050919050565b600081905092915050565b60005b8381101561114b578082015181840152602081019050611130565b8381111561115a576000848401525b50505050565b600061116b82611117565b6111758185611122565b935061118581856020860161112d565b80840191505092915050565b600061119d8284611160565b915081905092915050565b7f7061796d656e7450726f7879207472616e73666572457861637445746857697460008201527f685265666572656e6365416e64466565206661696c6564000000000000000000602082015250565b6000611204603783610e87565b915061120f826111a8565b604082019050919050565b60006020820190508181036000830152611233816111f7565b9050919050565b60006112468385611122565b935061125383858461106e565b82840190509392505050565b600061126c82848661123a565b91508190509392505050565b600060808201905061128d600083018761104e565b61129a6020830186610b77565b6112a7604083018561104e565b6112b4606083018461104e565b95945050505050565b7f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500600082015250565b60006112f3601f83610e87565b91506112fe826112bd565b602082019050919050565b60006020820190508181036000830152611322816112e6565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61135e81610b65565b82525050565b60006113708383611355565b60208301905092915050565b6000602082019050919050565b600061139482611329565b61139e8185611334565b93506113a983611345565b8060005b838110156113da5781516113c18882611364565b97506113cc8361137c565b9250506001810190506113ad565b5085935050505092915050565b600060208201905081810360008301526114018184611389565b905092915050565b60008151905061141881610c88565b92915050565b60008060006060848603121561143757611436610ba1565b5b600061144586828701611409565b935050602061145686828701611409565b925050604061146786828701611409565b9150509250925092565b7f61676772656761746f722072617465206973206f757464617465640000000000600082015250565b60006114a7601b83610e87565b91506114b282611471565b602082019050919050565b600060208201905081810360008301526114d68161149a565b9050919050565b60006114e882610c7e565b91506114f383610c7e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561152c5761152b610f2a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061157182610c7e565b915061157c83610c7e565b92508261158c5761158b611537565b5b828204905092915050565b7f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006115f3602283610e87565b91506115fe82611597565b604082019050919050565b60006020820190508181036000830152611622816115e6565b9050919050565b7f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b6000611685602183610e87565b915061169082611629565b604082019050919050565b600060208201905081810360008301526116b481611678565b905091905056fea2646970667358221220cfd5b19455f31e9284e07311bdbd080586e3fc51f3c8aadcb533ab87cf3e394f64736f6c63430008090033000000000000000000000000c98d60caf9766139fbc399927203123e2d7fbe7c0000000000000000000000000818ad7016138f0a40dfae30f64a923c2a8f61ba000000000000000000000000f5af88e117747e87fc5929f2ff87221b1447652e

Deployed Bytecode

0x6080604052600436106100865760003560e01c80637a38d1cb116100595780637a38d1cb1461011f578063946647f114610148578063ac473c8a14610173578063bb5f747b1461018f578063d515bb03146101cc57610086565b80633cd3efef1461008b5780634c5a628c146100b65780635536bcde146100cd5780637362d9c8146100f6575b600080fd5b34801561009757600080fd5b506100a06101f7565b6040516100ad9190610b86565b60405180910390f35b3480156100c257600080fd5b506100cb61021d565b005b3480156100d957600080fd5b506100f460048036038101906100ef9190610bd7565b61022f565b005b34801561010257600080fd5b5061011d60048036038101906101189190610bd7565b6102c2565b005b34801561012b57600080fd5b5061014660048036038101906101419190610bd7565b61031d565b005b34801561015457600080fd5b5061015d6103b0565b60405161016a9190610c63565b60405180910390f35b61018d60048036038101906101889190610d6f565b6103d6565b005b34801561019b57600080fd5b506101b660048036038101906101b19190610bd7565b6106df565b6040516101c39190610e6c565b60405180910390f35b3480156101d857600080fd5b506101e16106fc565b6040516101ee9190610b86565b60405180910390f35b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61022d6102286107ca565b6107d2565b565b61023f61023a6107ca565b6106df565b61027e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161027590610f0a565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6102d26102cd6107ca565b6106df565b610311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030890610f0a565b60405180910390fd5b61031a8161082c565b50565b61032d6103286107ca565b6106df565b61036c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036390610f0a565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16878760018a8a90506104219190610f59565b81811061043157610430610f8d565b5b90506020020160208101906104469190610bd7565b73ffffffffffffffffffffffffffffffffffffffff161461049c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104939061102e565b60405180910390fd5b6000806104ec898980806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508b8786610886565b915091506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168c848a8a868a604051602401610546969594939291906110bb565b6040516020818303038152906040527fd7c95e98000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516105d09190611191565b600060405180830381855af49150503d806000811461060b576040519150601f19603f3d011682016040523d82523d6000602084013e610610565b606091505b5050905080610654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064b9061121a565b60405180910390fd5b878760405161066492919061125f565b60405180910390207f96d0d1d75923f40b50f6fe74613b2c23239149607848fbca3941fee7ac041cdc8c8c8c60008181106106a2576106a1610f8d565b5b90506020020160208101906106b79190610bd7565b89886040516106c99493929190611278565b60405180910390a2505050505050505050505050565b60006106f58260016109d690919063ffffffff16565b9050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61072c82826109d6565b1561076c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076390611309565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600033905090565b6107e6816001610a9e90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16560405160405180910390a250565b61084081600161072290919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129960405160405180910390a250565b6000806000806000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166397edd4fa8a6040518263ffffffff1660e01b81526004016108e991906113e7565b60606040518083038186803b15801561090157600080fd5b505afa158015610915573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610939919061141e565b925092509250600086148061095957508582426109569190610f59565b11155b610998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098f906114bd565b60405180910390fd5b8083896109a591906114dd565b6109af9190611566565b94508083886109be91906114dd565b6109c89190611566565b935050505094509492505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3e90611609565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610aa882826109d6565b610ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ade9061169b565b60405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610b7082610b45565b9050919050565b610b8081610b65565b82525050565b6000602082019050610b9b6000830184610b77565b92915050565b600080fd5b600080fd5b610bb481610b65565b8114610bbf57600080fd5b50565b600081359050610bd181610bab565b92915050565b600060208284031215610bed57610bec610ba1565b5b6000610bfb84828501610bc2565b91505092915050565b6000819050919050565b6000610c29610c24610c1f84610b45565b610c04565b610b45565b9050919050565b6000610c3b82610c0e565b9050919050565b6000610c4d82610c30565b9050919050565b610c5d81610c42565b82525050565b6000602082019050610c786000830184610c54565b92915050565b6000819050919050565b610c9181610c7e565b8114610c9c57600080fd5b50565b600081359050610cae81610c88565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610cd957610cd8610cb4565b5b8235905067ffffffffffffffff811115610cf657610cf5610cb9565b5b602083019150836020820283011115610d1257610d11610cbe565b5b9250929050565b60008083601f840112610d2f57610d2e610cb4565b5b8235905067ffffffffffffffff811115610d4c57610d4b610cb9565b5b602083019150836001820283011115610d6857610d67610cbe565b5b9250929050565b600080600080600080600080600060e08a8c031215610d9157610d90610ba1565b5b6000610d9f8c828d01610bc2565b9950506020610db08c828d01610c9f565b98505060408a013567ffffffffffffffff811115610dd157610dd0610ba6565b5b610ddd8c828d01610cc3565b975097505060608a013567ffffffffffffffff811115610e0057610dff610ba6565b5b610e0c8c828d01610d19565b95509550506080610e1f8c828d01610c9f565b93505060a0610e308c828d01610bc2565b92505060c0610e418c828d01610c9f565b9150509295985092959850929598565b60008115159050919050565b610e6681610e51565b82525050565b6000602082019050610e816000830184610e5d565b92915050565b600082825260208201905092915050565b7f57686974656c69737441646d696e526f6c653a2063616c6c657220646f65732060008201527f6e6f742068617665207468652057686974656c69737441646d696e20726f6c65602082015250565b6000610ef4604083610e87565b9150610eff82610e98565b604082019050919050565b60006020820190508181036000830152610f2381610ee7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610f6482610c7e565b9150610f6f83610c7e565b925082821015610f8257610f81610f2a565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f7061796d656e742063757272656e6379206d75737420626520746865206e617460008201527f69766520746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000611018602983610e87565b915061102382610fbc565b604082019050919050565b600060208201905081810360008301526110478161100b565b9050919050565b61105781610c7e565b82525050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b600061109a838561105d565b93506110a783858461106e565b6110b08361107d565b840190509392505050565b600060a0820190506110d06000830189610b77565b6110dd602083018861104e565b81810360408301526110f081868861108e565b90506110ff606083018561104e565b61110c6080830184610b77565b979650505050505050565b600081519050919050565b600081905092915050565b60005b8381101561114b578082015181840152602081019050611130565b8381111561115a576000848401525b50505050565b600061116b82611117565b6111758185611122565b935061118581856020860161112d565b80840191505092915050565b600061119d8284611160565b915081905092915050565b7f7061796d656e7450726f7879207472616e73666572457861637445746857697460008201527f685265666572656e6365416e64466565206661696c6564000000000000000000602082015250565b6000611204603783610e87565b915061120f826111a8565b604082019050919050565b60006020820190508181036000830152611233816111f7565b9050919050565b60006112468385611122565b935061125383858461106e565b82840190509392505050565b600061126c82848661123a565b91508190509392505050565b600060808201905061128d600083018761104e565b61129a6020830186610b77565b6112a7604083018561104e565b6112b4606083018461104e565b95945050505050565b7f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500600082015250565b60006112f3601f83610e87565b91506112fe826112bd565b602082019050919050565b60006020820190508181036000830152611322816112e6565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61135e81610b65565b82525050565b60006113708383611355565b60208301905092915050565b6000602082019050919050565b600061139482611329565b61139e8185611334565b93506113a983611345565b8060005b838110156113da5781516113c18882611364565b97506113cc8361137c565b9250506001810190506113ad565b5085935050505092915050565b600060208201905081810360008301526114018184611389565b905092915050565b60008151905061141881610c88565b92915050565b60008060006060848603121561143757611436610ba1565b5b600061144586828701611409565b935050602061145686828701611409565b925050604061146786828701611409565b9150509250925092565b7f61676772656761746f722072617465206973206f757464617465640000000000600082015250565b60006114a7601b83610e87565b91506114b282611471565b602082019050919050565b600060208201905081810360008301526114d68161149a565b9050919050565b60006114e882610c7e565b91506114f383610c7e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561152c5761152b610f2a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061157182610c7e565b915061157c83610c7e565b92508261158c5761158b611537565b5b828204905092915050565b7f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006115f3602283610e87565b91506115fe82611597565b604082019050919050565b60006020820190508181036000830152611622816115e6565b9050919050565b7f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b6000611685602183610e87565b915061169082611629565b604082019050919050565b600060208201905081810360008301526116b481611678565b905091905056fea2646970667358221220cfd5b19455f31e9284e07311bdbd080586e3fc51f3c8aadcb533ab87cf3e394f64736f6c63430008090033

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

000000000000000000000000c98d60caf9766139fbc399927203123e2d7fbe7c0000000000000000000000000818ad7016138f0a40dfae30f64a923c2a8f61ba000000000000000000000000f5af88e117747e87fc5929f2ff87221b1447652e

-----Decoded View---------------
Arg [0] : _paymentProxyAddress (address): 0xC98d60CaF9766139fBC399927203123E2d7FBe7c
Arg [1] : _chainlinkConversionPathAddress (address): 0x0818Ad7016138f0A40DFAe30F64a923c2A8F61bA
Arg [2] : _nativeTokenHash (address): 0xF5AF88e117747e87fC5929F2ff87221B1447652E

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000c98d60caf9766139fbc399927203123e2d7fbe7c
Arg [1] : 0000000000000000000000000818ad7016138f0a40dfae30f64a923c2a8f61ba
Arg [2] : 000000000000000000000000f5af88e117747e87fc5929f2ff87221b1447652e


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