Skip to content

Commit 6976dc9

Browse files
authored
feat: support zora (#706)
Release Uniswap/smart-order-router#585 Tested Zora integ-tests locally: https://app.warp.dev/block/inxfrI0hFnJS5VahqWAtOH We have to remove Infura from configs, because otherwise by adding `QUICKNODE_7777777`, I tested in my local to see 4kb env var limit breach again https://app.warp.dev/block/Tb77t3C1JyVu4uGUHWpX18.
1 parent 5007538 commit 6976dc9

File tree

10 files changed

+273
-95
lines changed

10 files changed

+273
-95
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ The best way to develop and test the API is to deploy your own instance to AWS.
3232
# BNB = 56
3333
# BASE = 8453
3434
# BLAST = 81457
35+
# ZORA = 7777777
3536
TENDERLY_USER = '' # For enabling Tenderly simulations
3637
TENDERLY_PROJECT = '' # For enabling Tenderly simulations
3738
TENDERLY_ACCESS_KEY = '' # For enabling Tenderly simulations

bin/app.ts

+22-18
Original file line numberDiff line numberDiff line change
@@ -179,44 +179,46 @@ export class RoutingAPIPipeline extends Stack {
179179
// Load RPC provider URLs from AWS secret (for RPC Gateway)
180180
const RPC_GATEWAY_PROVIDERS = [
181181
// Optimism
182-
'INFURA_10',
182+
// 'INFURA_10',
183183
'QUICKNODE_10',
184184
'ALCHEMY_10',
185185
// Polygon
186186
'QUICKNODE_137',
187-
'INFURA_137',
187+
// 'INFURA_137',
188188
'ALCHEMY_137',
189189
// Celo
190190
'QUICKNODE_42220',
191-
'INFURA_42220',
191+
// 'INFURA_42220',
192192
// Avalanche
193-
'INFURA_43114',
193+
// 'INFURA_43114',
194194
'QUICKNODE_43114',
195195
'NIRVANA_43114',
196196
// BNB
197197
'QUICKNODE_56',
198198
// Base
199199
'QUICKNODE_8453',
200-
'INFURA_8453',
200+
// 'INFURA_8453',
201201
'ALCHEMY_8453',
202202
'NIRVANA_8453',
203203
// Sepolia
204-
'INFURA_11155111',
204+
// 'INFURA_11155111',
205205
'ALCHEMY_11155111',
206206
// Arbitrum
207-
'INFURA_42161',
207+
// 'INFURA_42161',
208208
'QUICKNODE_42161',
209209
'NIRVANA_42161',
210210
'ALCHEMY_42161',
211211
// Ethereum
212-
'INFURA_1',
212+
// 'INFURA_1',
213213
'QUICKNODE_1',
214214
'NIRVANA_1',
215215
'ALCHEMY_1',
216216
'QUICKNODERETH_1',
217217
// Blast
218218
'QUICKNODE_81457',
219-
'INFURA_81457',
219+
// 'INFURA_81457',
220+
// ZORA
221+
'QUICKNODE_7777777',
220222
]
221223
for (const provider of RPC_GATEWAY_PROVIDERS) {
222224
jsonRpcProviders[provider] = jsonRpcProvidersSecret.secretValueFromJson(provider).toString()
@@ -339,43 +341,45 @@ const jsonRpcProviders = {
339341
WEB3_RPC_8453: process.env.WEB3_RPC_8453!,
340342
// The followings are for RPC Gateway
341343
// Optimism
342-
INFURA_10: process.env.INFURA_10!,
344+
// INFURA_10: process.env.INFURA_10!,
343345
QUICKNODE_10: process.env.QUICKNODE_10!,
344346
ALCHEMY_10: process.env.ALCHEMY_10!,
345347
// Polygon
346348
QUICKNODE_137: process.env.QUICKNODE_137!,
347-
INFURA_137: process.env.INFURA_137!,
349+
// INFURA_137: process.env.INFURA_137!,
348350
ALCHEMY_137: process.env.ALCHEMY_137!,
349351
// Celo
350352
QUICKNODE_42220: process.env.QUICKNODE_42220!,
351-
INFURA_42220: process.env.INFURA_42220!,
353+
// INFURA_42220: process.env.INFURA_42220!,
352354
// Avalanche
353-
INFURA_43114: process.env.INFURA_43114!,
355+
// INFURA_43114: process.env.INFURA_43114!,
354356
QUICKNODE_43114: process.env.QUICKNODE_43114!,
355357
NIRVANA_43114: process.env.NIRVANA_43114!,
356358
// BNB
357359
QUICKNODE_56: process.env.QUICKNODE_56!,
358360
// Base
359361
QUICKNODE_8453: process.env.QUICKNODE_8453!,
360-
INFURA_8453: process.env.INFURA_8453!,
362+
// INFURA_8453: process.env.INFURA_8453!,
361363
ALCHEMY_8453: process.env.ALCHEMY_8453!,
362364
NIRVANA_8453: process.env.NIRVANA_8453!,
363365
// Sepolia
364-
INFURA_11155111: process.env.INFURA_11155111!,
366+
// INFURA_11155111: process.env.INFURA_11155111!,
365367
ALCHEMY_11155111: process.env.ALCHEMY_11155111!,
366368
// Arbitrum
367-
INFURA_42161: process.env.INFURA_42161!,
369+
// INFURA_42161: process.env.INFURA_42161!,
368370
QUICKNODE_42161: process.env.QUICKNODE_42161!,
369371
NIRVANA_42161: process.env.NIRVANA_42161!,
370372
ALCHEMY_42161: process.env.ALCHEMY_42161!,
371373
// Ethereum
372-
INFURA_1: process.env.INFURA_1!,
374+
// INFURA_1: process.env.INFURA_1!,
373375
QUICKNODE_1: process.env.QUICKNODE_1!,
374376
NIRVANA_1: process.env.NIRVANA_1!,
375377
ALCHEMY_1: process.env.ALCHEMY_1!,
376378
// Blast
377379
QUICKNODE_81457: process.env.QUICKNODE_81457!,
378-
INFURA_81457: process.env.INFURA_81457!,
380+
// INFURA_81457: process.env.INFURA_81457!,
381+
// Zora
382+
QUICKNODE_7777777: process.env.QUICKNODE_7777777!,
379383
}
380384

381385
// Local dev stack

bin/stacks/routing-lambda-stack.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ export class RoutingLambdaStack extends cdk.NestedStack {
117117

118118
description: 'Routing Lambda',
119119
environment: {
120-
VERSION: '20',
120+
VERSION: '21',
121121
NODE_OPTIONS: '--enable-source-maps',
122122
POOL_CACHE_BUCKET: poolCacheBucket.bucketName,
123123
POOL_CACHE_BUCKET_2: poolCacheBucket2.bucketName,

lib/config/rpcProviderProdConfig.json

+24-16
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@
44
"useMultiProviderProb": 1,
55
"latencyEvaluationSampleProb": 0.1,
66
"healthCheckSampleProb": 0.1,
7-
"providerInitialWeights": [1, 0],
8-
"providerUrls": ["QUICKNODE_42220", "INFURA_42220"]
7+
"providerInitialWeights": [1],
8+
"providerUrls": ["QUICKNODE_42220"]
99
},
1010
{
1111
"chainId": 43114,
1212
"useMultiProviderProb": 1,
1313
"latencyEvaluationSampleProb": 0.1,
1414
"healthCheckSampleProb": 0.1,
15-
"providerInitialWeights": [0, 1, 0],
16-
"providerUrls": ["INFURA_43114", "QUICKNODE_43114", "NIRVANA_43114"]
15+
"providerInitialWeights": [1, 0],
16+
"providerUrls": ["QUICKNODE_43114", "NIRVANA_43114"]
1717
},
1818
{
1919
"chainId": 56,
@@ -28,33 +28,33 @@
2828
"useMultiProviderProb": 1,
2929
"latencyEvaluationSampleProb": 0.01,
3030
"healthCheckSampleProb": 0.01,
31-
"providerInitialWeights": [0, 1, 0],
32-
"providerUrls": ["INFURA_10", "QUICKNODE_10", "ALCHEMY_10"]
31+
"providerInitialWeights": [1, 0],
32+
"providerUrls": ["QUICKNODE_10", "ALCHEMY_10"]
3333
},
3434
{
3535
"chainId": 11155111,
3636
"useMultiProviderProb": 1,
3737
"latencyEvaluationSampleProb": 0.01,
3838
"healthCheckSampleProb": 0.01,
39-
"providerInitialWeights": [1, -1],
40-
"providerUrls": ["ALCHEMY_11155111", "INFURA_11155111"],
39+
"providerInitialWeights": [1],
40+
"providerUrls": ["ALCHEMY_11155111"],
4141
"enableDbSync": true
4242
},
4343
{
4444
"chainId": 137,
4545
"useMultiProviderProb": 1,
4646
"latencyEvaluationSampleProb": 0.005,
4747
"healthCheckSampleProb": 0.005,
48-
"providerInitialWeights": [1, 0, 0],
49-
"providerUrls": ["QUICKNODE_137", "INFURA_137", "ALCHEMY_137"]
48+
"providerInitialWeights": [1, 0],
49+
"providerUrls": ["QUICKNODE_137", "ALCHEMY_137"]
5050
},
5151
{
5252
"chainId": 42161,
5353
"useMultiProviderProb": 1,
5454
"latencyEvaluationSampleProb": 0.002,
5555
"healthCheckSampleProb": 0.002,
56-
"providerInitialWeights": [0, 1, 0, 0],
57-
"providerUrls": ["INFURA_42161", "QUICKNODE_42161", "NIRVANA_42161", "ALCHEMY_42161"]
56+
"providerInitialWeights": [1, 0, 0],
57+
"providerUrls": ["QUICKNODE_42161", "NIRVANA_42161", "ALCHEMY_42161"]
5858
},
5959
{
6060
"chainId": 8453,
@@ -69,15 +69,23 @@
6969
"useMultiProviderProb": 1,
7070
"latencyEvaluationSampleProb": 0.001,
7171
"healthCheckSampleProb": 0.001,
72-
"providerInitialWeights": [0, 0, 0, 1],
73-
"providerUrls": ["INFURA_1", "ALCHEMY_1", "NIRVANA_1", "QUICKNODE_1"]
72+
"providerInitialWeights": [0, 0, 1],
73+
"providerUrls": ["ALCHEMY_1", "NIRVANA_1", "QUICKNODE_1"]
7474
},
7575
{
7676
"chainId": 81457,
7777
"useMultiProviderProb": 1,
7878
"latencyEvaluationSampleProb": 0.001,
7979
"healthCheckSampleProb": 0.001,
80-
"providerInitialWeights": [1, 0],
81-
"providerUrls": ["QUICKNODE_81457", "INFURA_81457"]
80+
"providerInitialWeights": [1],
81+
"providerUrls": ["QUICKNODE_81457"]
82+
},
83+
{
84+
"chainId": 7777777,
85+
"useMultiProviderProb": 1,
86+
"latencyEvaluationSampleProb": 0.001,
87+
"healthCheckSampleProb": 0.001,
88+
"providerInitialWeights": [1],
89+
"providerUrls": ["QUICKNODE_7777777"]
8290
}
8391
]

lib/handlers/injector-sor.ts

+2
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ export const SUPPORTED_CHAINS: ChainId[] = [
8484
ChainId.AVALANCHE,
8585
ChainId.BASE,
8686
ChainId.BLAST,
87+
ChainId.ZORA,
8788
]
8889
const DEFAULT_TOKEN_LIST = 'https://gateway.ipfs.io/ipns/tokens.uniswap.org'
8990

@@ -332,6 +333,7 @@ export abstract class InjectorSOR<Router, QueryParams> extends Injector<
332333
case ChainId.CELO:
333334
case ChainId.AVALANCHE:
334335
case ChainId.BLAST:
336+
case ChainId.ZORA:
335337
const currentQuoteProvider = new OnChainQuoteProvider(
336338
chainId,
337339
provider,

lib/rpc/utils.ts

+3
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,9 @@ export function generateProviderUrl(key: string, value: string): string {
9898
case 'QUICKNODE_81457': {
9999
return `https://${tokens[0]}.blast-mainnet.quiknode.pro/${tokens[1]}`
100100
}
101+
case 'QUICKNODE_7777777': {
102+
return `https://${tokens[0]}.zora-mainnet.quiknode.pro/${tokens[1]}`
103+
}
101104
// QuickNode RETH
102105
case 'QUICKNODERETH_1': {
103106
return `https://${tokens[0]}.quiknode.pro/${tokens[1]}`

0 commit comments

Comments
 (0)