Source Code
Overview
S Balance
0 S
More Info
ContractCreator
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x6cE37168...dAd4C0C58 The constructor portion of the code might be different and could alter the actual behaviour of the contract
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": {} }
[{"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"}]
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061013e5760003560e01c806309a3bbe41461014357806309a8acb01461015d5780630c607acf1461018b578063189d00ca14610202578063218b53821461020a5780633b39a51c1461021257806341976e09146102d2578063422b66f4146102f85780635e9a523c146103b6578063704b6c02146103dc57806376c7a3c714610402578063867378c51461040a5780639043292a146104125780639381cd2b1461041a578063992e2a92146104225780639a86139b1461042a578063b0e0d13614610432578063b7b800a41461043a578063ba019dab1461043a578063bc063e1a14610442578063bc694ea21461044a578063c36596a61461020a578063c6580d121461040a578063e4a28a5214610143578063ec09302114610452578063f851a4401461045a575b600080fd5b61014b610462565b60408051918252519081900360200190f35b6101896004803603604081101561017357600080fd5b506001600160a01b03813516906020013561046f565b005b610189600480360360408110156101a157600080fd5b810190602081018135600160201b8111156101bb57600080fd5b8201836020820111156101cd57600080fd5b803590602001918460018302840111600160201b831117156101ee57600080fd5b9193509150356001600160a01b031661053e565b61014b6106d9565b61014b6106ed565b6102b66004803603602081101561022857600080fd5b810190602081018135600160201b81111561024257600080fd5b82018360208201111561025457600080fd5b803590602001918460018302840111600160201b8311171561027557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506106f9945050505050565b604080516001600160a01b039092168252519081900360200190f35b61014b600480360360208110156102e857600080fd5b50356001600160a01b0316610797565b61014b6004803603604081101561030e57600080fd5b810190602081018135600160201b81111561032857600080fd5b82018360208201111561033a57600080fd5b803590602001918460208302840111600160201b8311171561035b57600080fd5b919390929091602081019035600160201b81111561037857600080fd5b82018360208201111561038a57600080fd5b803590602001918460208302840111600160201b831117156103ab57600080fd5b509092509050610a4c565b61014b600480360360208110156103cc57600080fd5b50356001600160a01b0316610b05565b610189600480360360208110156103f257600080fd5b50356001600160a01b0316610b20565b61014b610c26565b61014b610c38565b6102b6610c3d565b61014b610c4c565b61014b610c59565b61014b610c65565b61014b610c72565b61014b610c77565b61014b610c7c565b61014b610c8c565b61014b610c98565b6102b6610ca8565b6802b5e3af16b188000081565b6000546001600160a01b031633146104c4576040805162461bcd60e51b81526020600482015260136024820152721bdb9b1e4818591b5a5b881b585e4818d85b1b606a1b604482015290519081900360640190fd5b6001600160a01b0382166000818152600260209081526040918290205482519384529083015281810183905260608201839052517fdd71a1d19fcba687442a1d5c58578f1e409af71a79d10fd95a4d66efd8fa9ae79181900360800190a16001600160a01b03909116600090815260026020526040902055565b6000546001600160a01b03163314610593576040805162461bcd60e51b81526020600482015260136024820152721bdb9b1e4818591b5a5b881b585e4818d85b1b606a1b604482015290519081900360640190fd5b6001600160a01b038116158015906105b457506001600160a01b0381163014155b6105fc576040805162461bcd60e51b8152602060048201526014602482015273696e76616c69642066656564206164647265737360601b604482015290519081900360640190fd5b7fd9e7d1778ca05570ced72c9aeb12a41fcc76f7f57ea25853dea228f8836d002281848460405180846001600160a01b03168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a18060036000858560405160200180838380828437808301925050509250505060405160208183030381529060405280519060200120815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b6402540be400670de0b6b3a76400005b0481565b670de0b6b3a764000081565b600060036000836040516020018082805190602001908083835b602083106107325780518252601f199092019160209182019101610713565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120815260200190815260200160002060009054906101000a90046001600160a01b031690505b919050565b60008082905060006108cb826001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156107db57600080fd5b505afa1580156107ef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561081857600080fd5b8101908080516040519392919084600160201b82111561083757600080fd5b90830190602082018581111561084c57600080fd5b8251600160201b81118282018810171561086557600080fd5b82525081516020918201929091019080838360005b8381101561089257818101518382015260200161087a565b50505050905090810190601f1680156108bf5780820380516001836020036101000a031916815260200191505b506040525050506106f9565b6001600160a01b0383166000908152600260205260409020549091501561090c576001600160a01b0382166000908152600260205260409020549250610997565b6001600160a01b0381161561092b5761092481610cb7565b9250610997565b60015460408051630e0dc3b960e11b81526001600160a01b03858116600483015291519190921691631c1b877291602480830192600092919082900301818387803b15801561097957600080fd5b505af192505050801561098a575060015b5061099484610e1c565b92505b600080610a0d846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156109d657600080fd5b505afa1580156109ea573d6000803e3d6000fd5b505050506040513d6020811015610a0057600080fd5b505160129060ff16610f34565b915091508015610a3057610a2585600a84900a610f5a565b945050505050610792565b80610a4357610a2585600a84900a610fbc565b50505050919050565b6000838214610a93576040805162461bcd60e51b815260206004820152600e60248201526d092dcecc2d8d2c84098cadccee8d60931b604482015290519081900360640190fd5b60005b84811015610afc576000868683818110610aac57fe5b905060200201356001600160a01b031690506000858584818110610acc57fe5b905060200201359050610af084610aeb610ae585610797565b84610ffb565b6110bf565b93505050600101610a96565b50949350505050565b6001600160a01b031660009081526002602052604090205490565b6000546001600160a01b03163314610b75576040805162461bcd60e51b81526020600482015260136024820152721bdb9b1e4818591b5a5b881b585e4818d85b1b606a1b604482015290519081900360640190fd5b6001600160a01b038116610bc3576040805162461bcd60e51b815260206004820152601060248201526f4552525f5a45524f5f4144445245535360801b604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b0319831681179093556040805191909216808252602082019390935281517ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc929181900390910190a15050565b620f4240670de0b6b3a76400006106e9565b600081565b6001546001600160a01b031681565b68056bc75e2d6310000081565b6704a03ce68d21555681565b6542524f4e5a4560d01b90565b601081565b600181565b600a670de0b6b3a76400006106e9565b671bc16d674ec7ffff81565b6002670de0b6b3a76400006106e9565b6000546001600160a01b031681565b600080610d2c6012846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610cf857600080fd5b505afa158015610d0c573d6000803e3d6000fd5b505050506040513d6020811015610d2257600080fd5b505160ff1661110c565b90508015610dae57610da681600a0a846001600160a01b03166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d7457600080fd5b505afa158015610d88573d6000803e3d6000fd5b505050506040513d6020811015610d9e57600080fd5b505190610f5a565b915050610792565b826001600160a01b03166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610de757600080fd5b505afa158015610dfb573d6000803e3d6000fd5b505050506040513d6020811015610e1157600080fd5b505191506107929050565b6000808290506000600160009054906101000a90046001600160a01b03166001600160a01b0316633ddac95385846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610e8257600080fd5b505afa158015610e96573d6000803e3d6000fd5b505050506040513d6020811015610eac57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260ff909116600a0a6024830152516044808301926020929190829003018186803b158015610f0057600080fd5b505afa158015610f14573d6000803e3d6000fd5b505050506040513d6020811015610f2a57600080fd5b5051949350505050565b60008082841115610f4b5750508082036001610f53565b505081810360005b9250929050565b600082610f6957506000610fb6565b82820282848281610f7657fe5b0414610fb35760405162461bcd60e51b81526004018080602001828103825260218152602001806112336021913960400191505060405180910390fd5b90505b92915050565b6000610fb383836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b81525061116e565b600082820283158061101557508284828161101257fe5b04145b611059576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6706f05b59d3b200008101818110156110ac576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b670de0b6b3a76400009004949350505050565b600082820183811015610fb3576040805162461bcd60e51b815260206004820152601060248201526f4552525f4144445f4f564552464c4f5760801b604482015290519081900360640190fd5b600080600061111b8585611210565b915091508015611166576040805162461bcd60e51b81526020600482015260116024820152704552525f5355425f554e444552464c4f5760781b604482015290519081900360640190fd5b509392505050565b600081836111fa5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156111bf5781810151838201526020016111a7565b50505050905090810190601f1680156111ec5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161120657fe5b0495945050505050565b6000808284106112265750508082036000610f53565b50508181036001610f5356fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220670d87b200913744c7feca57fa7e8cca8e92ea0846ee3e4a7dea10cb7e32def064736f6c634300060c0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.