diff --git a/.eslinttsconfigrc b/.eslinttsconfigrc index 2a6524fc..13355640 100644 --- a/.eslinttsconfigrc +++ b/.eslinttsconfigrc @@ -1,4 +1,4 @@ { "extends": "./tsconfig.json", - "include": ["deploy", "hardhat.config.ts", "subgraphs"] + "include": ["deploy", "hardhat.config.ts", "subgraphs", "type-extensions.ts"] } diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index dab48abf..940e97fc 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -47,7 +47,7 @@ jobs: run: yarn test integration-test-core-pool: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 needs: unit-test steps: - name: Checkout @@ -80,7 +80,7 @@ jobs: docker system prune -f -a --volumes integration-test-isolated-pools: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 needs: unit-test steps: - name: Checkout @@ -113,7 +113,7 @@ jobs: docker system prune -f -a --volumes integration-test-governance: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 needs: unit-test steps: - name: Checkout @@ -146,7 +146,7 @@ jobs: docker system prune -f -a --volumes release-cross-chain-governance: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 needs: [unit-test, lint] steps: - name: Checkout @@ -179,8 +179,8 @@ jobs: run: | yarn workspace @venusprotocol/cross-chain-governance-subgraph run semantic-release - release-etherfi-promo: - runs-on: ubuntu-20.04 + release-external-promos: + runs-on: ubuntu-22.04 needs: [unit-test, lint, release-cross-chain-governance] steps: - name: Checkout @@ -203,19 +203,19 @@ jobs: - name: Release subgraph env: - MAINNET_GRAPH_CLI_API_KEY: ${{ secrets.MAINNET_GRAPH_CLI_API_KEY }} - TESTNET_GRAPH_CLI_API_KEY: ${{ secrets.TESTNET_GRAPH_CLI_API_KEY }} + MAINNET_GRAPH_CLI_ALCHEMY_KEY: ${{ secrets.MAINNET_GRAPH_CLI_ALCHEMY_KEY }} + TESTNET_GRAPH_CLI_ALCHEMY_KEY: ${{ secrets.TESTNET_GRAPH_CLI_ALCHEMY_KEY }} GITHUB_TOKEN: ${{ secrets.VENUS_TOOLS_TOKEN }} GIT_AUTHOR_NAME: Venus Tools GIT_AUTHOR_EMAIL: tools@venus.io GIT_COMMITTER_NAME: Venus Tools GIT_COMMITTER_EMAIL: tools@venus.io run: | - yarn workspace @venusprotocol/etherfi-promo-subgraph run semantic-release + yarn workspace @venusprotocol/external-promos-subgraph run semantic-release release-isolated-pools: - runs-on: ubuntu-20.04 - needs: [unit-test, lint, integration-test-isolated-pools, release-etherfi-promo] + runs-on: ubuntu-22.04 + needs: [unit-test, lint, integration-test-isolated-pools, release-external-promos] steps: - name: Checkout uses: actions/checkout@v4 @@ -248,7 +248,7 @@ jobs: yarn workspace @venusprotocol/isolated-pools-subgraph run semantic-release release-protocol-reserve: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 needs: [unit-test, lint, release-isolated-pools] steps: - name: Checkout @@ -282,7 +282,7 @@ jobs: yarn workspace @venusprotocol/protocol-reserve-subgraph run semantic-release release-core-pool: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 needs: [unit-test, lint, integration-test-core-pool, release-protocol-reserve] steps: - name: Checkout @@ -316,7 +316,7 @@ jobs: yarn workspace @venusprotocol/core-pool-subgraph run semantic-release release-governance: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 needs: [unit-test, lint, integration-test-governance, release-core-pool] steps: - name: Checkout diff --git a/hardhat.config.ts b/hardhat.config.ts index 3a5ad62f..83d61d4d 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -3,7 +3,11 @@ import 'hardhat-deploy'; import "@nomicfoundation/hardhat-chai-matchers"; import "@nomiclabs/hardhat-ethers"; import 'hardhat-dependency-compiler'; -import { HardhatUserConfig } from 'hardhat/config'; +import { HardhatUserConfig, extendEnvironment } from "hardhat/config"; + +extendEnvironment(hre => { + hre.getNetworkName = () => process.env.HARDHAT_FORK_NETWORK || hre.network.name; +}); const compilers = { compilers: [ diff --git a/package.json b/package.json index 1fb9f6f1..bb532735 100644 --- a/package.json +++ b/package.json @@ -56,12 +56,12 @@ "@types/node": "^20.5.9", "@typescript-eslint/eslint-plugin": "^5.40.1", "@typescript-eslint/parser": "^5.40.1", - "@venusprotocol/governance-contracts": "2.7.0", - "@venusprotocol/isolated-pools": "3.7.1-dev.1", - "@venusprotocol/oracle": "2.7.0", - "@venusprotocol/protocol-reserve": "3.0.1", + "@venusprotocol/governance-contracts": "2.10.0", + "@venusprotocol/isolated-pools": "4.2.0-dev.9", + "@venusprotocol/oracle": "2.9.0", + "@venusprotocol/protocol-reserve": "3.1.0", "@venusprotocol/solidity-utilities": "^2.0.3", - "@venusprotocol/venus-protocol": "9.4.0", + "@venusprotocol/venus-protocol": "9.6.0", "assemblyscript": "0.19.23", "chai": "^4.3.6", "dotenv": "^16.4.5", @@ -88,9 +88,9 @@ "typescript": "^4.8.4" }, "resolutions": { - "@venusprotocol/governance-contracts": "2.7.0", - "@venusprotocol/venus-protocol": "9.4.0", - "@venusprotocol/protocol-reserve": "3.0.1", + "@venusprotocol/governance-contracts": "2.10.0", + "@venusprotocol/venus-protocol": "9.6.0", + "@venusprotocol/protocol-reserve": "3.1.0", "prettier": "^3.0.3" }, "husky": { diff --git a/subgraphs/cross-chain-governance/config/index.ts b/subgraphs/cross-chain-governance/config/index.ts index af043b44..24f5dc2a 100644 --- a/subgraphs/cross-chain-governance/config/index.ts +++ b/subgraphs/cross-chain-governance/config/index.ts @@ -10,6 +10,8 @@ import zkSyncDeployments from '@venusprotocol/governance-contracts/deployments/z import zkSyncSepoliaDeployments from '@venusprotocol/governance-contracts/deployments/zksyncsepolia_addresses.json'; import baseSepoliaDeployments from '@venusprotocol/governance-contracts/deployments/basesepolia_addresses.json'; import baseMainnetDeployments from '@venusprotocol/governance-contracts/deployments/basemainnet_addresses.json'; +import unichainSepoliaDeployments from '@venusprotocol/governance-contracts/deployments/unichainsepolia_addresses.json'; +import unichainMainnetDeployments from '@venusprotocol/governance-contracts/deployments/unichainmainnet_addresses.json'; import fs from 'fs'; import Mustache from 'mustache'; @@ -27,6 +29,8 @@ export const getNetwork = () => { 'optimism', 'baseSepolia', 'base', + 'unichainSepolia', + 'unichain', ] as const; const network = process.env.NETWORK; // @ts-expect-error network env var is unknown here @@ -159,11 +163,34 @@ const main = () => { layerZeroChainId: 184, omnichainGovernanceOwnerAddress: baseMainnetDeployments.addresses.OmnichainExecutorOwner, startBlockOmnichainGovernanceOwner: '23531514', - omnichainGovernanceExecutorAddress: baseMainnetDeployments.addresses.OmnichainGovernanceExecutor, + omnichainGovernanceExecutorAddress: + baseMainnetDeployments.addresses.OmnichainGovernanceExecutor, startBlockOmnichainGovernanceExecutor: '23531230', accessControlManagerAddress: baseMainnetDeployments.addresses.AccessControlManager, accessControlManagerStartBlock: '23212000', }, + unichainSepolia: { + network: 'unichain-testnet', + layerZeroChainId: 10333, + omnichainGovernanceOwnerAddress: unichainSepoliaDeployments.addresses.OmnichainExecutorOwner, + startBlockOmnichainGovernanceOwner: '12506108', + omnichainGovernanceExecutorAddress: + unichainSepoliaDeployments.addresses.OmnichainGovernanceExecutor, + startBlockOmnichainGovernanceExecutor: '12504577', + accessControlManagerAddress: unichainSepoliaDeployments.addresses.AccessControlManager, + accessControlManagerStartBlock: '3358050', + }, + unichain: { + network: 'unichain', + layerZeroChainId: 320, + omnichainGovernanceOwnerAddress: unichainMainnetDeployments.addresses.OmnichainExecutorOwner, + startBlockOmnichainGovernanceOwner: '9143903 ', + omnichainGovernanceExecutorAddress: + unichainMainnetDeployments.addresses.OmnichainGovernanceExecutor, + startBlockOmnichainGovernanceExecutor: '9143169 ', + accessControlManagerAddress: unichainMainnetDeployments.addresses.AccessControlManager, + accessControlManagerStartBlock: '8095093', + }, }; const yamlTemplate = fs.readFileSync('template.yaml', 'utf8'); diff --git a/subgraphs/cross-chain-governance/package.json b/subgraphs/cross-chain-governance/package.json index 41f65d24..637bef49 100644 --- a/subgraphs/cross-chain-governance/package.json +++ b/subgraphs/cross-chain-governance/package.json @@ -1,6 +1,6 @@ { "name": "@venusprotocol/cross-chain-governance-subgraph", - "version": "1.1.1", + "version": "1.2.0", "license": "MIT", "repository": { "url": "https://github.com/VenusProtocol/subgraphs", @@ -25,6 +25,8 @@ "deploy:zkSync": "yarn prepare:zkSync && yarn graph deploy --studio venus-governance-zksync", "deploy:baseSepolia": "yarn prepare:baseSepolia && yarn graph deploy --studio venus-governance-base-sepolia", "deploy:base": "yarn prepare:base && yarn graph deploy --studio venus-governance-base-mainnet", + "deploy:unichainSepolia": "yarn prepare:unichainSepolia && yarn graph deploy --studio venus-governance-unichain-sepolia", + "deploy:unichain": "yarn prepare:unichain && yarn graph deploy --studio venus-governance-unichain", "prepare:docker": "NETWORK=docker yarn ts-node config/index.ts", "prepare:ethereum": "NETWORK=ethereum yarn ts-node config/index.ts", "prepare:sepolia": "NETWORK=sepolia yarn ts-node config/index.ts", @@ -37,6 +39,8 @@ "prepare:zkSync": "NETWORK=zkSync yarn ts-node config/index.ts", "prepare:baseSepolia": "NETWORK=baseSepolia yarn ts-node config/index.ts", "prepare:base": "NETWORK=base yarn ts-node config/index.ts", + "prepare:unichainSepolia": "NETWORK=unichainSepolia yarn ts-node config/index.ts", + "prepare:unichain": "NETWORK=unichain yarn ts-node config/index.ts", "test": "yarn prepare:docker && graph test", "test:integration": "true" }, @@ -44,7 +48,7 @@ "@graphprotocol/client-cli": "3.0.0", "@graphprotocol/graph-cli": "^0.80.0", "@layerzerolabs/solidity-examples": "^1.0.0", - "@venusprotocol/governance-contracts": "2.7.0", + "@venusprotocol/governance-contracts": "2.10.0", "@venusprotocol/subgraph-utils": "0.0.0", "apollo-fetch": "^0.7.0", "hardhat": "^2.10.2", diff --git a/subgraphs/etherfi-promo/README.md b/subgraphs/etherfi-promo/README.md deleted file mode 100644 index f31d00b3..00000000 --- a/subgraphs/etherfi-promo/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# EtherFi Promo - -Subgraph for checking invariant in the weETH market diff --git a/subgraphs/etherfi-promo/deploy.sh b/subgraphs/etherfi-promo/deploy.sh deleted file mode 100755 index 01f1982a..00000000 --- a/subgraphs/etherfi-promo/deploy.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -version=($(jq -r '.version' package.json)) - -if [[ $version == *"testnet"* ]]; then - yarn graph auth --studio $TESTNET_GRAPH_CLI_API_KEY - yarn deploy:sepolia --version-label $version -else - yarn graph auth --studio $MAINNET_GRAPH_CLI_API_KEY - yarn deploy:bsc --version-label $version - yarn deploy:ethereum --version-label $version - yarn deploy:arbitrum --version-label $version -fi - - - diff --git a/subgraphs/etherfi-promo/.releaserc b/subgraphs/external-promos/.releaserc similarity index 100% rename from subgraphs/etherfi-promo/.releaserc rename to subgraphs/external-promos/.releaserc diff --git a/subgraphs/external-promos/README.md b/subgraphs/external-promos/README.md new file mode 100644 index 00000000..73f0c4ba --- /dev/null +++ b/subgraphs/external-promos/README.md @@ -0,0 +1,3 @@ +# External Promos Subgraphs + +Subgraph for checking invariant in promoted markets. diff --git a/subgraphs/etherfi-promo/config/index.ts b/subgraphs/external-promos/config/index.ts similarity index 84% rename from subgraphs/etherfi-promo/config/index.ts rename to subgraphs/external-promos/config/index.ts index 66e56a6f..34b7ff6c 100644 --- a/subgraphs/etherfi-promo/config/index.ts +++ b/subgraphs/external-promos/config/index.ts @@ -1,5 +1,6 @@ #!/usr/bin/env ts-node import arbitrumILDeployments from '@venusprotocol/isolated-pools/deployments/arbitrumone_addresses.json'; +import bscILDeployments from '@venusprotocol/isolated-pools/deployments/bscmainnet_addresses.json'; import ethereumILDeployments from '@venusprotocol/isolated-pools/deployments/ethereum_addresses.json'; import sepoliaILDeployments from '@venusprotocol/isolated-pools/deployments/sepolia_addresses.json'; import fs from 'fs'; @@ -25,7 +26,7 @@ const main = () => { vWeEthsStartBlock: '0', veBTCAddress: sepoliaILDeployments.addresses.VToken_veBTC, veBTCStartBlock: '0', - template: 'template.yaml', + template: 'template-eth.yaml', }, sepolia: { network: 'sepolia', @@ -35,7 +36,7 @@ const main = () => { vWeEthsStartBlock: '6536644', veBTCAddress: sepoliaILDeployments.addresses.VToken_veBTC, veBTCStartBlock: '0', - template: 'template.yaml', + template: 'template-eth.yaml', }, ethereum: { network: 'mainnet', @@ -43,21 +44,23 @@ const main = () => { vWeEthStartBlock: '19638180', vWeEthsAddress: ethereumILDeployments.addresses.VToken_vweETHs_LiquidStakedETH, vWeEthsStartBlock: '20583508', - veBTCAddress: ethereumILDeployments.addresses.VToken_veBTC, + veBTCAddress: ethereumILDeployments.addresses.VToken_veBTC_Core, veBTCStartBlock: '21079720', - template: 'template.yaml', + template: 'template-eth.yaml', }, bsc: { network: 'bsc', - vWeEthAddress: '0xc5b24f347254bD8cF8988913d1fd0F795274900F', + vWeEthAddress: bscILDeployments.addresses.VToken_vweETH_LiquidStakedETH, vWeEthStartBlock: '41956130', + vAsBnbAddress: bscILDeployments.addresses.VToken_vasBNB_LiquidStakedBNB, + vAsBnbStartBlock: '47620796', template: 'template-bsc.yaml', }, arbitrum: { network: 'arbitrum-one', vWeEthAddress: arbitrumILDeployments.addresses.VToken_vweETH_LiquidStakedETH, vWeEthStartBlock: '245908467', - template: 'template-bsc.yaml', + template: 'template-arb.yaml', }, }; const yamlTemplate = fs.readFileSync(config[network].template, 'utf8'); diff --git a/subgraphs/external-promos/deploy.sh b/subgraphs/external-promos/deploy.sh new file mode 100755 index 00000000..3eba610b --- /dev/null +++ b/subgraphs/external-promos/deploy.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +version=($(jq -r '.version' package.json)) + +if [[ $version == *"testnet"* ]]; then + yarn deploy:sepolia --node https://subgraphs.alchemy.com/api/subgraphs/deploy --ipfs https://ipfs.satsuma.xyz --version-label $version --deploy-key $TESTNET_GRAPH_CLI_ALCHEMY_KEY +else + yarn deploy:bsc --node https://subgraphs.alchemy.com/api/subgraphs/deploy --ipfs https://ipfs.satsuma.xyz --version-label $version --deploy-key $MAINNET_GRAPH_CLI_ALCHEMY_KEY + yarn deploy:ethereum --node https://subgraphs.alchemy.com/api/subgraphs/deploy --ipfs https://ipfs.satsuma.xyz --version-label $version --deploy-key $MAINNET_GRAPH_CLI_ALCHEMY_KEY + yarn deploy:arbitrum --node https://subgraphs.alchemy.com/api/subgraphs/deploy --ipfs https://ipfs.satsuma.xyz --version-label $version --deploy-key $MAINNET_GRAPH_CLI_ALCHEMY_KEY +fi + + + diff --git a/subgraphs/etherfi-promo/matchstick.yaml b/subgraphs/external-promos/matchstick.yaml similarity index 100% rename from subgraphs/etherfi-promo/matchstick.yaml rename to subgraphs/external-promos/matchstick.yaml diff --git a/subgraphs/etherfi-promo/package.json b/subgraphs/external-promos/package.json similarity index 57% rename from subgraphs/etherfi-promo/package.json rename to subgraphs/external-promos/package.json index 3a88ee87..2ea2832a 100644 --- a/subgraphs/etherfi-promo/package.json +++ b/subgraphs/external-promos/package.json @@ -1,25 +1,25 @@ { - "name": "@venusprotocol/etherfi-promo-subgraph", - "version": "1.0.3", + "name": "@venusprotocol/external-promos-subgraph", + "version": "1.0.0", "license": "MIT", "repository": { "url": "https://github.com/VenusProtocol/subgraphs", - "directory": "subgraphs/etherfi-promo" + "directory": "subgraphs/external-promos" }, "files": [ "generated" ], "scripts": { "codegen": "yarn graph codegen", - "create:docker": "yarn graph create venusprotocol/etherfi-promo --node http://graph-node:8020/", + "create:docker": "yarn graph create venusprotocol/external-promos --node http://graph-node:8020/", "build:docker": "yarn graph build --ipfs http://ipfs:5001", "build:ethereum": "yarn graph build --ipfs https://api.thegraph.com/ipfs/ ", - "deploy:integration": "graph deploy venusprotocol/etherfi-promo --debug --ipfs http://localhost:5001 --node http://127.0.0.1:8020/", - "deploy:docker": "yarn prepare:docker && npx graph deploy venusprotocol/etherfi-promo --ipfs http://ipfs:5001 --node http://graph-node:8020/ --version-label ci", - "deploy:sepolia": "yarn prepare:sepolia && graph deploy --studio etherfi-promo-sepolia", - "deploy:ethereum": "yarn prepare:ethereum && graph deploy --studio etherfi-promo", - "deploy:bsc": "yarn prepare:bsc && graph deploy --studio etherfi-promo-bnb", - "deploy:arbitrum": "yarn prepare:arbitrum && graph deploy --studio etherfi-promo-arbitrum", + "deploy:integration": "graph deploy venusprotocol/external-promos --debug --ipfs http://localhost:5001 --node http://127.0.0.1:8020/", + "deploy:docker": "yarn prepare:docker && npx graph deploy venusprotocol/external-promos --ipfs http://ipfs:5001 --node http://graph-node:8020/ --version-label ci", + "deploy:sepolia": "yarn prepare:sepolia && graph deploy external-promos-sepolia", + "deploy:ethereum": "yarn prepare:ethereum && graph deploy external-promos-ethereum", + "deploy:bsc": "yarn prepare:bsc && graph deploy external-promos-bnb", + "deploy:arbitrum": "yarn prepare:arbitrum && graph deploy external-promos-arbitrum", "prepare:docker": "NETWORK=docker yarn ts-node config/index.ts", "prepare:sepolia": "NETWORK=sepolia yarn ts-node config/index.ts", "prepare:ethereum": "NETWORK=ethereum yarn ts-node config/index.ts", @@ -30,7 +30,7 @@ "test:integration": "true" }, "dependencies": { - "@venusprotocol/isolated-pools": "3.7.1-dev.1" + "@venusprotocol/isolated-pools": "4.2.0-dev.9" }, "devDependencies": { "@graphprotocol/graph-cli": "^0.80.0", diff --git a/subgraphs/etherfi-promo/prepare.sh b/subgraphs/external-promos/prepare.sh similarity index 100% rename from subgraphs/etherfi-promo/prepare.sh rename to subgraphs/external-promos/prepare.sh diff --git a/subgraphs/etherfi-promo/schema.graphql b/subgraphs/external-promos/schema.graphql similarity index 100% rename from subgraphs/etherfi-promo/schema.graphql rename to subgraphs/external-promos/schema.graphql diff --git a/subgraphs/etherfi-promo/src/constants/addresses.ts b/subgraphs/external-promos/src/constants/addresses.ts similarity index 100% rename from subgraphs/etherfi-promo/src/constants/addresses.ts rename to subgraphs/external-promos/src/constants/addresses.ts diff --git a/subgraphs/etherfi-promo/src/constants/index.ts b/subgraphs/external-promos/src/constants/index.ts similarity index 100% rename from subgraphs/etherfi-promo/src/constants/index.ts rename to subgraphs/external-promos/src/constants/index.ts diff --git a/subgraphs/etherfi-promo/src/mappings/vToken.ts b/subgraphs/external-promos/src/mappings/vToken.ts similarity index 73% rename from subgraphs/etherfi-promo/src/mappings/vToken.ts rename to subgraphs/external-promos/src/mappings/vToken.ts index 992c4e0b..67f87fce 100644 --- a/subgraphs/etherfi-promo/src/mappings/vToken.ts +++ b/subgraphs/external-promos/src/mappings/vToken.ts @@ -6,7 +6,9 @@ import { nullAddress } from '../constants'; import { getBorrow, getSupply } from '../operations/get'; import { getOrCreateBorrowerAccount, getOrCreateSupplierAccount } from '../operations/getOrCreate'; import { updateBorrowerAccount, updateSupplierAccount, updateTvl } from '../operations/update'; -import exponentToBigDecimal from '../utilities/exponentToBigDecimal'; +import { calculateUnderlyingAmountFromBorrowEvent } from '../utilities/calculateUnderlyingAmountFromBorrowEvent'; +import { calculateUnderlyingAmountFromMintEvent } from '../utilities/calculateUnderlyingAmountFromMintEvent'; +import { calculateUnderlyingAmountFromVTokenAmount } from '../utilities/calculateUnderlyingAmountFromVTokenAmount'; export function handleMint(event: Mint): void { const minter = event.params.minter; @@ -16,7 +18,7 @@ export function handleMint(event: Mint): void { minter, event.address, supplierAccount.effective_balance.plus( - event.params.mintAmount.toBigDecimal().div(exponentToBigDecimal(vToken.underlyingDecimals)), + calculateUnderlyingAmountFromMintEvent(event.params.mintAmount.toBigDecimal(), vToken), ), ); } @@ -28,7 +30,7 @@ export function handleBorrow(event: Borrow): void { updateBorrowerAccount( borrower, event.address, - event.params.accountBorrows.toBigDecimal().div(exponentToBigDecimal(vToken.underlyingDecimals)), + calculateUnderlyingAmountFromBorrowEvent(event.params.accountBorrows.toBigDecimal(), vToken), ); } @@ -38,20 +40,16 @@ export function handleTransfer(event: Transfer): void { const fromAccountAddress = event.params.from; // If the to account is the vToken address we assume it was a redeem const toAccountAddress = event.params.to; - const vToken = getSupply(event.address); if ( fromAccountAddress.notEqual(event.address) && fromAccountAddress.notEqual(nullAddress) && toAccountAddress.notEqual(event.address) ) { - const vTokenContract = VTokenContract.bind(event.address); - const exchangeRateMantissa = vTokenContract.exchangeRateCurrent(); - - const amountUnderlying = exchangeRateMantissa - .times(event.params.amount) - .toBigDecimal() - .div(exponentToBigDecimal(18 + vToken.underlyingDecimals)); + const amountUnderlying = calculateUnderlyingAmountFromVTokenAmount( + event.params.amount, + event.address, + ); const fromAccount = getOrCreateSupplierAccount(fromAccountAddress, event.address); updateSupplierAccount( fromAccountAddress, @@ -72,14 +70,12 @@ export function handleAccrueInterest(event: AccrueInterest): void { const supply = getSupply(event.address); supply.suppliers.load().forEach(supplier => { const vTokenContract = VTokenContract.bind(Address.fromBytes(supplier.token)); - const vToken = getSupply(Address.fromBytes(supplier.token)); - const exchangeRateMantissa = vTokenContract.exchangeRateCurrent(); const vTokenBalance = vTokenContract.balanceOf(Address.fromBytes(supplier.address)); - const amountUnderlying = exchangeRateMantissa - .times(vTokenBalance) - .toBigDecimal() - .div(exponentToBigDecimal(18 + vToken.underlyingDecimals)); + const amountUnderlying = calculateUnderlyingAmountFromVTokenAmount( + vTokenBalance, + Address.fromBytes(supplier.token), + ); supplier.effective_balance = amountUnderlying; supplier.save(); }); @@ -91,9 +87,10 @@ export function handleAccrueInterest(event: AccrueInterest): void { const underlyingBorrowBalance = vTokenContract.borrowBalanceCurrent( Address.fromBytes(borrower.address), ); - borrower.effective_balance = underlyingBorrowBalance - .toBigDecimal() - .div(exponentToBigDecimal(vToken.underlyingDecimals)); + borrower.effective_balance = calculateUnderlyingAmountFromBorrowEvent( + underlyingBorrowBalance.toBigDecimal(), + vToken, + ); borrower.save(); }); diff --git a/subgraphs/etherfi-promo/src/operations/create.ts b/subgraphs/external-promos/src/operations/create.ts similarity index 100% rename from subgraphs/etherfi-promo/src/operations/create.ts rename to subgraphs/external-promos/src/operations/create.ts diff --git a/subgraphs/etherfi-promo/src/operations/get.ts b/subgraphs/external-promos/src/operations/get.ts similarity index 100% rename from subgraphs/etherfi-promo/src/operations/get.ts rename to subgraphs/external-promos/src/operations/get.ts diff --git a/subgraphs/etherfi-promo/src/operations/getOrCreate.ts b/subgraphs/external-promos/src/operations/getOrCreate.ts similarity index 100% rename from subgraphs/etherfi-promo/src/operations/getOrCreate.ts rename to subgraphs/external-promos/src/operations/getOrCreate.ts diff --git a/subgraphs/etherfi-promo/src/operations/update.ts b/subgraphs/external-promos/src/operations/update.ts similarity index 100% rename from subgraphs/etherfi-promo/src/operations/update.ts rename to subgraphs/external-promos/src/operations/update.ts diff --git a/subgraphs/external-promos/src/utilities/calculateUnderlyingAmountFromBorrowEvent.ts b/subgraphs/external-promos/src/utilities/calculateUnderlyingAmountFromBorrowEvent.ts new file mode 100644 index 00000000..be42ffc2 --- /dev/null +++ b/subgraphs/external-promos/src/utilities/calculateUnderlyingAmountFromBorrowEvent.ts @@ -0,0 +1,11 @@ +import { BigDecimal } from '@graphprotocol/graph-ts'; +import { Borrow } from '../../generated/schema'; +import exponentToBigDecimal from './exponentToBigDecimal'; + +export const calculateUnderlyingAmountFromBorrowEvent = ( + underlyingAmount: BigDecimal, + vToken: Borrow, +): BigDecimal => + underlyingAmount + .div(exponentToBigDecimal(vToken.underlyingDecimals)) + .truncate(vToken.underlyingDecimals); diff --git a/subgraphs/external-promos/src/utilities/calculateUnderlyingAmountFromMintEvent.ts b/subgraphs/external-promos/src/utilities/calculateUnderlyingAmountFromMintEvent.ts new file mode 100644 index 00000000..1f97c699 --- /dev/null +++ b/subgraphs/external-promos/src/utilities/calculateUnderlyingAmountFromMintEvent.ts @@ -0,0 +1,11 @@ +import { BigDecimal } from '@graphprotocol/graph-ts'; +import { Supply } from '../../generated/schema'; +import exponentToBigDecimal from './exponentToBigDecimal'; + +export const calculateUnderlyingAmountFromMintEvent = ( + underlyingAmount: BigDecimal, + vToken: Supply, +): BigDecimal => + underlyingAmount + .div(exponentToBigDecimal(vToken.underlyingDecimals)) + .truncate(vToken.underlyingDecimals); diff --git a/subgraphs/external-promos/src/utilities/calculateUnderlyingAmountFromVTokenAmount.ts b/subgraphs/external-promos/src/utilities/calculateUnderlyingAmountFromVTokenAmount.ts new file mode 100644 index 00000000..404d856c --- /dev/null +++ b/subgraphs/external-promos/src/utilities/calculateUnderlyingAmountFromVTokenAmount.ts @@ -0,0 +1,24 @@ +import { Address, BigDecimal, BigInt } from '@graphprotocol/graph-ts'; +import { VToken as VTokenContract } from '../../generated/vWeETH/VToken'; +import exponentToBigDecimal from './exponentToBigDecimal'; +import { getSupply } from '../operations/get'; + +// we have to take into consideration the exchange rate in this case +// so we will ask the VToken contract the exchangeRateCurrent +// and then calculate the underlying amount +export const calculateUnderlyingAmountFromVTokenAmount = ( + vTokenAmount: BigInt, + vTokenAddress: Address, +): BigDecimal => { + const vTokenContract = VTokenContract.bind(vTokenAddress); + const exchangeRateMantissa = vTokenContract.exchangeRateCurrent(); + const vToken = getSupply(Address.fromBytes(vTokenAddress)); + + const amountUnderlying = exchangeRateMantissa + .times(vTokenAmount) + .toBigDecimal() + .div(exponentToBigDecimal(18 + vToken.underlyingDecimals)) + .truncate(vToken.underlyingDecimals); + + return amountUnderlying; +}; diff --git a/subgraphs/etherfi-promo/src/utilities/exponentToBigDecimal.ts b/subgraphs/external-promos/src/utilities/exponentToBigDecimal.ts similarity index 100% rename from subgraphs/etherfi-promo/src/utilities/exponentToBigDecimal.ts rename to subgraphs/external-promos/src/utilities/exponentToBigDecimal.ts diff --git a/subgraphs/etherfi-promo/src/utilities/exponentToBigInt.ts b/subgraphs/external-promos/src/utilities/exponentToBigInt.ts similarity index 100% rename from subgraphs/etherfi-promo/src/utilities/exponentToBigInt.ts rename to subgraphs/external-promos/src/utilities/exponentToBigInt.ts diff --git a/subgraphs/etherfi-promo/src/utilities/ids.ts b/subgraphs/external-promos/src/utilities/ids.ts similarity index 100% rename from subgraphs/etherfi-promo/src/utilities/ids.ts rename to subgraphs/external-promos/src/utilities/ids.ts diff --git a/subgraphs/etherfi-promo/subgraph-client/.graphclientrc.yml b/subgraphs/external-promos/subgraph-client/.graphclientrc.yml similarity index 100% rename from subgraphs/etherfi-promo/subgraph-client/.graphclientrc.yml rename to subgraphs/external-promos/subgraph-client/.graphclientrc.yml diff --git a/subgraphs/etherfi-promo/subgraph-client/index.ts b/subgraphs/external-promos/subgraph-client/index.ts similarity index 100% rename from subgraphs/etherfi-promo/subgraph-client/index.ts rename to subgraphs/external-promos/subgraph-client/index.ts diff --git a/subgraphs/etherfi-promo/subgraph-client/queries/accountsQuery.graphql b/subgraphs/external-promos/subgraph-client/queries/accountsQuery.graphql similarity index 100% rename from subgraphs/etherfi-promo/subgraph-client/queries/accountsQuery.graphql rename to subgraphs/external-promos/subgraph-client/queries/accountsQuery.graphql diff --git a/subgraphs/etherfi-promo/template-bsc.yaml b/subgraphs/external-promos/template-arb.yaml similarity index 100% rename from subgraphs/etherfi-promo/template-bsc.yaml rename to subgraphs/external-promos/template-arb.yaml diff --git a/subgraphs/external-promos/template-bsc.yaml b/subgraphs/external-promos/template-bsc.yaml new file mode 100644 index 00000000..20f794c0 --- /dev/null +++ b/subgraphs/external-promos/template-bsc.yaml @@ -0,0 +1,64 @@ +specVersion: 0.0.4 +description: Venus is an open-source protocol for algorithmic, efficient Money Markets on the BSC blockchain. +repository: https://github.com/VenusProtocol/subgraphs +schema: + file: ./schema.graphql +dataSources: + - kind: ethereum/contract + name: vWeETH + network: {{ network }} + source: + address: "{{ vWeEthAddress }}" + abi: VToken + startBlock: {{ vWeEthStartBlock }} + mapping: + kind: ethereum/events + apiVersion: 0.0.9 + language: wasm/assemblyscript + file: ./src/mappings/vToken.ts + entities: + - SupplierAccount + - BorrowerAccount + abis: + - name: VToken + file: ../../node_modules/@venusprotocol/isolated-pools/artifacts/contracts/VToken.sol/VToken.json + - name: ERC20 + file: ../../node_modules/@venusprotocol/isolated-pools/artifacts/contracts/test/ERC20.sol/ERC20.json + eventHandlers: + - event: Mint(indexed address,uint256,uint256,uint256) + handler: handleMint + - event: Borrow(indexed address,uint256,uint256,uint256) + handler: handleBorrow + - event: Transfer(indexed address,indexed address,uint256) + handler: handleTransfer + - event: AccrueInterest(uint256,uint256,uint256,uint256) + handler: handleAccrueInterest + - kind: ethereum/contract + name: vAsBnb + network: {{ network }} + source: + address: "{{ vAsBnbAddress }}" + abi: VToken + startBlock: {{ vAsBnbStartBlock }} + mapping: + kind: ethereum/events + apiVersion: 0.0.9 + language: wasm/assemblyscript + file: ./src/mappings/vToken.ts + entities: + - SupplierAccount + - BorrowerAccount + abis: + - name: VToken + file: ../../node_modules/@venusprotocol/isolated-pools/artifacts/contracts/VToken.sol/VToken.json + - name: ERC20 + file: ../../node_modules/@venusprotocol/isolated-pools/artifacts/contracts/test/ERC20.sol/ERC20.json + eventHandlers: + - event: Mint(indexed address,uint256,uint256,uint256) + handler: handleMint + - event: Borrow(indexed address,uint256,uint256,uint256) + handler: handleBorrow + - event: Transfer(indexed address,indexed address,uint256) + handler: handleTransfer + - event: AccrueInterest(uint256,uint256,uint256,uint256) + handler: handleAccrueInterest diff --git a/subgraphs/etherfi-promo/template.yaml b/subgraphs/external-promos/template-eth.yaml similarity index 100% rename from subgraphs/etherfi-promo/template.yaml rename to subgraphs/external-promos/template-eth.yaml diff --git a/subgraphs/etherfi-promo/tests/VToken/events.ts b/subgraphs/external-promos/tests/VToken/events.ts similarity index 100% rename from subgraphs/etherfi-promo/tests/VToken/events.ts rename to subgraphs/external-promos/tests/VToken/events.ts diff --git a/subgraphs/etherfi-promo/tests/VToken/index.test.ts b/subgraphs/external-promos/tests/VToken/index.test.ts similarity index 100% rename from subgraphs/etherfi-promo/tests/VToken/index.test.ts rename to subgraphs/external-promos/tests/VToken/index.test.ts diff --git a/subgraphs/etherfi-promo/tests/VToken/mocks.ts b/subgraphs/external-promos/tests/VToken/mocks.ts similarity index 100% rename from subgraphs/etherfi-promo/tests/VToken/mocks.ts rename to subgraphs/external-promos/tests/VToken/mocks.ts diff --git a/subgraphs/etherfi-promo/tests/invariant.ts b/subgraphs/external-promos/tests/invariant.ts similarity index 100% rename from subgraphs/etherfi-promo/tests/invariant.ts rename to subgraphs/external-promos/tests/invariant.ts diff --git a/subgraphs/isolated-pools/config/index.ts b/subgraphs/isolated-pools/config/index.ts index 879100f8..c372f6d4 100644 --- a/subgraphs/isolated-pools/config/index.ts +++ b/subgraphs/isolated-pools/config/index.ts @@ -11,6 +11,7 @@ import zksyncDeployments from '@venusprotocol/isolated-pools/deployments/zksyncm import zksyncSepoliaDeployments from '@venusprotocol/isolated-pools/deployments/zksyncsepolia_addresses.json'; import baseSepoliaDeployments from '@venusprotocol/isolated-pools/deployments/basesepolia_addresses.json'; import baseMainnetDeployments from '@venusprotocol/isolated-pools/deployments/basemainnet_addresses.json'; +import unichainSepoliaDeployments from '@venusprotocol/isolated-pools/deployments/unichainsepolia_addresses.json'; import fs from 'fs'; import Mustache from 'mustache'; @@ -30,6 +31,8 @@ export const getNetwork = () => { 'optimism', 'baseSepolia', 'base', + 'unichainSepolia', + 'unichain', ] as const; const network = process.env.NETWORK; // @ts-expect-error network env var is unknown here @@ -63,20 +66,20 @@ const main = () => { network: 'chapel', poolRegistryAddress: chapelDeployments.addresses.PoolRegistry, vBifiAddress: '0xEF949287834Be010C1A5EDd757c385FB9b644E4A', - vLisUsdAddress: chapelDeployments.addresses.VToken_vHAY_StableCoins, - vagEURAddress: chapelDeployments.addresses.VToken_vagEUR_Stablecoins, + vHAYAddress: chapelDeployments.addresses.VToken_vHAY_Stablecoins, + vEURAAddress: chapelDeployments.addresses.VToken_vEURA_Stablecoins, vankrBNBLiquidStakedBNBAddress: chapelDeployments.addresses.VToken_vankrBNB_LiquidStakedBNB, vankrBNBDeFiAddress: chapelDeployments.addresses.VToken_vankrBNB_DeFi, - vSnBNBAddress: chapelDeployments.addresses.VToken_vSnBNB_LiquidStakedBNB, + vslisBNBAddress: chapelDeployments.addresses.VToken_vslisBNB_LiquidStakedBNB, startBlock: '30870000', }, bsc: { network: 'bsc', poolRegistryAddress: bscMainnetDeployments.addresses.PoolRegistry, vBifiAddress: '0xC718c51958d3fd44f5F9580c9fFAC2F89815C909', - vLisUsdAddress: bscMainnetDeployments.addresses.VToken_vHAY_Stablecoins, - vagEURAddress: bscMainnetDeployments.addresses.VToken_vagEUR_Stablecoins, - vSnBNBAddress: bscMainnetDeployments.addresses.VToken_vSnBNB_LiquidStakedBNB, + vHAYAddress: bscMainnetDeployments.addresses.VToken_vHAY_Stablecoins, + vEURAAddress: bscMainnetDeployments.addresses.VToken_vEURA_Stablecoins, + vslisBNBAddress: bscMainnetDeployments.addresses.VToken_vslisBNB_LiquidStakedBNB, startBlock: '29300000', }, opbnbMainnet: { @@ -124,6 +127,16 @@ const main = () => { poolRegistryAddress: baseMainnetDeployments.addresses.PoolRegistry, startBlock: '23344365', }, + unichainSepolia: { + network: 'unichain-testnet', + poolRegistryAddress: unichainSepoliaDeployments.addresses.PoolRegistry, + startBlock: '4630912', + }, + unichain: { + network: 'unichain', + poolRegistryAddress: '0x0C52403E16BcB8007C1e54887E1dFC1eC9765D7C', + startBlock: '8199043', + }, }; Mustache.escape = function (text) { diff --git a/subgraphs/isolated-pools/deploy.sh b/subgraphs/isolated-pools/deploy.sh index acfca2da..3e976175 100755 --- a/subgraphs/isolated-pools/deploy.sh +++ b/subgraphs/isolated-pools/deploy.sh @@ -17,4 +17,5 @@ else yarn deploy:arbitrum --version-label $version yarn deploy:zksync --version-label $version yarn deploy:optimism --version-label $version + yarn deploy:base --version-label $version fi diff --git a/subgraphs/isolated-pools/package.json b/subgraphs/isolated-pools/package.json index d0468141..caee43d7 100644 --- a/subgraphs/isolated-pools/package.json +++ b/subgraphs/isolated-pools/package.json @@ -1,6 +1,6 @@ { "name": "@venusprotocol/isolated-pools-subgraph", - "version": "1.3.1", + "version": "1.4.0", "license": "MIT", "repository": { "url": "https://github.com/VenusProtocol/subgraphs", @@ -28,6 +28,8 @@ "deploy:optimism": "yarn prepare:optimism && yarn codegen && yarn graph deploy --studio venus-isolated-pools-optimism", "deploy:baseSepolia": "yarn prepare:baseSepolia && yarn codegen && yarn graph deploy --studio venus-isolated-pools-base-sepolia", "deploy:base": "yarn prepare:base && yarn codegen && yarn graph deploy --studio venus-isolated-pools-base", + "deploy:unichainSepolia": "yarn prepare:unichainSepolia && yarn codegen && yarn graph deploy --studio venus-isolated-pools-unichain-sepolia", + "deploy:unichain": "yarn prepare:unichain && yarn codegen && yarn graph deploy --studio venus-isolated-pools-unichain", "prepare:docker": "NETWORK=docker yarn ts-node config/index.ts", "prepare:chapel": "NETWORK=chapel yarn ts-node config/index.ts", "prepare:bsc": "NETWORK=bsc yarn ts-node config/index.ts", @@ -42,13 +44,15 @@ "prepare:optimism": "NETWORK=optimism yarn ts-node config/index.ts", "prepare:baseSepolia": "NETWORK=baseSepolia yarn ts-node config/index.ts", "prepare:base": "NETWORK=base yarn ts-node config/index.ts", + "prepare:unichainSepolia": "NETWORK=unichainSepolia yarn ts-node config/index.ts", + "prepare:unichain": "NETWORK=unichain yarn ts-node config/index.ts", "generate-subgraph-types": "rm -rf /subgraph-client/.graphclient && yarn graphclient build --dir ./subgraph-client", "pretty": "prettier —-write '**/*.ts'", "test": "yarn prepare:docker && graph test", "test:integration": "yarn hardhat test tests/integration/index.ts --network localhost" }, "dependencies": { - "@venusprotocol/isolated-pools": "3.7.1-dev.1" + "@venusprotocol/isolated-pools": "4.2.0-dev.9" }, "devDependencies": { "@graphprotocol/client-cli": "3.0.0", diff --git a/subgraphs/isolated-pools/src/constants/addresses.ts b/subgraphs/isolated-pools/src/constants/addresses.ts index bae88a99..05537905 100644 --- a/subgraphs/isolated-pools/src/constants/addresses.ts +++ b/subgraphs/isolated-pools/src/constants/addresses.ts @@ -3,11 +3,11 @@ import { Address } from '@graphprotocol/graph-ts'; import { poolRegistryAddress as poolRegistryAddressString, vBifiAddress as vBifiAddressString, - vLisUsdAddress as vLisUsdAddressString, - vagEURAddress as vagEURAddressString, + vHAYAddress as vHAYAddressString, + vEURAAddress as vEURAAddressString, vankrBNBLiquidStakedBNBAddress as vankrBNBLiquidStakedBNBAddressString, vankrBNBDeFiAddress as vankrBNBDeFiAddressString, - vSnBNBAddress as vSnBNBAddressString, + vslisBNBAddress as vslisBNBAddressString, vWETHLiquidStakedETHAddress as vWETHLiquidStakedETHAddressString, vWETHCoreAddress as vWETHCoreAddressString, } from './config'; @@ -19,11 +19,11 @@ export const nullAddress = Address.fromString(nullAddressString); export const vBifiAddress = Address.fromString( vBifiAddressString.length > 0 ? vBifiAddressString : nullAddressString, ); -export const vLisUsdAddress = Address.fromString( - vLisUsdAddressString.length > 0 ? vLisUsdAddressString : nullAddressString, +export const vHAYAddress = Address.fromString( + vHAYAddressString.length > 0 ? vHAYAddressString : nullAddressString, ); -export const vagEURAddress = Address.fromString( - vagEURAddressString.length > 0 ? vagEURAddressString : nullAddressString, +export const vEURAAddress = Address.fromString( + vEURAAddressString.length > 0 ? vEURAAddressString : nullAddressString, ); export const vankrBNBLiquidStakedBNBAddress = Address.fromString( vankrBNBLiquidStakedBNBAddressString.length > 0 @@ -33,8 +33,8 @@ export const vankrBNBLiquidStakedBNBAddress = Address.fromString( export const vankrBNBDeFiAddress = Address.fromString( vankrBNBDeFiAddressString.length > 0 ? vankrBNBDeFiAddressString : nullAddressString, ); -export const vSnBNBAddress = Address.fromString( - vSnBNBAddressString.length > 0 ? vSnBNBAddressString : nullAddressString, +export const vslisBNBAddress = Address.fromString( + vslisBNBAddressString.length > 0 ? vslisBNBAddressString : nullAddressString, ); export const vWETHLiquidStakedETHAddress = Address.fromString( vWETHLiquidStakedETHAddressString.length > 0 diff --git a/subgraphs/isolated-pools/src/constants/config-template b/subgraphs/isolated-pools/src/constants/config-template index e63da011..915426ab 100644 --- a/subgraphs/isolated-pools/src/constants/config-template +++ b/subgraphs/isolated-pools/src/constants/config-template @@ -4,15 +4,15 @@ export const poolRegistryAddress = '{{ poolRegistryAddress }}'; export const vBifiAddress = '{{ vBifiAddress }}' -export const vLisUsdAddress = '{{ vLisUsdAddress }}' +export const vHAYAddress = '{{ vHAYAddress }}' -export const vagEURAddress = '{{ vagEURAddress }}' +export const vEURAAddress = '{{ vEURAAddress }}' export const vankrBNBLiquidStakedBNBAddress = '{{ vankrBNBLiquidStakedBNBAddress }}' export const vankrBNBDeFiAddress = '{{ vankrBNBDeFiAddress }}' -export const vSnBNBAddress = '{{ vSnBNBAddress }}' +export const vslisBNBAddress = '{{ vslisBNBAddress }}' export const vWETHLiquidStakedETHAddress = '{{ vWETHLiquidStakedETHAddress }}' diff --git a/subgraphs/isolated-pools/src/operations/create.ts b/subgraphs/isolated-pools/src/operations/create.ts index 15574305..7be7beab 100644 --- a/subgraphs/isolated-pools/src/operations/create.ts +++ b/subgraphs/isolated-pools/src/operations/create.ts @@ -31,9 +31,9 @@ import { BORROW, LIQUIDATE, MINT, REDEEM, REPAY, TRANSFER, zeroBigInt32 } from ' import { poolRegistryAddress, vBifiAddress, - vLisUsdAddress, - vSnBNBAddress, - vagEURAddress, + vHAYAddress, + vslisBNBAddress, + vEURAAddress, vankrBNBDeFiAddress, vankrBNBLiquidStakedBNBAddress, vWETHLiquidStakedETHAddress, @@ -175,12 +175,12 @@ export function createMarket( .markets(vTokenAddress) .getLiquidationThresholdMantissa(); - if (vTokenAddress.equals(vLisUsdAddress)) { + if (vTokenAddress.equals(vHAYAddress)) { market.name = 'Venus lisUSD (Stablecoins)'; market.symbol = 'vlisUSD_Stablecoins'; } - if (vTokenAddress.equals(vagEURAddress)) { + if (vTokenAddress.equals(vEURAAddress)) { market.name = 'Venus EURA (Stablecoins)'; market.symbol = 'vEURA_Stablecoins'; } @@ -195,7 +195,7 @@ export function createMarket( market.symbol = 'vankrBNB_DeFi'; } - if (vTokenAddress.equals(vSnBNBAddress)) { + if (vTokenAddress.equals(vslisBNBAddress)) { market.name = 'Venus slisBNB (Liquid Staked BNB)'; market.symbol = 'vslisBNB_LiquidStakedBNB'; } diff --git a/subgraphs/isolated-pools/template.yaml b/subgraphs/isolated-pools/template.yaml index 116bb7cd..db1949e7 100644 --- a/subgraphs/isolated-pools/template.yaml +++ b/subgraphs/isolated-pools/template.yaml @@ -3,6 +3,8 @@ description: Venus is an open-source protocol for algorithmic, efficient Money M repository: https://github.com/VenusProtocol/subgraphs schema: file: ./schema.graphql +indexerHints: + prune: never dataSources: - kind: ethereum/contract name: PoolRegistry diff --git a/subgraphs/protocol-reserve/package.json b/subgraphs/protocol-reserve/package.json index 6127c01a..9a15368b 100644 --- a/subgraphs/protocol-reserve/package.json +++ b/subgraphs/protocol-reserve/package.json @@ -1,6 +1,6 @@ { "name": "@venusprotocol/protocol-reserve-subgraph", - "version": "1.1.1-testnet.2", + "version": "1.1.1", "license": "MIT", "repository": { "url": "https://github.com/VenusProtocol/subgraphs", diff --git a/subgraphs/venus-governance/package.json b/subgraphs/venus-governance/package.json index 4f492e17..c9cdaf7b 100644 --- a/subgraphs/venus-governance/package.json +++ b/subgraphs/venus-governance/package.json @@ -1,6 +1,6 @@ { "name": "@venusprotocol/governance-subgraph", - "version": "1.0.3-testnet.1", + "version": "1.0.4", "license": "MIT", "repository": { "url": "https://github.com/VenusProtocol/subgraphs", diff --git a/subgraphs/venus-governance/src/mappings/omnichainProposalSender.ts b/subgraphs/venus-governance/src/mappings/omnichainProposalSender.ts index 6a5cb475..d6ffde71 100644 --- a/subgraphs/venus-governance/src/mappings/omnichainProposalSender.ts +++ b/subgraphs/venus-governance/src/mappings/omnichainProposalSender.ts @@ -56,13 +56,13 @@ export function handleClearPayload(event: ClearPayload): void { ); remoteProposalStateTransaction.withdrawn = transaction.id; remoteProposalStateTransaction.save(); + } else { + const remoteProposalStateTransaction = getRemoteProposalStateTransaction( + event.params.proposalId, + ); + remoteProposalStateTransaction.executed = transaction.id; + remoteProposalStateTransaction.save(); } - } else { - const remoteProposalStateTransaction = getRemoteProposalStateTransaction( - event.params.proposalId, - ); - remoteProposalStateTransaction.executed = transaction.id; - remoteProposalStateTransaction.save(); } } diff --git a/subgraphs/venus-governance/src/operations/get.ts b/subgraphs/venus-governance/src/operations/get.ts index 216cbba5..8c9e75bc 100644 --- a/subgraphs/venus-governance/src/operations/get.ts +++ b/subgraphs/venus-governance/src/operations/get.ts @@ -67,7 +67,10 @@ export const getRemoteProposal = (layerZeroChainId: i32, proposalId: BigInt): Re const id = getRemoteProposalId(layerZeroChainId, proposalId); const remoteProposal = RemoteProposal.load(id); if (!remoteProposal) { - log.critical('RemoteProposal {} not found', [proposalId.toString()]); + log.critical('RemoteProposal (layerZeroChainId:{} proposal Id:{}) not found', [ + layerZeroChainId.toString(), + proposalId.toString(), + ]); } return remoteProposal as RemoteProposal; }; @@ -78,7 +81,7 @@ export const getRemoteProposalStateTransaction = ( const id = getRemoteProposalStateTransactionId(proposalId); const remoteProposalStateTransaction = RemoteProposalStateTransaction.load(id); if (!remoteProposalStateTransaction) { - log.critical('RemoteProposalStateTransaction {} not found', [proposalId.toString()]); + log.critical('RemoteProposalStateTransaction {} not found', [id]); } return remoteProposalStateTransaction as RemoteProposalStateTransaction; }; diff --git a/subgraphs/venus/config/index.ts b/subgraphs/venus/config/index.ts index 0f89b0cc..724e01e4 100644 --- a/subgraphs/venus/config/index.ts +++ b/subgraphs/venus/config/index.ts @@ -25,8 +25,8 @@ const main = () => { chapel: { network: 'chapel', comptrollerAddress: bscTestnetCoreDeployments.addresses.Unitroller, - startBlock: '2802485', - vwbETHAddress: bscTestnetCoreDeployments.addresses.vWBETH, + startBlock: '2802486', + wbETHAddress: '0xf9f98365566f4d55234f24b99caa1afbe6428d44', vTRXAddress: '0x369fea97f6fb7510755dca389088d9e2e2819278', vTUSDOldAddress: '0x3a00d9b02781f47d033bad62edc55fbf8d083fb0', }, diff --git a/subgraphs/venus/package.json b/subgraphs/venus/package.json index 159f5f64..50350a63 100644 --- a/subgraphs/venus/package.json +++ b/subgraphs/venus/package.json @@ -1,6 +1,6 @@ { "name": "@venusprotocol/core-pool-subgraph", - "version": "1.1.3-testnet.2", + "version": "1.2.2", "license": "MIT", "repository": { "url": "https://github.com/VenusProtocol/subgraphs", diff --git a/subgraphs/venus/schema.graphql b/subgraphs/venus/schema.graphql index f8002a22..4f94809a 100644 --- a/subgraphs/venus/schema.graphql +++ b/subgraphs/venus/schema.graphql @@ -12,8 +12,6 @@ type Comptroller @entity { closeFactorMantissa: BigInt! "The percent bonus liquidators get for liquidating" liquidationIncentive: BigInt! - "Max assets a single user can enter (not used in comptroller logic)" - maxAssets: BigInt! } """ diff --git a/subgraphs/venus/src/constants/addresses.ts b/subgraphs/venus/src/constants/addresses.ts index f51f54a6..47438173 100644 --- a/subgraphs/venus/src/constants/addresses.ts +++ b/subgraphs/venus/src/constants/addresses.ts @@ -2,7 +2,7 @@ import { Address } from '@graphprotocol/graph-ts'; import { comptrollerAddress as comptrollerAddressString, - vwbETHAddress as vwbETHAddressString, + wbETHAddress as wbETHAddressString, vTRXAddress as vTRXAddressString, vTUSDOldAddress as vTUSDOldAddressString, } from './config'; @@ -14,8 +14,8 @@ export const nullAddress = Address.fromString(nullAddressString); export const nativeAddress = Address.fromString('0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE'); -export const vwbETHAddress = Address.fromString( - vwbETHAddressString.length > 0 ? vwbETHAddressString : nullAddressString, +export const wbETHAddress = Address.fromString( + wbETHAddressString.length > 0 ? wbETHAddressString : nullAddressString, ); export const vTRXAddressAddress = Address.fromString( diff --git a/subgraphs/venus/src/constants/config-template b/subgraphs/venus/src/constants/config-template index c380e719..9efa34a9 100644 --- a/subgraphs/venus/src/constants/config-template +++ b/subgraphs/venus/src/constants/config-template @@ -2,7 +2,7 @@ export const comptrollerAddress = '{{ comptrollerAddress }}'; -export const vwbETHAddress = '{{ vwbETHAddress }}'; +export const wbETHAddress = '{{ wbETHAddress }}'; export const vTRXAddress = '{{ vTRXAddress }}'; diff --git a/subgraphs/venus/src/mappings/comptroller.ts b/subgraphs/venus/src/mappings/comptroller.ts index da1aed11..8ee5be97 100644 --- a/subgraphs/venus/src/mappings/comptroller.ts +++ b/subgraphs/venus/src/mappings/comptroller.ts @@ -1,6 +1,6 @@ /* eslint-disable prefer-const */ // to satisfy AS compiler -import { Address, BigInt, ethereum } from '@graphprotocol/graph-ts'; +import { Address, ethereum } from '@graphprotocol/graph-ts'; import { Comptroller as ComptrollerContract } from '../../generated/templates/VToken/Comptroller'; import { DistributedBorrowerVenus, @@ -31,7 +31,6 @@ export function handleInitialization(block: ethereum.Block): void { comptroller.priceOracle = nullAddress; comptroller.closeFactorMantissa = zeroBigInt32; comptroller.liquidationIncentive = zeroBigInt32; - comptroller.maxAssets = BigInt.fromI32(20); comptroller.save(); } diff --git a/subgraphs/venus/src/operations/getOrCreate.ts b/subgraphs/venus/src/operations/getOrCreate.ts index 8cdda6df..2d4eef79 100644 --- a/subgraphs/venus/src/operations/getOrCreate.ts +++ b/subgraphs/venus/src/operations/getOrCreate.ts @@ -11,7 +11,7 @@ import { VToken } from '../../generated/templates/VToken/VToken'; import { zeroBigInt32 } from '../constants'; import { nativeAddress, - vwbETHAddress, + wbETHAddress, vTRXAddressAddress, vTUSDOldAddress, } from '../constants/addresses'; @@ -186,7 +186,7 @@ export function getOrCreateToken(asset: Address): Token { let tokenEntity = Token.load(getTokenId(asset)); if (!tokenEntity) { - if (asset.equals(vwbETHAddress)) { + if (asset.equals(wbETHAddress)) { return getOrCreateWrappedEthToken(); } else { const erc20 = BEP20.bind(asset); diff --git a/subgraphs/venus/subgraph-client/queries/accountByIdQuery.graphql b/subgraphs/venus/subgraph-client/queries/accountByIdQuery.graphql index 934aa466..257f0898 100644 --- a/subgraphs/venus/subgraph-client/queries/accountByIdQuery.graphql +++ b/subgraphs/venus/subgraph-client/queries/accountByIdQuery.graphql @@ -1,6 +1,7 @@ query AccountById($id: ID!) { account(id: $id) { id + address tokens { id vTokenBalanceMantissa diff --git a/subgraphs/venus/subgraph-client/queries/accountsInAddressQuery.graphql b/subgraphs/venus/subgraph-client/queries/accountsInAddressQuery.graphql index 27d872bd..e294ac63 100644 --- a/subgraphs/venus/subgraph-client/queries/accountsInAddressQuery.graphql +++ b/subgraphs/venus/subgraph-client/queries/accountsInAddressQuery.graphql @@ -1,6 +1,7 @@ query Accounts { accounts { id + address tokens { id } diff --git a/subgraphs/venus/subgraph-client/queries/comptroller.graphql b/subgraphs/venus/subgraph-client/queries/comptroller.graphql index fe9d27b8..818dfe28 100644 --- a/subgraphs/venus/subgraph-client/queries/comptroller.graphql +++ b/subgraphs/venus/subgraph-client/queries/comptroller.graphql @@ -1,9 +1,9 @@ query Comptrollers { comptrollers { id + address priceOracle closeFactorMantissa liquidationIncentive - maxAssets } } diff --git a/subgraphs/venus/subgraph-client/queries/marketByIdQuery.graphql b/subgraphs/venus/subgraph-client/queries/marketByIdQuery.graphql index 7bfb64dc..d04dd5e1 100644 --- a/subgraphs/venus/subgraph-client/queries/marketByIdQuery.graphql +++ b/subgraphs/venus/subgraph-client/queries/marketByIdQuery.graphql @@ -1,6 +1,7 @@ query MarketById($id: ID!) { market(id: $id) { id + address isListed borrowRateMantissa cashMantissa diff --git a/subgraphs/venus/subgraph-client/queries/marketPositionByAccount.graphql b/subgraphs/venus/subgraph-client/queries/marketPositionByAccount.graphql index ee12c23f..c407ef07 100644 --- a/subgraphs/venus/subgraph-client/queries/marketPositionByAccount.graphql +++ b/subgraphs/venus/subgraph-client/queries/marketPositionByAccount.graphql @@ -3,9 +3,11 @@ query MarketPositionByAccountId($accountId: String!) { id market { id + address } account { id + address } enteredMarket totalUnderlyingRedeemedMantissa diff --git a/subgraphs/venus/subgraph-client/queries/marketPositionByAccountAndMarket.graphql b/subgraphs/venus/subgraph-client/queries/marketPositionByAccountAndMarket.graphql index 7e65d949..e085ecf1 100644 --- a/subgraphs/venus/subgraph-client/queries/marketPositionByAccountAndMarket.graphql +++ b/subgraphs/venus/subgraph-client/queries/marketPositionByAccountAndMarket.graphql @@ -3,9 +3,11 @@ query MarketPositionByAccountAndMarketQuery($id: ID!) { id market { id + address } account { id + address hasBorrowed } enteredMarket diff --git a/subgraphs/venus/subgraph-client/queries/marketPositions.graphql b/subgraphs/venus/subgraph-client/queries/marketPositions.graphql index 363da64f..e019a767 100644 --- a/subgraphs/venus/subgraph-client/queries/marketPositions.graphql +++ b/subgraphs/venus/subgraph-client/queries/marketPositions.graphql @@ -4,10 +4,12 @@ query MarketPositions($first: Int, $skip: Int) { market { id symbol + address borrowIndex } account { id + address } enteredMarket totalUnderlyingRedeemedMantissa diff --git a/subgraphs/venus/subgraph-client/queries/marketPositionsWithBorrowByMarketId.graphql b/subgraphs/venus/subgraph-client/queries/marketPositionsWithBorrowByMarketId.graphql index a26e6081..9d9a3fe4 100644 --- a/subgraphs/venus/subgraph-client/queries/marketPositionsWithBorrowByMarketId.graphql +++ b/subgraphs/venus/subgraph-client/queries/marketPositionsWithBorrowByMarketId.graphql @@ -3,6 +3,7 @@ query MarketPositionsWithBorrowByMarketId($first: Int, $skip: Int, $marketId: St id account { id + address } storedBorrowBalanceMantissa borrowIndex diff --git a/subgraphs/venus/subgraph-client/queries/marketPositionsWithSupplyByMarketId.graphql b/subgraphs/venus/subgraph-client/queries/marketPositionsWithSupplyByMarketId.graphql index 5bc6ce60..1935ce9d 100644 --- a/subgraphs/venus/subgraph-client/queries/marketPositionsWithSupplyByMarketId.graphql +++ b/subgraphs/venus/subgraph-client/queries/marketPositionsWithSupplyByMarketId.graphql @@ -3,6 +3,7 @@ query MarketPositionsWithSupplyByMarketId($first: Int, $skip: Int, $marketId: St id account { id + address } vTokenBalanceMantissa } diff --git a/subgraphs/venus/subgraph-client/queries/marketsQuery.graphql b/subgraphs/venus/subgraph-client/queries/marketsQuery.graphql index 9a9a1a55..74d61ea8 100644 --- a/subgraphs/venus/subgraph-client/queries/marketsQuery.graphql +++ b/subgraphs/venus/subgraph-client/queries/marketsQuery.graphql @@ -1,6 +1,7 @@ query Markets { markets { id + address name symbol vTokenDecimals diff --git a/subgraphs/venus/template.yaml b/subgraphs/venus/template.yaml index 96fa23f5..34a968be 100644 --- a/subgraphs/venus/template.yaml +++ b/subgraphs/venus/template.yaml @@ -131,6 +131,12 @@ templates: handler: handleLiquidateBorrow - event: AccrueInterest(uint256,uint256,uint256,uint256) handler: handleAccrueInterest + calls: + getCash: VToken[event.address].getCash() + borrowRatePerBlock: VToken[event.address].borrowRatePerBlock() + supplyRatePerBlock: VToken[event.address].supplyRatePerBlock() + exchangeRateStored: VToken[event.address].exchangeRateStored() + totalReserves: VToken[event.address].totalReserves() - event: NewReserveFactor(uint256,uint256) handler: handleNewReserveFactor - event: Transfer(indexed address,indexed address,uint256) @@ -139,8 +145,16 @@ templates: handler: handleNewMarketInterestRateModel - event: ReservesAdded(address,uint256,uint256) handler: handleReservesAdded + calls: + borrowRatePerBlock: VToken[event.address].borrowRatePerBlock() + supplyRatePerBlock: VToken[event.address].supplyRatePerBlock() + exchangeRateStored: VToken[event.address].exchangeRateStored() - event: ReservesReduced(address,uint256,uint256) handler: handleReservesReduced + calls: + borrowRatePerBlock: VToken[event.address].borrowRatePerBlock() + supplyRatePerBlock: VToken[event.address].supplyRatePerBlock() + exchangeRateStored: VToken[event.address].exchangeRateStored() - name: VTokenUpdatedEvents kind: ethereum/contract network: {{ network }} diff --git a/subgraphs/venus/tests/mocks.ts b/subgraphs/venus/tests/mocks.ts index 85391b2f..27a6a7a7 100644 --- a/subgraphs/venus/tests/mocks.ts +++ b/subgraphs/venus/tests/mocks.ts @@ -193,10 +193,6 @@ export const createComptrollerMock = (vTokens: Address[]): void => { 'liquidationIncentiveMantissa():(uint256)', ).returns([ethereum.Value.fromI32(1)]); - createMockedFunction(comptrollerAddress, 'maxAssets', 'maxAssets():(uint256)').returns([ - ethereum.Value.fromI32(10), - ]); - createMockedFunction(comptrollerAddress, 'oracle', 'oracle():(address)').returns([ ethereum.Value.fromAddress(priceOracleAddress), ]); @@ -221,10 +217,6 @@ export const createComptrollerMock = (vTokens: Address[]): void => { 'liquidationIncentiveMantissa():(uint256)', ).returns([ethereum.Value.fromUnsignedBigInt(BigInt.fromString('1000000000000000'))]); - createMockedFunction(comptrollerAddress, 'maxAssets', 'maxAssets():(uint256)').returns([ - ethereum.Value.fromUnsignedBigInt(BigInt.fromString('999')), - ]); - vTokens.forEach(vToken => { createMockedFunction(comptrollerAddress, 'supplyCaps', 'supplyCaps(address):(uint256)') .withArgs([ethereum.Value.fromAddress(vToken)]) diff --git a/subgraphs/venus/tests/scripts/checkComptroller.ts b/subgraphs/venus/tests/scripts/checkComptroller.ts index 7f5d300f..b1aed2bb 100644 --- a/subgraphs/venus/tests/scripts/checkComptroller.ts +++ b/subgraphs/venus/tests/scripts/checkComptroller.ts @@ -13,17 +13,15 @@ const checkComptroller = async ( ) => { const { comptroller } = await subgraphClient.getComptroller(); const comptrollerContract = new ethers.Contract(comptroller.id, ComptrollerAbi, provider); - const [priceOracle, closeFactorMantissa, liquidationIncentive, maxAssets] = await Promise.all([ + const [priceOracle, closeFactorMantissa, liquidationIncentive] = await Promise.all([ comptrollerContract.oracle(), comptrollerContract.closeFactorMantissa(), comptrollerContract.liquidationIncentiveMantissa(), - comptrollerContract.maxAssets(), ]); try { assertEqual(comptroller, priceOracle, 'priceOracle', getAddress); assertEqual(comptroller, closeFactorMantissa, 'closeFactorMantissa'); assertEqual(comptroller, liquidationIncentive, 'liquidationIncentive'); - assertEqual(comptroller, maxAssets, 'maxAssets'); console.log(`correct values on comptroller entity - ${comptroller.id}`); } catch (e) { console.log(e.message); diff --git a/subgraphs/venus/tests/scripts/checkMarketPositions.ts b/subgraphs/venus/tests/scripts/checkMarketPositions.ts index 61741e20..b5b14d00 100644 --- a/subgraphs/venus/tests/scripts/checkMarketPositions.ts +++ b/subgraphs/venus/tests/scripts/checkMarketPositions.ts @@ -10,20 +10,24 @@ const checkMarketPositions = async ( subgraphClient: ReturnType, ) => { let skip = 0; - while (skip >= 0) { + while (skip >= 0 && skip <= 5000) { console.log(`processed ${skip * 25}...`); const { marketPositions } = await subgraphClient.getMarketPositions({ first: 25, skip: skip * 25, }); for (const marketPosition of marketPositions) { - const vTokenContract = new ethers.Contract(marketPosition.market.id, VBep20Abi.abi, provider); - const accountBalance = await vTokenContract.balanceOf(marketPosition.account.id); + const vTokenContract = new ethers.Contract( + marketPosition.market.address, + VBep20Abi.abi, + provider, + ); + const accountBalance = await vTokenContract.balanceOf(marketPosition.account.address); try { assert.equal( marketPosition.vTokenBalanceMantissa, accountBalance.toString(), - `incorrect supply balance for account ${marketPosition.account.id} in market ${MarketPosition.market.symbol} ${MarketPosition.market.id}. Subgraph Value: ${ + `incorrect supply balance for account ${marketPosition.account.address} in market ${marketPosition.market.symbol} ${marketPosition.market.address}. Subgraph Value: ${ marketPosition.vTokenBalanceMantissa }, contractValue: ${accountBalance.toString()}`, ); @@ -31,7 +35,7 @@ const checkMarketPositions = async ( console.log(e.message); } const borrowBalanceStored = await vTokenContract.borrowBalanceStored( - marketPosition.account.id, + marketPosition.account.address, ); const updatedSubgraphValue = BigNumber.from(marketPosition.storedBorrowBalanceMantissa) @@ -45,7 +49,7 @@ const checkMarketPositions = async ( updatedSubgraphValue, borrowBalanceStored.toString(), ` - incorrect borrow balance on account ${marketPosition.account.id} on market ${MarketPosition.market.symbol} ${MarketPosition.market.id}, accountBorrowIndex: ${MarketPosition.borrowIndex}, marketBorrowIndex ${MarketPosition.market.borrowIndex} subgraphValue: ${MarketPosition.storedBorrowBalanceMantissa} contractValue: ${borrowBalanceStored}`, + incorrect borrow balance on account ${marketPosition.account.address} on market ${marketPosition.market.symbol} ${marketPosition.market.address}, accountBorrowIndex: ${marketPosition.borrowIndex}, marketBorrowIndex ${marketPosition.market.borrowIndex} subgraphValue: ${marketPosition.storedBorrowBalanceMantissa} contractValue: ${borrowBalanceStored}`, ); } catch (e) { console.log(e.message); diff --git a/subgraphs/venus/tests/scripts/checkMarkets.ts b/subgraphs/venus/tests/scripts/checkMarkets.ts index ab0290c1..93c9f675 100644 --- a/subgraphs/venus/tests/scripts/checkMarkets.ts +++ b/subgraphs/venus/tests/scripts/checkMarkets.ts @@ -23,7 +23,7 @@ const countSuppliers = async ( ) => { let supplierCount = 0; let page = 0; - while (page >= 0) { + while (page >= 0 && page <= 50) { const { marketPositions } = await subgraphClient.getMarketPositionsWithSupplyByMarketId({ marketId: marketAddress, page, @@ -46,7 +46,7 @@ const countBorrower = async ( ) => { let borrowerCount = 0; let page = 0; - while (page >= 0) { + while (page >= 0 && page <= 50) { const { marketPositions } = await subgraphClient.getMarketPositionsWithBorrowByMarketId({ marketId: marketAddress, page, @@ -69,7 +69,7 @@ const checkMarkets = async ( ) => { const { markets } = await subgraphClient.getMarkets(); for (const market of markets) { - const vTokenContract = new ethers.Contract(market.id, VBep20Abi, provider); + const vTokenContract = new ethers.Contract(market.address, VBep20Abi, provider); const [comptrollerAddress, underlyingAddress] = await Promise.all([ vTokenContract.comptroller(), tryCall(async () => await vTokenContract.underlying(), ''), @@ -105,7 +105,7 @@ const checkMarkets = async ( vTokenContract.name(), vTokenContract.symbol(), vTokenContract.decimals(), - comptrollerContract.markets(market.id), + comptrollerContract.markets(market.address), vTokenContract.getCash(), vTokenContract.exchangeRateStored(), vTokenContract.interestRateModel(), @@ -118,21 +118,21 @@ const checkMarkets = async ( ]); const supplyState = await tryCall( - async () => await comptrollerContract.venusSupplyState(market.id), + async () => await comptrollerContract.venusSupplyState(market.address), { block: BigNumber.from(0), index: BigNumber.from(0) }, ); const borrowState = await tryCall( - async () => await comptrollerContract.venusBorrowState(market.id), + async () => await comptrollerContract.venusBorrowState(market.address), { block: BigNumber.from(0), index: BigNumber.from(0) }, ); const xvsSupplySpeeds = await tryCall( - async () => await comptrollerContract.venusSupplySpeeds(market.id), + async () => await comptrollerContract.venusSupplySpeeds(market.address), BigNumber.from(0), ); const xvsBorrowSpeeds = await await tryCall( - async () => comptrollerContract.venusBorrowSpeeds(market.id), + async () => comptrollerContract.venusBorrowSpeeds(market.address), BigNumber.from(0), ); @@ -147,7 +147,7 @@ const checkMarkets = async ( const underlyingPrice = await tryCall( async () => - await priceOracleContract.getUnderlyingPrice(market.id, { + await priceOracleContract.getUnderlyingPrice(market.address, { blockTag: +market.lastUnderlyingPriceBlockNumber, }), BigNumber.from(0), @@ -183,8 +183,8 @@ const checkMarkets = async ( const underlyingPriceInCents = underlyingPrice.div(10n ** BigInt(bdFactor)); assertEqual(market, underlyingPriceInCents, 'lastUnderlyingPriceCents'); - const totalSuppliers = await countSuppliers(subgraphClient, market.id); - const totalBorrowers = await countBorrower(subgraphClient, market.id); + const totalSuppliers = await countSuppliers(subgraphClient, market.address); + const totalBorrowers = await countBorrower(subgraphClient, market.address); assertEqual(market, totalSuppliers, 'supplierCount'); assertEqual(market, totalBorrowers, 'borrowerCount'); @@ -195,7 +195,7 @@ const checkMarkets = async ( market.totalSupplyVTokenMantissa, ` incorrect total supply market ${market.symbol} ${ - market.id + market.address } contract ${totalSupply.toString()} subgraph ${market.totalSupplyVTokenMantissa.toString()}`, ); console.log(`correct supply for ${market.symbol}`); @@ -213,7 +213,7 @@ const checkMarkets = async ( market.totalBorrowsMantissa.toString(), ` incorrect total borrow on market ${market.symbol} ${ - market.id + market.address } contract ${totalBorrows.toString()} subgraph ${market.totalBorrowsMantissa.toString()}`, ); console.log(`correct borrow for ${market.symbol}`); diff --git a/tsconfig.json b/tsconfig.json index 03778313..a9f048eb 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,5 +10,5 @@ "esModuleInterop": true, "resolveJsonModule": true }, - "include": ["subgraphs", "hardhat.config.ts"] + "include": ["subgraphs", "hardhat.config.ts", "type-extensions.ts"] } diff --git a/type-extensions.ts b/type-extensions.ts new file mode 100644 index 00000000..389caaa7 --- /dev/null +++ b/type-extensions.ts @@ -0,0 +1,9 @@ +import 'hardhat/types/runtime'; + +declare module 'hardhat/types/runtime' { + // This is an example of an extension to the Hardhat Runtime Environment. + // This new field will be available in tasks' actions, scripts, and tests. + export interface HardhatRuntimeEnvironment { + getNetworkName: () => string; + } +} diff --git a/yarn.lock b/yarn.lock index 07bd8470..c0c96eb7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5656,7 +5656,7 @@ __metadata: "@graphprotocol/client-cli": 3.0.0 "@graphprotocol/graph-cli": ^0.80.0 "@layerzerolabs/solidity-examples": ^1.0.0 - "@venusprotocol/governance-contracts": 2.7.0 + "@venusprotocol/governance-contracts": 2.10.0 "@venusprotocol/subgraph-utils": 0.0.0 apollo-fetch: ^0.7.0 hardhat: ^2.10.2 @@ -5667,12 +5667,12 @@ __metadata: languageName: unknown linkType: soft -"@venusprotocol/etherfi-promo-subgraph@workspace:subgraphs/etherfi-promo": +"@venusprotocol/external-promos-subgraph@workspace:subgraphs/external-promos": version: 0.0.0-use.local - resolution: "@venusprotocol/etherfi-promo-subgraph@workspace:subgraphs/etherfi-promo" + resolution: "@venusprotocol/external-promos-subgraph@workspace:subgraphs/external-promos" dependencies: "@graphprotocol/graph-cli": ^0.80.0 - "@venusprotocol/isolated-pools": 3.7.1-dev.1 + "@venusprotocol/isolated-pools": 4.2.0-dev.9 semantic-release: ^23.1.1 semantic-release-monorepo: ^8.0.2 ts-node: ^10.9.2 @@ -5680,14 +5680,14 @@ __metadata: languageName: unknown linkType: soft -"@venusprotocol/governance-contracts@npm:2.7.0": - version: 2.7.0 - resolution: "@venusprotocol/governance-contracts@npm:2.7.0" +"@venusprotocol/governance-contracts@npm:2.10.0": + version: 2.10.0 + resolution: "@venusprotocol/governance-contracts@npm:2.10.0" dependencies: "@venusprotocol/solidity-utilities": 2.0.0 hardhat-deploy-ethers: ^0.3.0-beta.13 module-alias: ^2.2.2 - checksum: 1e4e0cb3d0fbad4a155d623d25f9d5144940d8b90d1a62933c31cb6d8ea16e5fa30503aa3bad0f835e23529f0c1876be9b66f78a3a7de31986f17d4a6bff786e + checksum: cbcb9503402009cdf9eafc740e66e49d66ca4e0aee19526d42aa08ee7e7d2ae1f7251579ea0005a8b87fcdfe86c27170d75f08acf008fa24df03087371a24800 languageName: node linkType: hard @@ -5714,7 +5714,7 @@ __metadata: dependencies: "@graphprotocol/client-cli": 3.0.0 "@graphprotocol/graph-cli": ^0.80.0 - "@venusprotocol/isolated-pools": 3.7.1-dev.1 + "@venusprotocol/isolated-pools": 4.2.0-dev.9 "@venusprotocol/subgraph-utils": 0.0.0 apollo-fetch: ^0.7.0 hardhat: ^2.10.2 @@ -5725,9 +5725,9 @@ __metadata: languageName: unknown linkType: soft -"@venusprotocol/isolated-pools@npm:3.7.1-dev.1": - version: 3.7.1-dev.1 - resolution: "@venusprotocol/isolated-pools@npm:3.7.1-dev.1" +"@venusprotocol/isolated-pools@npm:4.2.0-dev.9": + version: 4.2.0-dev.9 + resolution: "@venusprotocol/isolated-pools@npm:4.2.0-dev.9" dependencies: "@nomiclabs/hardhat-ethers": ^2.2.3 "@openzeppelin/contracts": ^4.8.3 @@ -5738,28 +5738,49 @@ __metadata: ethers: ^5.7.0 hardhat-deploy: ^0.11.14 module-alias: ^2.2.2 - checksum: 272128815137c950456eb5998978a36ff96b64b24589c19025f450ce86aa113883f89f46272ce9093776d5d38dc9662b58431f21b96228eb2e20703054be4e4d + checksum: d24e747313a6dbaf9d00bc09f4644f35520360bf86841aaa3e9249b340d0da93835e93f3f5c581763faf0f0e5de85aae5a5598904a205d785db64429a7ad5324 languageName: node linkType: hard "@venusprotocol/isolated-pools@npm:^3.4.0": - version: 3.7.0 - resolution: "@venusprotocol/isolated-pools@npm:3.7.0" + version: 3.9.0 + resolution: "@venusprotocol/isolated-pools@npm:3.9.0" dependencies: "@nomiclabs/hardhat-ethers": ^2.2.3 "@openzeppelin/contracts": ^4.8.3 "@openzeppelin/contracts-upgradeable": ^4.8.3 "@openzeppelin/hardhat-upgrades": ^1.21.0 "@solidity-parser/parser": ^0.13.2 - "@venusprotocol/solidity-utilities": ^2.0.0 + "@venusprotocol/solidity-utilities": 2.0.3 ethers: ^5.7.0 hardhat-deploy: ^0.11.14 module-alias: ^2.2.2 - checksum: 666fe6961bfc5f42795aa9bfca4bd33affb459347946c9e0ea61b13a7946fa8e202c2a0a0d92ca384075d28fae48f503018d580230b19d3828c249e3bfe80ab0 + checksum: f72d664e73667aff1ad773bf7464f07110f1a7a150efe31e59805ef92c58c94405cfcefef15983182c339f3812365b72f9ac8fdd13ddd6876e1c0ef9739cc4d2 + languageName: node + linkType: hard + +"@venusprotocol/oracle@npm:2.9.0": + version: 2.9.0 + resolution: "@venusprotocol/oracle@npm:2.9.0" + dependencies: + "@chainlink/contracts": ^0.5.1 + "@defi-wonderland/smock": 2.3.5 + "@nomicfoundation/hardhat-network-helpers": ^1.0.8 + "@openzeppelin/contracts": ^4.6.0 + "@openzeppelin/contracts-upgradeable": ^4.7.3 + "@venusprotocol/governance-contracts": ^2.8.0 + "@venusprotocol/solidity-utilities": ^2.0.0 + "@venusprotocol/venus-protocol": ^9.1.0 + ethers: ^5.6.8 + hardhat: 2.19.5 + hardhat-deploy: ^0.12.4 + module-alias: ^2.2.2 + solidity-docgen: ^0.6.0-beta.29 + checksum: 8b6630bb48e23e9d65adca9b2b8df5a67b5962f5d74daad3e8ade22acec94d9385f542265c4fd099f8d9f610f2b120a638915aff8dea2bc1ac27c0d3b595693b languageName: node linkType: hard -"@venusprotocol/oracle@npm:2.7.0, @venusprotocol/oracle@npm:^2.7.0": +"@venusprotocol/oracle@npm:^2.7.0": version: 2.7.0 resolution: "@venusprotocol/oracle@npm:2.7.0" dependencies: @@ -5795,16 +5816,16 @@ __metadata: languageName: unknown linkType: soft -"@venusprotocol/protocol-reserve@npm:3.0.1": - version: 3.0.1 - resolution: "@venusprotocol/protocol-reserve@npm:3.0.1" +"@venusprotocol/protocol-reserve@npm:3.1.0": + version: 3.1.0 + resolution: "@venusprotocol/protocol-reserve@npm:3.1.0" dependencies: "@nomiclabs/hardhat-ethers": ^2.2.3 "@openzeppelin/contracts": ^4.8.3 "@openzeppelin/contracts-upgradeable": ^4.8.3 "@openzeppelin/hardhat-upgrades": ^1.21.0 "@solidity-parser/parser": ^0.13.2 - "@venusprotocol/governance-contracts": ^2.6.0 + "@venusprotocol/governance-contracts": ^2.8.0 "@venusprotocol/isolated-pools": ^3.4.0 "@venusprotocol/oracle": ^2.7.0 "@venusprotocol/solidity-utilities": ^2.0.3 @@ -5812,7 +5833,7 @@ __metadata: ethers: ^5.7.0 hardhat-deploy: ^0.14.0 module-alias: ^2.2.2 - checksum: 704e4b923ef8fae6840cb53b9eced0504778ba879e3930de26ceb79d65e017d598b71baeeba980fff2b01ca78d6745bd48d9bb7082cda4178c547078661ea594 + checksum: b23d664c7384113ef17080848a454ead20ddab04b377be8994057c6018ccdfa4152d37693f6b51d2805686f2b8fc8b8b960b3f24995459846150ffff28dd5bc8 languageName: node linkType: hard @@ -5865,12 +5886,12 @@ __metadata: "@types/node": ^20.5.9 "@typescript-eslint/eslint-plugin": ^5.40.1 "@typescript-eslint/parser": ^5.40.1 - "@venusprotocol/governance-contracts": 2.7.0 - "@venusprotocol/isolated-pools": 3.7.1-dev.1 - "@venusprotocol/oracle": 2.7.0 - "@venusprotocol/protocol-reserve": 3.0.1 + "@venusprotocol/governance-contracts": 2.10.0 + "@venusprotocol/isolated-pools": 4.2.0-dev.9 + "@venusprotocol/oracle": 2.9.0 + "@venusprotocol/protocol-reserve": 3.1.0 "@venusprotocol/solidity-utilities": ^2.0.3 - "@venusprotocol/venus-protocol": 9.4.0 + "@venusprotocol/venus-protocol": 9.6.0 assemblyscript: 0.19.23 chai: ^4.3.6 dotenv: ^16.4.5 @@ -5898,9 +5919,9 @@ __metadata: languageName: unknown linkType: soft -"@venusprotocol/token-bridge@npm:^2.4.0": - version: 2.4.0 - resolution: "@venusprotocol/token-bridge@npm:2.4.0" +"@venusprotocol/token-bridge@npm:^2.5.0": + version: 2.5.0 + resolution: "@venusprotocol/token-bridge@npm:2.5.0" dependencies: "@layerzerolabs/solidity-examples": ^1.0.0 "@openzeppelin/contracts": ^4.8.3 @@ -5909,7 +5930,7 @@ __metadata: "@solidity-parser/parser": ^0.13.2 ethers: ^5.7.0 module-alias: ^2.2.2 - checksum: f9d087df9c7e643b058c5c468f07145d76e44c01049ce1c824e326ec4b5549769b18575234267d1bef808c1eda2703b7a9ba6a3bb6ced99b46ccd5341657bf21 + checksum: 9b1136e4015e345dab617612fd97b33849ad95e022f8b644c57829c6956176a3db5a314d51b11a8016e83d7b22fb5471c937a686243e1ed8201ecb18831156b4 languageName: node linkType: hard @@ -5927,21 +5948,21 @@ __metadata: languageName: node linkType: hard -"@venusprotocol/venus-protocol@npm:9.4.0": - version: 9.4.0 - resolution: "@venusprotocol/venus-protocol@npm:9.4.0" +"@venusprotocol/venus-protocol@npm:9.6.0": + version: 9.6.0 + resolution: "@venusprotocol/venus-protocol@npm:9.6.0" dependencies: "@nomicfoundation/hardhat-ethers": ^3.0.0 "@openzeppelin/contracts": 4.9.3 "@openzeppelin/contracts-upgradeable": ^4.8.0 - "@venusprotocol/governance-contracts": ^2.6.0 - "@venusprotocol/protocol-reserve": ^3.0.0 + "@venusprotocol/governance-contracts": ^2.8.0 + "@venusprotocol/protocol-reserve": ^3.1.0 "@venusprotocol/solidity-utilities": ^2.0.3 - "@venusprotocol/token-bridge": ^2.4.0 + "@venusprotocol/token-bridge": ^2.5.0 bignumber.js: ^9.1.2 dotenv: ^16.0.1 module-alias: ^2.2.2 - checksum: 8c5c6fa31f6aaef9816143f353986cc9e8faf9fabae1fdc999c477d61b952303f8b7004e5c5f4e8f3432157af14e5c831d6117b479787fc8d851ad6318fcca04 + checksum: e56283a6cd0a42e6d79c84236f2367a0c7958a0ee9b3f4215e8daa17b5426b4ac4945845be3e631cd903d56afffc3662773cf736cd8d2fc5e87c212b6f5a5205 languageName: node linkType: hard