diff --git a/.openzeppelin/addresses-xdai.json b/.openzeppelin/addresses-xdai.json index 68fc06b4..28e07a37 100644 --- a/.openzeppelin/addresses-xdai.json +++ b/.openzeppelin/addresses-xdai.json @@ -71,10 +71,6 @@ "proxy": "0x36698BF676c40be119b0Fe4f964f4527943258F2", "contractName": "ChainlinkFeedAdapter" }, - "CARDOracle": { - "proxy": "0xd570Ed8b313Fe6aEEA4064bd1713b5Cc6d41D3C5", - "contractName": "DIAOracleAdapter" - }, "VersionManager": { "proxy": "0xd900133f96F85939335ADb9786ea9f2e07Bdf8c0", "contractName": "VersionManager" @@ -122,5 +118,13 @@ "AddPrepaidCardSKUHandler": { "proxy": "0xBdcd28A153F615c23508C98112a7EC628f9ce38D", "contractName": "AddPrepaidCardSKUHandler" + }, + "CARDOracle": { + "proxy": "0x426558d0cA2f9ec45EbBe4A69Ef10323d5941446", + "contractName": "ChainlinkFeedAdapter" + }, + "CARDUSDFeed": { + "proxy": "0xb62e47A584F9Db9fCbB3241966A12B24dF926261", + "contractName": "ManualFeed" } } diff --git a/package.json b/package.json index 5a92406f..30ceb707 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "deploy:xdai:config-only": "env HARDHAT_NETWORK=xdai yarn deploy:config-only", "deploy:xdai:upgrade-only:skip-verify": "env SKIP_VERIFY=true yarn deploy:xdai:upgrade-only", "deploy:xdai:version": "env HARDHAT_NETWORK=xdai yarn deploy:config:version", + "deploy:xdai:update-card-price": "env HARDHAT_NETWORK=xdai ./node_modules/.bin/hardhat run scripts/deploy/updateCardPrice.ts", "deploy:localhost": "yarn deploy:localhost:contracts && yarn deploy:localhost:config:manual-feeds && yarn deploy:localhost:config-only && yarn deploy:localhost:config:version", "deploy:localhost:contracts": "env HARDHAT_NETWORK=localhost SKIP_VERIFY=true yarn deploy:contracts", "deploy:localhost:config-only": "env HARDHAT_NETWORK=localhost yarn deploy:config-only", diff --git a/scripts/deploy/001_initialize_contracts.ts b/scripts/deploy/001_initialize_contracts.ts index f711b28c..7e65ea4e 100644 --- a/scripts/deploy/001_initialize_contracts.ts +++ b/scripts/deploy/001_initialize_contracts.ts @@ -158,10 +158,11 @@ async function main() { init: [owner], }; } - // only use mock DIA for private networks + // only use mock DIA for private networks, and as a temporary fix on xdai due to the DIA oracle being out of date if ( - ["hardhat", "localhost"].includes(network) && - !process.env.HARDHAT_FORKING + (["hardhat", "localhost"].includes(network) && + !process.env.HARDHAT_FORKING) || + network == "xdai" ) { contracts["CARDOracle"] = { contractName: "ChainlinkFeedAdapter", diff --git a/scripts/deploy/config/xdai/CARDOracle.ts b/scripts/deploy/config/xdai/CARDOracle.ts index c079f2aa..31ac0359 100644 --- a/scripts/deploy/config/xdai/CARDOracle.ts +++ b/scripts/deploy/config/xdai/CARDOracle.ts @@ -1,5 +1,9 @@ +import { + chainlinkETHUSDAddress, + chainlinkDAIUSDAddress, +} from "../../xdai-oracles"; + import { getAddress, AddressFile, ContractConfig } from "../../config-utils"; -import { diaOracleAddress, chainlinkDAIUSDAddress } from "../../xdai-oracles"; export default async function ( proxyAddresses: AddressFile @@ -10,17 +14,26 @@ export default async function ( return Promise.resolve({ setup: [ { - name: "oracle", - value: diaOracleAddress, + name: "tokenUsdFeed", + value: address("CARDUSDFeed"), }, { - name: "tokenSymbol", - value: "CARD", + name: "ethUsdFeed", + value: chainlinkETHUSDAddress, }, { name: "daiUsdFeed", value: chainlinkDAIUSDAddress, }, + { + name: "canSnapToUSD", + value: false, + }, + { + name: "snapThreshold", + value: 0, + formatter: (v) => `${(Number(v) / 100000000).toFixed(4)}%`, + }, { name: "versionManager", value: address("VersionManager"), diff --git a/scripts/deploy/updateCardPrice.ts b/scripts/deploy/updateCardPrice.ts new file mode 100644 index 00000000..6fafd2ef --- /dev/null +++ b/scripts/deploy/updateCardPrice.ts @@ -0,0 +1,44 @@ +import retry from "async-retry"; + +import hre from "hardhat"; +const { ethers } = hre; +import { patchNetworks, asyncMain, readAddressFile, getSigner } from "./util"; +import { AddressFile, getAddress } from "./config-utils"; +patchNetworks(); + +const { + network: { name: network }, +} = hre; + +async function main(proxyAddresses: AddressFile) { + proxyAddresses = proxyAddresses || readAddressFile(network); + let cardUsdFeedAddress = getAddress("CARDUSDFeed", proxyAddresses); + + let signer = getSigner(); + + let price = process.env.CARD_USD_PRICE; + + if (!price) { + throw new Error("Must provide env variable CARD_USD_PRICE"); + } + + let startedAt = Math.floor(Date.now() / 1000); + let updatedAt = startedAt; + await retry( + async () => { + console.log( + ` adding round: price ${price}, startedAt(unix) ${startedAt}, updatedAt(unix) ${updatedAt}` + ); + + let instance = ( + await ethers.getContractAt("ManualFeed", cardUsdFeedAddress) + ).connect(signer); + await instance.addRound(price, startedAt, updatedAt); + }, + { + retries: 3, + } + ); +} + +asyncMain(main);