-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathL2_token_mapping.template.ts
90 lines (81 loc) · 2.88 KB
/
L2_token_mapping.template.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import {
BigInt,
Address
} from "@graphprotocol/graph-ts";
import {
Transfer
} from '../generated/Token/Token'
import {
Transfer as TransferEntity,
Tvl as TvlEntity,
AmmTvl as AmmTvlEntity,
Token as TokenEntity,
} from '../generated/schema'
import {
createBlockEntityIfNotExists,
createTransactionEntityIfNotExists,
createTokenEntityIfNotExists
} from './shared'
const TOKEN_ADDRESS = '{{address}}'
const TOKEN_NAME = '{{tokenName}}'
const TOKEN_SYMBOL = '{{token}}'
const TOKEN_DECIMALS = {{tokenDecimals}}
const AMM_ADDRESS = '{{ammAddress}}'
export function handleTransfer(event: Transfer): void {
if (
!(event.params.to.equals(Address.fromHexString(AMM_ADDRESS)) ||
event.params.from.equals(Address.fromHexString(AMM_ADDRESS)))
) {
return
}
let id = event.transaction.hash.toHexString().concat(event.transactionLogIndex.toString())
let entity = TransferEntity.load(id)
if (entity == null) {
entity = new TransferEntity(id)
}
entity.from = event.params.from.toHexString()
entity.to = event.params.to.toHexString()
entity.value = event.params.value
createBlockEntityIfNotExists(event.params._event)
createTransactionEntityIfNotExists(event.params._event)
createTokenEntityIfNotExists(TOKEN_ADDRESS, TOKEN_NAME, TOKEN_SYMBOL, TOKEN_DECIMALS)
entity.block = event.params._event.block.hash.toHexString()
entity.transaction = event.params._event.transaction.hash.toHexString()
entity.tokenEntity = TOKEN_ADDRESS
// legacy
entity.transactionHash = event.params._event.transaction.hash.toHexString()
entity.transactionIndex = event.params._event.transaction.index
entity.timestamp = event.params._event.block.timestamp
entity.blockNumber = event.params._event.block.number
entity.contractAddress = event.params._event.address.toHexString()
entity.token = TOKEN_SYMBOL
entity.save()
const tvlId = "tvl:{{token}}"
let tvlEntity = TvlEntity.load(tvlId)
if (tvlEntity == null) {
tvlEntity = new TvlEntity(tvlId)
tvlEntity.amount = BigInt.fromString('0')
}
if (event.params.to.equals(Address.fromHexString(AMM_ADDRESS))) {
tvlEntity.amount = tvlEntity.amount.plus(event.params.value)
}
if (event.params.from.equals(Address.fromHexString(AMM_ADDRESS))) {
tvlEntity.amount = tvlEntity.amount.minus(event.params.value)
}
tvlEntity.token = TOKEN_SYMBOL
tvlEntity.save()
const ammTvlId = "ammTvl:{{token}}"
let ammTvlEntity = AmmTvlEntity.load(ammTvlId)
if (ammTvlEntity == null) {
ammTvlEntity = new AmmTvlEntity(ammTvlId)
ammTvlEntity.amount = BigInt.fromString('0')
}
if (event.params.to.equals(Address.fromHexString(AMM_ADDRESS))) {
ammTvlEntity.amount = ammTvlEntity.amount.plus(event.params.value)
}
if (event.params.from.equals(Address.fromHexString(AMM_ADDRESS))) {
ammTvlEntity.amount = ammTvlEntity.amount.minus(event.params.value)
}
ammTvlEntity.token = TOKEN_SYMBOL
ammTvlEntity.save()
}