Skip to content

Commit 27fa875

Browse files
authored
chore: v301 updates (#88)
* chore: create test config with v301 market * feat: helper function for v301 update block based on network of event * feat: modify BalanceTransfer params based on update block * feat: use dataSource import for current network * feat: add mainnet v3 config * fix: typing of update block check * feat: add v3 mainnet link * feat: add v3 mainnet collector
1 parent 615952a commit 27fa875

5 files changed

Lines changed: 48 additions & 14 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ The Aave Protocol subgraphs index data from the protocol smart contracts, and ex
1010

1111
### Production networks
1212

13+
- [ETH Mainnet V3](https://thegraph.com/hosted-service/subgraph/aave/protocol-v3)
1314
- [ETH Mainnet V2](https://thegraph.com/hosted-service/subgraph/aave/protocol-v2)
1415
- [Polygon V2](https://thegraph.com/hosted-service/subgraph/aave/aave-v2-matic)
1516
- [Avalanche V2](https://thegraph.com/hosted-service/subgraph/aave/protocol-v2-avalanche)

config/mainnet-v3.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"network": "mainnet",
3+
"AaveOracleAddress": "0x54586bE62E3c3580375aE3723C145253060Ca0C2",
4+
"AaveOracleStartBlock": 16291123,
5+
"PoolAddressesProviderRegistryAddress": "0xbaA999AC55EAce41CcAE355c77809e68Bb345170",
6+
"PoolAddressesProviderRegistryStartBlock": 16291006,
7+
"RewardsControllerAddress": "0x8164Cc65827dcFe994AB23944CBC90e0aa80bFcb",
8+
"RewardsControllerStartBlock": 16291136
9+
}

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
"subgraph:build": "graph build",
1010
"subgraph:deploy:hosted": "graph deploy $SLUG --ipfs https://api.thegraph.com/ipfs/ --node https://api.thegraph.com/deploy/ --access-token $ACCESS_TOKEN",
1111
"deploy:hosted:mainnet": "VERSION=v2 BLOCKCHAIN=ethereum NETWORK=mainnet env-cmd npm run prepare:subgraph && SLUG=aave/protocol-v2 env-cmd npm run subgraph:deploy:hosted",
12+
"deploy:hosted:mainnet-v3": "VERSION=v3 BLOCKCHAIN=v3 NETWORK=mainnet env-cmd npm run prepare:subgraph && SLUG=aave/protocol-v3 env-cmd npm run subgraph:deploy:hosted",
1213
"deploy:hosted:goerli-v2": "VERSION=v2 BLOCKCHAIN=ethereum NETWORK=goerli env-cmd npm run prepare:subgraph && SLUG=aave/protocol-v2-goerli env-cmd npm run subgraph:deploy:hosted",
1314
"deploy:hosted:goerli-v3": "VERSION=v3 BLOCKCHAIN=v3 NETWORK=goerli env-cmd npm run prepare:subgraph && SLUG=aave/protocol-v3-goerli env-cmd npm run subgraph:deploy:hosted",
1415
"deploy:hosted:mainnet-arc": "VERSION=v2-arc BLOCKCHAIN=ethereum-arc NETWORK=mainnet env-cmd npm run prepare:subgraph && SLUG=aave/aave-arc env-cmd npm run subgraph:deploy:hosted",
@@ -30,7 +31,7 @@
3031
"deploy:hosted:harmony-v3": "VERSION=v3 BLOCKCHAIN=v3 NETWORK=harmony env-cmd npm run prepare:subgraph && SLUG=aave/protocol-v3-harmony env-cmd npm run subgraph:deploy:hosted",
3132
"deploy:hosted:v2": "npm run deploy:hosted:mainnet && npm run deploy:hosted:polygon-v2 && npm run deploy:hosted:avalanche-v2",
3233
"deploy:hosted:v2-testnet": "npm run deploy:hosted:goerli-v2 && npm run deploy:hosted:mumbai-v2 && npm run deploy:hosted:fuji-v2",
33-
"deploy:hosted:v3": "npm run deploy:hosted:avalanche-v3 && npm run deploy:hosted:polygon-v3 && npm run deploy:hosted:optimism-v3 && npm run deploy:hosted:fantom-v3 && npm run deploy:hosted:arbitrum-v3 && npm run deploy:hosted:harmony-v3",
34+
"deploy:hosted:v3": "npm run deploy:hosted:avalanche-v3 && npm run deploy:hosted:polygon-v3 && npm run deploy:hosted:optimism-v3 && npm run deploy:hosted:fantom-v3 && npm run deploy:hosted:arbitrum-v3 && npm run deploy:hosted:harmony-v3 && npm run deploy:hosted:mainnet-v3",
3435
"deploy:hosted:v3-testnet": "npm run deploy:hosted:goerli-v3 && npm run deploy:hosted:mumbai-v3 && npm run deploy:hosted:fuji-v3 && npm run deploy:hosted:arbitrum-goerli && npm run deploy:hosted:optimism-goerli && npm run deploy:hosted:fantom-testnet"
3536
},
3637
"repository": {

src/mapping/tokenization/tokenization-v3.ts

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,12 @@ import {
3333
getOrInitReserveParamsHistoryItem,
3434
getPoolByContract,
3535
} from '../../helpers/v3/initializers';
36-
import { zeroBI } from '../../utils/converters';
36+
import { getUpdateBlock, zeroBI } from '../../utils/converters';
3737
import { calculateUtilizationRate } from '../../helpers/reserve-logic';
3838
import { Address, BigInt, Bytes, ethereum, log } from '@graphprotocol/graph-ts';
3939
import { rayDiv, rayMul } from '../../helpers/math';
4040
import { getHistoryEntityId } from '../../utils/id-generation';
41+
import { dataSource } from '@graphprotocol/graph-ts';
4142

4243
// TODO: check if we need to add stuff to history
4344
function saveUserReserveAHistory(
@@ -170,8 +171,9 @@ function tokenBurn(
170171
poolReserve.lifetimeWithdrawals = poolReserve.lifetimeWithdrawals.plus(userBalanceChange);
171172

172173
if (userReserve.usageAsCollateralEnabledOnUser) {
173-
poolReserve.totalLiquidityAsCollateral =
174-
poolReserve.totalLiquidityAsCollateral.minus(userBalanceChange);
174+
poolReserve.totalLiquidityAsCollateral = poolReserve.totalLiquidityAsCollateral.minus(
175+
userBalanceChange
176+
);
175177
}
176178
saveReserve(poolReserve, event);
177179

@@ -216,7 +218,8 @@ function tokenMint(
216218
onBehalf.toHexString() != '0xBe85413851D195fC6341619cD68BfDc26a25b928'.toLowerCase() &&
217219
onBehalf.toHexString() != '0x5ba7fd868c40c16f7aDfAe6CF87121E13FC2F7a0'.toLowerCase() &&
218220
onBehalf.toHexString() != '0x8A020d92D6B119978582BE4d3EdFdC9F7b28BF31'.toLowerCase() &&
219-
onBehalf.toHexString() != '0x053D55f9B5AF8694c503EB288a1B7E552f590710'.toLowerCase()
221+
onBehalf.toHexString() != '0x053D55f9B5AF8694c503EB288a1B7E552f590710'.toLowerCase() &&
222+
onBehalf.toHexString() != '0x464C71f6c2F760DdA6093dCB91C24c39e5d6e18c'.toLowerCase()
220223
) {
221224
let userReserve = getOrInitUserReserve(onBehalf, aToken.underlyingAssetAddress, event);
222225
let calculatedAmount = rayDiv(userBalanceChange, index);
@@ -241,14 +244,16 @@ function tokenMint(
241244
poolReserve.lifetimeLiquidity = poolReserve.lifetimeLiquidity.plus(userBalanceChange);
242245

243246
if (userReserve.usageAsCollateralEnabledOnUser) {
244-
poolReserve.totalLiquidityAsCollateral =
245-
poolReserve.totalLiquidityAsCollateral.plus(userBalanceChange);
247+
poolReserve.totalLiquidityAsCollateral = poolReserve.totalLiquidityAsCollateral.plus(
248+
userBalanceChange
249+
);
246250
}
247251
saveReserve(poolReserve, event);
248252
saveUserReserveAHistory(userReserve, event, index);
249253
} else {
250-
poolReserve.lifetimeReserveFactorAccrued =
251-
poolReserve.lifetimeReserveFactorAccrued.plus(userBalanceChange);
254+
poolReserve.lifetimeReserveFactorAccrued = poolReserve.lifetimeReserveFactorAccrued.plus(
255+
userBalanceChange
256+
);
252257
saveReserve(poolReserve, event);
253258
// log.error('Minting to treasuey {} an amount of: {}', [from.toHexString(), value.toString()]);
254259
}
@@ -275,8 +280,15 @@ export function handleATokenMint(event: ATokenMint): void {
275280
}
276281

277282
export function handleBalanceTransfer(event: BalanceTransfer): void {
278-
tokenBurn(event, event.params.from, event.params.value, BigInt.fromI32(0), event.params.index);
279-
tokenMint(event, event.params.to, event.params.value, BigInt.fromI32(0), event.params.index);
283+
let balanceTransferValue = event.params.value;
284+
const network = dataSource.network();
285+
const v301UpdateBlock = getUpdateBlock(network);
286+
if (v301UpdateBlock !== -1 && event.block.number.toU32() > v301UpdateBlock) {
287+
balanceTransferValue = balanceTransferValue.times(event.params.index);
288+
}
289+
290+
tokenBurn(event, event.params.from, balanceTransferValue, BigInt.fromI32(0), event.params.index);
291+
tokenMint(event, event.params.to, balanceTransferValue, BigInt.fromI32(0), event.params.index);
280292

281293
// TODO: is this really necessary(from v1)? if we transfer aToken we are not moving the collateral (underlying token)
282294
let aToken = getOrInitSubToken(event.address);
@@ -389,8 +401,9 @@ export function handleVariableTokenMint(event: VTokenMint): void {
389401
poolReserve.totalScaledVariableDebt = poolReserve.totalScaledVariableDebt.plus(calculatedAmount);
390402
poolReserve.totalCurrentVariableDebt = rayMul(poolReserve.totalScaledVariableDebt, index);
391403

392-
poolReserve.lifetimeScaledVariableDebt =
393-
poolReserve.lifetimeScaledVariableDebt.plus(calculatedAmount);
404+
poolReserve.lifetimeScaledVariableDebt = poolReserve.lifetimeScaledVariableDebt.plus(
405+
calculatedAmount
406+
);
394407
poolReserve.lifetimeCurrentVariableDebt = rayMul(poolReserve.lifetimeScaledVariableDebt, index);
395408

396409
poolReserve.availableLiquidity = poolReserve.availableLiquidity.minus(userBalanceChange);

src/utils/converters.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ export function byteArrayFromHex(s: string): ByteArray {
123123
throw new TypeError('Hex string must have an even number of characters');
124124
}
125125
let out = new Uint8Array(s.length / 2);
126-
for (var i = 0; i < s.length; i += 2) {
126+
for (let i = 0; i < s.length; i += 2) {
127127
out[i / 2] = parseInt(s.substring(i, i + 2), 16) as u32;
128128
}
129129

@@ -191,3 +191,13 @@ export function generateSymbol(description: string): string {
191191
let symbolArr = description.split(' / ');
192192
return convertToLowerCase(symbolArr[0] + '-' + symbolArr[1]);
193193
}
194+
195+
// returns block of market update to v3.0.1, or null if no upgrade
196+
export function getUpdateBlock(network: string): u32 {
197+
let updateBlock = -1;
198+
if (network === 'mainnet') {
199+
updateBlock = 0;
200+
}
201+
202+
return updateBlock;
203+
}

0 commit comments

Comments
 (0)