Cryo Explorer Ethereum Mainnet

Address Contract Partially Verified

Address 0xA5aAd392Ecbd03545d68C0CCF0Db9d047e1981b7
Balance 0 ETH
Nonce 1
Code Size 3590 bytes
Last Active
Indexed Transactions 72 (10,654,81510,654,926)
Gas Used (indexed) 2,100,261
External Etherscan · Sourcify

Contract Bytecode

3590 bytes
0x608060405234801561001057600080fd5b50600436106100fb576000357c0100000000000000000000000000000000000000000000000000000000900480638da5cb5b116100a9578063ce55c85211610083578063ce55c852146102ec578063d740b9a314610318578063e3503ca214610388578063fdff9b4d146103ae576100fb565b80638da5cb5b1461029a578063a6f9dae1146102be578063b78b842d146102e4576100fb565b806354a325a6116100da57806354a325a61461017a57806374d66ecf146101a0578063837479c914610262576100fb565b8062e4768b146101005780632d06177a1461012e578063377e32e614610154575b600080fd5b61012c6004803603604081101561011657600080fd5b50600160a060020a0381351690602001356103e8565b005b61012c6004803603602081101561014457600080fd5b5035600160a060020a0316610476565b61012c6004803603602081101561016a57600080fd5b5035600160a060020a03166105b4565b61012c6004803603602081101561019057600080fd5b5035600160a060020a03166106c9565b61012c600480360360408110156101b657600080fd5b8101906020810181356401000000008111156101d157600080fd5b8201836020820111156101e357600080fd5b8035906020019184602083028401116401000000008311171561020557600080fd5b91939092909160208101903564010000000081111561022357600080fd5b82018360208201111561023557600080fd5b8035906020019184602083028401116401000000008311171561025757600080fd5b50909250905061076a565b6102886004803603602081101561027857600080fd5b5035600160a060020a031661083b565b60408051918252519081900360200190f35b6102a261084d565b60408051600160a060020a039092168252519081900360200190f35b61012c600480360360208110156102d457600080fd5b5035600160a060020a031661085c565b6102a261097d565b6102886004803603604081101561030257600080fd5b5080359060200135600160a060020a031661098c565b61012c6004803603602081101561032e57600080fd5b81019060208101813564010000000081111561034957600080fd5b82018360208201111561035b57600080fd5b8035906020019184602083028401116401000000008311171561037d57600080fd5b509092509050610a5b565b61012c6004803603602081101561039e57600080fd5b5035600160a060020a0316610bf0565b6103d4600480360360208110156103c457600080fd5b5035600160a060020a0316610d2a565b604080519115158252519081900360200190f35b3360009081526001602081905260409091205460ff1615151461045a5760408051600080516020610dbb833981519152815260206004820152601260248201527f4d3a204d757374206265206d616e616765720000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03909116600090815260026020526040902055565b600054600160a060020a031633146104dd5760408051600080516020610dbb833981519152815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03811615156105425760408051600080516020610dbb833981519152815260206004820152601b60248201527f4d3a2041646472657373206d757374206e6f74206265206e756c6c0000000000604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460ff1615156105b157600160a060020a0381166000818152600160208190526040808320805460ff1916909217909155517f3b4a40cccf2058c593542587329dd385be4f0b588db5471fbd9598e56dd7093a9190a25b50565b600054600160a060020a0316331461061b5760408051600080516020610dbb833981519152815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03811660009081526001602081905260409091205460ff1615151461068057604051600080516020610dbb8339815191528152600401808060200182810382526025815260200180610d966025913960400191505060405180910390fd5b600160a060020a038116600081815260016020526040808220805460ff19169055517fe5def11e0516f317f9c37b8835aec29fc01db4d4b6d6fecaca339d3596a29bc19190a250565b3360009081526001602081905260409091205460ff1615151461073b5760408051600080516020610dbb833981519152815260206004820152601260248201527f4d3a204d757374206265206d616e616765720000000000000000000000000000604482015290519081900360640190fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b3360009081526001602081905260409091205460ff161515146107dc5760408051600080516020610dbb833981519152815260206004820152601260248201527f4d3a204d757374206265206d616e616765720000000000000000000000000000604482015290519081900360640190fd5b60005b61ffff81168411156108345761082c858561ffff84168181106107fe57fe5b90506020020135600160a060020a031684848461ffff16818110151561082057fe5b905060200201356103e8565b6001016107df565b5050505050565b60026020526000908152604090205481565b600054600160a060020a031681565b600054600160a060020a031633146108c35760408051600080516020610dbb833981519152815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03811615156109285760408051600080516020610dbb833981519152815260206004820152601860248201527f41646472657373206d757374206e6f74206265206e756c6c0000000000000000604482015290519081900360640190fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038316908117825560405190917fa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf3691a250565b600354600160a060020a031681565b60008082600160a060020a031663313ce5676040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156109e457600080fd5b505afa1580156109f8573d6000803e3d6000fd5b505050506040513d6020811015610a0e57600080fd5b5051600160a060020a038416600090815260026020526040902054909150610a50600a83900a610a44838863ffffffff610d3f16565b9063ffffffff610d7116565b925050505b92915050565b600354600160a060020a03161515610ac25760408051600080516020610dbb833981519152815260206004820152601660248201527f4b796265722073796e632069732064697361626c656400000000000000000000604482015290519081900360640190fd5b60005b61ffff8116821115610beb57600354600090600160a060020a031663809a9e55858561ffff8616818110610af557fe5b6040805163ffffffff86167c01000000000000000000000000000000000000000000000000000000000281526020929092029390930135600160a060020a0316600482015273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee60248201526127106044820152825160648083019493509091829003018186803b158015610b7c57600080fd5b505afa158015610b90573d6000803e3d6000fd5b505050506040513d6040811015610ba657600080fd5b505190508060026000868661ffff8716818110610bbf57fe5b60209081029290920135600160a060020a03168352508101919091526040016000205550600101610ac5565b505050565b600354600160a060020a03161515610c575760408051600080516020610dbb833981519152815260206004820152601660248201527f4b796265722073796e632069732064697361626c656400000000000000000000604482015290519081900360640190fd5b600354604080517f809a9e55000000000000000000000000000000000000000000000000000000008152600160a060020a03848116600483015273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee602483015261271060448301528251600094919091169263809a9e559260648082019391829003018186803b158015610cde57600080fd5b505afa158015610cf2573d6000803e3d6000fd5b505050506040513d6040811015610d0857600080fd5b5051600160a060020a0390921660009081526002602052604090209190915550565b60016020526000908152604090205460ff1681565b6000821515610d5057506000610a55565b828202828482811515610d5f57fe5b0414610d6a57600080fd5b9392505050565b6000808211610d7f57600080fd5b60008284811515610d8c57fe5b0494935050505056fe4d3a20546172676574206d75737420626520616e206578697374696e67206d616e6167657208c379a000000000000000000000000000000000000000000000000000000000a165627a7a7230582027a5df10e1821c22d4b6ac94b0317bbe962fd0a8d3c1e87ed3ab0458b21996c10029

Verified Source Code Partial Match

Compiler: v0.5.4+commit.9549d8ff EVM: byzantium Optimization: Yes (999 runs)
TokenPriceProvider.sol 256 lines
pragma solidity ^0.5.4;

/**
 * ERC20 contract interface.
 */
contract ERC20 {
    function totalSupply() public view returns (uint);
    function decimals() public view returns (uint);
    function balanceOf(address tokenOwner) public view returns (uint balance);
    function allowance(address tokenOwner, address spender) public view returns (uint remaining);
    function transfer(address to, uint tokens) public returns (bool success);
    function approve(address spender, uint tokens) public returns (bool success);
    function transferFrom(address from, address to, uint tokens) public returns (bool success);
}

contract KyberNetwork {

    function getExpectedRate(
        ERC20 src,
        ERC20 dest,
        uint srcQty
    )
        public
        view
        returns (uint expectedRate, uint slippageRate);

    function trade(
        ERC20 src,
        uint srcAmount,
        ERC20 dest,
        address payable destAddress,
        uint maxDestAmount,
        uint minConversionRate,
        address walletId
    )
        public
        payable
        returns(uint);
}

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {

    /**
    * @dev Multiplies two numbers, reverts on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b);

        return c;
    }

    /**
    * @dev Integer division of two numbers truncating the quotient, reverts on division by zero.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0); // Solidity only automatically asserts when dividing by 0
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
    * @dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        uint256 c = a - b;

        return c;
    }

    /**
    * @dev Adds two numbers, reverts on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);

        return c;
    }

    /**
    * @dev Divides two numbers and returns the remainder (unsigned integer modulo),
    * reverts when dividing by zero.
    */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0);
        return a % b;
    }

    /**
    * @dev Returns ceil(a / b).
    */
    function ceil(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a / b;
        if(a % b == 0) {
            return c;
        }
        else {
            return c + 1;
        }
    }
}

/**
 * @title Owned
 * @dev Basic contract to define an owner.
 * @author Julien Niset - <[email protected]>
 */
contract Owned {

    // The owner
    address public owner;

    event OwnerChanged(address indexed _newOwner);

    /**
     * @dev Throws if the sender is not the owner.
     */
    modifier onlyOwner {
        require(msg.sender == owner, "Must be owner");
        _;
    }

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

    /**
     * @dev Lets the owner transfer ownership of the contract to a new owner.
     * @param _newOwner The new owner.
     */
    function changeOwner(address _newOwner) external onlyOwner {
        require(_newOwner != address(0), "Address must not be null");
        owner = _newOwner;
        emit OwnerChanged(_newOwner);
    }
}

/**
 * @title Managed
 * @dev Basic contract that defines a set of managers. Only the owner can add/remove managers.
 * @author Julien Niset - <[email protected]>
 */
contract Managed is Owned {

    // The managers
    mapping (address => bool) public managers;

    /**
     * @dev Throws if the sender is not a manager.
     */
    modifier onlyManager {
        require(managers[msg.sender] == true, "M: Must be manager");
        _;
    }

    event ManagerAdded(address indexed _manager);
    event ManagerRevoked(address indexed _manager);

    /**
    * @dev Adds a manager. 
    * @param _manager The address of the manager.
    */
    function addManager(address _manager) external onlyOwner {
        require(_manager != address(0), "M: Address must not be null");
        if(managers[_manager] == false) {
            managers[_manager] = true;
            emit ManagerAdded(_manager);
        }        
    }

    /**
    * @dev Revokes a manager.
    * @param _manager The address of the manager.
    */
    function revokeManager(address _manager) external onlyOwner {
        require(managers[_manager] == true, "M: Target must be an existing manager");
        delete managers[_manager];
        emit ManagerRevoked(_manager);
    }
}

contract TokenPriceProvider is Managed {

    // Mock token address for ETH
    address constant internal ETH_TOKEN_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;

    using SafeMath for uint256;

    mapping(address => uint256) public cachedPrices;

    // Address of the KyberNetwork contract
    KyberNetwork public kyberNetwork;

    constructor(KyberNetwork _kyberNetwork) public {
        kyberNetwork = _kyberNetwork;
    }

    function setPrice(ERC20 _token, uint256 _price) public onlyManager {
        cachedPrices[address(_token)] = _price;
    }

    function setPriceForTokenList(ERC20[] calldata _tokens, uint256[] calldata _prices) external onlyManager {
        for(uint16 i = 0; i < _tokens.length; i++) {
            setPrice(_tokens[i], _prices[i]);
        }
    }

    /**
     * @dev Converts the value of _amount tokens in ether.
     * @param _amount the amount of tokens to convert (in 'token wei' twei)
     * @param _token the ERC20 token contract
     * @return the ether value (in wei) of _amount tokens with contract _token
     */
    function getEtherValue(uint256 _amount, address _token) external view returns (uint256) {
        uint256 decimals = ERC20(_token).decimals();
        uint256 price = cachedPrices[_token];
        return price.mul(_amount).div(10**decimals);
    }

    //
    // The following is added to be backward-compatible with Argent's old backend
    //

    function setKyberNetwork(KyberNetwork _kyberNetwork) external onlyManager {
        kyberNetwork = _kyberNetwork;
    }

    function syncPrice(ERC20 _token) external {
        require(address(kyberNetwork) != address(0), "Kyber sync is disabled");
        (uint256 expectedRate,) = kyberNetwork.getExpectedRate(_token, ERC20(ETH_TOKEN_ADDRESS), 10000);
        cachedPrices[address(_token)] = expectedRate;
    }

    function syncPriceForTokenList(ERC20[] calldata _tokens) external {
        require(address(kyberNetwork) != address(0), "Kyber sync is disabled");
        for(uint16 i = 0; i < _tokens.length; i++) {
            (uint256 expectedRate,) = kyberNetwork.getExpectedRate(_tokens[i], ERC20(ETH_TOKEN_ADDRESS), 10000);
            cachedPrices[address(_tokens[i])] = expectedRate;
        }
    }
}

Read Contract

cachedPrices 0x837479c9 → uint256
getEtherValue 0xce55c852 → uint256
kyberNetwork 0xb78b842d → address
managers 0xfdff9b4d → bool
owner 0x8da5cb5b → address

Write Contract 8 functions

These functions modify contract state and require a wallet transaction to execute.

addManager 0x2d06177a
address _manager
changeOwner 0xa6f9dae1
address _newOwner
revokeManager 0x377e32e6
address _manager
setKyberNetwork 0x54a325a6
address _kyberNetwork
setPrice 0x00e4768b
address _token
uint256 _price
setPriceForTokenList 0x74d66ecf
address[] _tokens
uint256[] _prices
syncPrice 0xe3503ca2
address _token
syncPriceForTokenList 0xd740b9a3
address[] _tokens

Top Interactions

AddressTxnsSentReceived
0x2fa78227...62df 10 10

Recent Transactions

CSV View All 72 Transactions →
|
Hash Method Block Age From/To Value Txn Fee Type
0x6b8713a8...0ee9c0 0x74d66ecf 10,654,926 IN 0x2fa78227...62df 0 ETH 0.00405608 ETH Legacy
0x47a687e4...3ba5a3 0x74d66ecf 10,654,926 IN 0x2fa78227...62df 0 ETH 0.03307176 ETH Legacy
0x8a3bb0f3...9abb68 0x74d66ecf 10,654,926 IN 0x2fa78227...62df 0 ETH 0.02922067 ETH Legacy
0xad4121a1...6a4363 0x74d66ecf 10,654,926 IN 0x2fa78227...62df 0 ETH 0.02920695 ETH Legacy
0x7f5ab834...61ade3 0x74d66ecf 10,654,926 IN 0x2fa78227...62df 0 ETH 0.02921457 ETH Legacy
0xffb05430...351ed8 0x74d66ecf 10,654,926 IN 0x2fa78227...62df 0 ETH 0.02900880 ETH Legacy
0xa1aad1cc...2708e5 0x74d66ecf 10,654,925 IN 0x2fa78227...62df 0 ETH 0.02921610 ETH Legacy
0xc7964173...af1993 0x74d66ecf 10,654,925 IN 0x2fa78227...62df 0 ETH 0.03105162 ETH Legacy
0x02b432de...8fa6d0 0x74d66ecf 10,654,925 IN 0x2fa78227...62df 0 ETH 0.03106296 ETH Legacy
0x23321ffa...30761f 0x74d66ecf 10,654,815 IN 0x2fa78227...62df 0 ETH 0.03106458 ETH Legacy