Source Code
Latest 25 from a total of 158 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Submit Prices | 13231359 | 417 days ago | IN | 0 FRAX | 0.00000303 | ||||
| Submit Prices | 13188159 | 418 days ago | IN | 0 FRAX | 0.00000346 | ||||
| Submit Prices | 13144959 | 419 days ago | IN | 0 FRAX | 0.00000226 | ||||
| Submit Prices | 13101759 | 420 days ago | IN | 0 FRAX | 0.00000214 | ||||
| Submit Prices | 13058559 | 421 days ago | IN | 0 FRAX | 0.00000138 | ||||
| Submit Prices | 13015359 | 422 days ago | IN | 0 FRAX | 0.00000099 | ||||
| Submit Prices | 12972159 | 423 days ago | IN | 0 FRAX | 0.00000205 | ||||
| Submit Prices | 12928959 | 424 days ago | IN | 0 FRAX | 0.00000182 | ||||
| Submit Prices | 12885759 | 425 days ago | IN | 0 FRAX | 0.00000143 | ||||
| Submit Prices | 12842558 | 426 days ago | IN | 0 FRAX | 0.00000119 | ||||
| Submit Prices | 12799358 | 427 days ago | IN | 0 FRAX | 0.00000175 | ||||
| Submit Prices | 12756158 | 428 days ago | IN | 0 FRAX | 0.00000209 | ||||
| Submit Prices | 12712959 | 429 days ago | IN | 0 FRAX | 0.00000205 | ||||
| Submit Prices | 12669759 | 430 days ago | IN | 0 FRAX | 0.00000132 | ||||
| Submit Prices | 12626558 | 431 days ago | IN | 0 FRAX | 0.00000149 | ||||
| Submit Prices | 12583359 | 432 days ago | IN | 0 FRAX | 0.0000018 | ||||
| Submit Prices | 12540159 | 433 days ago | IN | 0 FRAX | 0.00000156 | ||||
| Submit Prices | 12496958 | 434 days ago | IN | 0 FRAX | 0.00000167 | ||||
| Submit Prices | 12453759 | 435 days ago | IN | 0 FRAX | 0.00000226 | ||||
| Submit Prices | 12410558 | 436 days ago | IN | 0 FRAX | 0.00000259 | ||||
| Submit Prices | 12367359 | 437 days ago | IN | 0 FRAX | 0.00000447 | ||||
| Submit Prices | 12324159 | 438 days ago | IN | 0 FRAX | 0.00000417 | ||||
| Submit Prices | 12280959 | 439 days ago | IN | 0 FRAX | 0.00000464 | ||||
| Submit Prices | 12237759 | 440 days ago | IN | 0 FRAX | 0.00000224 | ||||
| Submit Prices | 12194558 | 441 days ago | IN | 0 FRAX | 0.0000017 |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
PriceOracle
Compiler Version
v0.8.22+commit.4fc1097e
Optimization Enabled:
Yes with 10000 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity 0.8.22;
pragma experimental ABIEncoderV2;
import {SafeMath} from '@openzeppelin/contracts/utils/math/SafeMath.sol';
import {Ownable} from '@openzeppelin/contracts/access/Ownable.sol';
import {IPriceOracleGetter} from './interfaces/IPriceOracleGetter.sol';
contract PriceOracle is Ownable, IPriceOracleGetter {
using SafeMath for uint256;
struct Price {
uint64 blockNumber;
uint64 blockTimestamp;
uint128 price;
}
event PricesSubmitted(address sybil, address[] assets, uint128[] prices);
event SybilAuthorized(address indexed sybil);
event SybilUnauthorized(address indexed sybil);
uint256 public constant PERCENTAGE_BASE = 1e4;
mapping(address => Price) private _prices;
mapping(address => bool) private _sybils;
modifier onlySybil {
_requireWhitelistedSybil(msg.sender);
_;
}
function authorizeSybil(address sybil) external onlyOwner {
_sybils[sybil] = true;
emit SybilAuthorized(sybil);
}
function unauthorizeSybil(address sybil) external onlyOwner {
_sybils[sybil] = false;
emit SybilUnauthorized(sybil);
}
function submitPrices(address[] calldata assets, uint128[] calldata prices) external onlySybil {
require(assets.length == prices.length, 'INCONSISTENT_PARAMS_LENGTH');
for (uint256 i = 0; i < assets.length; i++) {
_prices[assets[i]] = Price(uint64(block.number), uint64(block.timestamp), prices[i]);
}
emit PricesSubmitted(msg.sender, assets, prices);
}
function getAssetPrice(address asset) external view override returns (uint256) {
return uint256(_prices[asset].price);
}
function isSybilWhitelisted(address sybil) public view returns (bool) {
return _sybils[sybil];
}
function getPricesData(address[] calldata assets) external view returns (Price[] memory) {
Price[] memory result = new Price[](assets.length);
for (uint256 i = 0; i < assets.length; i++) {
result[i] = _prices[assets[i]];
}
return result;
}
function filterCandidatePricesByDeviation(
uint256 deviation,
address[] calldata assets,
uint256[] calldata candidatePrices
) external view returns (address[] memory, uint256[] memory) {
require(assets.length == candidatePrices.length, 'INCONSISTENT_PARAMS_LENGTH');
address[] memory filteredAssetsWith0s = new address[](assets.length);
uint256[] memory filteredCandidatesWith0s = new uint256[](assets.length);
uint256 end0sInLists;
for (uint256 i = 0; i < assets.length; i++) {
uint128 currentOraclePrice = _prices[assets[i]].price;
if (
uint256(currentOraclePrice) >
candidatePrices[i].mul(PERCENTAGE_BASE.add(deviation)).div(PERCENTAGE_BASE) ||
uint256(currentOraclePrice) <
candidatePrices[i].mul(PERCENTAGE_BASE.sub(deviation)).div(PERCENTAGE_BASE)
) {
filteredAssetsWith0s[end0sInLists] = assets[i];
filteredCandidatesWith0s[end0sInLists] = candidatePrices[i];
end0sInLists++;
}
}
address[] memory resultAssets = new address[](end0sInLists);
uint256[] memory resultPrices = new uint256[](end0sInLists);
for (uint256 i = 0; i < end0sInLists; i++) {
resultAssets[i] = filteredAssetsWith0s[i];
resultPrices[i] = filteredCandidatesWith0s[i];
}
return (resultAssets, resultPrices);
}
function _requireWhitelistedSybil(address sybil) internal view {
require(isSybilWhitelisted(sybil), 'INVALID_SYBIL');
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// 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;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol)
pragma solidity ^0.8.0;
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
/**
* @dev Wrappers over Solidity's arithmetic operations.
*
* NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
* now has built in overflow checking.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the subtraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
// 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-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.22;
/**
* @title IPriceOracleGetter interface
* @notice Interface for the Archly price oracle.
**/
interface IPriceOracleGetter {
/**
* @dev returns the asset price
* @param asset the address of the asset
* @return the price of the asset
**/
function getAssetPrice(address asset) external view returns (uint256);
}{
"evmVersion": "paris",
"optimizer": {
"enabled": true,
"runs": 10000
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sybil","type":"address"},{"indexed":false,"internalType":"address[]","name":"assets","type":"address[]"},{"indexed":false,"internalType":"uint128[]","name":"prices","type":"uint128[]"}],"name":"PricesSubmitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sybil","type":"address"}],"name":"SybilAuthorized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sybil","type":"address"}],"name":"SybilUnauthorized","type":"event"},{"inputs":[],"name":"PERCENTAGE_BASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sybil","type":"address"}],"name":"authorizeSybil","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"deviation","type":"uint256"},{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint256[]","name":"candidatePrices","type":"uint256[]"}],"name":"filterCandidatePricesByDeviation","outputs":[{"internalType":"address[]","name":"","type":"address[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getAssetPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"}],"name":"getPricesData","outputs":[{"components":[{"internalType":"uint64","name":"blockNumber","type":"uint64"},{"internalType":"uint64","name":"blockTimestamp","type":"uint64"},{"internalType":"uint128","name":"price","type":"uint128"}],"internalType":"struct PriceOracle.Price[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sybil","type":"address"}],"name":"isSybilWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint128[]","name":"prices","type":"uint128[]"}],"name":"submitPrices","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sybil","type":"address"}],"name":"unauthorizeSybil","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6112af8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c8063715018a611610081578063b3596f071161005b578063b3596f07146101cc578063f2be88cd14610228578063f2fde38b1461023b57600080fd5b8063715018a61461018557806387c139431461018d5780638da5cb5b146101a457600080fd5b806342136b08116100b257806342136b08146101315780635e91734c146101515780635f1e09d91461016457600080fd5b80630e5665e6146100ce57806330d454f0146100e3575b600080fd5b6100e16100dc366004610dd8565b61024e565b005b61011c6100f1366004610e6d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b60405190151581526020015b60405180910390f35b61014461013f366004610e88565b61045d565b6040516101289190610eca565b6100e161015f366004610e6d565b6105cd565b610177610172366004610f42565b61064c565b604051610128929190610fbc565b6100e1610a89565b61019661271081565b604051908152602001610128565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610128565b6101966101da366004610e6d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b6100e1610236366004610e6d565b610a9d565b6100e1610249366004610e6d565b610b19565b61025733610bd0565b8281146102c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f494e434f4e53495354454e545f504152414d535f4c454e47544800000000000060448201526064015b60405180910390fd5b60005b838110156104175760405180606001604052804367ffffffffffffffff1681526020014267ffffffffffffffff16815260200184848481811061030d5761030d61104d565b9050602002016020810190610322919061109c565b6fffffffffffffffffffffffffffffffff1690526001600087878581811061034c5761034c61104d565b90506020020160208101906103619190610e6d565b73ffffffffffffffffffffffffffffffffffffffff1681526020808201929092526040908101600020835181549385015194909201516fffffffffffffffffffffffffffffffff9081167001000000000000000000000000000000000267ffffffffffffffff95861668010000000000000000027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516959093169490941792909217929092169190911790556001016102c8565b507f995dd01082df56f242aad7e0a6f87116e5d4c972ab8377309354fa2bd0de3e59338585858560405161044f9594939291906110b7565b60405180910390a150505050565b606060008267ffffffffffffffff81111561047a5761047a61116b565b6040519080825280602002602001820160405280156104e357816020015b60408051606081018252600080825260208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816104985790505b50905060005b838110156105c357600160008686848181106105075761050761104d565b905060200201602081019061051c9190610e6d565b73ffffffffffffffffffffffffffffffffffffffff16815260208082019290925260409081016000208151606081018352905467ffffffffffffffff808216835268010000000000000000820416938201939093527001000000000000000000000000000000009092046fffffffffffffffffffffffffffffffff169082015282518390839081106105b0576105b061104d565b60209081029190910101526001016104e9565b5090505b92915050565b6105d5610c5f565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fe7d975a644451bd7331add56a59563e5d19b661497948c38d25b9694874706739190a250565b6060808483146106b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f494e434f4e53495354454e545f504152414d535f4c454e47544800000000000060448201526064016102bc565b60008567ffffffffffffffff8111156106d3576106d361116b565b6040519080825280602002602001820160405280156106fc578160200160208202803683370190505b50905060008667ffffffffffffffff81111561071a5761071a61116b565b604051908082528060200260200182016040528015610743578160200160208202803683370190505b5090506000805b88811015610938576000600160008c8c8581811061076a5761076a61104d565b905060200201602081019061077f9190610e6d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff1690506108266127106108206107f98f612710610ce090919063ffffffff16565b8c8c8781811061080b5761080b61104d565b90506020020135610cf390919063ffffffff16565b90610cff565b816fffffffffffffffffffffffffffffffff161180610873575061085e6127106108206107f98f612710610d0b90919063ffffffff16565b816fffffffffffffffffffffffffffffffff16105b1561092f578a8a8381811061088a5761088a61104d565b905060200201602081019061089f9190610e6d565b8584815181106108b1576108b161104d565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508888838181106108fd576108fd61104d565b905060200201358484815181106109165761091661104d565b60209081029190910101528261092b816111c9565b9350505b5060010161074a565b5060008167ffffffffffffffff8111156109545761095461116b565b60405190808252806020026020018201604052801561097d578160200160208202803683370190505b50905060008267ffffffffffffffff81111561099b5761099b61116b565b6040519080825280602002602001820160405280156109c4578160200160208202803683370190505b50905060005b83811015610a77578581815181106109e4576109e461104d565b60200260200101518382815181106109fe576109fe61104d565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050848181518110610a4a57610a4a61104d565b6020026020010151828281518110610a6457610a6461104d565b60209081029190910101526001016109ca565b50909b909a5098505050505050505050565b610a91610c5f565b610a9b6000610d17565b565b610aa5610c5f565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f8bde64628aa5dae6d1c378a97b785745a4db9beaa7d503f91a8274c7b58d2f019190a250565b610b21610c5f565b73ffffffffffffffffffffffffffffffffffffffff8116610bc4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102bc565b610bcd81610d17565b50565b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602052604090205460ff16610bcd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f494e56414c49445f535942494c0000000000000000000000000000000000000060448201526064016102bc565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102bc565b6000610cec8284611201565b9392505050565b6000610cec8284611214565b6000610cec828461122b565b6000610cec8284611266565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008083601f840112610d9e57600080fd5b50813567ffffffffffffffff811115610db657600080fd5b6020830191508360208260051b8501011115610dd157600080fd5b9250929050565b60008060008060408587031215610dee57600080fd5b843567ffffffffffffffff80821115610e0657600080fd5b610e1288838901610d8c565b90965094506020870135915080821115610e2b57600080fd5b50610e3887828801610d8c565b95989497509550505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e6857600080fd5b919050565b600060208284031215610e7f57600080fd5b610cec82610e44565b60008060208385031215610e9b57600080fd5b823567ffffffffffffffff811115610eb257600080fd5b610ebe85828601610d8c565b90969095509350505050565b602080825282518282018190526000919060409081850190868401855b82811015610f35578151805167ffffffffffffffff90811686528782015116878601528501516fffffffffffffffffffffffffffffffff168585015260609093019290850190600101610ee7565b5091979650505050505050565b600080600080600060608688031215610f5a57600080fd5b85359450602086013567ffffffffffffffff80821115610f7957600080fd5b610f8589838a01610d8c565b90965094506040880135915080821115610f9e57600080fd5b50610fab88828901610d8c565b969995985093965092949392505050565b604080825283519082018190526000906020906060840190828701845b8281101561100b57815173ffffffffffffffffffffffffffffffffffffffff1684529284019290840190600101610fd9565b5050508381038285015284518082528583019183019060005b8181101561104057835183529284019291840191600101611024565b5090979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80356fffffffffffffffffffffffffffffffff81168114610e6857600080fd5b6000602082840312156110ae57600080fd5b610cec8261107c565b73ffffffffffffffffffffffffffffffffffffffff868116825260606020808401829052908301869052600091879160808501845b8981101561111157836110fe86610e44565b16825293820193908201906001016110ec565b5085810360408701528681528101925086915060005b8681101561115c576fffffffffffffffffffffffffffffffff6111498461107c565b1684529281019291810191600101611127565b50919998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036111fa576111fa61119a565b5060010190565b808201808211156105c7576105c761119a565b80820281158282048414176105c7576105c761119a565b600082611261577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b818103818111156105c7576105c761119a56fea26469706673582212200f25f0d04e325f411500f67315e3a0e79992f5e0321890c7a3fb323169d394a964736f6c63430008160033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100c95760003560e01c8063715018a611610081578063b3596f071161005b578063b3596f07146101cc578063f2be88cd14610228578063f2fde38b1461023b57600080fd5b8063715018a61461018557806387c139431461018d5780638da5cb5b146101a457600080fd5b806342136b08116100b257806342136b08146101315780635e91734c146101515780635f1e09d91461016457600080fd5b80630e5665e6146100ce57806330d454f0146100e3575b600080fd5b6100e16100dc366004610dd8565b61024e565b005b61011c6100f1366004610e6d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b60405190151581526020015b60405180910390f35b61014461013f366004610e88565b61045d565b6040516101289190610eca565b6100e161015f366004610e6d565b6105cd565b610177610172366004610f42565b61064c565b604051610128929190610fbc565b6100e1610a89565b61019661271081565b604051908152602001610128565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610128565b6101966101da366004610e6d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b6100e1610236366004610e6d565b610a9d565b6100e1610249366004610e6d565b610b19565b61025733610bd0565b8281146102c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f494e434f4e53495354454e545f504152414d535f4c454e47544800000000000060448201526064015b60405180910390fd5b60005b838110156104175760405180606001604052804367ffffffffffffffff1681526020014267ffffffffffffffff16815260200184848481811061030d5761030d61104d565b9050602002016020810190610322919061109c565b6fffffffffffffffffffffffffffffffff1690526001600087878581811061034c5761034c61104d565b90506020020160208101906103619190610e6d565b73ffffffffffffffffffffffffffffffffffffffff1681526020808201929092526040908101600020835181549385015194909201516fffffffffffffffffffffffffffffffff9081167001000000000000000000000000000000000267ffffffffffffffff95861668010000000000000000027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516959093169490941792909217929092169190911790556001016102c8565b507f995dd01082df56f242aad7e0a6f87116e5d4c972ab8377309354fa2bd0de3e59338585858560405161044f9594939291906110b7565b60405180910390a150505050565b606060008267ffffffffffffffff81111561047a5761047a61116b565b6040519080825280602002602001820160405280156104e357816020015b60408051606081018252600080825260208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816104985790505b50905060005b838110156105c357600160008686848181106105075761050761104d565b905060200201602081019061051c9190610e6d565b73ffffffffffffffffffffffffffffffffffffffff16815260208082019290925260409081016000208151606081018352905467ffffffffffffffff808216835268010000000000000000820416938201939093527001000000000000000000000000000000009092046fffffffffffffffffffffffffffffffff169082015282518390839081106105b0576105b061104d565b60209081029190910101526001016104e9565b5090505b92915050565b6105d5610c5f565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fe7d975a644451bd7331add56a59563e5d19b661497948c38d25b9694874706739190a250565b6060808483146106b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f494e434f4e53495354454e545f504152414d535f4c454e47544800000000000060448201526064016102bc565b60008567ffffffffffffffff8111156106d3576106d361116b565b6040519080825280602002602001820160405280156106fc578160200160208202803683370190505b50905060008667ffffffffffffffff81111561071a5761071a61116b565b604051908082528060200260200182016040528015610743578160200160208202803683370190505b5090506000805b88811015610938576000600160008c8c8581811061076a5761076a61104d565b905060200201602081019061077f9190610e6d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff1690506108266127106108206107f98f612710610ce090919063ffffffff16565b8c8c8781811061080b5761080b61104d565b90506020020135610cf390919063ffffffff16565b90610cff565b816fffffffffffffffffffffffffffffffff161180610873575061085e6127106108206107f98f612710610d0b90919063ffffffff16565b816fffffffffffffffffffffffffffffffff16105b1561092f578a8a8381811061088a5761088a61104d565b905060200201602081019061089f9190610e6d565b8584815181106108b1576108b161104d565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508888838181106108fd576108fd61104d565b905060200201358484815181106109165761091661104d565b60209081029190910101528261092b816111c9565b9350505b5060010161074a565b5060008167ffffffffffffffff8111156109545761095461116b565b60405190808252806020026020018201604052801561097d578160200160208202803683370190505b50905060008267ffffffffffffffff81111561099b5761099b61116b565b6040519080825280602002602001820160405280156109c4578160200160208202803683370190505b50905060005b83811015610a77578581815181106109e4576109e461104d565b60200260200101518382815181106109fe576109fe61104d565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050848181518110610a4a57610a4a61104d565b6020026020010151828281518110610a6457610a6461104d565b60209081029190910101526001016109ca565b50909b909a5098505050505050505050565b610a91610c5f565b610a9b6000610d17565b565b610aa5610c5f565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f8bde64628aa5dae6d1c378a97b785745a4db9beaa7d503f91a8274c7b58d2f019190a250565b610b21610c5f565b73ffffffffffffffffffffffffffffffffffffffff8116610bc4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102bc565b610bcd81610d17565b50565b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602052604090205460ff16610bcd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f494e56414c49445f535942494c0000000000000000000000000000000000000060448201526064016102bc565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102bc565b6000610cec8284611201565b9392505050565b6000610cec8284611214565b6000610cec828461122b565b6000610cec8284611266565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008083601f840112610d9e57600080fd5b50813567ffffffffffffffff811115610db657600080fd5b6020830191508360208260051b8501011115610dd157600080fd5b9250929050565b60008060008060408587031215610dee57600080fd5b843567ffffffffffffffff80821115610e0657600080fd5b610e1288838901610d8c565b90965094506020870135915080821115610e2b57600080fd5b50610e3887828801610d8c565b95989497509550505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e6857600080fd5b919050565b600060208284031215610e7f57600080fd5b610cec82610e44565b60008060208385031215610e9b57600080fd5b823567ffffffffffffffff811115610eb257600080fd5b610ebe85828601610d8c565b90969095509350505050565b602080825282518282018190526000919060409081850190868401855b82811015610f35578151805167ffffffffffffffff90811686528782015116878601528501516fffffffffffffffffffffffffffffffff168585015260609093019290850190600101610ee7565b5091979650505050505050565b600080600080600060608688031215610f5a57600080fd5b85359450602086013567ffffffffffffffff80821115610f7957600080fd5b610f8589838a01610d8c565b90965094506040880135915080821115610f9e57600080fd5b50610fab88828901610d8c565b969995985093965092949392505050565b604080825283519082018190526000906020906060840190828701845b8281101561100b57815173ffffffffffffffffffffffffffffffffffffffff1684529284019290840190600101610fd9565b5050508381038285015284518082528583019183019060005b8181101561104057835183529284019291840191600101611024565b5090979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80356fffffffffffffffffffffffffffffffff81168114610e6857600080fd5b6000602082840312156110ae57600080fd5b610cec8261107c565b73ffffffffffffffffffffffffffffffffffffffff868116825260606020808401829052908301869052600091879160808501845b8981101561111157836110fe86610e44565b16825293820193908201906001016110ec565b5085810360408701528681528101925086915060005b8681101561115c576fffffffffffffffffffffffffffffffff6111498461107c565b1684529281019291810191600101611127565b50919998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036111fa576111fa61119a565b5060010190565b808201808211156105c7576105c761119a565b80820281158282048414176105c7576105c761119a565b600082611261577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b818103818111156105c7576105c761119a56fea26469706673582212200f25f0d04e325f411500f67315e3a0e79992f5e0321890c7a3fb323169d394a964736f6c63430008160033
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in FRAX
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.