erpc-sdk 0.6.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +245 -0
- data/lib/erpc_sdk/bridge.rb +1507 -0
- data/lib/erpc_sdk/client.rb +215 -76
- data/lib/erpc_sdk/config.rb +107 -8
- data/lib/erpc_sdk/dex_catalog.rb +207 -0
- data/lib/erpc_sdk/errors.rb +100 -9
- data/lib/erpc_sdk/generated/bridge_capabilities.rb +9 -0
- data/lib/erpc_sdk/generated/dex_catalog.rb +28 -0
- data/lib/erpc_sdk/generated/swap_execution_capabilities.rb +11 -0
- data/lib/erpc_sdk/generated/token_catalog.rb +216 -0
- data/lib/erpc_sdk/generated/token_rankings.rb +25 -0
- data/lib/erpc_sdk/swap.rb +1367 -0
- data/lib/erpc_sdk/token_catalog.rb +170 -0
- data/lib/erpc_sdk/token_rankings.rb +50 -0
- data/lib/erpc_sdk/transport.rb +69 -20
- data/lib/erpc_sdk/version.rb +1 -1
- data/lib/erpc_sdk/websocket.rb +45 -13
- data/lib/erpc_sdk.rb +5 -0
- metadata +12 -2
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "generated/dex_catalog"
|
|
4
|
+
require_relative "token_catalog"
|
|
5
|
+
|
|
6
|
+
module ERPC
|
|
7
|
+
# Canonical CAIP-2 chain identifiers used by the bundled DEX catalog.
|
|
8
|
+
module DexChainIDs
|
|
9
|
+
ETHEREUM_MAINNET = DexCatalogData::DEX_CHAIN_IDS.fetch(:ethereum)
|
|
10
|
+
SOLANA_MAINNET = DexCatalogData::DEX_CHAIN_IDS.fetch(:solana)
|
|
11
|
+
AVALANCHE_C_MAINNET = DexCatalogData::DEX_CHAIN_IDS.fetch(:avalanche_c)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Offline access to the generated DEX, pool, and native-wrap catalog.
|
|
15
|
+
#
|
|
16
|
+
# The generated records are deeply frozen scalar/hash values. Lookups return
|
|
17
|
+
# those immutable records directly, so a caller cannot alter a later lookup
|
|
18
|
+
# or quote by mutating a previous result.
|
|
19
|
+
module DexCatalog
|
|
20
|
+
DEX_CATALOG_VERSION = DexCatalogData::DEX_CATALOG_VERSION
|
|
21
|
+
DEX_CATALOG_AS_OF_DATE = DexCatalogData::DEX_CATALOG_AS_OF_DATE
|
|
22
|
+
DEX_CATALOG_CONTENT_DIGEST = DexCatalogData::DEX_CATALOG_CONTENT_DIGEST
|
|
23
|
+
AS_OF_DATE = DEX_CATALOG_AS_OF_DATE
|
|
24
|
+
CONTENT_DIGEST = DEX_CATALOG_CONTENT_DIGEST
|
|
25
|
+
|
|
26
|
+
DEX_CHAIN_IDS = DexCatalogData::DEX_CHAIN_IDS
|
|
27
|
+
DEX_DEPLOYMENTS = DexCatalogData::DEX_DEPLOYMENTS
|
|
28
|
+
POOL_DEFINITIONS = DexCatalogData::POOL_DEFINITIONS
|
|
29
|
+
NATIVE_WRAP_DEFINITIONS = DexCatalogData::NATIVE_WRAP_DEFINITIONS
|
|
30
|
+
DEX_ALIASES = DexCatalogData::DEX_ALIASES
|
|
31
|
+
|
|
32
|
+
# Generated namespace modules contain the opaque IDs used by callers.
|
|
33
|
+
DEXES = Dexes
|
|
34
|
+
POOLS = Pools
|
|
35
|
+
|
|
36
|
+
EMPTY_POOLS = [].freeze
|
|
37
|
+
|
|
38
|
+
DEXES_BY_ID = DEX_DEPLOYMENTS.each_with_object({}) do |deployment, index|
|
|
39
|
+
index[deployment.fetch(:dex_deployment_id)] = deployment
|
|
40
|
+
end.freeze
|
|
41
|
+
|
|
42
|
+
POOLS_BY_ID = POOL_DEFINITIONS.each_with_object({}) do |pool, index|
|
|
43
|
+
index[pool.fetch(:pool_definition_id)] = pool
|
|
44
|
+
end.freeze
|
|
45
|
+
|
|
46
|
+
WRAPS_BY_NATIVE_ID = NATIVE_WRAP_DEFINITIONS.each_with_object({}) do |definition, index|
|
|
47
|
+
index[definition.fetch(:native_token_deployment_id)] = definition
|
|
48
|
+
end.freeze
|
|
49
|
+
|
|
50
|
+
KNOWN_CHAIN_IDS = [
|
|
51
|
+
DexChainIDs::ETHEREUM_MAINNET,
|
|
52
|
+
DexChainIDs::SOLANA_MAINNET,
|
|
53
|
+
DexChainIDs::AVALANCHE_C_MAINNET
|
|
54
|
+
].freeze
|
|
55
|
+
|
|
56
|
+
EVM_CHAIN_IDS = [
|
|
57
|
+
DexChainIDs::ETHEREUM_MAINNET,
|
|
58
|
+
DexChainIDs::AVALANCHE_C_MAINNET
|
|
59
|
+
].freeze
|
|
60
|
+
|
|
61
|
+
class << self
|
|
62
|
+
# Return the generated DEX namespace module for ergonomic alias access.
|
|
63
|
+
def dexes
|
|
64
|
+
Dexes
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Return the generated pool namespace module for ergonomic alias access.
|
|
68
|
+
def pools
|
|
69
|
+
Pools
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Return a DEX deployment by its exact opaque ID.
|
|
73
|
+
def get_dex_deployment(dex_deployment_id)
|
|
74
|
+
return nil unless dex_deployment_id.is_a?(String) && !dex_deployment_id.empty?
|
|
75
|
+
|
|
76
|
+
DEXES_BY_ID[dex_deployment_id]
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Return a pool definition by its exact opaque ID.
|
|
80
|
+
def get_pool_definition(pool_definition_id)
|
|
81
|
+
return nil unless pool_definition_id.is_a?(String) && !pool_definition_id.empty?
|
|
82
|
+
|
|
83
|
+
POOLS_BY_ID[pool_definition_id]
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Find a pool by chain-qualified address.
|
|
87
|
+
# EVM addresses are strict hexadecimal and matched case-insensitively;
|
|
88
|
+
# Solana addresses are matched exactly as their canonical base58 text.
|
|
89
|
+
def find_pool_definition_by_address(chain_id, address)
|
|
90
|
+
return nil unless known_chain_id?(chain_id)
|
|
91
|
+
return nil unless address.is_a?(String) && !address.empty?
|
|
92
|
+
|
|
93
|
+
normalized = address
|
|
94
|
+
if evm_chain_id?(chain_id)
|
|
95
|
+
return nil unless valid_evm_address?(address)
|
|
96
|
+
|
|
97
|
+
normalized = address.downcase
|
|
98
|
+
return nil if zero_evm_address?(normalized)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
POOL_DEFINITIONS.find do |pool|
|
|
102
|
+
pool.fetch(:chain_id) == chain_id && pool.fetch(:address) == normalized
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# Find all pools for an unordered token pair in stable pool-ID order.
|
|
107
|
+
def find_pool_definitions_by_pair(chain_id, token_a_deployment_id, token_b_deployment_id)
|
|
108
|
+
return EMPTY_POOLS unless known_chain_id?(chain_id)
|
|
109
|
+
return EMPTY_POOLS unless token_a_deployment_id.is_a?(String) && token_b_deployment_id.is_a?(String)
|
|
110
|
+
return EMPTY_POOLS if token_a_deployment_id.empty? || token_b_deployment_id.empty?
|
|
111
|
+
return EMPTY_POOLS if token_a_deployment_id == token_b_deployment_id
|
|
112
|
+
|
|
113
|
+
wanted = [token_a_deployment_id, token_b_deployment_id].sort
|
|
114
|
+
matches = POOL_DEFINITIONS.select do |pool|
|
|
115
|
+
actual = [pool.fetch(:token0_deployment_id), pool.fetch(:token1_deployment_id)].sort
|
|
116
|
+
pool.fetch(:chain_id) == chain_id && actual == wanted
|
|
117
|
+
end.sort_by { |pool| pool.fetch(:pool_definition_id) }
|
|
118
|
+
matches.empty? ? EMPTY_POOLS : matches.freeze
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# List pools using the optional chainId/tokenDeploymentId/adapterKind
|
|
122
|
+
# filters. Ruby callers may use either the contract's camelCase keys or
|
|
123
|
+
# idiomatic snake_case keyword keys.
|
|
124
|
+
def list_pool_definitions(options = nil, **keyword_options)
|
|
125
|
+
if options.nil?
|
|
126
|
+
options = keyword_options
|
|
127
|
+
elsif !keyword_options.empty?
|
|
128
|
+
return EMPTY_POOLS
|
|
129
|
+
end
|
|
130
|
+
return EMPTY_POOLS unless options.is_a?(Hash)
|
|
131
|
+
|
|
132
|
+
normalized = normalize_filter_keys(options)
|
|
133
|
+
return EMPTY_POOLS unless normalized
|
|
134
|
+
|
|
135
|
+
chain_id = normalized[:chain_id]
|
|
136
|
+
token_deployment_id = normalized[:token_deployment_id]
|
|
137
|
+
adapter_kind = normalized[:adapter_kind]
|
|
138
|
+
return EMPTY_POOLS if chain_id && !known_chain_id?(chain_id)
|
|
139
|
+
return EMPTY_POOLS if token_deployment_id &&
|
|
140
|
+
(!token_deployment_id.is_a?(String) || token_deployment_id.empty?)
|
|
141
|
+
return EMPTY_POOLS if adapter_kind &&
|
|
142
|
+
(!adapter_kind.is_a?(String) || adapter_kind.empty?)
|
|
143
|
+
|
|
144
|
+
matches = POOL_DEFINITIONS.select do |pool|
|
|
145
|
+
(chain_id.nil? || pool.fetch(:chain_id) == chain_id) &&
|
|
146
|
+
(token_deployment_id.nil? ||
|
|
147
|
+
pool.fetch(:token0_deployment_id) == token_deployment_id ||
|
|
148
|
+
pool.fetch(:token1_deployment_id) == token_deployment_id) &&
|
|
149
|
+
(adapter_kind.nil? || pool.fetch(:adapter).fetch(:kind) == adapter_kind)
|
|
150
|
+
end.sort_by { |pool| pool.fetch(:pool_definition_id) }
|
|
151
|
+
matches.empty? ? EMPTY_POOLS : matches.freeze
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
# Return the chain-bound native-to-wrapped relationship for an opaque
|
|
155
|
+
# native token deployment ID. A wrap definition ID is not accepted.
|
|
156
|
+
def get_native_wrap_definition(native_token_deployment_id)
|
|
157
|
+
return nil unless native_token_deployment_id.is_a?(String) && !native_token_deployment_id.empty?
|
|
158
|
+
|
|
159
|
+
WRAPS_BY_NATIVE_ID[native_token_deployment_id]
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
private
|
|
163
|
+
|
|
164
|
+
def normalize_filter_keys(options)
|
|
165
|
+
aliases = {
|
|
166
|
+
"chainId" => :chain_id,
|
|
167
|
+
:chainId => :chain_id,
|
|
168
|
+
"chain_id" => :chain_id,
|
|
169
|
+
:chain_id => :chain_id,
|
|
170
|
+
"tokenDeploymentId" => :token_deployment_id,
|
|
171
|
+
:tokenDeploymentId => :token_deployment_id,
|
|
172
|
+
"token_deployment_id" => :token_deployment_id,
|
|
173
|
+
:token_deployment_id => :token_deployment_id,
|
|
174
|
+
"adapterKind" => :adapter_kind,
|
|
175
|
+
:adapterKind => :adapter_kind,
|
|
176
|
+
"adapter_kind" => :adapter_kind,
|
|
177
|
+
:adapter_kind => :adapter_kind
|
|
178
|
+
}
|
|
179
|
+
result = {}
|
|
180
|
+
options.each do |key, value|
|
|
181
|
+
target = aliases[key]
|
|
182
|
+
return nil unless target
|
|
183
|
+
return nil if result.key?(target)
|
|
184
|
+
|
|
185
|
+
result[target] = value
|
|
186
|
+
end
|
|
187
|
+
result
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
def known_chain_id?(chain_id)
|
|
191
|
+
chain_id.is_a?(String) && KNOWN_CHAIN_IDS.include?(chain_id)
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
def evm_chain_id?(chain_id)
|
|
195
|
+
EVM_CHAIN_IDS.include?(chain_id)
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
def valid_evm_address?(address)
|
|
199
|
+
address.match?(/\A0x[0-9A-Fa-f]{40}\z/)
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
def zero_evm_address?(address)
|
|
203
|
+
address == "0x#{'0' * 40}"
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
end
|
data/lib/erpc_sdk/errors.rb
CHANGED
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require "uri"
|
|
4
|
+
require "base64"
|
|
4
5
|
|
|
5
6
|
module ERPC
|
|
6
7
|
class Error < StandardError; end
|
|
7
8
|
|
|
8
9
|
class ConfigError < Error; end
|
|
10
|
+
class NotConfiguredError < Error
|
|
11
|
+
attr_reader :namespace
|
|
12
|
+
|
|
13
|
+
def initialize(namespace)
|
|
14
|
+
@namespace = namespace.to_s.freeze
|
|
15
|
+
super("ERPC namespace #{@namespace.inspect} is not configured")
|
|
16
|
+
end
|
|
17
|
+
end
|
|
9
18
|
class BatchPolicyError < Error; end
|
|
10
19
|
class InvalidResponseError < Error; end
|
|
11
20
|
class TransportError < Error; end
|
|
@@ -41,21 +50,30 @@ module ERPC
|
|
|
41
50
|
module Redaction
|
|
42
51
|
module_function
|
|
43
52
|
|
|
53
|
+
PERCENT_ESCAPE = /%[0-9A-Fa-f]{2}/.freeze
|
|
54
|
+
|
|
44
55
|
def text(value, credential)
|
|
45
56
|
result = value.to_s
|
|
46
|
-
variants(credential).each
|
|
57
|
+
variants(credential).each do |secret|
|
|
58
|
+
result = result.gsub(secret, "[REDACTED]") unless secret.empty?
|
|
59
|
+
next unless secret.match?(PERCENT_ESCAPE)
|
|
60
|
+
|
|
61
|
+
result = result.gsub(percent_escape_pattern(secret), "[REDACTED]")
|
|
62
|
+
end
|
|
47
63
|
result
|
|
48
64
|
end
|
|
49
65
|
|
|
50
|
-
def value(value, credential)
|
|
66
|
+
def value(value, credential, depth = 0)
|
|
67
|
+
return "[REDACTED]" if depth >= 32
|
|
68
|
+
|
|
51
69
|
case value
|
|
52
70
|
when String
|
|
53
71
|
text(value, credential)
|
|
54
72
|
when Array
|
|
55
|
-
value.map { |item| self.value(item, credential) }
|
|
73
|
+
value.map { |item| self.value(item, credential, depth + 1) }
|
|
56
74
|
when Hash
|
|
57
75
|
value.to_h do |key, item|
|
|
58
|
-
[text(key, credential), self.value(item, credential)]
|
|
76
|
+
[key.is_a?(String) ? text(key, credential) : key, self.value(item, credential, depth + 1)]
|
|
59
77
|
end
|
|
60
78
|
else
|
|
61
79
|
value
|
|
@@ -63,12 +81,85 @@ module ERPC
|
|
|
63
81
|
end
|
|
64
82
|
|
|
65
83
|
def variants(credential)
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
84
|
+
values = credential.is_a?(Array) ? credential : [credential]
|
|
85
|
+
encoded = values.flat_map do |value|
|
|
86
|
+
next [] if value.nil? || value.to_s.empty?
|
|
87
|
+
|
|
88
|
+
text = value.to_s
|
|
89
|
+
percent_encoded = text.b.each_byte.map do |byte|
|
|
90
|
+
character = byte.chr
|
|
91
|
+
character.match?(/[A-Za-z0-9_.~-]/) ? character : format("%%%02X", byte)
|
|
92
|
+
end.join
|
|
93
|
+
[
|
|
94
|
+
text,
|
|
95
|
+
URI.encode_www_form_component(text),
|
|
96
|
+
percent_encoded
|
|
97
|
+
]
|
|
98
|
+
end
|
|
99
|
+
encoded.uniq.sort_by { |value| [-value.length, value] }
|
|
71
100
|
end
|
|
72
101
|
private_class_method :variants
|
|
102
|
+
|
|
103
|
+
def percent_escape_pattern(value)
|
|
104
|
+
escaped = Regexp.escape(value.to_s)
|
|
105
|
+
pattern = escaped.gsub(PERCENT_ESCAPE) do |escape|
|
|
106
|
+
"%#{percent_character_class(escape[1])}#{percent_character_class(escape[2])}"
|
|
107
|
+
end
|
|
108
|
+
Regexp.new(pattern)
|
|
109
|
+
end
|
|
110
|
+
private_class_method :percent_escape_pattern
|
|
111
|
+
|
|
112
|
+
def percent_character_class(value)
|
|
113
|
+
"[#{[value.upcase, value.downcase].uniq.join}]"
|
|
114
|
+
end
|
|
115
|
+
private_class_method :percent_character_class
|
|
116
|
+
|
|
117
|
+
def direct_variants(http_url:, websocket_url: nil, headers: {})
|
|
118
|
+
values = []
|
|
119
|
+
[http_url, websocket_url].compact.each do |endpoint|
|
|
120
|
+
query = URI.parse(endpoint).query.to_s
|
|
121
|
+
query.split("&").each do |component|
|
|
122
|
+
next if component.empty?
|
|
123
|
+
|
|
124
|
+
raw_value = component.include?("=") ? component.split("=", 2).last : component
|
|
125
|
+
next if raw_value.empty?
|
|
126
|
+
|
|
127
|
+
values << raw_value
|
|
128
|
+
begin
|
|
129
|
+
values << URI.decode_www_form_component(raw_value)
|
|
130
|
+
rescue ArgumentError
|
|
131
|
+
# The endpoint validator rejects invalid percent escapes. Keep
|
|
132
|
+
# the raw value as a defensive fallback for caller-built objects.
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
headers.each do |name, value|
|
|
138
|
+
next unless value.is_a?(String) && !value.empty?
|
|
139
|
+
|
|
140
|
+
values << value
|
|
141
|
+
next unless %w[authorization proxy-authorization].include?(name.to_s.downcase)
|
|
142
|
+
|
|
143
|
+
parts = value.strip.split(/\s+/, 2)
|
|
144
|
+
next unless parts.length == 2 && %w[bearer basic].include?(parts.first.downcase)
|
|
145
|
+
|
|
146
|
+
credential = parts.last
|
|
147
|
+
values << credential
|
|
148
|
+
next unless parts.first.casecmp?("basic")
|
|
149
|
+
|
|
150
|
+
begin
|
|
151
|
+
decoded = Base64.strict_decode64(credential).force_encoding(Encoding::UTF_8)
|
|
152
|
+
values << decoded
|
|
153
|
+
if decoded.include?(":")
|
|
154
|
+
username, password = decoded.split(":", 2)
|
|
155
|
+
values << username << password
|
|
156
|
+
end
|
|
157
|
+
rescue ArgumentError, EncodingError
|
|
158
|
+
# Raw and encoded forms above still cover malformed Basic values.
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
variants(values)
|
|
163
|
+
end
|
|
73
164
|
end
|
|
74
165
|
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Generated by registry/generate-bridge-capabilities.mjs. Do not edit.
|
|
4
|
+
|
|
5
|
+
module ERPC
|
|
6
|
+
BRIDGE_CAPABILITIES_JSON = '[{"bridgeCapabilityId":"bridge-mayan-swift-v2-eurc-eth-sol","providerId":"mayan-swift-v2","capabilityKind":"external-provider-dynamic","sourceChainId":"eip155:1","destinationChainId":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","sourceTokenDeploymentId":"deployment-0011","destinationTokenDeploymentId":"deployment-0013","sourceTokenAddress":"0x1abaea1f7c830bd89acc67ec4af516284b1bc33c","destinationTokenAddress":"HzwqbKZw8HxMN6bF2yFZNrht3c2iXXzpKcFu7uBEDKtr","sourceTokenStandard":"erc20","destinationTokenStandard":"spl-token","sourceTokenDecimals":6,"destinationTokenDecimals":6,"sourceProviderChainName":"ethereum","destinationProviderChainName":"solana","sourceProviderChainId":1,"destinationProviderChainId":0,"sourceWormholeChainId":2,"destinationWormholeChainId":1,"sourceUsdcDeploymentId":"deployment-0008","sourceUsdcAddress":"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48","sourceUsdcStandard":"erc20","sourceUsdcDecimals":6,"swiftContract":"0x40ffe85a28dc9993541449464d7529a922142960","forwarderAddress":"0x337685fdab40d39bd02028545a4ffa7d287cc3e2","forwarderFunctionSelector":"0x30dedc57","jupiterProgramAddress":null,"builderEndpoint":"https://tx-builder.mayan.finance","explorerEndpoint":"https://explorer-api.mayan.finance/v3","dependencies":["mayan-hosted-quote-api","mayan-hosted-transaction-builder","mayan-hosted-source-swap-builder","swift-auction-solvers","relayers","wormhole-guardian-messaging","mayan-explorer-indexer"],"status":"active"},{"bridgeCapabilityId":"bridge-mayan-swift-v2-eurc-sol-eth","providerId":"mayan-swift-v2","capabilityKind":"external-provider-dynamic","sourceChainId":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","destinationChainId":"eip155:1","sourceTokenDeploymentId":"deployment-0013","destinationTokenDeploymentId":"deployment-0011","sourceTokenAddress":"HzwqbKZw8HxMN6bF2yFZNrht3c2iXXzpKcFu7uBEDKtr","destinationTokenAddress":"0x1abaea1f7c830bd89acc67ec4af516284b1bc33c","sourceTokenStandard":"spl-token","destinationTokenStandard":"erc20","sourceTokenDecimals":6,"destinationTokenDecimals":6,"sourceProviderChainName":"solana","destinationProviderChainName":"ethereum","sourceProviderChainId":0,"destinationProviderChainId":1,"sourceWormholeChainId":1,"destinationWormholeChainId":2,"sourceUsdcDeploymentId":"deployment-0010","sourceUsdcAddress":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","sourceUsdcStandard":"spl-token","sourceUsdcDecimals":6,"swiftContract":"mayan34VedncxdK2XobtvWFDXQASUTBXhUVzt2kKgny","forwarderAddress":null,"forwarderFunctionSelector":null,"jupiterProgramAddress":"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4","builderEndpoint":"https://tx-builder.mayan.finance","explorerEndpoint":"https://explorer-api.mayan.finance/v3","dependencies":["mayan-hosted-quote-api","mayan-hosted-transaction-builder","mayan-hosted-source-swap-builder","swift-auction-solvers","relayers","wormhole-guardian-messaging","mayan-explorer-indexer","jupiter-v6-source-swap"],"status":"active"}]'.freeze
|
|
7
|
+
BRIDGE_CAPABILITIES_CONTENT_DIGEST = 'fe698f99218057f8cb40b3e24421d1d78e4e2cd7508cf6e3eb2457b329e5141b'.freeze
|
|
8
|
+
BRIDGE_CAPABILITIES_AS_OF_DATE = '2026-09-16'.freeze
|
|
9
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Generated by registry/generate-dex-catalog.mjs. Do not edit.
|
|
4
|
+
|
|
5
|
+
module ERPC
|
|
6
|
+
module Dexes
|
|
7
|
+
Ethereum = { :UNISWAP_V2 => 'dex-deployment-0001' }.freeze
|
|
8
|
+
Solana = { :ORCA_WHIRLPOOLS => 'dex-deployment-0003', :RAYDIUM_CLMM => 'dex-deployment-0004' }.freeze
|
|
9
|
+
AvalancheC = { :LFJ_LEGACY => 'dex-deployment-0002' }.freeze
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
module Pools
|
|
13
|
+
Ethereum = { :DISCOVERED_POOL_1B98A5F24A364E05 => 'discovered-pool-1b98a5f24a364e05b3d56a9702c3560fc3a71f84b2195c486cfc5f8a956cc0b7', :DISCOVERED_POOL_6428A1E5DA293B2E => 'discovered-pool-6428a1e5da293b2ef62027ec823ba27532219a40784def3930feee56a623b809', :DISCOVERED_POOL_866F890448D13C07 => 'discovered-pool-866f890448d13c078e217a894ebd47430da5941fe5bff7e382fc095916b4614d', :DISCOVERED_POOL_90805F8995C1D0B8 => 'discovered-pool-90805f8995c1d0b85a45fcd4587928a00066b1f14407baee4e8ed1b634c07804', :DISCOVERED_POOL_A7F9E600A86951F4 => 'discovered-pool-a7f9e600a86951f40472ff779fae467db8a6bbbc6076356058f427e97d4ae429', :DISCOVERED_POOL_B8F972F8BAE36C82 => 'discovered-pool-b8f972f8bae36c82b51ed2aeed070d3ef3e7642e2a708c7d3c0c134e6e1946ed', :DISCOVERED_POOL_E702B0CB56528418 => 'discovered-pool-e702b0cb56528418b4ce089dfc001c6241c94e92aabde72f1a340c4601541780', :UNISWAP_V2_USDC_WETH => 'pool-0001' }.freeze
|
|
14
|
+
Solana = { :ORCA_WHIRLPOOLS_WSOL_EURC => 'pool-0003', :RAYDIUM_CLMM_WSOL_EURC => 'pool-0004' }.freeze
|
|
15
|
+
AvalancheC = { :DISCOVERED_POOL_1568E761C62F7DC5 => 'discovered-pool-1568e761c62f7dc58207a77f2dc32153805efe03a8d9cce9366ce68efdf276c4', :DISCOVERED_POOL_3C1E38D02092D16E => 'discovered-pool-3c1e38d02092d16e396d2f3a22b2bfae55246a1c566831d31f211670e45bd562', :DISCOVERED_POOL_3F840A40991E755E => 'discovered-pool-3f840a40991e755e42d242188bd8deb85cd5b9655308269b00c220f5237710cf', :DISCOVERED_POOL_5D7AA6A767A0C6EA => 'discovered-pool-5d7aa6a767a0c6ea9ddeb06d1289bd12d85018935d5b25724b165dc8b9832252', :DISCOVERED_POOL_9E4ED76F76904A4A => 'discovered-pool-9e4ed76f76904a4ae271946bb1a4b2dc7428e343040b05a42707071bbfac9462', :DISCOVERED_POOL_A2480F3D4EA5CE12 => 'discovered-pool-a2480f3d4ea5ce12252126acf64b174b9fe678b0f0fda8936a12fef180ae08cd', :DISCOVERED_POOL_ECE9088CF3894443 => 'discovered-pool-ece9088cf38944438897ff9fb2a1abc6855a687b5a3f0d6ab98dfe06c1a6dfef', :DISCOVERED_POOL_FB02E85806CD9079 => 'discovered-pool-fb02e85806cd907920126af935137b0775a858ddf04a28d7ca144f761fd7579e', :LFJ_LEGACY_WAVAX_USDC => 'pool-0002' }.freeze
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
module DexCatalogData
|
|
19
|
+
DEX_CATALOG_VERSION = '1.0.0'
|
|
20
|
+
DEX_CATALOG_AS_OF_DATE = '2026-09-15'
|
|
21
|
+
DEX_CATALOG_CONTENT_DIGEST = 'caccde1f997648dfa045af41d4f8b7f93a051c59d098cc770bd3a2757185aac1'
|
|
22
|
+
DEX_CHAIN_IDS = { ethereum: 'eip155:1', solana: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp', avalanche_c: 'eip155:43114' }.freeze
|
|
23
|
+
DEX_DEPLOYMENTS = [{ dex_deployment_id: 'dex-deployment-0001', protocol_id: 'uniswap-v2', name: 'Uniswap V2', chain_id: 'eip155:1', program_address: '0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f', adapter_kind: 'evm-constant-product-v2', status: 'active', replaced_by_dex_deployment_id: nil }.freeze, { dex_deployment_id: 'dex-deployment-0002', protocol_id: 'lfj-legacy-constant-product', name: 'LFJ legacy constant-product (Joe V1)', chain_id: 'eip155:43114', program_address: '0x9ad6c38be94206ca50bb0d90783181662f0cfa10', adapter_kind: 'evm-constant-product-v2', status: 'active', replaced_by_dex_deployment_id: nil }.freeze, { dex_deployment_id: 'dex-deployment-0003', protocol_id: 'orca-whirlpools', name: 'Orca Whirlpools', chain_id: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp', program_address: 'whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc', adapter_kind: 'solana-orca-whirlpool', status: 'active', replaced_by_dex_deployment_id: nil }.freeze, { dex_deployment_id: 'dex-deployment-0004', protocol_id: 'raydium-clmm', name: 'Raydium CLMM', chain_id: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp', program_address: 'CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK', adapter_kind: 'solana-raydium-clmm', status: 'active', replaced_by_dex_deployment_id: nil }.freeze].freeze
|
|
24
|
+
POOL_DEFINITIONS = [{ pool_definition_id: 'discovered-pool-1568e761c62f7dc58207a77f2dc32153805efe03a8d9cce9366ce68efdf276c4', dex_deployment_id: 'dex-deployment-0002', chain_id: 'eip155:43114', address: '0xd5a37dc5c9a396a03dd1136fc76a1a02b1c88ffa', token0_deployment_id: 'discovered-token-9f9965cc065c9becf8d2cb58071524baafea37d27fda9bf683a93ea85f2e653d', token1_deployment_id: 'deployment-0004', adapter: { kind: 'evm-constant-product-v2', fee_numerator: '3', fee_denominator: '1000' }.freeze, status: 'active', replaced_by_pool_definition_id: nil }.freeze, { pool_definition_id: 'discovered-pool-1b98a5f24a364e05b3d56a9702c3560fc3a71f84b2195c486cfc5f8a956cc0b7', dex_deployment_id: 'dex-deployment-0001', chain_id: 'eip155:1', address: '0xc2adda861f89bbb333c90c492cb837741916a225', token0_deployment_id: 'discovered-token-b475569f6a15e97ac04e531dd813e9dcc902521c098d60d6ae4d21d53baf1395', token1_deployment_id: 'deployment-0002', adapter: { kind: 'evm-constant-product-v2', fee_numerator: '3', fee_denominator: '1000' }.freeze, status: 'active', replaced_by_pool_definition_id: nil }.freeze, { pool_definition_id: 'discovered-pool-3c1e38d02092d16e396d2f3a22b2bfae55246a1c566831d31f211670e45bd562', dex_deployment_id: 'dex-deployment-0002', chain_id: 'eip155:43114', address: '0xed8cbd9f0ce3c6986b22002f03c6475ceb7a6256', token0_deployment_id: 'deployment-0004', token1_deployment_id: 'discovered-token-288036a90ee0fa72a2751a78a6934cc6ced9e16de91c97ae8e109e2ee6189bc5', adapter: { kind: 'evm-constant-product-v2', fee_numerator: '3', fee_denominator: '1000' }.freeze, status: 'active', replaced_by_pool_definition_id: nil }.freeze, { pool_definition_id: 'discovered-pool-3f840a40991e755e42d242188bd8deb85cd5b9655308269b00c220f5237710cf', dex_deployment_id: 'dex-deployment-0002', chain_id: 'eip155:43114', address: '0xfe15c2695f1f920da45c30aae47d11de51007af9', token0_deployment_id: 'discovered-token-0a7f98c8752f15ee02ce0d801f25df8ff78864a1d70aff7e204f7bdb3f8a0692', token1_deployment_id: 'deployment-0004', adapter: { kind: 'evm-constant-product-v2', fee_numerator: '3', fee_denominator: '1000' }.freeze, status: 'active', replaced_by_pool_definition_id: nil }.freeze, { pool_definition_id: 'discovered-pool-5d7aa6a767a0c6ea9ddeb06d1289bd12d85018935d5b25724b165dc8b9832252', dex_deployment_id: 'dex-deployment-0002', chain_id: 'eip155:43114', address: '0x48f7c83c29e5ecea926d8169864d8cd022deaf3c', token0_deployment_id: 'discovered-token-323d07c442f0d089197ae7eea9b3ebb829910177c5b780161a7623aaed5e4371', token1_deployment_id: 'deployment-0004', adapter: { kind: 'evm-constant-product-v2', fee_numerator: '3', fee_denominator: '1000' }.freeze, status: 'active', replaced_by_pool_definition_id: nil }.freeze, { pool_definition_id: 'discovered-pool-6428a1e5da293b2ef62027ec823ba27532219a40784def3930feee56a623b809', dex_deployment_id: 'dex-deployment-0001', chain_id: 'eip155:1', address: '0xa2107fa5b38d9bbd2c461d6edf11b11a50f6b974', token0_deployment_id: 'deployment-0057', token1_deployment_id: 'deployment-0002', adapter: { kind: 'evm-constant-product-v2', fee_numerator: '3', fee_denominator: '1000' }.freeze, status: 'active', replaced_by_pool_definition_id: nil }.freeze, { pool_definition_id: 'discovered-pool-866f890448d13c078e217a894ebd47430da5941fe5bff7e382fc095916b4614d', dex_deployment_id: 'dex-deployment-0001', chain_id: 'eip155:1', address: '0xb6909b960dbbe7392d405429eb2b3649752b4838', token0_deployment_id: 'discovered-token-69519fd08e31445cad84b0c17a5346b7ee9c5692e270602af9308ca6d8943bb6', token1_deployment_id: 'deployment-0002', adapter: { kind: 'evm-constant-product-v2', fee_numerator: '3', fee_denominator: '1000' }.freeze, status: 'active', replaced_by_pool_definition_id: nil }.freeze, { pool_definition_id: 'discovered-pool-90805f8995c1d0b85a45fcd4587928a00066b1f14407baee4e8ed1b634c07804', dex_deployment_id: 'dex-deployment-0001', chain_id: 'eip155:1', address: '0x55d5c232d921b9eaa6b37b5845e439acd04b4dba', token0_deployment_id: 'discovered-token-611597bd13daa43d01a23caa9cca6a98797c64be7fb5b2677370ddbcdeaf01ec', token1_deployment_id: 'deployment-0002', adapter: { kind: 'evm-constant-product-v2', fee_numerator: '3', fee_denominator: '1000' }.freeze, status: 'active', replaced_by_pool_definition_id: nil }.freeze, { pool_definition_id: 'discovered-pool-9e4ed76f76904a4ae271946bb1a4b2dc7428e343040b05a42707071bbfac9462', dex_deployment_id: 'dex-deployment-0002', chain_id: 'eip155:43114', address: '0x6f3a0c89f611ef5dc9d96650324ac633d02265d3', token0_deployment_id: 'deployment-0058', token1_deployment_id: 'deployment-0004', adapter: { kind: 'evm-constant-product-v2', fee_numerator: '3', fee_denominator: '1000' }.freeze, status: 'active', replaced_by_pool_definition_id: nil }.freeze, { pool_definition_id: 'discovered-pool-a2480f3d4ea5ce12252126acf64b174b9fe678b0f0fda8936a12fef180ae08cd', dex_deployment_id: 'dex-deployment-0002', chain_id: 'eip155:43114', address: '0xa389f9430876455c36478deea9769b7ca4e3ddb1', token0_deployment_id: 'deployment-0018', token1_deployment_id: 'deployment-0004', adapter: { kind: 'evm-constant-product-v2', fee_numerator: '3', fee_denominator: '1000' }.freeze, status: 'active', replaced_by_pool_definition_id: nil }.freeze, { pool_definition_id: 'discovered-pool-a7f9e600a86951f40472ff779fae467db8a6bbbc6076356058f427e97d4ae429', dex_deployment_id: 'dex-deployment-0001', chain_id: 'eip155:1', address: '0xa478c2975ab1ea89e8196811f51a7b7ade33eb11', token0_deployment_id: 'deployment-0019', token1_deployment_id: 'deployment-0002', adapter: { kind: 'evm-constant-product-v2', fee_numerator: '3', fee_denominator: '1000' }.freeze, status: 'active', replaced_by_pool_definition_id: nil }.freeze, { pool_definition_id: 'discovered-pool-b8f972f8bae36c82b51ed2aeed070d3ef3e7642e2a708c7d3c0c134e6e1946ed', dex_deployment_id: 'dex-deployment-0001', chain_id: 'eip155:1', address: '0x11b1f53204d03e5529f09eb3091939e4fd8c9cf3', token0_deployment_id: 'discovered-token-054d80a64e1f36a756129763ca2f1e7a140b50b04c83876ff01dd5fd497a74c5', token1_deployment_id: 'deployment-0002', adapter: { kind: 'evm-constant-product-v2', fee_numerator: '3', fee_denominator: '1000' }.freeze, status: 'active', replaced_by_pool_definition_id: nil }.freeze, { pool_definition_id: 'discovered-pool-e702b0cb56528418b4ce089dfc001c6241c94e92aabde72f1a340c4601541780', dex_deployment_id: 'dex-deployment-0001', chain_id: 'eip155:1', address: '0xbb2b8038a1640196fbe3e38816f3e67cba72d940', token0_deployment_id: 'discovered-token-e375086901067fe3de023bcdc70f1bafca798e1719ed7e676a98f57de3350a07', token1_deployment_id: 'deployment-0002', adapter: { kind: 'evm-constant-product-v2', fee_numerator: '3', fee_denominator: '1000' }.freeze, status: 'active', replaced_by_pool_definition_id: nil }.freeze, { pool_definition_id: 'discovered-pool-ece9088cf38944438897ff9fb2a1abc6855a687b5a3f0d6ab98dfe06c1a6dfef', dex_deployment_id: 'dex-deployment-0002', chain_id: 'eip155:43114', address: '0x454e67025631c065d3cfad6d71e6892f74487a15', token0_deployment_id: 'deployment-0059', token1_deployment_id: 'deployment-0004', adapter: { kind: 'evm-constant-product-v2', fee_numerator: '3', fee_denominator: '1000' }.freeze, status: 'active', replaced_by_pool_definition_id: nil }.freeze, { pool_definition_id: 'discovered-pool-fb02e85806cd907920126af935137b0775a858ddf04a28d7ca144f761fd7579e', dex_deployment_id: 'dex-deployment-0002', chain_id: 'eip155:43114', address: '0xb6a00cead355d1ec492fd72e1d79199c347a74b5', token0_deployment_id: 'discovered-token-1847342426b765add3c8b4feb724c6b15121f25097cb7917c967c285ca77e804', token1_deployment_id: 'deployment-0004', adapter: { kind: 'evm-constant-product-v2', fee_numerator: '3', fee_denominator: '1000' }.freeze, status: 'active', replaced_by_pool_definition_id: nil }.freeze, { pool_definition_id: 'pool-0001', dex_deployment_id: 'dex-deployment-0001', chain_id: 'eip155:1', address: '0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc', token0_deployment_id: 'deployment-0008', token1_deployment_id: 'deployment-0002', adapter: { kind: 'evm-constant-product-v2', fee_numerator: '3', fee_denominator: '1000' }.freeze, status: 'active', replaced_by_pool_definition_id: nil }.freeze, { pool_definition_id: 'pool-0002', dex_deployment_id: 'dex-deployment-0002', chain_id: 'eip155:43114', address: '0xf4003f4efbe8691b60249e6afbd307abe7758adb', token0_deployment_id: 'deployment-0004', token1_deployment_id: 'deployment-0009', adapter: { kind: 'evm-constant-product-v2', fee_numerator: '3', fee_denominator: '1000' }.freeze, status: 'active', replaced_by_pool_definition_id: nil }.freeze, { pool_definition_id: 'pool-0003', dex_deployment_id: 'dex-deployment-0003', chain_id: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp', address: 'FgH1dEvyRQoAqJjbUzzKVoM1HYdxTqPwjEF82kDH1kVe', token0_deployment_id: 'deployment-0006', token1_deployment_id: 'deployment-0013', adapter: { kind: 'solana-orca-whirlpool', fee_numerator: nil, fee_denominator: nil }.freeze, status: 'active', replaced_by_pool_definition_id: nil }.freeze, { pool_definition_id: 'pool-0004', dex_deployment_id: 'dex-deployment-0004', chain_id: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp', address: 'AwaVyGAF3N6K4YRUJk55Ui1GquKhKdD6vTCmVvCzXpKf', token0_deployment_id: 'deployment-0006', token1_deployment_id: 'deployment-0013', adapter: { kind: 'solana-raydium-clmm', fee_numerator: nil, fee_denominator: nil }.freeze, status: 'active', replaced_by_pool_definition_id: nil }.freeze].freeze
|
|
25
|
+
NATIVE_WRAP_DEFINITIONS = [{ native_wrap_definition_id: 'native-wrap-0001', chain_id: 'eip155:1', native_token_deployment_id: 'deployment-0001', wrapped_token_deployment_id: 'deployment-0002', status: 'active' }.freeze, { native_wrap_definition_id: 'native-wrap-0002', chain_id: 'eip155:43114', native_token_deployment_id: 'deployment-0003', wrapped_token_deployment_id: 'deployment-0004', status: 'active' }.freeze, { native_wrap_definition_id: 'native-wrap-0003', chain_id: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp', native_token_deployment_id: 'deployment-0005', wrapped_token_deployment_id: 'deployment-0006', status: 'active' }.freeze].freeze
|
|
26
|
+
DEX_ALIASES = [{ namespace: 'avalancheC', name: 'DISCOVERED_POOL_1568E761C62F7DC5', dex_deployment_id: nil, pool_definition_id: ERPC::Pools::AvalancheC[:DISCOVERED_POOL_1568E761C62F7DC5] }.freeze, { namespace: 'avalancheC', name: 'DISCOVERED_POOL_3C1E38D02092D16E', dex_deployment_id: nil, pool_definition_id: ERPC::Pools::AvalancheC[:DISCOVERED_POOL_3C1E38D02092D16E] }.freeze, { namespace: 'avalancheC', name: 'DISCOVERED_POOL_3F840A40991E755E', dex_deployment_id: nil, pool_definition_id: ERPC::Pools::AvalancheC[:DISCOVERED_POOL_3F840A40991E755E] }.freeze, { namespace: 'avalancheC', name: 'DISCOVERED_POOL_5D7AA6A767A0C6EA', dex_deployment_id: nil, pool_definition_id: ERPC::Pools::AvalancheC[:DISCOVERED_POOL_5D7AA6A767A0C6EA] }.freeze, { namespace: 'avalancheC', name: 'DISCOVERED_POOL_9E4ED76F76904A4A', dex_deployment_id: nil, pool_definition_id: ERPC::Pools::AvalancheC[:DISCOVERED_POOL_9E4ED76F76904A4A] }.freeze, { namespace: 'avalancheC', name: 'DISCOVERED_POOL_A2480F3D4EA5CE12', dex_deployment_id: nil, pool_definition_id: ERPC::Pools::AvalancheC[:DISCOVERED_POOL_A2480F3D4EA5CE12] }.freeze, { namespace: 'avalancheC', name: 'DISCOVERED_POOL_ECE9088CF3894443', dex_deployment_id: nil, pool_definition_id: ERPC::Pools::AvalancheC[:DISCOVERED_POOL_ECE9088CF3894443] }.freeze, { namespace: 'avalancheC', name: 'DISCOVERED_POOL_FB02E85806CD9079', dex_deployment_id: nil, pool_definition_id: ERPC::Pools::AvalancheC[:DISCOVERED_POOL_FB02E85806CD9079] }.freeze, { namespace: 'avalancheC', name: 'LFJ_LEGACY', dex_deployment_id: ERPC::Dexes::AvalancheC[:LFJ_LEGACY], pool_definition_id: nil }.freeze, { namespace: 'avalancheC', name: 'LFJ_LEGACY_WAVAX_USDC', dex_deployment_id: nil, pool_definition_id: ERPC::Pools::AvalancheC[:LFJ_LEGACY_WAVAX_USDC] }.freeze, { namespace: 'ethereum', name: 'DISCOVERED_POOL_1B98A5F24A364E05', dex_deployment_id: nil, pool_definition_id: ERPC::Pools::Ethereum[:DISCOVERED_POOL_1B98A5F24A364E05] }.freeze, { namespace: 'ethereum', name: 'DISCOVERED_POOL_6428A1E5DA293B2E', dex_deployment_id: nil, pool_definition_id: ERPC::Pools::Ethereum[:DISCOVERED_POOL_6428A1E5DA293B2E] }.freeze, { namespace: 'ethereum', name: 'DISCOVERED_POOL_866F890448D13C07', dex_deployment_id: nil, pool_definition_id: ERPC::Pools::Ethereum[:DISCOVERED_POOL_866F890448D13C07] }.freeze, { namespace: 'ethereum', name: 'DISCOVERED_POOL_90805F8995C1D0B8', dex_deployment_id: nil, pool_definition_id: ERPC::Pools::Ethereum[:DISCOVERED_POOL_90805F8995C1D0B8] }.freeze, { namespace: 'ethereum', name: 'DISCOVERED_POOL_A7F9E600A86951F4', dex_deployment_id: nil, pool_definition_id: ERPC::Pools::Ethereum[:DISCOVERED_POOL_A7F9E600A86951F4] }.freeze, { namespace: 'ethereum', name: 'DISCOVERED_POOL_B8F972F8BAE36C82', dex_deployment_id: nil, pool_definition_id: ERPC::Pools::Ethereum[:DISCOVERED_POOL_B8F972F8BAE36C82] }.freeze, { namespace: 'ethereum', name: 'DISCOVERED_POOL_E702B0CB56528418', dex_deployment_id: nil, pool_definition_id: ERPC::Pools::Ethereum[:DISCOVERED_POOL_E702B0CB56528418] }.freeze, { namespace: 'ethereum', name: 'UNISWAP_V2', dex_deployment_id: ERPC::Dexes::Ethereum[:UNISWAP_V2], pool_definition_id: nil }.freeze, { namespace: 'ethereum', name: 'UNISWAP_V2_USDC_WETH', dex_deployment_id: nil, pool_definition_id: ERPC::Pools::Ethereum[:UNISWAP_V2_USDC_WETH] }.freeze, { namespace: 'solana', name: 'ORCA_WHIRLPOOLS', dex_deployment_id: ERPC::Dexes::Solana[:ORCA_WHIRLPOOLS], pool_definition_id: nil }.freeze, { namespace: 'solana', name: 'ORCA_WHIRLPOOLS_WSOL_EURC', dex_deployment_id: nil, pool_definition_id: ERPC::Pools::Solana[:ORCA_WHIRLPOOLS_WSOL_EURC] }.freeze, { namespace: 'solana', name: 'RAYDIUM_CLMM', dex_deployment_id: ERPC::Dexes::Solana[:RAYDIUM_CLMM], pool_definition_id: nil }.freeze, { namespace: 'solana', name: 'RAYDIUM_CLMM_WSOL_EURC', dex_deployment_id: nil, pool_definition_id: ERPC::Pools::Solana[:RAYDIUM_CLMM_WSOL_EURC] }.freeze].freeze
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Generated by registry/generate-swap-execution-capabilities.mjs. Do not edit.
|
|
4
|
+
|
|
5
|
+
module ERPC
|
|
6
|
+
SWAP_EXECUTION_CAPABILITIES_JSON = '[{"swapExecutionCapabilityId":"swap-execution-0001","chainId":"eip155:1","dexDeploymentId":"dex-deployment-0001","poolDefinitionId":"pool-0001","factoryAddress":"0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f","routerAddress":"0x7a250d5630b4cf539739df2c5dacb4c659f2488d","routerKind":"uniswap-v2-router02","adapterKind":"evm-constant-product-v2","token0DeploymentId":"deployment-0008","token0Address":"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48","token0Standard":"erc20","token1DeploymentId":"deployment-0002","token1Address":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2","token1Standard":"erc20","wrappedNativeTokenDeploymentId":"deployment-0002","wrappedNativeTokenAddress":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2","wrappedNativeFunctionSelector":"0xad5c4648","functionKind":"exact-input-erc20-to-erc20","functionSignature":"swapExactTokensForTokens(uint256,uint256,address[],address,uint256)","functionSelector":"0x38ed1739","status":"active"},{"swapExecutionCapabilityId":"swap-execution-0002","chainId":"eip155:43114","dexDeploymentId":"dex-deployment-0002","poolDefinitionId":"pool-0002","factoryAddress":"0x9ad6c38be94206ca50bb0d90783181662f0cfa10","routerAddress":"0x60ae616a2155ee3d9a68541ba4544862310933d4","routerKind":"joe-v1-router02","adapterKind":"evm-constant-product-v2","token0DeploymentId":"deployment-0004","token0Address":"0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7","token0Standard":"erc20","token1DeploymentId":"deployment-0009","token1Address":"0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e","token1Standard":"erc20","wrappedNativeTokenDeploymentId":"deployment-0004","wrappedNativeTokenAddress":"0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7","wrappedNativeFunctionSelector":"0x73b295c2","functionKind":"exact-input-erc20-to-erc20","functionSignature":"swapExactTokensForTokens(uint256,uint256,address[],address,uint256)","functionSelector":"0x38ed1739","status":"active"}]'.freeze
|
|
7
|
+
SWAP_EXECUTION_CAPABILITIES_CONTENT_DIGEST = '84424dc48687e2cb1dd0c9a2446f820efd2c311e71ce5acacfeb6e882811875f'.freeze
|
|
8
|
+
SWAP_EXECUTION_CAPABILITIES_AS_OF_DATE = '2026-09-16'.freeze
|
|
9
|
+
SWAP_EXECUTION_FUNCTION_SIGNATURE = 'swapExactTokensForTokens(uint256,uint256,address[],address,uint256)'.freeze
|
|
10
|
+
SWAP_EXECUTION_FUNCTION_SELECTOR = '0x38ed1739'.freeze
|
|
11
|
+
end
|