Skip to content

Commit 695b8f0

Browse files
committed
ensure arm underlying tokens have an entry in ERC20.
1 parent 678e470 commit 695b8f0

2 files changed

Lines changed: 68 additions & 24 deletions

File tree

src/templates/erc20/erc20-entry.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import * as abi from '@abi/erc20'
2+
import { ERC20 } from '@model'
3+
import { Context, Processor } from '@originprotocol/squid-utils'
4+
import { TokenAddress } from '@utils/symbols'
5+
6+
/**
7+
* Create ERC20 entry only (no event tracking).
8+
*/
9+
export const createERC20Entry = ({ from, address }: { from: number; address: TokenAddress | string }): Processor => {
10+
let erc20: ERC20 | undefined
11+
const initialize = async (ctx: Context) => {
12+
if (erc20) return
13+
const block = ctx.blocks.find((b) => b.header.height >= from)
14+
if (!block) return
15+
erc20 = await ctx.store.findOne(ERC20, { where: { chainId: ctx.chain.id, address } })
16+
try {
17+
if (!erc20) {
18+
const contract = new abi.Contract(ctx, block.header, address)
19+
const [name, symbol, decimals] = await Promise.all([contract.name(), contract.symbol(), contract.decimals()])
20+
erc20 = new ERC20({
21+
id: `${ctx.chain.id}-${address}`,
22+
chainId: ctx.chain.id,
23+
address,
24+
name,
25+
symbol,
26+
decimals,
27+
})
28+
await ctx.store.insert(erc20)
29+
}
30+
} catch (err: any) {
31+
ctx.log.info({ height: block.header.height, err: err.message }, `Failed to get contract name for ${address}`)
32+
}
33+
}
34+
return {
35+
from,
36+
async process(ctx: Context) {
37+
await initialize(ctx)
38+
},
39+
}
40+
}

src/templates/origin-arm/origin-arm.ts

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,26 @@
1-
import dayjs from 'dayjs'
2-
import { findLast } from 'lodash'
3-
import { LessThan } from 'typeorm'
4-
import { formatEther, formatUnits } from 'viem'
1+
import dayjs from 'dayjs';
2+
import { findLast } from 'lodash';
3+
import { LessThan } from 'typeorm';
4+
import { formatEther, formatUnits } from 'viem';
55

6-
import * as erc20Abi from '@abi/erc20'
7-
import * as originOsArmAbi from '@abi/origin-arm'
8-
import * as originEthenaArmAbi from '@abi/origin-ethena-arm'
9-
import * as originEtherfiArmAbi from '@abi/origin-etherfi-arm'
10-
import * as originLidoArmAbi from '@abi/origin-lido-arm'
11-
import * as originLidoArmCapManagerAbi from '@abi/origin-lido-arm-cap-manager'
12-
import { Arm, ArmDailyStat, ArmState, ArmSwap, ArmWithdrawalRequest, TraderateChanged } from '@model'
13-
import {
14-
Block,
15-
Context,
16-
EvmBatchProcessor,
17-
Processor,
18-
blockFrequencyTracker,
19-
calculateAPY,
20-
logFilter,
21-
} from '@originprotocol/squid-utils'
22-
import { ensureExchangeRate } from '@shared/post-processors/exchange-rates'
23-
import { Currency } from '@shared/post-processors/exchange-rates/mainnetCurrencies'
24-
import { createERC20EventTracker } from '@templates/erc20/erc20-event'
6+
7+
8+
import * as erc20Abi from '@abi/erc20';
9+
import * as originOsArmAbi from '@abi/origin-arm';
10+
import * as originEthenaArmAbi from '@abi/origin-ethena-arm';
11+
import * as originEtherfiArmAbi from '@abi/origin-etherfi-arm';
12+
import * as originLidoArmAbi from '@abi/origin-lido-arm';
13+
import * as originLidoArmCapManagerAbi from '@abi/origin-lido-arm-cap-manager';
14+
import { Arm, ArmDailyStat, ArmState, ArmSwap, ArmWithdrawalRequest, TraderateChanged } from '@model';
15+
import { Block, Context, EvmBatchProcessor, Processor, blockFrequencyTracker, calculateAPY, logFilter } from '@originprotocol/squid-utils';
16+
import { ensureExchangeRate } from '@shared/post-processors/exchange-rates';
17+
import { Currency } from '@shared/post-processors/exchange-rates/mainnetCurrencies';
18+
import { createERC20Entry } from '@templates/erc20/erc20-entry';
19+
import { createERC20EventTracker } from '@templates/erc20/erc20-event';
2520
import { createEventProcessor } from '@templates/events/createEventProcessor'
2621
import { traceFilter } from '@utils/traceFilter'
2722

23+
2824
export const createOriginARMProcessors = ({
2925
name,
3026
from,
@@ -471,5 +467,13 @@ export const createOriginARMProcessors = ({
471467
from,
472468
address: armAddress,
473469
}),
470+
createERC20Entry({
471+
from,
472+
address: token0,
473+
}),
474+
createERC20Entry({
475+
from,
476+
address: token1,
477+
}),
474478
]
475-
}
479+
}

0 commit comments

Comments
 (0)