Skip to content

Commit 4de1702

Browse files
authored
feat: Add configuration for optimism-mainnet and optimism-sepolia. (#33)
1 parent 8e35940 commit 4de1702

3 files changed

Lines changed: 135 additions & 0 deletions

File tree

.env

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ CHAIN_ID="11155111"
77
# RPC_URL_1=
88
# RPC_URL_11155111=
99
# RPC_URL_31337=
10+
# RPC_URL_10=
11+
# RPC_URL_11155420=
1012
# NORMALLY FOR USE WITH LOCAL/DEV
1113
# GENESIS_BLOCK_31337=22
1214
# BLOCK_CONFIRMATIONS_31337=1

src/config.ts

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
import CartesiDAppFactoryMainnet from '@cartesi/rollups/deployments/mainnet/CartesiDAppFactory.json';
22
import InputBoxMainnet from '@cartesi/rollups/deployments/mainnet/InputBox.json';
3+
import CartesiDAppFactoryOptimism from '@cartesi/rollups/deployments/optimism/CartesiDAppFactory.json';
4+
import InputBoxOptimism from '@cartesi/rollups/deployments/optimism/InputBox.json';
5+
import CartesiDAppFactoryOptimismSepolia from '@cartesi/rollups/deployments/optimism_sepolia/CartesiDAppFactory.json';
6+
import InputBoxOptimismSepolia from '@cartesi/rollups/deployments/optimism_sepolia/InputBox.json';
37
import CartesiDAppFactorySepolia from '@cartesi/rollups/deployments/sepolia/CartesiDAppFactory.json';
48
import InputBoxSepolia from '@cartesi/rollups/deployments/sepolia/InputBox.json';
59
import mainnet from '@cartesi/rollups/export/abi/mainnet.json';
610
import { lookupArchive } from '@subsquid/archive-registry';
711
import { DataSource } from '@subsquid/evm-processor';
12+
import { optimism, optimismSepolia } from 'viem/chains';
813

914
// addresses are the same on all chains
1015
export const CartesiDAppFactoryAddress =
@@ -65,6 +70,40 @@ export const getConfig = (chainId: number): ProcessorConfig => {
6570
value: process.env[BLOCK_CONFIRMATIONS],
6671
}),
6772
};
73+
case 10: //Optimism-Mainnet
74+
return {
75+
dataSource: {
76+
archive: lookupArchive('optimism-mainnet'),
77+
chain:
78+
process.env[RPC_URL] ??
79+
optimism.rpcUrls.default.http[0],
80+
},
81+
from: Math.min(
82+
CartesiDAppFactoryOptimism.receipt.blockNumber,
83+
InputBoxOptimism.receipt.blockNumber,
84+
),
85+
finalityConfirmation: parseIntOr({
86+
defaultVal: FINALITY_CONFIRMATION,
87+
value: process.env[BLOCK_CONFIRMATIONS],
88+
}),
89+
};
90+
case 11155420: //Optimism-Sepolia
91+
return {
92+
dataSource: {
93+
archive: lookupArchive('optimism-sepolia'),
94+
chain:
95+
process.env[RPC_URL] ??
96+
optimismSepolia.rpcUrls.default.http[0],
97+
},
98+
from: Math.min(
99+
CartesiDAppFactoryOptimismSepolia.receipt.blockNumber,
100+
InputBoxOptimismSepolia.receipt.blockNumber,
101+
),
102+
finalityConfirmation: parseIntOr({
103+
defaultVal: FINALITY_CONFIRMATION,
104+
value: process.env[BLOCK_CONFIRMATIONS],
105+
}),
106+
};
68107
case 31337: // anvil
69108
return {
70109
dataSource: {

tests/processor.test.ts

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ vi.mock('@subsquid/evm-processor', async () => {
2525
const sepolia = 11155111;
2626
const mainnet = 1;
2727
const local = 31337;
28+
const optimism = 10;
29+
const optimismSepolia = 11155420;
2830

2931
describe('Processor creation', () => {
3032
beforeEach(() => {
@@ -150,6 +152,98 @@ describe('Processor creation', () => {
150152
});
151153
});
152154

155+
test('Required configs for optimism', () => {
156+
const processor = createProcessor(optimism);
157+
158+
expect(processor.setDataSource).toHaveBeenCalledWith({
159+
archive: 'https://v2.archive.subsquid.io/network/optimism-mainnet',
160+
chain: 'https://mainnet.optimism.io',
161+
});
162+
163+
expect(processor.setFinalityConfirmation).toHaveBeenCalledWith(10);
164+
expect(processor.setFields).toHaveBeenCalledWith({
165+
transaction: {
166+
chainId: true,
167+
from: true,
168+
hash: true,
169+
value: true,
170+
},
171+
});
172+
expect(processor.setBlockRange).toHaveBeenCalledWith({
173+
from: 107432991,
174+
});
175+
176+
const addLog = processor.addLog as unknown as MockInstance;
177+
178+
expect(addLog).toHaveBeenCalledTimes(3);
179+
expect(addLog.mock.calls[0][0]).toEqual({
180+
address: ['0x7122cd1221c20892234186facfe8615e6743ab02'],
181+
topic0: [
182+
'0xe73165c2d277daf8713fd08b40845cb6bb7a20b2b543f3d35324a475660fcebd',
183+
],
184+
});
185+
expect(addLog.mock.calls[1][0]).toEqual({
186+
address: ['0x59b22d57d4f067708ab0c00552767405926dc768'],
187+
topic0: [
188+
'0x6aaa400068bf4ca337265e2a1e1e841f66b8597fd5b452fdc52a44bed28a0784',
189+
],
190+
transaction: true,
191+
});
192+
193+
expect(addLog.mock.calls[2][0]).toEqual({
194+
topic0: [
195+
'0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0',
196+
],
197+
transaction: true,
198+
});
199+
});
200+
201+
test('Required configs for optimism-sepolia', () => {
202+
const processor = createProcessor(optimismSepolia);
203+
204+
expect(processor.setDataSource).toHaveBeenCalledWith({
205+
archive: 'https://v2.archive.subsquid.io/network/optimism-sepolia',
206+
chain: 'https://sepolia.optimism.io',
207+
});
208+
209+
expect(processor.setFinalityConfirmation).toHaveBeenCalledWith(10);
210+
expect(processor.setFields).toHaveBeenCalledWith({
211+
transaction: {
212+
chainId: true,
213+
from: true,
214+
hash: true,
215+
value: true,
216+
},
217+
});
218+
expect(processor.setBlockRange).toHaveBeenCalledWith({
219+
from: 5393079,
220+
});
221+
222+
const addLog = processor.addLog as unknown as MockInstance;
223+
224+
expect(addLog).toHaveBeenCalledTimes(3);
225+
expect(addLog.mock.calls[0][0]).toEqual({
226+
address: ['0x7122cd1221c20892234186facfe8615e6743ab02'],
227+
topic0: [
228+
'0xe73165c2d277daf8713fd08b40845cb6bb7a20b2b543f3d35324a475660fcebd',
229+
],
230+
});
231+
expect(addLog.mock.calls[1][0]).toEqual({
232+
address: ['0x59b22d57d4f067708ab0c00552767405926dc768'],
233+
topic0: [
234+
'0x6aaa400068bf4ca337265e2a1e1e841f66b8597fd5b452fdc52a44bed28a0784',
235+
],
236+
transaction: true,
237+
});
238+
239+
expect(addLog.mock.calls[2][0]).toEqual({
240+
topic0: [
241+
'0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0',
242+
],
243+
transaction: true,
244+
});
245+
});
246+
153247
test('Required configs for mainnet', () => {
154248
const processor = createProcessor(mainnet);
155249
const applicationMetadata = loadApplications(mainnet);

0 commit comments

Comments
 (0)