Address Contract Partially Verified
Address
0xA5aAd392Ecbd03545d68C0CCF0Db9d047e1981b7
Balance
0 ETH
Nonce
1
Code Size
3590 bytes
Creator
0xc66efBf0...222b at tx 0x1bcd2639...91573e
Last Active
Indexed Transactions
72 (10,654,815 → 10,654,926)
Gas Used (indexed)
2,100,261
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
| Address | Txns | Sent | Received |
|---|---|---|---|
| 0x2fa78227...62df | 10 | 10 |
Recent Transactions
|
| Hash | Block | Age | From/To | Value | |
|---|---|---|---|---|---|
| 0x6b8713a8...0ee9c0 | 10,654,926 | IN | 0x2fa78227...62df | 0 ETH | |
| 0x47a687e4...3ba5a3 | 10,654,926 | IN | 0x2fa78227...62df | 0 ETH | |
| 0x8a3bb0f3...9abb68 | 10,654,926 | IN | 0x2fa78227...62df | 0 ETH | |
| 0xad4121a1...6a4363 | 10,654,926 | IN | 0x2fa78227...62df | 0 ETH | |
| 0x7f5ab834...61ade3 | 10,654,926 | IN | 0x2fa78227...62df | 0 ETH | |
| 0xffb05430...351ed8 | 10,654,926 | IN | 0x2fa78227...62df | 0 ETH | |
| 0xa1aad1cc...2708e5 | 10,654,925 | IN | 0x2fa78227...62df | 0 ETH | |
| 0xc7964173...af1993 | 10,654,925 | IN | 0x2fa78227...62df | 0 ETH | |
| 0x02b432de...8fa6d0 | 10,654,925 | IN | 0x2fa78227...62df | 0 ETH | |
| 0x23321ffa...30761f | 10,654,815 | IN | 0x2fa78227...62df | 0 ETH |