Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
OraclePythStSUSDReader
Compiler Version
v0.8.24+commit.e11b9ed9
Optimization Enabled:
No with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity >=0.8.24 <0.9.0; import {PythAggregatorV3} from "./PythAggregatorV3.sol"; /// @title OraclePythStSUSDReader /// @notice A contract that reads stS/USD price data using Pyth oracles /// @dev Implements a Chainlink-compatible interface using two Pyth oracles contract OraclePythStSUSDReader { /// @notice The Pyth oracle for S/USD price PythAggregatorV3 public immutable oracleSUSD; /// @notice The Pyth oracle for stS/S price PythAggregatorV3 public immutable oracleStSS; /// @notice The decimals for this oracle's output (standard for USD price feeds) uint8 private constant DECIMALS = 8; /// @notice Initializes the contract with the Pyth oracle addresses /// @param _oracleSUSD The address of the S/USD Pyth oracle /// @param _oracleStSS The address of the stS/S Pyth oracle constructor(address _oracleSUSD, address _oracleStSS) { oracleSUSD = PythAggregatorV3(_oracleSUSD); oracleStSS = PythAggregatorV3(_oracleStSS); } /// @notice Gets the latest stS/USD price data in a Chainlink-compatible format /// @return roundId The timestamp of the latest update /// @return answer The latest price value of stS/USD /// @return startedAt The timestamp of the latest price update /// @return updatedAt The timestamp of the latest price update /// @return answeredInRound The timestamp of the latest update function latestRoundData() public view virtual returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ) { // Get S/USD price data ( , // uint80 sRoundId (unused) int256 sAnswer, // uint256 sStartedAt (unused) , uint256 sUpdatedAt, // uint80 sAnsweredInRound (unused) ) = oracleSUSD.latestRoundData(); // Get stS/S price data ( , // uint80 stSRoundId (unused) int256 stSAnswer, // uint256 stSStartedAt (unused) , uint256 stSUpdatedAt, // uint80 stSAnsweredInRound (unused) ) = oracleStSS.latestRoundData(); // Use the latest timestamp between the two oracles uint256 timestamp = sUpdatedAt >= stSUpdatedAt ? sUpdatedAt : stSUpdatedAt; // Calculate stS/USD price // Need to handle decimals correctly uint8 sDecimals = oracleSUSD.decimals(); uint8 stSDecimals = oracleStSS.decimals(); // Calculate stS/USD = stS/S * S/USD, adjusting for decimal differences int256 stSUSDPrice = (stSAnswer * sAnswer) / int256(10 ** uint256(sDecimals + stSDecimals - DECIMALS)); return ( uint80(timestamp), // Use timestamp as roundId like in PythAggregatorV3 stSUSDPrice, timestamp, timestamp, uint80(timestamp) ); } /// @notice Returns the number of decimal places in the oracle's price data /// @return The number of decimal places (8 for USD price feeds) function decimals() public pure virtual returns (uint8) { return DECIMALS; } /// @notice Returns a description of this oracle /// @return A string description function description() public pure returns (string memory) { return "Pyth Oracle for stS/USD price"; } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.24 <0.9.0; import "./PythStructs.sol"; import "./IPythEvents.sol"; /// @title Consume prices from the Pyth Network (https://pyth.network/). /// @dev Please refer to the guidance at https://docs.pyth.network/documentation/pythnet-price-feeds/best-practices for how to consume prices safely. /// @author Pyth Data Association interface IPyth is IPythEvents { /// @notice Returns the price of a price feed without any sanity checks. /// @dev This function returns the most recent price update in this contract without any recency checks. /// This function is unsafe as the returned price update may be arbitrarily far in the past. /// /// Users of this function should check the `publishTime` in the price to ensure that the returned price is /// sufficiently recent for their application. If you are considering using this function, it may be /// safer / easier to use `getPriceNoOlderThan`. /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely. function getPriceUnsafe( bytes32 id ) external view returns (PythStructs.Price memory price); /// @notice Returns the price that is no older than `age` seconds of the current time. /// @dev This function is a sanity-checked version of `getPriceUnsafe` which is useful in /// applications that require a sufficiently-recent price. Reverts if the price wasn't updated sufficiently /// recently. /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely. function getPriceNoOlderThan( bytes32 id, uint age ) external view returns (PythStructs.Price memory price); /// @notice Returns the exponentially-weighted moving average price of a price feed without any sanity checks. /// @dev This function returns the same price as `getEmaPrice` in the case where the price is available. /// However, if the price is not recent this function returns the latest available price. /// /// The returned price can be from arbitrarily far in the past; this function makes no guarantees that /// the returned price is recent or useful for any particular application. /// /// Users of this function should check the `publishTime` in the price to ensure that the returned price is /// sufficiently recent for their application. If you are considering using this function, it may be /// safer / easier to use either `getEmaPrice` or `getEmaPriceNoOlderThan`. /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely. function getEmaPriceUnsafe( bytes32 id ) external view returns (PythStructs.Price memory price); /// @notice Returns the exponentially-weighted moving average price that is no older than `age` seconds /// of the current time. /// @dev This function is a sanity-checked version of `getEmaPriceUnsafe` which is useful in /// applications that require a sufficiently-recent price. Reverts if the price wasn't updated sufficiently /// recently. /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely. function getEmaPriceNoOlderThan( bytes32 id, uint age ) external view returns (PythStructs.Price memory price); /// @notice Update price feeds with given update messages. /// This method requires the caller to pay a fee in wei; the required fee can be computed by calling /// `getUpdateFee` with the length of the `updateData` array. /// Prices will be updated if they are more recent than the current stored prices. /// The call will succeed even if the update is not the most recent. /// @dev Reverts if the transferred fee is not sufficient or the updateData is invalid. /// @param updateData Array of price update data. function updatePriceFeeds(bytes[] calldata updateData) external payable; /// @notice Wrapper around updatePriceFeeds that rejects fast if a price update is not necessary. A price update is /// necessary if the current on-chain publishTime is older than the given publishTime. It relies solely on the /// given `publishTimes` for the price feeds and does not read the actual price update publish time within `updateData`. /// /// This method requires the caller to pay a fee in wei; the required fee can be computed by calling /// `getUpdateFee` with the length of the `updateData` array. /// /// `priceIds` and `publishTimes` are two arrays with the same size that correspond to senders known publishTime /// of each priceId when calling this method. If all of price feeds within `priceIds` have updated and have /// a newer or equal publish time than the given publish time, it will reject the transaction to save gas. /// Otherwise, it calls updatePriceFeeds method to update the prices. /// /// @dev Reverts if update is not needed or the transferred fee is not sufficient or the updateData is invalid. /// @param updateData Array of price update data. /// @param priceIds Array of price ids. /// @param publishTimes Array of publishTimes. `publishTimes[i]` corresponds to known `publishTime` of `priceIds[i]` function updatePriceFeedsIfNecessary( bytes[] calldata updateData, bytes32[] calldata priceIds, uint64[] calldata publishTimes ) external payable; /// @notice Returns the required fee to update an array of price updates. /// @param updateData Array of price update data. /// @return feeAmount The required fee in Wei. function getUpdateFee( bytes[] calldata updateData ) external view returns (uint feeAmount); /// @notice Parse `updateData` and return price feeds of the given `priceIds` if they are all published /// within `minPublishTime` and `maxPublishTime`. /// /// You can use this method if you want to use a Pyth price at a fixed time and not the most recent price; /// otherwise, please consider using `updatePriceFeeds`. This method may store the price updates on-chain, if they /// are more recent than the current stored prices. /// /// This method requires the caller to pay a fee in wei; the required fee can be computed by calling /// `getUpdateFee` with the length of the `updateData` array. /// /// /// @dev Reverts if the transferred fee is not sufficient or the updateData is invalid or there is /// no update for any of the given `priceIds` within the given time range. /// @param updateData Array of price update data. /// @param priceIds Array of price ids. /// @param minPublishTime minimum acceptable publishTime for the given `priceIds`. /// @param maxPublishTime maximum acceptable publishTime for the given `priceIds`. /// @return priceFeeds Array of the price feeds corresponding to the given `priceIds` (with the same order). function parsePriceFeedUpdates( bytes[] calldata updateData, bytes32[] calldata priceIds, uint64 minPublishTime, uint64 maxPublishTime ) external payable returns (PythStructs.PriceFeed[] memory priceFeeds); /// @notice Similar to `parsePriceFeedUpdates` but ensures the updates returned are /// the first updates published in minPublishTime. That is, if there are multiple updates for a given timestamp, /// this method will return the first update. This method may store the price updates on-chain, if they /// are more recent than the current stored prices. /// /// /// @dev Reverts if the transferred fee is not sufficient or the updateData is invalid or there is /// no update for any of the given `priceIds` within the given time range and uniqueness condition. /// @param updateData Array of price update data. /// @param priceIds Array of price ids. /// @param minPublishTime minimum acceptable publishTime for the given `priceIds`. /// @param maxPublishTime maximum acceptable publishTime for the given `priceIds`. /// @return priceFeeds Array of the price feeds corresponding to the given `priceIds` (with the same order). function parsePriceFeedUpdatesUnique( bytes[] calldata updateData, bytes32[] calldata priceIds, uint64 minPublishTime, uint64 maxPublishTime ) external payable returns (PythStructs.PriceFeed[] memory priceFeeds); }
// SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.24 <0.9.0; /// @title IPythEvents contains the events that Pyth contract emits. /// @dev This interface can be used for listening to the updates for off-chain and testing purposes. interface IPythEvents { /// @dev Emitted when the price feed with `id` has received a fresh update. /// @param id The Pyth Price Feed ID. /// @param publishTime Publish time of the given price update. /// @param price Price of the given price update. /// @param conf Confidence interval of the given price update. event PriceFeedUpdate( bytes32 indexed id, uint64 publishTime, int64 price, uint64 conf ); }
// SPDX-License-Identifier: Apache 2 pragma solidity >=0.8.24 <0.9.0; import {PythStructs} from "./PythStructs.sol"; import {IPyth} from "./IPyth.sol"; // This interface is forked from the Zerolend Adapter found here: // https://github.com/zerolend/pyth-oracles/blob/master/contracts/PythAggregatorV3.sol // Original license found under licenses/zerolend-pyth-oracles.md /** * @title A port of the ChainlinkAggregatorV3 interface that supports Pyth price feeds * @notice This does not store any roundId information on-chain. Please review the code before using this implementation. * Users should deploy an instance of this contract to wrap every price feed id that they need to use. */ contract PythAggregatorV3 { bytes32 public priceId; IPyth public pyth; constructor(address _pyth, bytes32 _priceId) { pyth = IPyth(_pyth); priceId = _priceId; } // Wrapper function to update the underlying Pyth price feeds. Not part of the AggregatorV3 interface but useful. function updateFeeds(bytes[] calldata priceUpdateData) public payable { // Update the prices to the latest available values and pay the required fee for it. The `priceUpdateData` data // should be retrieved from our off-chain Price Service API using the `pyth-evm-js` package. // See section "How Pyth Works on EVM Chains" below for more information. uint fee = pyth.getUpdateFee(priceUpdateData); pyth.updatePriceFeeds{value: fee}(priceUpdateData); // refund remaining eth payable(msg.sender).call{value: address(this).balance}(""); } function decimals() public view virtual returns (uint8) { PythStructs.Price memory price = pyth.getPriceUnsafe(priceId); return uint8(-1 * int8(price.expo)); } function description() public pure returns (string memory) { return "A port of a chainlink aggregator powered by pyth network feeds"; } function version() public pure returns (uint256) { return 1; } function latestAnswer() public view virtual returns (int256) { PythStructs.Price memory price = pyth.getPriceUnsafe(priceId); return int256(price.price); } function latestTimestamp() public view returns (uint256) { PythStructs.Price memory price = pyth.getPriceUnsafe(priceId); return price.publishTime; } function latestRound() public view returns (uint256) { // use timestamp as the round id return latestTimestamp(); } function getAnswer(uint256) public view returns (int256) { return latestAnswer(); } function getTimestamp(uint256) external view returns (uint256) { return latestTimestamp(); } function getRoundData( uint80 _roundId ) external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ) { PythStructs.Price memory price = pyth.getPriceUnsafe(priceId); return ( _roundId, int256(price.price), price.publishTime, price.publishTime, _roundId ); } function latestRoundData() external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ) { PythStructs.Price memory price = pyth.getPriceUnsafe(priceId); roundId = uint80(price.publishTime); return ( roundId, int256(price.price), price.publishTime, price.publishTime, roundId ); } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.24 <0.9.0; contract PythStructs { // A price with a degree of uncertainty, represented as a price +- a confidence interval. // // The confidence interval roughly corresponds to the standard error of a normal distribution. // Both the price and confidence are stored in a fixed-point numeric representation, // `x * (10^expo)`, where `expo` is the exponent. // // Please refer to the documentation at https://docs.pyth.network/documentation/pythnet-price-feeds/best-practices for how // to how this price safely. struct Price { // Price int64 price; // Confidence interval around the price uint64 conf; // Price exponent int32 expo; // Unix timestamp describing when the price was published uint publishTime; } // PriceFeed represents a current aggregate price from pyth publisher feeds. struct PriceFeed { // The price ID. bytes32 id; // Latest available price Price price; // Latest available exponentially-weighted moving average price Price emaPrice; } }
{ "viaIR": true, "evmVersion": "paris", "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_oracleSUSD","type":"address"},{"internalType":"address","name":"_oracleStSS","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"latestRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracleSUSD","outputs":[{"internalType":"contract PythAggregatorV3","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracleStSS","outputs":[{"internalType":"contract PythAggregatorV3","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60c06040523462000065576200001f6200001862000155565b90620001bd565b620000296200006b565b610ad2620001dc823960805181818161026c015281816107940152610893015260a05181818160f30152818161080501526108fc0152610ad290f35b62000071565b60405190565b600080fd5b601f801991011690565b634e487b7160e01b600052604160045260246000fd5b90620000a29062000076565b810190811060018060401b03821117620000bb57604052565b62000080565b90620000d8620000d06200006b565b928362000096565b565b600080fd5b60018060a01b031690565b620000f590620000df565b90565b6200010381620000ea565b036200010b57565b600080fd5b905051906200011f82620000f8565b565b91906040838203126200014f5780620001426200014c926000860162000110565b9360200162000110565b90565b620000da565b6200017862000cae803803806200016c81620000c1565b92833981019062000121565b9091565b90565b62000198620001926200019e92620000df565b6200017c565b620000df565b90565b620001ac906200017f565b90565b620001ba90620001a1565b90565b90620001cd620001d692620001af565b608052620001af565b60a05256fe60806040526004361015610013575b610386565b61001e60003561006d565b8063313ce567146100685780635ba3b94e146100635780637284e4161461005e578063c4b6bece146100595763feaf968c0361000e5761034d565b61028e565b610235565b61017a565b6100bc565b60e01c90565b60405190565b600080fd5b600080fd5b600091031261008e57565b61007e565b60ff1690565b6100a290610093565b9052565b91906100ba90600060208501940190610099565b565b346100ec576100cc366004610083565b6100e86100d76103bc565b6100df610073565b918291826100a6565b0390f35b610079565b7f000000000000000000000000000000000000000000000000000000000000000090565b60018060a01b031690565b90565b61013761013261013c92610115565b610120565b610115565b90565b61014890610123565b90565b6101549061013f565b90565b6101609061014b565b9052565b919061017890600060208501940190610157565b565b346101aa5761018a366004610083565b6101a66101956100f1565b61019d610073565b91829182610164565b0390f35b610079565b5190565b60209181520190565b60005b8381106101d0575050906000910152565b8060209183015181850152016101bf565b601f801991011690565b61020a61021360209361021893610201816101af565b938480936101b3565b958691016101bc565b6101e1565b0190565b61023291602082019160008184039101526101eb565b90565b3461026557610245366004610083565b6102616102506104af565b610258610073565b9182918261021c565b0390f35b610079565b7f000000000000000000000000000000000000000000000000000000000000000090565b346102be5761029e366004610083565b6102ba6102a961026a565b6102b1610073565b91829182610164565b0390f35b610079565b69ffffffffffffffffffff1690565b6102db906102c3565b9052565b90565b6102eb906102df565b9052565b90565b6102fb906102ef565b9052565b9095949261034b9461033a6103449261033060809661032660a088019c60008901906102d2565b60208701906102e2565b60408501906102f2565b60608301906102f2565b01906102d2565b565b346103815761035d366004610083565b61037d61036861075c565b91610374959395610073565b958695866102ff565b0390f35b610079565b600080fd5b600090565b90565b6103a76103a26103ac92610390565b610120565b610093565b90565b6103b96008610393565b90565b6103c461038b565b506103cd6103af565b90565b606090565b634e487b7160e01b600052604160045260246000fd5b906103f5906101e1565b810190811067ffffffffffffffff82111761040f57604052565b6103d5565b90610427610420610073565b92836103eb565b565b67ffffffffffffffff8111610447576104436020916101e1565b0190565b6103d5565b9061045e61045983610429565b610414565b918252565b60007f50797468204f7261636c6520666f72207374532f555344207072696365000000910152565b610495601d61044c565b906104a260208301610463565b565b6104ac61048b565b90565b6104b76103d0565b506104c06104a4565b90565b600090565b600090565b600090565b60e01b90565b6104e1816102c3565b036104e857565b600080fd5b905051906104fa826104d8565b565b610505816102df565b0361050c57565b600080fd5b9050519061051e826104fc565b565b610529816102ef565b0361053057565b600080fd5b9050519061054282610520565b565b919060a0838203126105965761055d81600085016104ed565b9261056b8260208301610511565b9261059361057c8460408501610535565b9361058a8160608601610535565b936080016104ed565b90565b61007e565b60000190565b6105a9610073565b3d6000823e3d90fd5b6105bb81610093565b036105c257565b600080fd5b905051906105d4826105b2565b565b906020828203126105f0576105ed916000016105c7565b90565b61007e565b634e487b7160e01b600052601160045260246000fd5b61061a610620919392936102df565b926102df565b9161062c8382026102df565b92600160ff1b8114600083121661065057818405149015171561064b57565b6105f5565b6105f5565b61066161066791610093565b91610093565b019060ff821161067357565b6105f5565b61068461068a91610093565b91610093565b90039060ff821161069757565b6105f5565b6106b06106ab6106b592610093565b610120565b6102ef565b90565b6106c1906102ef565b604d81116106cf57600a0a90565b6105f5565b6106e86106e36106ed926102ef565b610120565b6102df565b90565b634e487b7160e01b600052601260045260246000fd5b610712610718916102df565b916102df565b90811561073b5760016000038214600160ff1b821416610736570590565b6105f5565b6106f0565b61075461074f610759926102ef565b610120565b6102c3565b90565b6107ce906107686104c3565b506107716104c8565b5061077a6104cd565b506107836104cd565b5061078c6104c3565b5060a06107b87f000000000000000000000000000000000000000000000000000000000000000061014b565b63feaf968c906107c6610073565b9485926104d2565b825281806107de6004820161059b565b03915afa918215610a975761083f9260008080809492505091610a65575b509060a06108297f000000000000000000000000000000000000000000000000000000000000000061014b565b63feaf968c90610837610073565b9687926104d2565b8252818061084f6004820161059b565b03915afa8015610a605760008080809792505091610a2c575b50938161087d610877836102ef565b916102ef565b1015600014610a2557505b926108cd60206108b77f000000000000000000000000000000000000000000000000000000000000000061014b565b63313ce567906108c5610073565b9384926104d2565b825281806108dd6004820161059b565b03915afa8015610a2057610936916000916109f2575b509160206109207f000000000000000000000000000000000000000000000000000000000000000061014b565b63313ce5679061092e610073565b9485926104d2565b825281806109466004820161059b565b03915afa9182156109ed5761098d61097f610997936109796109a29861099c97610992966000916109bf575b509261060b565b96610655565b6109876103af565b90610678565b61069c565b6106b8565b6106d4565b90610706565b916109ac81610740565b81926109b783610740565b919493929190565b6109e0915060203d81116109e6575b6109d881836103eb565b8101906105d6565b38610972565b503d6109ce565b6105a1565b610a13915060203d8111610a19575b610a0b81836103eb565b8101906105d6565b386108f3565b503d610a01565b6105a1565b9050610888565b9050610a5091945060a03d8111610a59575b610a4881836103eb565b810190610544565b50959250610868565b503d610a3e565b6105a1565b9050610a88915060a03d8111610a90575b610a8081836103eb565b810190610544565b5092506107fc565b503d610a76565b6105a156fea2646970667358221220ffddffdb6201efa673ef77662965c2705ef580fb97479a3eb387c08da9f0975c64736f6c634300081800330000000000000000000000001310ea784fe561e1d099b6a4e49793b21251382a0000000000000000000000002c945a444dd20d88a3808cbc2d6093dc10f597b8
Deployed Bytecode
0x60806040526004361015610013575b610386565b61001e60003561006d565b8063313ce567146100685780635ba3b94e146100635780637284e4161461005e578063c4b6bece146100595763feaf968c0361000e5761034d565b61028e565b610235565b61017a565b6100bc565b60e01c90565b60405190565b600080fd5b600080fd5b600091031261008e57565b61007e565b60ff1690565b6100a290610093565b9052565b91906100ba90600060208501940190610099565b565b346100ec576100cc366004610083565b6100e86100d76103bc565b6100df610073565b918291826100a6565b0390f35b610079565b7f0000000000000000000000002c945a444dd20d88a3808cbc2d6093dc10f597b890565b60018060a01b031690565b90565b61013761013261013c92610115565b610120565b610115565b90565b61014890610123565b90565b6101549061013f565b90565b6101609061014b565b9052565b919061017890600060208501940190610157565b565b346101aa5761018a366004610083565b6101a66101956100f1565b61019d610073565b91829182610164565b0390f35b610079565b5190565b60209181520190565b60005b8381106101d0575050906000910152565b8060209183015181850152016101bf565b601f801991011690565b61020a61021360209361021893610201816101af565b938480936101b3565b958691016101bc565b6101e1565b0190565b61023291602082019160008184039101526101eb565b90565b3461026557610245366004610083565b6102616102506104af565b610258610073565b9182918261021c565b0390f35b610079565b7f0000000000000000000000001310ea784fe561e1d099b6a4e49793b21251382a90565b346102be5761029e366004610083565b6102ba6102a961026a565b6102b1610073565b91829182610164565b0390f35b610079565b69ffffffffffffffffffff1690565b6102db906102c3565b9052565b90565b6102eb906102df565b9052565b90565b6102fb906102ef565b9052565b9095949261034b9461033a6103449261033060809661032660a088019c60008901906102d2565b60208701906102e2565b60408501906102f2565b60608301906102f2565b01906102d2565b565b346103815761035d366004610083565b61037d61036861075c565b91610374959395610073565b958695866102ff565b0390f35b610079565b600080fd5b600090565b90565b6103a76103a26103ac92610390565b610120565b610093565b90565b6103b96008610393565b90565b6103c461038b565b506103cd6103af565b90565b606090565b634e487b7160e01b600052604160045260246000fd5b906103f5906101e1565b810190811067ffffffffffffffff82111761040f57604052565b6103d5565b90610427610420610073565b92836103eb565b565b67ffffffffffffffff8111610447576104436020916101e1565b0190565b6103d5565b9061045e61045983610429565b610414565b918252565b60007f50797468204f7261636c6520666f72207374532f555344207072696365000000910152565b610495601d61044c565b906104a260208301610463565b565b6104ac61048b565b90565b6104b76103d0565b506104c06104a4565b90565b600090565b600090565b600090565b60e01b90565b6104e1816102c3565b036104e857565b600080fd5b905051906104fa826104d8565b565b610505816102df565b0361050c57565b600080fd5b9050519061051e826104fc565b565b610529816102ef565b0361053057565b600080fd5b9050519061054282610520565b565b919060a0838203126105965761055d81600085016104ed565b9261056b8260208301610511565b9261059361057c8460408501610535565b9361058a8160608601610535565b936080016104ed565b90565b61007e565b60000190565b6105a9610073565b3d6000823e3d90fd5b6105bb81610093565b036105c257565b600080fd5b905051906105d4826105b2565b565b906020828203126105f0576105ed916000016105c7565b90565b61007e565b634e487b7160e01b600052601160045260246000fd5b61061a610620919392936102df565b926102df565b9161062c8382026102df565b92600160ff1b8114600083121661065057818405149015171561064b57565b6105f5565b6105f5565b61066161066791610093565b91610093565b019060ff821161067357565b6105f5565b61068461068a91610093565b91610093565b90039060ff821161069757565b6105f5565b6106b06106ab6106b592610093565b610120565b6102ef565b90565b6106c1906102ef565b604d81116106cf57600a0a90565b6105f5565b6106e86106e36106ed926102ef565b610120565b6102df565b90565b634e487b7160e01b600052601260045260246000fd5b610712610718916102df565b916102df565b90811561073b5760016000038214600160ff1b821416610736570590565b6105f5565b6106f0565b61075461074f610759926102ef565b610120565b6102c3565b90565b6107ce906107686104c3565b506107716104c8565b5061077a6104cd565b506107836104cd565b5061078c6104c3565b5060a06107b87f0000000000000000000000001310ea784fe561e1d099b6a4e49793b21251382a61014b565b63feaf968c906107c6610073565b9485926104d2565b825281806107de6004820161059b565b03915afa918215610a975761083f9260008080809492505091610a65575b509060a06108297f0000000000000000000000002c945a444dd20d88a3808cbc2d6093dc10f597b861014b565b63feaf968c90610837610073565b9687926104d2565b8252818061084f6004820161059b565b03915afa8015610a605760008080809792505091610a2c575b50938161087d610877836102ef565b916102ef565b1015600014610a2557505b926108cd60206108b77f0000000000000000000000001310ea784fe561e1d099b6a4e49793b21251382a61014b565b63313ce567906108c5610073565b9384926104d2565b825281806108dd6004820161059b565b03915afa8015610a2057610936916000916109f2575b509160206109207f0000000000000000000000002c945a444dd20d88a3808cbc2d6093dc10f597b861014b565b63313ce5679061092e610073565b9485926104d2565b825281806109466004820161059b565b03915afa9182156109ed5761098d61097f610997936109796109a29861099c97610992966000916109bf575b509261060b565b96610655565b6109876103af565b90610678565b61069c565b6106b8565b6106d4565b90610706565b916109ac81610740565b81926109b783610740565b919493929190565b6109e0915060203d81116109e6575b6109d881836103eb565b8101906105d6565b38610972565b503d6109ce565b6105a1565b610a13915060203d8111610a19575b610a0b81836103eb565b8101906105d6565b386108f3565b503d610a01565b6105a1565b9050610888565b9050610a5091945060a03d8111610a59575b610a4881836103eb565b810190610544565b50959250610868565b503d610a3e565b6105a1565b9050610a88915060a03d8111610a90575b610a8081836103eb565b810190610544565b5092506107fc565b503d610a76565b6105a156fea2646970667358221220ffddffdb6201efa673ef77662965c2705ef580fb97479a3eb387c08da9f0975c64736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000001310ea784fe561e1d099b6a4e49793b21251382a0000000000000000000000002c945a444dd20d88a3808cbc2d6093dc10f597b8
-----Decoded View---------------
Arg [0] : _oracleSUSD (address): 0x1310ea784fe561e1d099b6a4e49793b21251382A
Arg [1] : _oracleStSS (address): 0x2c945a444DD20D88A3808cBc2d6093Dc10f597b8
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000001310ea784fe561e1d099b6a4e49793b21251382a
Arg [1] : 0000000000000000000000002c945a444dd20d88a3808cbc2d6093dc10f597b8
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.