Skip to content

Commit a81ff8b

Browse files
feat(#major); superlend; add subgraph (#2671)
1 parent 326d6ba commit a81ff8b

File tree

8 files changed

+1014
-1
lines changed

8 files changed

+1014
-1
lines changed

deployment/deployment.json

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13970,5 +13970,39 @@
1397013970
}
1397113971
}
1397213972
}
13973+
},
13974+
"superlend": {
13975+
"schema": "lending",
13976+
"base": "aave-forks",
13977+
"protocol": "superlend",
13978+
"project": "superlend",
13979+
"deployments": {
13980+
"superlend-etherlink-mainnet": {
13981+
"network": "etherlink-mainnet",
13982+
"status": "prod",
13983+
"versions": {
13984+
"schema": "3.1.0",
13985+
"subgraph": "1.0.0",
13986+
"methodology": "1.0.0"
13987+
},
13988+
"files": {
13989+
"template": "superlend.template.yaml"
13990+
},
13991+
"options": {
13992+
"prepare:yaml": true,
13993+
"prepare:constants": false
13994+
},
13995+
"services": {
13996+
"hosted-service": {
13997+
"slug": "superlend-etherlink-mainnet",
13998+
"query-id": "superlend-etherlink-mainnet"
13999+
},
14000+
"decentralized-network": {
14001+
"slug": "superlend-etherlink-mainnet",
14002+
"query-id": "todo"
14003+
}
14004+
}
14005+
}
14006+
}
1397314007
}
1397414008
}

subgraphs/aave-forks/package-lock.json

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"network": "etherlink-mainnet",
3+
"factory": {
4+
"address": "0x5ccf60c7e10547c5389e9cbff543e5d0db9f4fec",
5+
"startBlock": 3283856
6+
},
7+
"lendingPoolConfigurator": {
8+
"address": "0x30f6880bb1cf780a49eb4ef64e64585780aae060",
9+
"startBlock": 3283856
10+
},
11+
"LendingPool": {
12+
"address": "0x3bd16d195786fb2f509f2e2d7f69920262ef114d",
13+
"startBlock": 3283856
14+
},
15+
"graftEnabled": false,
16+
"subgraphId": "",
17+
"graftStartBlock": 0
18+
}
Lines changed: 199 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,199 @@
1+
specVersion: 1.0.0
2+
schema:
3+
file: ./schema.graphql
4+
indexerHints:
5+
prune: auto
6+
{{#graftEnabled}}
7+
description: ...
8+
features:
9+
- grafting
10+
graft:
11+
base: {{subgraphId}} # Subgraph ID of base subgraph
12+
block: {{graftStartBlock}} # Block number
13+
{{/graftEnabled}}
14+
dataSources:
15+
- kind: ethereum
16+
name: LendingPoolAddressesProvider
17+
network: {{ network }}
18+
source:
19+
abi: LendingPoolAddressesProvider
20+
address: "{{ factory.address }}"
21+
startBlock: {{ factory.startBlock }}
22+
mapping:
23+
kind: ethereum/events
24+
apiVersion: 0.0.7
25+
language: wasm/assemblyscript
26+
entities: []
27+
abis:
28+
- name: LendingPoolAddressesProvider
29+
file: ./abis/aave-v3/LendingPoolAddressesProvider.json
30+
eventHandlers:
31+
- event: PriceOracleUpdated(indexed address,indexed address)
32+
handler: handlePriceOracleUpdated
33+
file: ./protocols/superlend/src/mapping.ts
34+
- kind: ethereum
35+
name: LendingPoolConfigurator
36+
network: {{ network }}
37+
source:
38+
abi: LendingPoolConfigurator
39+
address: "{{ lendingPoolConfigurator.address }}"
40+
startBlock: {{ lendingPoolConfigurator.startBlock }}
41+
mapping:
42+
kind: ethereum/events
43+
apiVersion: 0.0.7
44+
language: wasm/assemblyscript
45+
entities: []
46+
abis:
47+
- name: LendingPoolConfigurator
48+
file: ./abis/aave-v3/LendingPoolConfigurator.json
49+
- name: ERC20
50+
file: ./abis/ERC20.json
51+
- name: ERC20NameBytes
52+
file: ./abis/ERC20NameBytes.json
53+
- name: ERC20SymbolBytes
54+
file: ./abis/ERC20SymbolBytes.json
55+
- name: AToken
56+
file: ./abis/aave-v3/AToken.json
57+
eventHandlers:
58+
- event: CollateralConfigurationChanged(indexed address,uint256,uint256,uint256)
59+
handler: handleCollateralConfigurationChanged
60+
- event: ReserveActive(indexed address,bool)
61+
handler: handleReserveActive
62+
- event: ReserveBorrowing(indexed address,bool)
63+
handler: handleReserveBorrowing
64+
- event: ReserveFrozen(indexed address,bool)
65+
handler: handleReserveFrozen
66+
- event: ReserveInitialized(indexed address,indexed address,address,address,address)
67+
handler: handleReserveInitialized
68+
- event: ReservePaused(indexed address,bool)
69+
handler: handleReservePaused
70+
- event: ReserveFactorChanged(indexed address,uint256,uint256)
71+
handler: handleReserveFactorChanged
72+
- event: LiquidationProtocolFeeChanged(indexed address,uint256,uint256)
73+
handler: handleLiquidationProtocolFeeChanged
74+
- event: FlashloanPremiumTotalUpdated(uint128,uint128)
75+
handler: handleFlashloanPremiumTotalUpdated
76+
- event: FlashloanPremiumToProtocolUpdated(uint128,uint128)
77+
handler: handleFlashloanPremiumToProtocolUpdated
78+
- event: SiloedBorrowingChanged(indexed address,bool,bool)
79+
handler: handleSiloedBorrowingChanged
80+
file: ./protocols/superlend/src/mapping.ts
81+
- kind: ethereum
82+
name: LendingPool
83+
network: {{ network }}
84+
source:
85+
abi: LendingPool
86+
address: "{{ LendingPool.address }}"
87+
startBlock: {{ LendingPool.startBlock }}
88+
mapping:
89+
kind: ethereum/events
90+
apiVersion: 0.0.7
91+
language: wasm/assemblyscript
92+
entities: []
93+
abis:
94+
- name: LendingPool
95+
file: ./abis/aave-v3/LendingPool.json
96+
- name: ERC20
97+
file: ./abis/ERC20.json
98+
- name: ERC20NameBytes
99+
file: ./abis/ERC20NameBytes.json
100+
- name: ERC20SymbolBytes
101+
file: ./abis/ERC20SymbolBytes.json
102+
- name: AaveOracle
103+
file: ./abis/aave-v3/AaveOracle.json
104+
- name: IPriceOracleGetter
105+
file: ./abis/IPriceOracleGetter.json
106+
- name: AToken
107+
file: ./abis/aave-v3/AToken.json
108+
- name: StableDebtToken
109+
file: ./abis/aave-v3/StableDebtToken.json
110+
- name: VariableDebtToken
111+
file: ./abis/aave-v3/VariableDebtToken.json
112+
eventHandlers:
113+
- event: Borrow(indexed address,address,indexed address,uint256,uint8,uint256,indexed uint16)
114+
handler: handleBorrow
115+
- event: SwapBorrowRateMode(indexed address,indexed address,uint8)
116+
handler: handleSwapBorrowRateMode
117+
- event: LiquidationCall(indexed address,indexed address,indexed address,uint256,uint256,address,bool)
118+
handler: handleLiquidationCall
119+
receipt: true
120+
- event: Repay(indexed address,indexed address,indexed address,uint256,bool)
121+
handler: handleRepay
122+
receipt: true
123+
- event: ReserveDataUpdated(indexed address,uint256,uint256,uint256,uint256,uint256)
124+
handler: handleReserveDataUpdated
125+
receipt: true
126+
- event: Supply(indexed address,address,indexed address,uint256,indexed uint16)
127+
handler: handleDeposit
128+
- event: Withdraw(indexed address,indexed address,indexed address,uint256)
129+
handler: handleWithdraw
130+
- event: ReserveUsedAsCollateralEnabled(indexed address,indexed address)
131+
handler: handleReserveUsedAsCollateralEnabled
132+
- event: ReserveUsedAsCollateralDisabled(indexed address,indexed address)
133+
handler: handleReserveUsedAsCollateralDisabled
134+
- event: FlashLoan(indexed address,address,indexed address,uint256,uint8,uint256,indexed uint16)
135+
handler: handleFlashloan
136+
- event: UserEModeSet(indexed address,uint8)
137+
handler: handleUserEModeSet
138+
- event: MintedToTreasury(indexed address,uint256)
139+
handler: handleMintedToTreasury
140+
file: ./protocols/superlend/src/mapping.ts
141+
templates:
142+
- kind: ethereum
143+
name: AToken
144+
network: {{ network }}
145+
source:
146+
abi: AToken
147+
mapping:
148+
kind: ethereum/events
149+
apiVersion: 0.0.7
150+
language: wasm/assemblyscript
151+
entities: []
152+
abis:
153+
- name: AToken
154+
file: ./abis/aave-v3/AToken.json
155+
- name: ERC20
156+
file: ./abis/ERC20.json
157+
eventHandlers:
158+
- event: Transfer(indexed address,indexed address,uint256)
159+
handler: handleCollateralTransfer
160+
receipt: true
161+
file: ./protocols/superlend/src/mapping.ts
162+
- kind: ethereum
163+
name: StableDebtToken
164+
network: {{ network }}
165+
source:
166+
abi: StableDebtToken
167+
mapping:
168+
kind: ethereum/events
169+
apiVersion: 0.0.7
170+
language: wasm/assemblyscript
171+
entities: []
172+
abis:
173+
- name: StableDebtToken
174+
file: ./abis/aave-v3/StableDebtToken.json
175+
- name: ERC20
176+
file: ./abis/ERC20.json
177+
eventHandlers:
178+
- event: Transfer(indexed address,indexed address,uint256)
179+
handler: handleStableTransfer
180+
file: ./protocols/superlend/src/mapping.ts
181+
- kind: ethereum
182+
name: VariableDebtToken
183+
network: {{ network }}
184+
source:
185+
abi: VariableDebtToken
186+
mapping:
187+
kind: ethereum/events
188+
apiVersion: 0.0.7
189+
language: wasm/assemblyscript
190+
entities: []
191+
abis:
192+
- name: VariableDebtToken
193+
file: ./abis/aave-v3/VariableDebtToken.json
194+
- name: ERC20
195+
file: ./abis/ERC20.json
196+
eventHandlers:
197+
- event: Transfer(indexed address,indexed address,uint256)
198+
handler: handleVariableTransfer
199+
file: ./protocols/superlend/src/mapping.ts
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import {
2+
Address,
3+
ByteArray,
4+
crypto,
5+
dataSource,
6+
log,
7+
} from "@graphprotocol/graph-ts";
8+
import { Network, ZERO_ADDRESS } from "../../../src/constants";
9+
10+
///////////////////////////////
11+
///// Etherlink Addresses /////
12+
///////////////////////////////
13+
14+
export const USDC_TOKEN_ADDRESS = "0x796ea11fa2dd751ed01b53c372ffdb4aaa8f00f9";
15+
16+
/////////////////////////////
17+
///// Protocol Specific /////
18+
/////////////////////////////
19+
20+
export namespace Protocol {
21+
export const PROTOCOL = "Superlend";
22+
export const NAME = "Superlend v3";
23+
export const SLUG = "superlend-v3";
24+
}
25+
26+
export const AAVE_DECIMALS = 8;
27+
28+
export namespace InterestRateMode {
29+
export const NONE = 0 as i32;
30+
export const STABLE = 1 as i32;
31+
export const VARIABLE = 2 as i32;
32+
}
33+
34+
////////////////////////////
35+
///// Network Specific /////
36+
////////////////////////////
37+
38+
export class NetworkSpecificConstant {
39+
constructor(
40+
public readonly protocolAddress: Address, // aka, PoolAddressesProviderRegistry
41+
public readonly network: string
42+
) {}
43+
}
44+
45+
export function getNetworkSpecificConstant(): NetworkSpecificConstant {
46+
const network = dataSource.network();
47+
if (equalsIgnoreCase(network, Network.ETHERLINK_MAINNET)) {
48+
return new NetworkSpecificConstant(
49+
Address.fromString("0xa5cf001755d54e5e84a45757e1637f29f0a19f2f"),
50+
Network.ETHERLINK_MAINNET
51+
);
52+
} else {
53+
log.error("[getNetworkSpecificConstant] Unsupported network: {}", [
54+
network,
55+
]);
56+
return new NetworkSpecificConstant(Address.fromString(ZERO_ADDRESS), "");
57+
}
58+
}
59+
60+
export function equalsIgnoreCase(a: string, b: string): boolean {
61+
return a.replace("-", "_").toLowerCase() == b.replace("-", "_").toLowerCase();
62+
}
63+
64+
// Context keys
65+
export const PROTOCOL_ID_KEY = "protocolId";
66+
export const POOL_ADDRESSES_PROVIDER_ID_KEY = "poolAddressesProviderId";
67+
68+
export const BALANCE_TRANSFER_SIGNATURE = crypto.keccak256(
69+
ByteArray.fromUTF8("BalanceTransfer(address,address,uint256,uint256)")
70+
);
71+
export const BALANCE_TRANSFER_DATA_TYPE = "(uint256,uint256)";

0 commit comments

Comments
 (0)