Skip to content

Commit d19e47e

Browse files
committed
more hookups for proper sUSDe swap handling
1 parent 5511e38 commit d19e47e

6 files changed

Lines changed: 75 additions & 41 deletions

File tree

.vscode/settings.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"editor.defaultFormatter": "esbenp.prettier-vscode",
3+
"editor.formatOnSave": true,
4+
"[typescript]": {
5+
"editor.defaultFormatter": "esbenp.prettier-vscode"
6+
},
7+
"[javascript]": {
8+
"editor.defaultFormatter": "esbenp.prettier-vscode"
9+
},
10+
"[json]": {
11+
"editor.defaultFormatter": "esbenp.prettier-vscode"
12+
},
13+
"typescript.format.enable": false
14+
}

src/mainnet/processors/origin-arms.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import * as originEthenaArmAbi from '@abi/origin-ethena-arm'
12
import { createOriginARMProcessors } from '@templates/origin-arm'
23
import { addresses } from '@utils/addresses'
34

@@ -7,7 +8,8 @@ export const originArmProcessors = [
78
name: 'ARM-WETH-stETH',
89
from: 20987226,
910
armAddress: addresses.arms['ARM-WETH-stETH'].address,
10-
underlyingToken: 'WETH',
11+
token0: 'WETH',
12+
token1: 'stETH',
1113
capManagerAddress: addresses.arms['ARM-WETH-stETH'].capManager,
1214
armType: 'lido',
1315
marketFrom: 23130294,
@@ -18,7 +20,8 @@ export const originArmProcessors = [
1820
name: 'ARM-WETH-eETH',
1921
from: 23689028,
2022
armAddress: addresses.arms['ARM-WETH-eETH'].address,
21-
underlyingToken: 'WETH',
23+
token0: 'WETH',
24+
token1: 'eETH',
2225
capManagerAddress: addresses.arms['ARM-WETH-eETH'].capManager,
2326
armType: 'etherfi',
2427
marketFrom: 23689033,
@@ -29,7 +32,13 @@ export const originArmProcessors = [
2932
name: 'ARM-USDe-sUSDe',
3033
from: 23924654,
3134
armAddress: addresses.arms['ARM-USDe-sUSDe'].address,
32-
underlyingToken: 'USDe',
35+
token0: 'USDe',
36+
token1: 'sUSDe',
37+
getRate1: async (ctx, block) => {
38+
// The same standard exists on sUSDe to determine it's rate to USDe
39+
const contract = new originEthenaArmAbi.Contract(ctx, block.header, addresses.tokens.sUSDe)
40+
return await contract.convertToAssets(10n ** 18n)
41+
},
3342
capManagerAddress: addresses.arms['ARM-USDe-sUSDe'].capManager,
3443
armType: 'ethena',
3544
marketFrom: 23924654,

src/shared/post-processors/exchange-rates/mainnetCurrencies.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ export const mainnetCurrencies = {
2121
wOETH: '0xdcee70654261af21c44c093c300ed3bb97b78192',
2222
WETH: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
2323
stETH: '0xae7ab96520de3a18e5e111b5eaab095312d7fe84',
24+
eETH: '0x35fa164735182de50811e8e2e824cfb9b6118ac2',
25+
sUSDe: '0x9d39a5de30e57443bff2a8307a4256c8797a3497',
2426
wstETH: '0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0',
2527
rETH: '0xae78736cd615f374d3085123a210448e74fc6393',
2628
frxETH: '0x5e8422345238f34275888049021821e8e08caa1f',

src/sonic/origin-sonic-arm.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ export const sonicArmProcessors = createOriginARMProcessors({
55
name: 'origin-os-arm',
66
from: 28716127,
77
armAddress: sonicAddresses.armOS.address,
8-
underlyingToken: 'S',
8+
token0: 'wS',
9+
token1: 'OS',
910
capManagerAddress: sonicAddresses.armOS.capManager,
1011
marketFrom: 37481525,
1112
armType: 'os',

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

Lines changed: 38 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,42 @@
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';
5+
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 { createERC20EventTracker } from '@templates/erc20/erc20-event';
19+
import { createEventProcessor } from '@templates/events/createEventProcessor';
20+
import { traceFilter } from '@utils/traceFilter';
521

6-
import * as erc20Abi from '@abi/erc20'
7-
import * as originOsArmAbi from '@abi/origin-arm'
8-
import * as originEtherfiArmAbi from '@abi/origin-etherfi-arm'
9-
import * as originLidoArmAbi from '@abi/origin-lido-arm'
10-
import * as originEthenaArmAbi from '@abi/origin-ethena-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'
25-
import { createEventProcessor } from '@templates/events/createEventProcessor'
26-
import { traceFilter } from '@utils/traceFilter'
2722

2823
export const createOriginARMProcessors = ({
2924
name,
3025
from,
3126
armAddress,
32-
underlyingToken,
27+
token0,
28+
token1,
29+
getRate1,
3330
capManagerAddress,
3431
marketFrom,
3532
armType,
3633
}: {
3734
name: string
3835
from: number
3936
armAddress: string
40-
underlyingToken: Currency
37+
token0: Currency
38+
token1: Currency
39+
getRate1?: (ctx: Context, block: Block) => Promise<bigint>
4140
capManagerAddress: string
4241
marketFrom?: number
4342
armType: 'lido' | 'etherfi' | 'os' | 'ethena'
@@ -333,14 +332,18 @@ export const createOriginARMProcessors = ({
333332

334333
const transfersOut0 = transfers0.filter((t) => t.from.toLowerCase() === armAddress)
335334
const transfersIn1 = transfers1.filter((t) => t.to.toLowerCase() === armAddress)
335+
336+
const rate1 = getRate1 ? await getRate1(ctx, block) : 10n ** 18n
337+
const rate1Number = +formatEther(rate1)
338+
336339
for (let i = 0; i < transfersOut0.length; i++) {
337340
for (let j = 0; j < transfersIn1.length; j++) {
338341
const out0 = transfersOut0[i]
339342
const in1 = transfersIn1[j]
340343
if (out0.value === 0n || in1.value === 0n) continue
341344
const rate = +formatEther((out0.value * 10n ** 18n) / in1.value)
342-
if (Math.abs(rate - 1) <= 0.001) {
343-
pairs.push({ assets0: -out0.value, assets1: in1.value })
345+
if (Math.abs(rate - rate1Number) <= 0.01) {
346+
pairs.push({ assets0: -out0.value, assets1: (in1.value * rate1) / 10n ** 18n })
344347
transfersIn1.splice(j, 1)
345348
break
346349
}
@@ -355,8 +358,8 @@ export const createOriginARMProcessors = ({
355358
const in0 = transfersIn0[j]
356359
if (out1.value === 0n || in0.value === 0n) continue
357360
const rate = +formatEther((out1.value * 10n ** 18n) / in0.value)
358-
if (Math.abs(rate - 1) <= 0.001) {
359-
pairs.push({ assets0: in0.value, assets1: -out1.value })
361+
if (Math.abs(rate - rate1Number) <= 0.01) {
362+
pairs.push({ assets0: in0.value, assets1: (-out1.value * rate1) / 10n ** 18n })
360363
transfersIn0.splice(j, 1)
361364
break
362365
}
@@ -391,9 +394,9 @@ export const createOriginARMProcessors = ({
391394
const [state, yesterdayState, rateUSD, rateETH, rateNative] = await Promise.all([
392395
getCurrentState(block),
393396
getYesterdayState(block),
394-
ensureExchangeRate(ctx, block, underlyingToken, 'USD'),
395-
ensureExchangeRate(ctx, block, underlyingToken, 'ETH'),
396-
ensureExchangeRate(ctx, block, underlyingToken, ctx.chain.nativeCurrency.symbol as Currency),
397+
ensureExchangeRate(ctx, block, token0, 'USD'),
398+
ensureExchangeRate(ctx, block, token0, 'ETH'),
399+
ensureExchangeRate(ctx, block, token0, ctx.chain.nativeCurrency.symbol as Currency),
397400
])
398401

399402
// ArmDailyStat
@@ -461,4 +464,4 @@ export const createOriginARMProcessors = ({
461464
address: armAddress,
462465
}),
463466
]
464-
}
467+
}

src/utils/addresses.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { uniq } from 'lodash'
1+
import { uniq } from 'lodash';
2+
23

34
// Lowercase Addresses
45
export const ADDRESS_ZERO = '0x0000000000000000000000000000000000000000'
@@ -12,6 +13,8 @@ export const USDT_ADDRESS = '0xdac17f958d2ee523a2206206994597c13d831ec7'
1213
export const USDC_ADDRESS = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
1314
export const LUSD_ADDRESS = '0x5f98805a4e8be255a32880fdec7f6728c6568ba0'
1415
export const USDS_ADDRESS = '0xdc035d45d973e3ec169d2276ddab16f1e407384f'
16+
export const USDE_ADDRESS = '0x4c9edd5852cd905f086c759e8383e09bff1e68b3'
17+
export const sUSDE_ADDRESS = '0x9d39a5de30e57443bff2a8307a4256c8797a3497'
1518

1619
// ETH Stables
1720
export const WETH_ADDRESS = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'
@@ -118,6 +121,8 @@ export const mainnetTokens = {
118121
USDS: USDS_ADDRESS,
119122
LUSD: LUSD_ADDRESS,
120123
CRV3: CRV3_ADDRESS,
124+
sUSDe: sUSDE_ADDRESS,
125+
USDe: USDE_ADDRESS,
121126

122127
// Ether
123128
ETH: ETH_ADDRESS,
@@ -226,4 +231,4 @@ export const addresses = {
226231
ousd,
227232
ogv,
228233
arms,
229-
}
234+
}

0 commit comments

Comments
 (0)