Skip to content

Commit

Permalink
Merge pull request #196 from VenusProtocol/add-token-out-balance-to-c…
Browse files Browse the repository at this point in the history
…onverter-config

Add token out balance to converter config
  • Loading branch information
coreyar authored Dec 9, 2024
2 parents e07915d + 2cc3780 commit e74e278
Show file tree
Hide file tree
Showing 24 changed files with 526 additions and 88 deletions.
3 changes: 1 addition & 2 deletions docker-compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,7 @@ services:
command:
- sh
- -c
- |
yarn && yarn run node:integration
- yarn && yarn run node:integration
# Installing again to link workspaces
ports:
- 8545:8545
Expand Down
2 changes: 1 addition & 1 deletion subgraphs/cross-chain-governance/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
"create:docker": "yarn graph create venusprotocol/venus-subgraph --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:docker": "yarn mustache config/docker.json template.yaml > subgraph.yaml && yarn graph deploy venusprotocol/crosschain-governance --ipfs http://ipfs:5001 --node http://graph-node:8020/",
"deploy:docker": "yarn prepare:docker && yarn graph deploy venusprotocol/crosschain-governance --ipfs http://ipfs:5001 --node http://graph-node:8020/",
"deploy:ethereum": "yarn prepare:ethereum && yarn graph deploy --studio venus-governance-ethereum",
"deploy:sepolia": "yarn prepare:sepolia && yarn graph deploy --studio venus-governance-sepolia",
"deploy:arbitrumSepolia": "yarn prepare:arbitrumSepolia && yarn graph deploy --studio venus-governance-arbisepolia",
Expand Down
88 changes: 63 additions & 25 deletions subgraphs/protocol-reserve/config/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import mainnetDeployments from '@venusprotocol/protocol-reserve/deployments/bscmainnet_addresses.json';
import bscMainnetDeployments from '@venusprotocol/protocol-reserve/deployments/bscmainnet_addresses.json';
import chapelDeployments from '@venusprotocol/protocol-reserve/deployments/bsctestnet_addresses.json';
import ethereumDeployments from '@venusprotocol/protocol-reserve/deployments/ethereum_addresses.json';
import sepoliaDeployments from '@venusprotocol/protocol-reserve/deployments/sepolia_addresses.json';
Expand All @@ -20,67 +20,105 @@ const main = () => {
const config = {
docker: {
network: 'hardhat',
converterNetworkAddress: '0x0000000000000000000000000000000000000000',
btcbPrimeConverterAddress: '0x0000000000000000000000000000000000000000',
ethPrimeConverterAddress: '0x0000000000000000000000000000000000000000',
riskFundConverterAddress: '0x0000000000000000000000000000000000000000',
usdcPrimeConverterAddress: '0x0000000000000000000000000000000000000000',
usdtPrimeConverterAddress: '0x0000000000000000000000000000000000000000',
xvsVaultConverterAddress: '0x0000000000000000000000000000000000000000',
riskFundAddress: '0x0000000000000000000000000000000000000000',
startBlock: 0,
converterNetworkAddress: '0x76cec9299B6Fa418dc71416FF353737AB7933A7D',
converterNetworkStartBlock: '0',
btcbPrimeConverterAddress: '0xC976c932092ECcD8f328FfD85066C0c05ED54044',
btcbPrimeConverterStartBlock: '0',
ethPrimeConverterAddress: '0x618fB9dbd2BD6eb968B4c1af36af6CB0b45310Ec',
ethPrimeConverterStartBlock: '0',
riskFundConverterAddress: '0xeC827421505972a2AE9C320302d3573B42363C26',
riskFundConverterStartBlock: '0',
usdcPrimeConverterAddress: '0x24d41dbc3d60d0784f8a937c59FBDe51440D5140',
usdcPrimeConverterStartBlock: '0',
usdtPrimeConverterAddress: '0x1D13fF25b10C9a6741DFdce229073bed652197c7',
usdtPrimeConverterStartBlock: '0',
xvsVaultConverterAddress: '0xa779C1D17bC5230c07afdC51376CAC1cb3Dd5314',
xvsVaultConverterStartBlock: '0',
riskFundAddress: '0x8d81a3dcd17030cd5f23ac7370e4efb10d2b3ca4',
protocolShareReserveAddress: '0x70e0bA845a1A0F2DA3359C97E0285013525FFC49',
protocolShareReserveStartBlock: '0',
template: 'template.yaml',
},
chapel: {
network: 'chapel',
converterNetworkAddress: chapelDeployments.addresses.ConverterNetwork,
converterNetworkStartBlock: '36750849',
btcbPrimeConverterAddress: chapelDeployments.addresses.BTCBPrimeConverter,
btcbPrimeConverterStartBlock: '36750670',
ethPrimeConverterAddress: chapelDeployments.addresses.ETHPrimeConverter,
ethPrimeConverterStartBlock: '36750672',
riskFundConverterAddress: chapelDeployments.addresses.RiskFundConverter,
riskFundConverterStartBlock: '36750498',
usdcPrimeConverterAddress: chapelDeployments.addresses.USDCPrimeConverter,
usdcPrimeConverterStartBlock: '36750668',
usdtPrimeConverterAddress: chapelDeployments.addresses.USDTPrimeConverter,
usdtPrimeConverterStartBlock: '36750639',
xvsVaultConverterAddress: chapelDeployments.addresses.XVSVaultConverter,
xvsVaultConverterStartBlock: '36750678',
riskFundAddress: chapelDeployments.addresses.RiskFundV2,
startBlock: '36750497',
StartBlock: '36750498',
protocolShareReserveAddress: chapelDeployments.addresses.ProtocolShareReserve,
protocolShareReserveStartBlock: '34259643',
template: 'template.yaml',
},
bsc: {
network: 'bsc',
converterNetworkAddress: mainnetDeployments.addresses.ConverterNetwork,
btcbPrimeConverterAddress: mainnetDeployments.addresses.BTCBPrimeConverter,
ethPrimeConverterAddress: mainnetDeployments.addresses.ETHPrimeConverter,
riskFundConverterAddress: mainnetDeployments.addresses.RiskFundConverter,
usdcPrimeConverterAddress: mainnetDeployments.addresses.USDCPrimeConverter,
usdtPrimeConverterAddress: mainnetDeployments.addresses.USDTPrimeConverter,
xvsVaultConverterAddress: mainnetDeployments.addresses.XVSVaultConverter,
riskFundAddress: mainnetDeployments.addresses.RiskFundV2,
startBlock: '32659400',
converterNetworkAddress: bscMainnetDeployments.addresses.ConverterNetwork,
converterNetworkStartBlock: '35140309',
btcbPrimeConverterAddress: bscMainnetDeployments.addresses.BTCBPrimeConverter,
btcbPrimeConverterStartBlock: '35140086',
ethPrimeConverterAddress: bscMainnetDeployments.addresses.ETHPrimeConverter,
ethPrimeConverterStartBlock: '35140088',
riskFundConverterAddress: bscMainnetDeployments.addresses.RiskFundConverter,
riskFundConverterStartBlock: '35139911',
usdcPrimeConverterAddress: bscMainnetDeployments.addresses.USDCPrimeConverter,
usdcPrimeConverterStartBlock: '35140083',
usdtPrimeConverterAddress: bscMainnetDeployments.addresses.USDTPrimeConverter,
usdtPrimeConverterStartBlock: '35140081',
xvsVaultConverterAddress: bscMainnetDeployments.addresses.XVSVaultConverter,
xvsVaultConverterStartBlock: '35140090',
riskFundAddress: bscMainnetDeployments.addresses.RiskFundV2,
protocolShareReserveAddress: bscMainnetDeployments.addresses.ProtocolShareReserve,
protocolShareReserveStartBlock: '32659440',
template: 'template.yaml',
},
ethereum: {
network: 'mainnet',
converterNetworkAddress: ethereumDeployments.addresses.ConverterNetwork,
converterNetworkStartBlock: '20087104',
usdcPrimeConverterAddress: ethereumDeployments.addresses.USDCPrimeConverter,
usdcPrimeConverterStartBlock: '20087075',
usdtPrimeConverterAddress: ethereumDeployments.addresses.USDTPrimeConverter,
usdtPrimeConverterStartBlock: '20087073',
xvsVaultConverterAddress: ethereumDeployments.addresses.XVSVaultConverter,
xvsVaultConverterStartBlock: '20087081',
wbtcPrimeConverterAddress: ethereumDeployments.addresses.WBTCPrimeConverter,
wbtcPrimeConverterStartBlock: '20087077',
wethPrimeConverterAddress: ethereumDeployments.addresses.WETHPrimeConverter,
riskFundConverterAddress: '0x0000000000000000000000000000000000000000',
riskFundAddress: '0x0000000000000000000000000000000000000000',
wethPrimeConverterStartBlock: '20087079',
riskFundConverterAddress: '',
riskFundConverterStartBlock: '0',
riskFundAddress: '',
startBlock: '20087073',
template: 'template-eth.yaml',
},
sepolia: {
network: 'sepolia',
converterNetworkAddress: sepoliaDeployments.addresses.ConverterNetwork,
converterNetworkStartBlock: '6058222',
usdcPrimeConverterAddress: sepoliaDeployments.addresses.USDCPrimeConverter,
usdcPrimeConverterStartBlock: '6058087',
usdtPrimeConverterAddress: sepoliaDeployments.addresses.USDTPrimeConverter,
usdtPrimeConverterStartBlock: '6058078',
xvsVaultConverterAddress: sepoliaDeployments.addresses.XVSVaultConverter,
xvsVaultConverterStartBlock: '6058093',
wbtcPrimeConverterAddress: sepoliaDeployments.addresses.WBTCPrimeConverter,
wbtcPrimeConverterStartBlock: '6058089',
wethPrimeConverterAddress: sepoliaDeployments.addresses.WETHPrimeConverter,
riskFundConverterAddress: '0x0000000000000000000000000000000000000000',
riskFundAddress: '0x0000000000000000000000000000000000000000',
startBlock: '6058078',
wethPrimeConverterStartBlock: '6058091',
riskFundConverterAddress: '',
riskFundConverterStartBlock: '0',
riskFundAddress: '',
template: 'template-eth.yaml',
},
};
Expand Down
3 changes: 2 additions & 1 deletion subgraphs/protocol-reserve/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
"build:docker": "yarn graph build --ipfs http://ipfs:5001",
"build:bsc": "graph build --ipfs https://api.thegraph.com/ipfs/ ",
"deploy:integration": "graph deploy venusprotocol/venus-protocol-reserve --ipfs http://localhost:5001 --node http://127.0.0.1:8020/",
"deploy:docker": "yarn prepare:docker && yarn graph deploy --studio venus-protocol-reserve --ipfs http://ipfs:5001 --node http://graph-node:8020/ --version-label ci",
"deploy:docker": "yarn prepare:docker && yarn graph deploy venusprotocol/venus-protocol-reserve --ipfs http://ipfs:5001 --node http://graph-node:8020/ --version-label ci",
"deploy:chapel": "yarn prepare:chapel && graph deploy --studio venus-protocol-reserve-chapel",
"deploy:ethereum": "yarn prepare:ethereum && graph deploy --studio venus-protocol-reserve-eth",
"deploy:sepolia": "yarn prepare:sepolia && graph deploy --studio venus-protocol-reserve-sepolia",
Expand All @@ -31,6 +31,7 @@
"test:integration": "yarn hardhat test tests/integration/index.ts --network localhost"
},
"devDependencies": {
"@graphprotocol/client-cli": "3.0.0",
"@graphprotocol/graph-cli": "^0.80.0",
"@venusprotocol/subgraph-utils": "workspace:^",
"apollo-fetch": "^0.7.0",
Expand Down
6 changes: 5 additions & 1 deletion subgraphs/protocol-reserve/schema.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ Converter Network entity
"""
type ConverterNetwork @entity {
id: Bytes!
address: Bytes!
tokenConverters: [TokenConverter!]! @derivedFrom(field: "converterNetwork")
}

Expand All @@ -32,11 +33,13 @@ Token Converter entity
"""
type TokenConverter @entity {
id: Bytes!
address: Bytes!
converterNetwork: ConverterNetwork
destinationAddress: Bytes!
baseAsset: Bytes!
baseAsset: Token!
configs: [TokenConverterConfig!]! @derivedFrom(field: "tokenConverter")
paused: Boolean!
priceOracleAddress: Bytes!
}

"""
Expand All @@ -49,4 +52,5 @@ type TokenConverterConfig @entity {
tokenOut: Token!
incentive: BigInt!
access: ConversionAccessibility!
tokenOutBalance: BigInt!
}
29 changes: 26 additions & 3 deletions subgraphs/protocol-reserve/src/constants/addresses.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,35 @@
import { Address } from '@graphprotocol/graph-ts';

import {
btcbPrimeConverterAddress as btcbPrimeConverterAddressString,
converterNetworkAddress as converterNetworkAddressString,
ethPrimeConverterAddress as ethPrimeConverterAddressString,
riskFundAddress as riskFundAddressString,
riskFundConverterAddress as riskFundConverterAddressString,
usdcPrimeConverterAddress as usdcPrimeConverterAddressString,
usdtPrimeConverterAddress as usdtPrimeConverterAddressString,
wbtcPrimeConverterAddress as wbtcPrimeConverterAddressString,
wethPrimeConverterAddress as wethPrimeConverterAddressString,
xvsVaultConverterAddress as xvsVaultConverterAddressString,
} from './config';

export const converterNetworkAddress = Address.fromString(converterNetworkAddressString);
export const riskFundConverterAddress = Address.fromString(riskFundConverterAddressString);
export const riskFundAddress = Address.fromString(riskFundAddressString);
export const nullAddress = Address.fromString('0x0000000000000000000000000000000000000000');

const addressFromCleanString = (str: string): Address => {
if (str.length > 0) {
return Address.fromString(str);
}
return nullAddress;
};

export const converterNetworkAddress = addressFromCleanString(converterNetworkAddressString);
export const riskFundConverterAddress = addressFromCleanString(riskFundConverterAddressString);
export const btcbPrimeConverterAddress = addressFromCleanString(btcbPrimeConverterAddressString);
export const ethPrimeConverterAddress = addressFromCleanString(ethPrimeConverterAddressString);
export const usdcPrimeConverterAddress = addressFromCleanString(usdcPrimeConverterAddressString);
export const usdtPrimeConverterAddress = addressFromCleanString(usdtPrimeConverterAddressString);
export const xvsVaultConverterAddress = addressFromCleanString(xvsVaultConverterAddressString);
export const wbtcPrimeConverterAddress = addressFromCleanString(wbtcPrimeConverterAddressString);
export const wethPrimeConverterAddress = addressFromCleanString(wethPrimeConverterAddressString);

export const riskFundAddress = addressFromCleanString(riskFundAddressString);
9 changes: 8 additions & 1 deletion subgraphs/protocol-reserve/src/constants/config-template
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
// Use yarn prepare commands to generate config typescript file per env

export const converterNetworkAddress = '{{ converterNetworkAddress }}';
export const riskFundConverterAddress = '{{ riskFundConverterAddress }}';
export const riskFundAddress = '{{ riskFundAddress }}';
export const btcbPrimeConverterAddress = '{{btcbPrimeConverterAddress}}';
export const ethPrimeConverterAddress = '{{ethPrimeConverterAddress}}';
export const riskFundConverterAddress = '{{riskFundConverterAddress}}';
export const usdcPrimeConverterAddress = '{{usdcPrimeConverterAddress}}';
export const usdtPrimeConverterAddress = '{{usdtPrimeConverterAddress}}';
export const xvsVaultConverterAddress = '{{xvsVaultConverterAddress}}';
export const wbtcPrimeConverterAddress = '{{wbtcPrimeConverterAddress}}';
export const wethPrimeConverterAddress = '{{wethPrimeConverterAddress}}';

10 changes: 8 additions & 2 deletions subgraphs/protocol-reserve/src/mappings/converterNetwork.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,18 @@
import { ethereum } from '@graphprotocol/graph-ts';
import {
ConverterAdded,
ConverterRemoved,
} from '../../generated/ConverterNetwork/ConverterNetwork';
import { getOrCreateConverterNetwork, getOrCreateTokenConverter } from '../operations/getOrCreate';
import { getOrCreateTokenConverter } from '../operations/getOrCreate';
import { createConverterNetwork } from '../operations/create';
import { getConverterNetworkId } from '../utilities/ids';

// eslint-disable-next-line @typescript-eslint/no-unused-vars
export function handleInitializationConverterNetwork(block: ethereum.Block): void {
createConverterNetwork();
}

export function handleConverterAdded(event: ConverterAdded): void {
getOrCreateConverterNetwork(event.address);
const tokenConverter = getOrCreateTokenConverter(event.params.converter);
tokenConverter.converterNetwork = getConverterNetworkId(event.address);
tokenConverter.save();
Expand Down
17 changes: 17 additions & 0 deletions subgraphs/protocol-reserve/src/mappings/protocolShareReserve.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { AssetReleased } from '../../generated/ProtocolShareReserve/ProtocolShareReserve';
import { TokenConverterConfig } from '../../generated/schema';
import { getTokenConverter } from '../operations/get';

export function handleAssetReleased(event: AssetReleased): void {
const tokenConverter = getTokenConverter(event.params.destination);
if (tokenConverter) {
const configs = tokenConverter.configs.load();
configs.reduce((e: AssetReleased, curr: TokenConverterConfig) => {
if (e.params.asset.equals(curr.tokenOut)) {
curr.tokenOutBalance = curr.tokenOutBalance.plus(e.params.amount);
curr.save();
}
return e;
}, event);
}
}
27 changes: 27 additions & 0 deletions subgraphs/protocol-reserve/src/mappings/token.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import { TokenConverterConfig } from '../../generated/schema';
import { Transfer } from '../../generated/templates/Token/ERC20';
import { getTokenConverter } from '../operations/get';

export function handleTransferIn(event: Transfer): void {
const tokenConverter = getTokenConverter(event.params.to)!;
const configs = tokenConverter.configs.load();
configs.reduce((e: Transfer, curr: TokenConverterConfig) => {
if (e.address.equals(curr.tokenOut)) {
curr.tokenOutBalance = curr.tokenOutBalance.plus(e.params.value);
curr.save();
}
return e;
}, event);
}

export function handleTransferOut(event: Transfer): void {
const tokenConverter = getTokenConverter(event.params.from)!;
const configs = tokenConverter.configs.load();
configs.reduce((e: Transfer, curr: TokenConverterConfig) => {
if (e.address.equals(curr.tokenOut)) {
curr.tokenOutBalance = curr.tokenOutBalance.minus(e.params.value);
curr.save();
}
return e;
}, event);
}
55 changes: 55 additions & 0 deletions subgraphs/protocol-reserve/src/mappings/tokenConverter.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,64 @@
import { ethereum } from '@graphprotocol/graph-ts';

import {
BaseAssetUpdated,
ConversionConfigUpdated,
ConversionPaused,
ConversionResumed,
ConverterNetworkAddressUpdated,
DestinationAddressUpdated,
PriceOracleUpdated,
} from '../../generated/BTCBPrimeConverter/TokenConverter';
import {
btcbPrimeConverterAddress,
ethPrimeConverterAddress,
riskFundConverterAddress,
usdcPrimeConverterAddress,
usdtPrimeConverterAddress,
wbtcPrimeConverterAddress,
wethPrimeConverterAddress,
xvsVaultConverterAddress,
} from '../constants/addresses';
import { getTokenConverter } from '../operations/get';
import { getOrCreateTokenConverter } from '../operations/getOrCreate';
import { updateOrCreateTokenConverterConfig } from '../operations/updateOrCreate';
import { getConverterNetworkId } from '../utilities/ids';

// eslint-disable-next-line @typescript-eslint/no-unused-vars
export function handleInitializationBtcbPrimeConverter(block: ethereum.Block): void {
getOrCreateTokenConverter(btcbPrimeConverterAddress);
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
export function handleInitializationEthPrimeConverter(block: ethereum.Block): void {
getOrCreateTokenConverter(ethPrimeConverterAddress);
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
export function handleInitializationRiskFundConverter(block: ethereum.Block): void {
getOrCreateTokenConverter(riskFundConverterAddress);
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
export function handleInitializationUsdcPrimeConverter(block: ethereum.Block): void {
getOrCreateTokenConverter(usdcPrimeConverterAddress);
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
export function handleInitializationUsdtPrimeConverter(block: ethereum.Block): void {
getOrCreateTokenConverter(usdtPrimeConverterAddress);
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
export function handleInitializationXvsVaultConverter(block: ethereum.Block): void {
getOrCreateTokenConverter(xvsVaultConverterAddress);
}

// eslint-disable-next-line @typescript-eslint/no-unused-vars
export function handleInitializationWbtcPrimeConverter(block: ethereum.Block): void {
getOrCreateTokenConverter(wbtcPrimeConverterAddress);
}

// eslint-disable-next-line @typescript-eslint/no-unused-vars
export function handleInitializationWethPrimeConverter(block: ethereum.Block): void {
getOrCreateTokenConverter(wethPrimeConverterAddress);
}

export function handleConversionConfigUpdated(event: ConversionConfigUpdated): void {
getOrCreateTokenConverter(event.address);
updateOrCreateTokenConverterConfig(event.address, event.params);
Expand Down Expand Up @@ -44,3 +93,9 @@ export function handleBaseAssetUpdated(event: BaseAssetUpdated): void {
tokenConverter.baseAsset = event.params.newBaseAsset;
tokenConverter.save();
}

export function handlePriceOracleUpdated(event: PriceOracleUpdated): void {
const tokenConverter = getTokenConverter(event.address)!;
tokenConverter.priceOracleAddress = event.params.priceOracle;
tokenConverter.save();
}
Loading

0 comments on commit e74e278

Please sign in to comment.