Source Code
Overview
S Balance
More Info
ContractCreator
Latest 9 from a total of 9 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Direct Price | 6204845 | 108 days ago | IN | 0 S | 0.00003133 | ||||
Set Direct Price | 6204496 | 108 days ago | IN | 0 S | 0.00003133 | ||||
Set Direct Price | 6204489 | 108 days ago | IN | 0 S | 0.00003133 | ||||
Set Direct Price | 6204483 | 108 days ago | IN | 0 S | 0.00003133 | ||||
Set Direct Price | 6204475 | 108 days ago | IN | 0 S | 0.00003133 | ||||
Set Direct Price | 4497925 | 114 days ago | IN | 0 S | 0.00005298 | ||||
Set Direct Price | 4497918 | 114 days ago | IN | 0 S | 0.00005298 | ||||
Set Direct Price | 4497907 | 114 days ago | IN | 0 S | 0.00005298 | ||||
Set Direct Price | 4497900 | 114 days ago | IN | 0 S | 0.00005298 |
Loading...
Loading
Contract Name:
DesynChainlinkOracle
Compiler Version
v0.6.12+commit.27d51765
Optimization Enabled:
Yes with 20 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity 0.6.12; import "../base/Num.sol"; import "../interfaces/IERC20.sol"; import "../interfaces/AggregatorV2V3Interface.sol"; import "../interfaces/IUniswapOracle.sol"; library SafeMath { function add(uint a, uint b) internal pure returns (uint) { uint c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint a, uint b) internal pure returns (uint) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub( uint a, uint b, string memory errorMessage ) internal pure returns (uint) { require(b <= a, errorMessage); uint c = a - b; return c; } function mul(uint a, uint b) internal pure returns (uint) { if (a == 0) { return 0; } uint c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint a, uint b) internal pure returns (uint) { return div(a, b, "SafeMath: division by zero"); } function div( uint a, uint b, string memory errorMessage ) internal pure returns (uint) { require(b > 0, errorMessage); uint c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint a, uint b) internal pure returns (uint) { return mod(a, b, "SafeMath: modulo by zero"); } function mod( uint a, uint b, string memory errorMessage ) internal pure returns (uint) { require(b != 0, errorMessage); return a % b; } function abs(uint a, uint b) internal pure returns(uint result, bool isFirstBigger) { if(a > b){ result = a - b; isFirstBigger = true; } else { result = b - a; isFirstBigger = false; } } } contract DesynChainlinkOracle is Num { address public admin; using SafeMath for uint; IUniswapOracle public twapOracle; mapping(address => uint) internal prices; mapping(bytes32 => AggregatorV2V3Interface) internal feeds; event PricePosted(address asset, uint previousPriceMantissa, uint requestedPriceMantissa, uint newPriceMantissa); event NewAdmin(address oldAdmin, address newAdmin); event FeedSet(address feed, string symbol); constructor(address twapOracle_) public { admin = msg.sender; twapOracle = IUniswapOracle(twapOracle_); } function getPrice(address tokenAddress) public returns (uint price) { IERC20 token = IERC20(tokenAddress); AggregatorV2V3Interface feed = getFeed(token.symbol()); if (prices[address(token)] != 0) { price = prices[address(token)]; } else if (address(feed) != address(0)) { price = getChainlinkPrice(feed); } else { try twapOracle.update(address(token)) {} catch {} price = getUniswapPrice(tokenAddress); } (uint decimalDelta, bool isUnderFlow18) = uint(18).abs(uint(token.decimals())); if(isUnderFlow18){ return price.mul(10**decimalDelta); } if(!isUnderFlow18){ return price.div(10**decimalDelta); } } function getAllPrice(address[] calldata poolTokens, uint[] calldata actualAmountsOut) external returns (uint fundAll) { require(poolTokens.length == actualAmountsOut.length, "Invalid Length"); for (uint i = 0; i < poolTokens.length; i++) { address t = poolTokens[i]; uint tokenAmountOut = actualAmountsOut[i]; fundAll = badd(fundAll, bmul(getPrice(t), tokenAmountOut)); } } function getChainlinkPrice(AggregatorV2V3Interface feed) internal view returns (uint) { // Chainlink USD-denominated feeds store answers at 8 decimals uint decimalDelta = bsub(uint(18), feed.decimals()); // Ensure that we don't multiply the result by 0 if (decimalDelta > 0) { return uint(feed.latestAnswer()).mul(10**decimalDelta); } else { return uint(feed.latestAnswer()); } } function getUniswapPrice(address tokenAddress) internal view returns (uint) { IERC20 token = IERC20(tokenAddress); uint price = twapOracle.consult(tokenAddress, uint(10) ** token.decimals()); return price; } function setDirectPrice(address asset, uint price) external onlyAdmin { emit PricePosted(asset, prices[asset], price, price); prices[asset] = price; } function setFeed(string calldata symbol, address feed) external onlyAdmin { require(feed != address(0) && feed != address(this), "invalid feed address"); emit FeedSet(feed, symbol); feeds[keccak256(abi.encodePacked(symbol))] = AggregatorV2V3Interface(feed); } function getFeed(string memory symbol) public view returns (AggregatorV2V3Interface) { return feeds[keccak256(abi.encodePacked(symbol))]; } function assetPrices(address asset) external view returns (uint) { return prices[asset]; } function compareStrings(string memory a, string memory b) internal pure returns (bool) { return (keccak256(abi.encodePacked((a))) == keccak256(abi.encodePacked((b)))); } function setAdmin(address newAdmin) external onlyAdmin { require(newAdmin != address(0),"ERR_ZERO_ADDRESS"); address oldAdmin = admin; admin = newAdmin; emit NewAdmin(oldAdmin, newAdmin); } modifier onlyAdmin() { require(msg.sender == admin, "only admin may call"); _; } }
pragma solidity 0.6.12; /** * @title The V2 & V3 Aggregator Interface * @notice Solidity V0.5 does not allow interfaces to inherit from other * interfaces so this contract is a combination of v0.5 AggregatorInterface.sol * and v0.5 AggregatorV3Interface.sol. */ interface AggregatorV2V3Interface { // // V2 Interface: // function latestAnswer() external view returns (int); function latestTimestamp() external view returns (uint); function latestRound() external view returns (uint); function getAnswer(uint roundId) external view returns (int); function getTimestamp(uint roundId) external view returns (uint); event AnswerUpdated(int indexed current, uint indexed roundId, uint timestamp); event NewRound(uint indexed roundId, address indexed startedBy, uint startedAt); // // V3 Interface: // function decimals() external view returns (uint8); function description() external view returns (string memory); function version() external view returns (uint); // getRoundData and latestRoundData should both raise "No data present" // if they do not have data to report, instead of returning unset values // which could be misinterpreted as actual reported values. function getRoundData(uint80 _roundId) external view returns ( uint80 roundId, int answer, uint startedAt, uint updatedAt, uint80 answeredInRound ); function latestRoundData() external view returns ( uint80 roundId, int answer, uint startedAt, uint updatedAt, uint80 answeredInRound ); }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.6.12; import "./Const.sol"; // Core contract; can't be changed. So disable solhint (reminder for v2) /* solhint-disable private-vars-leading-underscore */ contract Num is Const { function btoi(uint a) internal pure returns (uint) { return a / BONE; } function bfloor(uint a) internal pure returns (uint) { return btoi(a) * BONE; } function badd(uint a, uint b) internal pure returns (uint) { uint c = a + b; require(c >= a, "ERR_ADD_OVERFLOW"); return c; } function bsub(uint a, uint b) internal pure returns (uint) { (uint c, bool flag) = bsubSign(a, b); require(!flag, "ERR_SUB_UNDERFLOW"); return c; } function bsubSign(uint a, uint b) internal pure returns (uint, bool) { if (a >= b) { return (a - b, false); } else { return (b - a, true); } } function bmul(uint a, uint b) internal pure returns (uint) { uint c0 = a * b; require(a == 0 || c0 / a == b, "ERR_MUL_OVERFLOW"); uint c1 = c0 + (BONE / 2); require(c1 >= c0, "ERR_MUL_OVERFLOW"); uint c2 = c1 / BONE; return c2; } function bdiv(uint a, uint b) internal pure returns (uint) { require(b != 0, "ERR_DIV_ZERO"); uint c0 = a * BONE; require(a == 0 || c0 / a == BONE, "ERR_DIV_INTERNAL"); // bmul overflow uint c1 = c0 + (b / 2); require(c1 >= c0, "ERR_DIV_INTERNAL"); // badd require uint c2 = c1 / b; return c2; } // DSMath.wpow function bpowi(uint a, uint n) internal pure returns (uint) { uint z = n % 2 != 0 ? a : BONE; for (n /= 2; n != 0; n /= 2) { a = bmul(a, a); if (n % 2 != 0) { z = bmul(z, a); } } return z; } // Compute b^(e.w) by splitting it into (b^e)*(b^0.w). // Use `bpowi` for `b^e` and `bpowK` for k iterations // of approximation of b^0.w function bpow(uint base, uint exp) internal pure returns (uint) { require(base >= MIN_BPOW_BASE, "ERR_BPOW_BASE_TOO_LOW"); require(base <= MAX_BPOW_BASE, "ERR_BPOW_BASE_TOO_HIGH"); uint whole = bfloor(exp); uint remain = bsub(exp, whole); uint wholePow = bpowi(base, btoi(whole)); if (remain == 0) { return wholePow; } uint partialResult = bpowApprox(base, remain, BPOW_PRECISION); return bmul(wholePow, partialResult); } function bpowApprox( uint base, uint exp, uint precision ) internal pure returns (uint) { // term 0: uint a = exp; (uint x, bool xneg) = bsubSign(base, BONE); uint term = BONE; uint sum = term; bool negative = false; // term(k) = numer / denom // = (product(a - i - 1, i=1-->k) * x^k) / (k!) // each iteration, multiply previous term by (a-(k-1)) * x / k // continue until term is less than precision for (uint i = 1; term >= precision; i++) { uint bigK = i * BONE; (uint c, bool cneg) = bsubSign(a, bsub(bigK, BONE)); term = bmul(term, bmul(c, x)); term = bdiv(term, bigK); if (term == 0) break; if (xneg) negative = !negative; if (cneg) negative = !negative; if (negative) { sum = bsub(sum, term); } else { sum = badd(sum, term); } } return sum; } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.6.12; // Interface declarations /* solhint-disable func-order */ interface IERC20 { // Emitted when the allowance of a spender for an owner is set by a call to approve. // Value is the new allowance event Approval(address indexed owner, address indexed spender, uint value); // Emitted when value tokens are moved from one account (from) to another (to). // Note that value may be zero event Transfer(address indexed from, address indexed to, uint value); // Returns the amount of tokens in existence function totalSupply() external view returns (uint); // Returns the amount of tokens owned by account function balanceOf(address account) external view returns (uint); // Returns the decimals of tokens function decimals() external view returns (uint8); function symbol() external view returns (string memory); // Returns the remaining number of tokens that spender will be allowed to spend on behalf of owner // through transferFrom. This is zero by default // This value changes when approve or transferFrom are called function allowance(address owner, address spender) external view returns (uint); // Sets amount as the allowance of spender over the caller’s tokens // Returns a boolean value indicating whether the operation succeeded // Emits an Approval event. function approve(address spender, uint amount) external returns (bool); // Moves amount tokens from the caller’s account to recipient // Returns a boolean value indicating whether the operation succeeded // Emits a Transfer event. function transfer(address recipient, uint amount) external returns (bool); // Moves amount tokens from sender to recipient using the allowance mechanism // Amount is then deducted from the caller’s allowance // Returns a boolean value indicating whether the operation succeeded // Emits a Transfer event function transferFrom( address sender, address recipient, uint amount ) external returns (bool); }
pragma solidity 0.6.12; interface IUniswapOracle { function update(address token) external; function consult(address token, uint amountIn) external view returns (uint amountOut); }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.6.12; import "./Color.sol"; contract Const is BBronze { uint public constant BONE = 10**18; uint public constant MIN_BOUND_TOKENS = 1; uint public constant MAX_BOUND_TOKENS = 16; uint public constant MIN_FEE = BONE / 10**6; uint public constant MAX_FEE = BONE / 10; uint public constant EXIT_FEE = 0; uint public constant MIN_WEIGHT = BONE; uint public constant MAX_WEIGHT = BONE * 50; uint public constant MAX_TOTAL_WEIGHT = BONE * 50; uint public constant MIN_BALANCE = 0; uint public constant INIT_POOL_SUPPLY = BONE * 100; uint public constant MIN_BPOW_BASE = 1 wei; uint public constant MAX_BPOW_BASE = (2 * BONE) - 1 wei; uint public constant BPOW_PRECISION = BONE / 10**10; uint public constant MAX_IN_RATIO = BONE / 2; uint public constant MAX_OUT_RATIO = (BONE / 3) + 1 wei; }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.6.12; // abstract contract BColor { // function getColor() // external view virtual // returns (bytes32); // } contract BBronze { function getColor() external pure returns (bytes32) { return bytes32("BRONZE"); } }
{ "optimizer": { "enabled": true, "runs": 20 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract ABI
API[{"inputs":[{"internalType":"address","name":"twapOracle_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"feed","type":"address"},{"indexed":false,"internalType":"string","name":"symbol","type":"string"}],"name":"FeedSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"NewAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousPriceMantissa","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"requestedPriceMantissa","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPriceMantissa","type":"uint256"}],"name":"PricePosted","type":"event"},{"inputs":[],"name":"BONE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BPOW_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EXIT_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INIT_POOL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BOUND_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BPOW_BASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_IN_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_OUT_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOTAL_WEIGHT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_WEIGHT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_BALANCE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_BOUND_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_BPOW_BASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_WEIGHT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"assetPrices","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"poolTokens","type":"address[]"},{"internalType":"uint256[]","name":"actualAmountsOut","type":"uint256[]"}],"name":"getAllPrice","outputs":[{"internalType":"uint256","name":"fundAll","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getColor","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"string","name":"symbol","type":"string"}],"name":"getFeed","outputs":[{"internalType":"contract AggregatorV2V3Interface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setDirectPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"feed","type":"address"}],"name":"setFeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"twapOracle","outputs":[{"internalType":"contract IUniswapOracle","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506040516112fb3803806112fb8339818101604052602081101561003357600080fd5b5051600080546001600160a01b03199081163317909155600180546001600160a01b0390931692909116919091179055611289806100726000396000f3fe608060405234801561001057600080fd5b506004361061013e5760003560e01c806309a3bbe41461014357806309a8acb01461015d5780630c607acf1461018b578063189d00ca14610202578063218b53821461020a5780633b39a51c1461021257806341976e09146102d2578063422b66f4146102f85780635e9a523c146103b6578063704b6c02146103dc57806376c7a3c714610402578063867378c51461040a5780639043292a146104125780639381cd2b1461041a578063992e2a92146104225780639a86139b1461042a578063b0e0d13614610432578063b7b800a41461043a578063ba019dab1461043a578063bc063e1a14610442578063bc694ea21461044a578063c36596a61461020a578063c6580d121461040a578063e4a28a5214610143578063ec09302114610452578063f851a4401461045a575b600080fd5b61014b610462565b60408051918252519081900360200190f35b6101896004803603604081101561017357600080fd5b506001600160a01b03813516906020013561046f565b005b610189600480360360408110156101a157600080fd5b810190602081018135600160201b8111156101bb57600080fd5b8201836020820111156101cd57600080fd5b803590602001918460018302840111600160201b831117156101ee57600080fd5b9193509150356001600160a01b031661053e565b61014b6106d9565b61014b6106ed565b6102b66004803603602081101561022857600080fd5b810190602081018135600160201b81111561024257600080fd5b82018360208201111561025457600080fd5b803590602001918460018302840111600160201b8311171561027557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506106f9945050505050565b604080516001600160a01b039092168252519081900360200190f35b61014b600480360360208110156102e857600080fd5b50356001600160a01b0316610797565b61014b6004803603604081101561030e57600080fd5b810190602081018135600160201b81111561032857600080fd5b82018360208201111561033a57600080fd5b803590602001918460208302840111600160201b8311171561035b57600080fd5b919390929091602081019035600160201b81111561037857600080fd5b82018360208201111561038a57600080fd5b803590602001918460208302840111600160201b831117156103ab57600080fd5b509092509050610a4c565b61014b600480360360208110156103cc57600080fd5b50356001600160a01b0316610b05565b610189600480360360208110156103f257600080fd5b50356001600160a01b0316610b20565b61014b610c26565b61014b610c38565b6102b6610c3d565b61014b610c4c565b61014b610c59565b61014b610c65565b61014b610c72565b61014b610c77565b61014b610c7c565b61014b610c8c565b61014b610c98565b6102b6610ca8565b6802b5e3af16b188000081565b6000546001600160a01b031633146104c4576040805162461bcd60e51b81526020600482015260136024820152721bdb9b1e4818591b5a5b881b585e4818d85b1b606a1b604482015290519081900360640190fd5b6001600160a01b0382166000818152600260209081526040918290205482519384529083015281810183905260608201839052517fdd71a1d19fcba687442a1d5c58578f1e409af71a79d10fd95a4d66efd8fa9ae79181900360800190a16001600160a01b03909116600090815260026020526040902055565b6000546001600160a01b03163314610593576040805162461bcd60e51b81526020600482015260136024820152721bdb9b1e4818591b5a5b881b585e4818d85b1b606a1b604482015290519081900360640190fd5b6001600160a01b038116158015906105b457506001600160a01b0381163014155b6105fc576040805162461bcd60e51b8152602060048201526014602482015273696e76616c69642066656564206164647265737360601b604482015290519081900360640190fd5b7fd9e7d1778ca05570ced72c9aeb12a41fcc76f7f57ea25853dea228f8836d002281848460405180846001600160a01b03168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a18060036000858560405160200180838380828437808301925050509250505060405160208183030381529060405280519060200120815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b6402540be400670de0b6b3a76400005b0481565b670de0b6b3a764000081565b600060036000836040516020018082805190602001908083835b602083106107325780518252601f199092019160209182019101610713565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120815260200190815260200160002060009054906101000a90046001600160a01b031690505b919050565b60008082905060006108cb826001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156107db57600080fd5b505afa1580156107ef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561081857600080fd5b8101908080516040519392919084600160201b82111561083757600080fd5b90830190602082018581111561084c57600080fd5b8251600160201b81118282018810171561086557600080fd5b82525081516020918201929091019080838360005b8381101561089257818101518382015260200161087a565b50505050905090810190601f1680156108bf5780820380516001836020036101000a031916815260200191505b506040525050506106f9565b6001600160a01b0383166000908152600260205260409020549091501561090c576001600160a01b0382166000908152600260205260409020549250610997565b6001600160a01b0381161561092b5761092481610cb7565b9250610997565b60015460408051630e0dc3b960e11b81526001600160a01b03858116600483015291519190921691631c1b877291602480830192600092919082900301818387803b15801561097957600080fd5b505af192505050801561098a575060015b5061099484610e1c565b92505b600080610a0d846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156109d657600080fd5b505afa1580156109ea573d6000803e3d6000fd5b505050506040513d6020811015610a0057600080fd5b505160129060ff16610f34565b915091508015610a3057610a2585600a84900a610f5a565b945050505050610792565b80610a4357610a2585600a84900a610fbc565b50505050919050565b6000838214610a93576040805162461bcd60e51b815260206004820152600e60248201526d092dcecc2d8d2c84098cadccee8d60931b604482015290519081900360640190fd5b60005b84811015610afc576000868683818110610aac57fe5b905060200201356001600160a01b031690506000858584818110610acc57fe5b905060200201359050610af084610aeb610ae585610797565b84610ffb565b6110bf565b93505050600101610a96565b50949350505050565b6001600160a01b031660009081526002602052604090205490565b6000546001600160a01b03163314610b75576040805162461bcd60e51b81526020600482015260136024820152721bdb9b1e4818591b5a5b881b585e4818d85b1b606a1b604482015290519081900360640190fd5b6001600160a01b038116610bc3576040805162461bcd60e51b815260206004820152601060248201526f4552525f5a45524f5f4144445245535360801b604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b0319831681179093556040805191909216808252602082019390935281517ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc929181900390910190a15050565b620f4240670de0b6b3a76400006106e9565b600081565b6001546001600160a01b031681565b68056bc75e2d6310000081565b6704a03ce68d21555681565b6542524f4e5a4560d01b90565b601081565b600181565b600a670de0b6b3a76400006106e9565b671bc16d674ec7ffff81565b6002670de0b6b3a76400006106e9565b6000546001600160a01b031681565b600080610d2c6012846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610cf857600080fd5b505afa158015610d0c573d6000803e3d6000fd5b505050506040513d6020811015610d2257600080fd5b505160ff1661110c565b90508015610dae57610da681600a0a846001600160a01b03166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d7457600080fd5b505afa158015610d88573d6000803e3d6000fd5b505050506040513d6020811015610d9e57600080fd5b505190610f5a565b915050610792565b826001600160a01b03166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610de757600080fd5b505afa158015610dfb573d6000803e3d6000fd5b505050506040513d6020811015610e1157600080fd5b505191506107929050565b6000808290506000600160009054906101000a90046001600160a01b03166001600160a01b0316633ddac95385846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610e8257600080fd5b505afa158015610e96573d6000803e3d6000fd5b505050506040513d6020811015610eac57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260ff909116600a0a6024830152516044808301926020929190829003018186803b158015610f0057600080fd5b505afa158015610f14573d6000803e3d6000fd5b505050506040513d6020811015610f2a57600080fd5b5051949350505050565b60008082841115610f4b5750508082036001610f53565b505081810360005b9250929050565b600082610f6957506000610fb6565b82820282848281610f7657fe5b0414610fb35760405162461bcd60e51b81526004018080602001828103825260218152602001806112336021913960400191505060405180910390fd5b90505b92915050565b6000610fb383836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b81525061116e565b600082820283158061101557508284828161101257fe5b04145b611059576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6706f05b59d3b200008101818110156110ac576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b670de0b6b3a76400009004949350505050565b600082820183811015610fb3576040805162461bcd60e51b815260206004820152601060248201526f4552525f4144445f4f564552464c4f5760801b604482015290519081900360640190fd5b600080600061111b8585611210565b915091508015611166576040805162461bcd60e51b81526020600482015260116024820152704552525f5355425f554e444552464c4f5760781b604482015290519081900360640190fd5b509392505050565b600081836111fa5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156111bf5781810151838201526020016111a7565b50505050905090810190601f1680156111ec5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161120657fe5b0495945050505050565b6000808284106112265750508082036000610f53565b50508181036001610f5356fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220670d87b200913744c7feca57fa7e8cca8e92ea0846ee3e4a7dea10cb7e32def064736f6c634300060c00330000000000000000000000004efe48e7ee67c7ef300b0a8e84e6ac0b12b54f6f
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061013e5760003560e01c806309a3bbe41461014357806309a8acb01461015d5780630c607acf1461018b578063189d00ca14610202578063218b53821461020a5780633b39a51c1461021257806341976e09146102d2578063422b66f4146102f85780635e9a523c146103b6578063704b6c02146103dc57806376c7a3c714610402578063867378c51461040a5780639043292a146104125780639381cd2b1461041a578063992e2a92146104225780639a86139b1461042a578063b0e0d13614610432578063b7b800a41461043a578063ba019dab1461043a578063bc063e1a14610442578063bc694ea21461044a578063c36596a61461020a578063c6580d121461040a578063e4a28a5214610143578063ec09302114610452578063f851a4401461045a575b600080fd5b61014b610462565b60408051918252519081900360200190f35b6101896004803603604081101561017357600080fd5b506001600160a01b03813516906020013561046f565b005b610189600480360360408110156101a157600080fd5b810190602081018135600160201b8111156101bb57600080fd5b8201836020820111156101cd57600080fd5b803590602001918460018302840111600160201b831117156101ee57600080fd5b9193509150356001600160a01b031661053e565b61014b6106d9565b61014b6106ed565b6102b66004803603602081101561022857600080fd5b810190602081018135600160201b81111561024257600080fd5b82018360208201111561025457600080fd5b803590602001918460018302840111600160201b8311171561027557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506106f9945050505050565b604080516001600160a01b039092168252519081900360200190f35b61014b600480360360208110156102e857600080fd5b50356001600160a01b0316610797565b61014b6004803603604081101561030e57600080fd5b810190602081018135600160201b81111561032857600080fd5b82018360208201111561033a57600080fd5b803590602001918460208302840111600160201b8311171561035b57600080fd5b919390929091602081019035600160201b81111561037857600080fd5b82018360208201111561038a57600080fd5b803590602001918460208302840111600160201b831117156103ab57600080fd5b509092509050610a4c565b61014b600480360360208110156103cc57600080fd5b50356001600160a01b0316610b05565b610189600480360360208110156103f257600080fd5b50356001600160a01b0316610b20565b61014b610c26565b61014b610c38565b6102b6610c3d565b61014b610c4c565b61014b610c59565b61014b610c65565b61014b610c72565b61014b610c77565b61014b610c7c565b61014b610c8c565b61014b610c98565b6102b6610ca8565b6802b5e3af16b188000081565b6000546001600160a01b031633146104c4576040805162461bcd60e51b81526020600482015260136024820152721bdb9b1e4818591b5a5b881b585e4818d85b1b606a1b604482015290519081900360640190fd5b6001600160a01b0382166000818152600260209081526040918290205482519384529083015281810183905260608201839052517fdd71a1d19fcba687442a1d5c58578f1e409af71a79d10fd95a4d66efd8fa9ae79181900360800190a16001600160a01b03909116600090815260026020526040902055565b6000546001600160a01b03163314610593576040805162461bcd60e51b81526020600482015260136024820152721bdb9b1e4818591b5a5b881b585e4818d85b1b606a1b604482015290519081900360640190fd5b6001600160a01b038116158015906105b457506001600160a01b0381163014155b6105fc576040805162461bcd60e51b8152602060048201526014602482015273696e76616c69642066656564206164647265737360601b604482015290519081900360640190fd5b7fd9e7d1778ca05570ced72c9aeb12a41fcc76f7f57ea25853dea228f8836d002281848460405180846001600160a01b03168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a18060036000858560405160200180838380828437808301925050509250505060405160208183030381529060405280519060200120815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b6402540be400670de0b6b3a76400005b0481565b670de0b6b3a764000081565b600060036000836040516020018082805190602001908083835b602083106107325780518252601f199092019160209182019101610713565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120815260200190815260200160002060009054906101000a90046001600160a01b031690505b919050565b60008082905060006108cb826001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156107db57600080fd5b505afa1580156107ef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561081857600080fd5b8101908080516040519392919084600160201b82111561083757600080fd5b90830190602082018581111561084c57600080fd5b8251600160201b81118282018810171561086557600080fd5b82525081516020918201929091019080838360005b8381101561089257818101518382015260200161087a565b50505050905090810190601f1680156108bf5780820380516001836020036101000a031916815260200191505b506040525050506106f9565b6001600160a01b0383166000908152600260205260409020549091501561090c576001600160a01b0382166000908152600260205260409020549250610997565b6001600160a01b0381161561092b5761092481610cb7565b9250610997565b60015460408051630e0dc3b960e11b81526001600160a01b03858116600483015291519190921691631c1b877291602480830192600092919082900301818387803b15801561097957600080fd5b505af192505050801561098a575060015b5061099484610e1c565b92505b600080610a0d846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156109d657600080fd5b505afa1580156109ea573d6000803e3d6000fd5b505050506040513d6020811015610a0057600080fd5b505160129060ff16610f34565b915091508015610a3057610a2585600a84900a610f5a565b945050505050610792565b80610a4357610a2585600a84900a610fbc565b50505050919050565b6000838214610a93576040805162461bcd60e51b815260206004820152600e60248201526d092dcecc2d8d2c84098cadccee8d60931b604482015290519081900360640190fd5b60005b84811015610afc576000868683818110610aac57fe5b905060200201356001600160a01b031690506000858584818110610acc57fe5b905060200201359050610af084610aeb610ae585610797565b84610ffb565b6110bf565b93505050600101610a96565b50949350505050565b6001600160a01b031660009081526002602052604090205490565b6000546001600160a01b03163314610b75576040805162461bcd60e51b81526020600482015260136024820152721bdb9b1e4818591b5a5b881b585e4818d85b1b606a1b604482015290519081900360640190fd5b6001600160a01b038116610bc3576040805162461bcd60e51b815260206004820152601060248201526f4552525f5a45524f5f4144445245535360801b604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b0319831681179093556040805191909216808252602082019390935281517ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc929181900390910190a15050565b620f4240670de0b6b3a76400006106e9565b600081565b6001546001600160a01b031681565b68056bc75e2d6310000081565b6704a03ce68d21555681565b6542524f4e5a4560d01b90565b601081565b600181565b600a670de0b6b3a76400006106e9565b671bc16d674ec7ffff81565b6002670de0b6b3a76400006106e9565b6000546001600160a01b031681565b600080610d2c6012846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610cf857600080fd5b505afa158015610d0c573d6000803e3d6000fd5b505050506040513d6020811015610d2257600080fd5b505160ff1661110c565b90508015610dae57610da681600a0a846001600160a01b03166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d7457600080fd5b505afa158015610d88573d6000803e3d6000fd5b505050506040513d6020811015610d9e57600080fd5b505190610f5a565b915050610792565b826001600160a01b03166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610de757600080fd5b505afa158015610dfb573d6000803e3d6000fd5b505050506040513d6020811015610e1157600080fd5b505191506107929050565b6000808290506000600160009054906101000a90046001600160a01b03166001600160a01b0316633ddac95385846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610e8257600080fd5b505afa158015610e96573d6000803e3d6000fd5b505050506040513d6020811015610eac57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260ff909116600a0a6024830152516044808301926020929190829003018186803b158015610f0057600080fd5b505afa158015610f14573d6000803e3d6000fd5b505050506040513d6020811015610f2a57600080fd5b5051949350505050565b60008082841115610f4b5750508082036001610f53565b505081810360005b9250929050565b600082610f6957506000610fb6565b82820282848281610f7657fe5b0414610fb35760405162461bcd60e51b81526004018080602001828103825260218152602001806112336021913960400191505060405180910390fd5b90505b92915050565b6000610fb383836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b81525061116e565b600082820283158061101557508284828161101257fe5b04145b611059576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6706f05b59d3b200008101818110156110ac576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b670de0b6b3a76400009004949350505050565b600082820183811015610fb3576040805162461bcd60e51b815260206004820152601060248201526f4552525f4144445f4f564552464c4f5760801b604482015290519081900360640190fd5b600080600061111b8585611210565b915091508015611166576040805162461bcd60e51b81526020600482015260116024820152704552525f5355425f554e444552464c4f5760781b604482015290519081900360640190fd5b509392505050565b600081836111fa5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156111bf5781810151838201526020016111a7565b50505050905090810190601f1680156111ec5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161120657fe5b0495945050505050565b6000808284106112265750508082036000610f53565b50508181036001610f5356fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220670d87b200913744c7feca57fa7e8cca8e92ea0846ee3e4a7dea10cb7e32def064736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004efe48e7ee67c7ef300b0a8e84e6ac0b12b54f6f
-----Decoded View---------------
Arg [0] : twapOracle_ (address): 0x4Efe48E7EE67C7EF300b0A8E84E6ac0B12B54F6f
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000004efe48e7ee67c7ef300b0a8e84e6ac0b12b54f6f
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.