Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add token out balance to converter config #196

Merged
merged 9 commits into from
Dec 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading