Skip to content

Commit bf94703

Browse files
Merge pull request #257 from VenusProtocol/feat/wbnb-burn-acc
feat: add support for wBnbBurnConverter
2 parents 0bbad32 + 8203895 commit bf94703

File tree

12 files changed

+596
-35
lines changed

12 files changed

+596
-35
lines changed

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
"@venusprotocol/governance-contracts": "2.10.0",
6060
"@venusprotocol/isolated-pools": "4.2.0-dev.13",
6161
"@venusprotocol/oracle": "2.9.0",
62-
"@venusprotocol/protocol-reserve": "3.1.0",
62+
"@venusprotocol/protocol-reserve": "3.4.0-dev.3",
6363
"@venusprotocol/solidity-utilities": "^2.0.3",
6464
"@venusprotocol/venus-protocol": "9.6.0",
6565
"assemblyscript": "0.19.23",
@@ -90,7 +90,7 @@
9090
"resolutions": {
9191
"@venusprotocol/governance-contracts": "2.10.0",
9292
"@venusprotocol/venus-protocol": "9.6.0",
93-
"@venusprotocol/protocol-reserve": "3.1.0",
93+
"@venusprotocol/protocol-reserve": "3.4.0-dev.3",
9494
"prettier": "^3.0.3"
9595
},
9696
"husky": {

subgraphs/protocol-reserve/config/index.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ const main = () => {
3434
usdtPrimeConverterStartBlock: '0',
3535
xvsVaultConverterAddress: '0xa779C1D17bC5230c07afdC51376CAC1cb3Dd5314',
3636
xvsVaultConverterStartBlock: '0',
37+
wBnbBurnConverterAddress: '0xa079C1D17bC5230c07afdC51376CAC1cb3Dd5314',
38+
wBnbBurnConverterStartBlock: '0',
3739
riskFundAddress: '0x8d81a3dcd17030cd5f23ac7370e4efb10d2b3ca4',
3840
protocolShareReserveAddress: '0x70e0bA845a1A0F2DA3359C97E0285013525FFC49',
3941
protocolShareReserveStartBlock: '0',
@@ -55,6 +57,8 @@ const main = () => {
5557
usdtPrimeConverterStartBlock: '36750639',
5658
xvsVaultConverterAddress: chapelDeployments.addresses.XVSVaultConverter,
5759
xvsVaultConverterStartBlock: '36750678',
60+
wBnbBurnConverterAddress: chapelDeployments.addresses.WBNBBurnConverter,
61+
wBnbBurnConverterStartBlock: '54160930',
5862
riskFundAddress: chapelDeployments.addresses.RiskFundV2,
5963
StartBlock: '36750498',
6064
protocolShareReserveAddress: chapelDeployments.addresses.ProtocolShareReserve,
@@ -77,6 +81,8 @@ const main = () => {
7781
usdtPrimeConverterStartBlock: '35140081',
7882
xvsVaultConverterAddress: bscMainnetDeployments.addresses.XVSVaultConverter,
7983
xvsVaultConverterStartBlock: '35140090',
84+
wBnbBurnConverterAddress: bscMainnetDeployments.addresses.WBNBBurnConverter,
85+
wBnbBurnConverterStartBlock: '51144405',
8086
riskFundAddress: bscMainnetDeployments.addresses.RiskFundV2,
8187
protocolShareReserveAddress: bscMainnetDeployments.addresses.ProtocolShareReserve,
8288
protocolShareReserveStartBlock: '32659440',

subgraphs/protocol-reserve/schema.graphql

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ type TokenConverter @entity {
3838
destinationAddress: Bytes!
3939
baseAsset: Token!
4040
configs: [TokenConverterConfig!]! @derivedFrom(field: "tokenConverter")
41+
destinationAmounts: [DestinationAmount!]! @derivedFrom(field: "tokenConverter")
4142
paused: Boolean!
4243
priceOracleAddress: Bytes!
4344
}
@@ -54,3 +55,14 @@ type TokenConverterConfig @entity {
5455
access: ConversionAccessibility!
5556
tokenOutBalance: BigInt!
5657
}
58+
59+
"""
60+
Destination Amounts
61+
"""
62+
type DestinationAmount @entity {
63+
id: Bytes!
64+
address: Bytes!
65+
tokenConverter: TokenConverter!
66+
token: Token!
67+
amount: BigInt!
68+
}

subgraphs/protocol-reserve/src/constants/addresses.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
wbtcPrimeConverterAddress as wbtcPrimeConverterAddressString,
1212
wethPrimeConverterAddress as wethPrimeConverterAddressString,
1313
xvsVaultConverterAddress as xvsVaultConverterAddressString,
14+
wBnbBurnConverterAddress as wBnbBurnConverterAddressString,
1415
} from './config';
1516

1617
export const nullAddress = Address.fromString('0x0000000000000000000000000000000000000000');
@@ -31,5 +32,6 @@ export const usdtPrimeConverterAddress = addressFromCleanString(usdtPrimeConvert
3132
export const xvsVaultConverterAddress = addressFromCleanString(xvsVaultConverterAddressString);
3233
export const wbtcPrimeConverterAddress = addressFromCleanString(wbtcPrimeConverterAddressString);
3334
export const wethPrimeConverterAddress = addressFromCleanString(wethPrimeConverterAddressString);
35+
export const wBnbBurnConverterAddress = addressFromCleanString(wBnbBurnConverterAddressString);
3436

3537
export const riskFundAddress = addressFromCleanString(riskFundAddressString);

subgraphs/protocol-reserve/src/constants/config-template

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export const riskFundConverterAddress = '{{riskFundConverterAddress}}';
88
export const usdcPrimeConverterAddress = '{{usdcPrimeConverterAddress}}';
99
export const usdtPrimeConverterAddress = '{{usdtPrimeConverterAddress}}';
1010
export const xvsVaultConverterAddress = '{{xvsVaultConverterAddress}}';
11+
export const wBnbBurnConverterAddress = '{{wBnbBurnConverterAddress}}';
1112
export const wbtcPrimeConverterAddress = '{{wbtcPrimeConverterAddress}}';
1213
export const wethPrimeConverterAddress = '{{wethPrimeConverterAddress}}';
1314

subgraphs/protocol-reserve/src/mappings/tokenConverter.ts

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
import { ethereum } from '@graphprotocol/graph-ts';
1+
import { Address, ethereum } from '@graphprotocol/graph-ts';
22

33
import {
4+
AssetTransferredToDestination,
45
BaseAssetUpdated,
6+
ConvertedExactTokens,
57
ConversionConfigUpdated,
68
ConversionPaused,
79
ConversionResumed,
@@ -18,9 +20,10 @@ import {
1820
wbtcPrimeConverterAddress,
1921
wethPrimeConverterAddress,
2022
xvsVaultConverterAddress,
23+
wBnbBurnConverterAddress,
2124
} from '../constants/addresses';
2225
import { getTokenConverter } from '../operations/get';
23-
import { getOrCreateTokenConverter } from '../operations/getOrCreate';
26+
import { getOrCreateDestinationAmount, getOrCreateTokenConverter } from '../operations/getOrCreate';
2427
import { updateOrCreateTokenConverterConfig } from '../operations/updateOrCreate';
2528
import { getConverterNetworkId } from '../utilities/ids';
2629

@@ -59,6 +62,11 @@ export function handleInitializationWethPrimeConverter(block: ethereum.Block): v
5962
getOrCreateTokenConverter(wethPrimeConverterAddress);
6063
}
6164

65+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
66+
export function handleInitializationWBnbBurnConverter(block: ethereum.Block): void {
67+
getOrCreateTokenConverter(wBnbBurnConverterAddress);
68+
}
69+
6270
export function handleConversionConfigUpdated(event: ConversionConfigUpdated): void {
6371
getOrCreateTokenConverter(event.address);
6472
updateOrCreateTokenConverterConfig(event.address, event.params);
@@ -99,3 +107,48 @@ export function handlePriceOracleUpdated(event: PriceOracleUpdated): void {
99107
tokenConverter.priceOracleAddress = event.params.priceOracle;
100108
tokenConverter.save();
101109
}
110+
111+
export function handleConvertedExactTokens(event: ConvertedExactTokens): void {
112+
const tokenConverter = getTokenConverter(event.address)!;
113+
114+
// handle private conversions (conversions between converters)
115+
const senderConverter = getTokenConverter(event.params.sender);
116+
if (!!senderConverter && senderConverter.address !== riskFundConverterAddress) {
117+
const senderDestinationAmount = getOrCreateDestinationAmount(
118+
Address.fromBytes(senderConverter.address),
119+
Address.fromBytes(senderConverter.destinationAddress),
120+
event.params.tokenAddressOut,
121+
);
122+
senderDestinationAmount.amount = senderDestinationAmount.amount.plus(event.params.amountOut);
123+
senderDestinationAmount.save();
124+
}
125+
126+
const destinationAmountEntity = getOrCreateDestinationAmount(
127+
event.address,
128+
Address.fromBytes(tokenConverter.destinationAddress),
129+
event.params.tokenAddressIn,
130+
);
131+
destinationAmountEntity.amount = destinationAmountEntity.amount.plus(event.params.amountIn);
132+
destinationAmountEntity.save();
133+
}
134+
135+
export function handleConversionEvent(event: ConvertedExactTokens): void {
136+
const tokenConverter = getTokenConverter(event.address)!;
137+
const destinationAmountEntity = getOrCreateDestinationAmount(
138+
event.address,
139+
Address.fromBytes(tokenConverter.destinationAddress),
140+
event.params.tokenAddressIn,
141+
);
142+
destinationAmountEntity.amount = destinationAmountEntity.amount.plus(event.params.amountIn);
143+
destinationAmountEntity.save();
144+
}
145+
146+
export function handleAssetTransferredToDestination(event: AssetTransferredToDestination): void {
147+
const destinationAmountEntity = getOrCreateDestinationAmount(
148+
event.address,
149+
event.params.receiver,
150+
event.params.asset,
151+
);
152+
destinationAmountEntity.amount = destinationAmountEntity.amount.plus(event.params.amount);
153+
destinationAmountEntity.save();
154+
}

subgraphs/protocol-reserve/src/operations/getOrCreate.ts

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
1-
import { Address } from '@graphprotocol/graph-ts';
1+
import { Address, BigInt } from '@graphprotocol/graph-ts';
22

33
import { ERC20 } from '../../generated/RiskFundConverter/ERC20';
4-
import { Token, TokenConverter, TokenConverterConfig } from '../../generated/schema';
5-
import { getAssetId } from '../utilities/ids';
4+
import {
5+
DestinationAmount,
6+
Token,
7+
TokenConverter,
8+
TokenConverterConfig,
9+
} from '../../generated/schema';
10+
import { getAssetId, getDestinationAmountId, getTokenConverterId } from '../utilities/ids';
611
import { createTokenConverter, createTokenConverterConfig } from './create';
712
import { getTokenConverter, getTokenConverterConfig } from './get';
813

@@ -44,7 +49,7 @@ export function getOrCreateTokenConverterConfig(
4449
}
4550

4651
/**
47-
* Creates and Token object with symbol and address
52+
* Creates a Token object with symbol and address
4853
*
4954
* @param asset Address of the token
5055
* @returns Token
@@ -62,3 +67,28 @@ export function getOrCreateToken(asset: Address): Token {
6267
}
6368
return tokenEntity;
6469
}
70+
71+
/**
72+
* Creates a DestinationAmount object
73+
*
74+
* @param asset Address of the token
75+
* @returns Token
76+
*/
77+
export function getOrCreateDestinationAmount(
78+
tokenConverterAddress: Address,
79+
destinationAddress: Address,
80+
tokenAddress: Address,
81+
): DestinationAmount {
82+
const entityId = getDestinationAmountId(tokenConverterAddress, destinationAddress, tokenAddress);
83+
let destinationAmountEntity = DestinationAmount.load(entityId);
84+
85+
if (!destinationAmountEntity) {
86+
destinationAmountEntity = new DestinationAmount(entityId);
87+
destinationAmountEntity.tokenConverter = getTokenConverterId(tokenConverterAddress);
88+
destinationAmountEntity.token = getOrCreateToken(tokenAddress).id;
89+
destinationAmountEntity.amount = BigInt.zero();
90+
destinationAmountEntity.address = destinationAddress;
91+
}
92+
93+
return destinationAmountEntity;
94+
}

subgraphs/protocol-reserve/src/utilities/ids.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,9 @@ export const getTokenConverterConfigId = (
1111
): Bytes => tokenConverterAddress.concat(tokenAddressIn).concat(tokenAddressOut);
1212

1313
export const getAssetId = (asset: Address): Bytes => asset;
14+
15+
export const getDestinationAmountId = (
16+
tokenConverterAddress: Address,
17+
destinationAddress: Address,
18+
tokenAddress: Address,
19+
): Bytes => tokenConverterAddress.concat(destinationAddress).concat(tokenAddress);

0 commit comments

Comments
 (0)