@across-protocol/sdk 4.3.68 → 4.3.70
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.
- package/dist/cjs/arch/evm/MessageUtils.d.ts +3 -0
- package/dist/cjs/arch/evm/MessageUtils.js +8 -0
- package/dist/cjs/arch/evm/MessageUtils.js.map +1 -0
- package/dist/cjs/arch/evm/index.d.ts +1 -0
- package/dist/cjs/arch/evm/index.js +1 -0
- package/dist/cjs/arch/evm/index.js.map +1 -1
- package/dist/cjs/arch/svm/MessageUtils.d.ts +3 -0
- package/dist/cjs/arch/svm/MessageUtils.js +9 -0
- package/dist/cjs/arch/svm/MessageUtils.js.map +1 -0
- package/dist/cjs/arch/svm/SpokeUtils.js +22 -60
- package/dist/cjs/arch/svm/SpokeUtils.js.map +1 -1
- package/dist/cjs/arch/svm/index.d.ts +1 -0
- package/dist/cjs/arch/svm/index.js +1 -0
- package/dist/cjs/arch/svm/index.js.map +1 -1
- package/dist/cjs/arch/svm/provider.d.ts +1 -1
- package/dist/cjs/arch/svm/provider.js +2 -1
- package/dist/cjs/arch/svm/provider.js.map +1 -1
- package/dist/cjs/providers/solana/retryRpcFactory.js +4 -0
- package/dist/cjs/providers/solana/retryRpcFactory.js.map +1 -1
- package/dist/cjs/relayFeeCalculator/chain-queries/baseQuery.js +2 -1
- package/dist/cjs/relayFeeCalculator/chain-queries/baseQuery.js.map +1 -1
- package/dist/cjs/relayFeeCalculator/chain-queries/svmQuery.js +2 -1
- package/dist/cjs/relayFeeCalculator/chain-queries/svmQuery.js.map +1 -1
- package/dist/esm/arch/evm/MessageUtils.d.ts +9 -0
- package/dist/esm/arch/evm/MessageUtils.js +11 -0
- package/dist/esm/arch/evm/MessageUtils.js.map +1 -0
- package/dist/esm/arch/evm/index.d.ts +1 -0
- package/dist/esm/arch/evm/index.js +1 -0
- package/dist/esm/arch/evm/index.js.map +1 -1
- package/dist/esm/arch/svm/MessageUtils.d.ts +9 -0
- package/dist/esm/arch/svm/MessageUtils.js +15 -0
- package/dist/esm/arch/svm/MessageUtils.js.map +1 -0
- package/dist/esm/arch/svm/SpokeUtils.js +25 -61
- package/dist/esm/arch/svm/SpokeUtils.js.map +1 -1
- package/dist/esm/arch/svm/index.d.ts +1 -0
- package/dist/esm/arch/svm/index.js +1 -0
- package/dist/esm/arch/svm/index.js.map +1 -1
- package/dist/esm/arch/svm/provider.d.ts +1 -1
- package/dist/esm/arch/svm/provider.js +1 -1
- package/dist/esm/arch/svm/provider.js.map +1 -1
- package/dist/esm/providers/solana/retryRpcFactory.js +7 -2
- package/dist/esm/providers/solana/retryRpcFactory.js.map +1 -1
- package/dist/esm/relayFeeCalculator/chain-queries/baseQuery.js +2 -1
- package/dist/esm/relayFeeCalculator/chain-queries/baseQuery.js.map +1 -1
- package/dist/esm/relayFeeCalculator/chain-queries/svmQuery.js +4 -6
- package/dist/esm/relayFeeCalculator/chain-queries/svmQuery.js.map +1 -1
- package/dist/types/arch/evm/MessageUtils.d.ts +10 -0
- package/dist/types/arch/evm/MessageUtils.d.ts.map +1 -0
- package/dist/types/arch/evm/index.d.ts +1 -0
- package/dist/types/arch/evm/index.d.ts.map +1 -1
- package/dist/types/arch/svm/MessageUtils.d.ts +10 -0
- package/dist/types/arch/svm/MessageUtils.d.ts.map +1 -0
- package/dist/types/arch/svm/SpokeUtils.d.ts.map +1 -1
- package/dist/types/arch/svm/index.d.ts +1 -0
- package/dist/types/arch/svm/index.d.ts.map +1 -1
- package/dist/types/arch/svm/provider.d.ts +1 -1
- package/dist/types/arch/svm/provider.d.ts.map +1 -1
- package/dist/types/providers/solana/retryRpcFactory.d.ts.map +1 -1
- package/dist/types/relayFeeCalculator/chain-queries/baseQuery.d.ts.map +1 -1
- package/dist/types/relayFeeCalculator/chain-queries/svmQuery.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/arch/evm/MessageUtils.ts +12 -0
- package/src/arch/evm/index.ts +1 -0
- package/src/arch/svm/MessageUtils.ts +16 -0
- package/src/arch/svm/SpokeUtils.ts +15 -42
- package/src/arch/svm/index.ts +1 -0
- package/src/arch/svm/provider.ts +1 -0
- package/src/providers/solana/retryRpcFactory.ts +7 -2
- package/src/relayFeeCalculator/chain-queries/baseQuery.ts +2 -1
- package/src/relayFeeCalculator/chain-queries/svmQuery.ts +4 -22
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../../src/arch/svm/provider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,aAAa,EACb,wDAAwD,IAAI,uBAAuB,EACnF,iDAAiD,IAAI,gBAAgB,EACrE,uEAAuE,IAAI,iCAAiC,GAC7G,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../../src/arch/svm/provider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,aAAa,EACb,wDAAwD,IAAI,uBAAuB,EACnF,iDAAiD,IAAI,gBAAgB,EACrE,mEAAmE,IAAI,kCAAkC,EACzG,uEAAuE,IAAI,iCAAiC,GAC7G,MAAM,aAAa,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retryRpcFactory.d.ts","sourceRoot":"","sources":["../../../../src/providers/solana/retryRpcFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA2C,MAAM,aAAa,CAAC;AAEpF,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAGtE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAIjC,qBAAa,qBAAsB,SAAQ,uBAAuB;IAO9D,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,iBAAiB,EAAE,MAAM;IANpC,SAAS,CAAC,oBAAoB,EAAE,YAAY,CAAC;IAE7C,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;gBAGd,OAAO,EAAE,MAAM,EACf,iBAAiB,EAAE,MAAM,EAClC,GAAG,4BAA4B,EAAE,qBAAqB,CAAC,OAAO,2BAA2B,CAAC;IAuBrF,eAAe,IAAI,YAAY;IAMtC;;;;;OAKG;YACW,QAAQ;IA8BtB;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;
|
|
1
|
+
{"version":3,"file":"retryRpcFactory.d.ts","sourceRoot":"","sources":["../../../../src/providers/solana/retryRpcFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA2C,MAAM,aAAa,CAAC;AAEpF,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAGtE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAIjC,qBAAa,qBAAsB,SAAQ,uBAAuB;IAO9D,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,iBAAiB,EAAE,MAAM;IANpC,SAAS,CAAC,oBAAoB,EAAE,YAAY,CAAC;IAE7C,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;gBAGd,OAAO,EAAE,MAAM,EACf,iBAAiB,EAAE,MAAM,EAClC,GAAG,4BAA4B,EAAE,qBAAqB,CAAC,OAAO,2BAA2B,CAAC;IAuBrF,eAAe,IAAI,YAAY;IAMtC;;;;;OAKG;YACW,QAAQ;IA8BtB;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;CAQ5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseQuery.d.ts","sourceRoot":"","sources":["../../../../src/relayFeeCalculator/chain-queries/baseQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+CAA+C,CAAC;AAE3E,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAc,MAAM,QAAQ,CAAC;AAGrE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAsB,MAAM,iBAAiB,CAAC;AAEhE,OAAO,EACL,YAAY,EACZ,UAAU,EACV,uBAAuB,EACvB,SAAS,EAKT,OAAO,EACR,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,MAAM,EAAE,cAAc,EAAqB,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"baseQuery.d.ts","sourceRoot":"","sources":["../../../../src/relayFeeCalculator/chain-queries/baseQuery.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"svmQuery.d.ts","sourceRoot":"","sources":["../../../../src/relayFeeCalculator/chain-queries/svmQuery.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,iBAAiB,EAGlB,MAAM,aAAa,CAAC;AACrB,OAAO,
|
|
1
|
+
{"version":3,"file":"svmQuery.d.ts","sourceRoot":"","sources":["../../../../src/relayFeeCalculator/chain-queries/svmQuery.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,iBAAiB,EAGlB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAA0E,MAAM,gBAAgB,CAAC;AAIrH,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,uBAAuB,EAAQ,MAAM,aAAa,CAAC;AAC1G,OAAO,EAAE,MAAM,EAAE,cAAc,EAAqB,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,IAAI,CAAC;AAKvC;;;GAGG;AACH,qBAAa,QAAS,YAAW,cAAc;IAe3C,QAAQ,CAAC,QAAQ,EAAE,WAAW;IAC9B,QAAQ,CAAC,aAAa,EAAE,iBAAiB;IACzC,QAAQ,CAAC,SAAS,EAAE,UAAU;IAC9B,QAAQ,CAAC,uBAAuB,EAAE,UAAU;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM;IACpC,QAAQ,CAAC,aAAa,CAAC,EAAE,YAAY;IACrC,QAAQ,CAAC,qBAAqB,EAAE,MAAM;IArBxC,SAAS,CAAC,oBAAoB,uYAAC;IAE/B;;;;;;;;;;OAUG;gBAEQ,QAAQ,EAAE,WAAW,EACrB,aAAa,EAAE,iBAAiB,EAChC,SAAS,EAAE,UAAU,EACrB,uBAAuB,EAAE,UAAU,EACnC,MAAM,EAAE,MAAM,EACd,kBAAkB,CAAC,EAAE,MAAM,YAAA,EAC3B,aAAa,CAAC,EAAE,YAAY,YAAA,EAC5B,qBAAqB,GAAE,MAAc;IAOhD;;;;;;;;;OASG;IACG,WAAW,CACf,SAAS,EAAE,SAAS,GAAG;QAAE,kBAAkB,EAAE,MAAM,CAAA;KAAE,EACrD,OAAO,UAAkD,EACzD,OAAO,GAAE,OAAO,CAAC;QACf,QAAQ,EAAE,YAAY,CAAC;QACvB,QAAQ,EAAE,YAAY,CAAC;QACvB,iBAAiB,EAAE,SAAS,CAAC;QAC7B,qBAAqB,EAAE,SAAS,CAAC;KAClC,CAAM,GACN,OAAO,CAAC,uBAAuB,CAAC;IA8DnC;;;;;OAKG;IACG,gBAAgB,CACpB,OAAO,EAAE,SAAS,GAAG;QAAE,kBAAkB,EAAE,MAAM,CAAA;KAAE,EACnD,OAAO,UAAgD,GACtD,OAAO,CAAC,SAAS,CAAC;IAiBrB;;;;;;OAMG;IACH,2BAA2B,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS;IAI1D;;;;;OAKG;cACa,cAAc,CAC5B,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,GAAG,aAAa,CAAC,GAAG;QACxD,kBAAkB,EAAE,MAAM,CAAC;QAC3B,SAAS,EAAE,UAAU,CAAC;QACtB,WAAW,EAAE,UAAU,CAAC;KACzB,EACD,MAAM,EAAE,iBAAiB,EACzB,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,EAAE,OAAO;;;;IAK3B;;;;OAIG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUzD;;;;OAIG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;CAI9C"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { RelayData } from "../../interfaces";
|
|
2
|
+
import { BigNumber, bnZero } from "../../utils";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @notice Return the native token cost of filling a deposit beyond gas cost. We're not using msg.value in our fills,
|
|
6
|
+
* so return zero for EVM side
|
|
7
|
+
* @param deposit RelayData associated with Deposit we're estimating for
|
|
8
|
+
* @returns Native token cost
|
|
9
|
+
*/
|
|
10
|
+
export function getAuxiliaryNativeTokenCost(_deposit: RelayData): BigNumber {
|
|
11
|
+
return bnZero;
|
|
12
|
+
}
|
package/src/arch/evm/index.ts
CHANGED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { deserializeMessage } from ".";
|
|
2
|
+
import { RelayData } from "../../interfaces";
|
|
3
|
+
import { BigNumber, bnZero, isMessageEmpty } from "../../utils";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @notice Return the native token cost of filling a deposit beyond gas cost. We're not using msg.value in our fills,
|
|
7
|
+
* so return zero for EVM side
|
|
8
|
+
* @param deposit RelayData associated with Deposit we're estimating for
|
|
9
|
+
* @returns Native token cost
|
|
10
|
+
*/
|
|
11
|
+
export function getAuxiliaryNativeTokenCost(deposit: RelayData): BigNumber {
|
|
12
|
+
// Notice. We return `message.value_amount` here instead of simulating the Transaction. The reason is, we choose to
|
|
13
|
+
// rely hard on Solana program to protect us from not taking more than `value_amount` rather than relying on
|
|
14
|
+
// simulation. Chain state may change between simulation and execution, so simulation alone is unreliable
|
|
15
|
+
return isMessageEmpty(deposit.message) ? bnZero : BigNumber.from(deserializeMessage(deposit.message).value_amount);
|
|
16
|
+
}
|
|
@@ -86,7 +86,7 @@ import {
|
|
|
86
86
|
toSvmRelayData,
|
|
87
87
|
} from "./";
|
|
88
88
|
import { SvmCpiEventsClient } from "./eventsClient";
|
|
89
|
-
import {
|
|
89
|
+
import { SVM_LONG_TERM_STORAGE_SLOT_SKIPPED, SVM_SLOT_SKIPPED, isSolanaError } from "./provider";
|
|
90
90
|
import { AttestedCCTPMessage, SVMEventNames, SVMProvider } from "./types";
|
|
91
91
|
import {
|
|
92
92
|
getEmergencyDeleteRootBundleRootBundleId,
|
|
@@ -163,67 +163,40 @@ async function _callGetTimestampForSlotWithRetry(
|
|
|
163
163
|
maxRetries: number,
|
|
164
164
|
logger?: winston.Logger
|
|
165
165
|
): Promise<number | undefined> {
|
|
166
|
-
|
|
166
|
+
const slot = slotNumber.toString();
|
|
167
167
|
let _timestamp: bigint;
|
|
168
168
|
|
|
169
|
-
const retryCall = async () => {
|
|
170
|
-
const slot = slotNumber.toString();
|
|
171
|
-
// Implement exponential backoff with jitter where the # of seconds to wait is = 2^retryAttempt + jitter
|
|
172
|
-
// e.g. First two retry delays are ~1.5s and ~2.5s.
|
|
173
|
-
const delaySeconds = 2 ** retryAttempt + Math.random();
|
|
174
|
-
|
|
175
|
-
if (retryAttempt >= maxRetries) {
|
|
176
|
-
throw new Error(`Timeout on SVM getBlockTime() for slot ${slot} after ${retryAttempt} retry attempts`);
|
|
177
|
-
}
|
|
178
|
-
logger?.debug({
|
|
179
|
-
at: "getTimestampForSlot",
|
|
180
|
-
message: `Retrying getBlockTime() after ${delaySeconds} seconds for retry attempt #${retryAttempt}`,
|
|
181
|
-
slot,
|
|
182
|
-
retryAttempt,
|
|
183
|
-
maxRetries,
|
|
184
|
-
delaySeconds,
|
|
185
|
-
});
|
|
186
|
-
await delay(delaySeconds);
|
|
187
|
-
return _callGetTimestampForSlotWithRetry(provider, slotNumber, ++retryAttempt, maxRetries, logger);
|
|
188
|
-
};
|
|
189
|
-
|
|
190
169
|
try {
|
|
170
|
+
// @note: getBlockTime receives a slot number, not a block number.
|
|
191
171
|
_timestamp = await provider.getBlockTime(slotNumber).send();
|
|
192
172
|
} catch (err) {
|
|
193
173
|
if (!isSolanaError(err)) {
|
|
194
174
|
throw err;
|
|
195
175
|
}
|
|
196
176
|
|
|
177
|
+
const at = "getTimestampForSlot";
|
|
197
178
|
const { __code: code } = err.context;
|
|
198
|
-
const slot = slotNumber.toString();
|
|
199
179
|
|
|
200
180
|
switch (err.context.__code) {
|
|
201
181
|
case SVM_SLOT_SKIPPED:
|
|
182
|
+
case SVM_LONG_TERM_STORAGE_SLOT_SKIPPED:
|
|
183
|
+
// No block available for this slot; caller must decide on how to handle this.
|
|
202
184
|
return undefined;
|
|
203
185
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
default:
|
|
209
|
-
logger?.debug({
|
|
210
|
-
at: "getTimestampForSlot",
|
|
211
|
-
message: "Caught error from getBlockTime()",
|
|
212
|
-
errorCode: code,
|
|
213
|
-
slot,
|
|
214
|
-
retryAttempt,
|
|
215
|
-
maxRetries,
|
|
216
|
-
});
|
|
186
|
+
default: {
|
|
187
|
+
const message = "Caught error from getBlockTime()";
|
|
188
|
+
logger?.debug({ at, message, errorCode: code, slot, retryAttempt, maxRetries });
|
|
217
189
|
throw new Error(`Unhandled SVM getBlockTime() error for slot ${slot}: ${code}`, { cause: err });
|
|
190
|
+
}
|
|
218
191
|
}
|
|
219
192
|
}
|
|
220
193
|
|
|
221
|
-
//
|
|
222
|
-
if (_timestamp === null) {
|
|
223
|
-
return await retryCall();
|
|
224
|
-
}
|
|
194
|
+
// _timestamp should be a BigInt or undefined. If not undefined, ensure that conversion to number does not truncate.
|
|
225
195
|
const timestamp = Number(_timestamp);
|
|
226
|
-
assert(
|
|
196
|
+
assert(
|
|
197
|
+
!isDefined(_timestamp) || BigInt(timestamp) === _timestamp,
|
|
198
|
+
`Unexpected block timestamp for SVM slot ${slot}: ${_timestamp}`
|
|
199
|
+
);
|
|
227
200
|
|
|
228
201
|
return timestamp;
|
|
229
202
|
}
|
package/src/arch/svm/index.ts
CHANGED
package/src/arch/svm/provider.ts
CHANGED
|
@@ -6,5 +6,6 @@ export {
|
|
|
6
6
|
isSolanaError,
|
|
7
7
|
SOLANA_ERROR__JSON_RPC__SERVER_ERROR_BLOCK_NOT_AVAILABLE as SVM_BLOCK_NOT_AVAILABLE,
|
|
8
8
|
SOLANA_ERROR__JSON_RPC__SERVER_ERROR_SLOT_SKIPPED as SVM_SLOT_SKIPPED,
|
|
9
|
+
SOLANA_ERROR__JSON_RPC__SERVER_ERROR_LONG_TERM_STORAGE_SLOT_SKIPPED as SVM_LONG_TERM_STORAGE_SLOT_SKIPPED,
|
|
9
10
|
SOLANA_ERROR__JSON_RPC__SERVER_ERROR_SEND_TRANSACTION_PREFLIGHT_FAILURE as SVM_TRANSACTION_PREFLIGHT_FAILURE,
|
|
10
11
|
} from "@solana/kit";
|
|
@@ -2,7 +2,7 @@ import { RpcTransport, SOLANA_ERROR__RPC__TRANSPORT_HTTP_ERROR } from "@solana/k
|
|
|
2
2
|
import { getThrowSolanaErrorResponseTransformer } from "@solana/rpc-transformers";
|
|
3
3
|
import { SolanaClusterRpcFactory } from "./baseRpcFactories";
|
|
4
4
|
import { RateLimitedSolanaRpcFactory } from "./rateLimitedRpcFactory";
|
|
5
|
-
import { isSolanaError } from "../../arch/svm";
|
|
5
|
+
import { isSolanaError, SVM_SLOT_SKIPPED, SVM_LONG_TERM_STORAGE_SLOT_SKIPPED } from "../../arch/svm";
|
|
6
6
|
import { delay } from "../../utils";
|
|
7
7
|
import { Logger } from "winston";
|
|
8
8
|
|
|
@@ -93,8 +93,13 @@ export class RetrySolanaRpcFactory extends SolanaClusterRpcFactory {
|
|
|
93
93
|
return false;
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
//
|
|
96
|
+
// JSON-RPC errors: https://www.quicknode.com/docs/solana/error-references
|
|
97
|
+
const { __code: code } = error.context;
|
|
97
98
|
switch (method) {
|
|
99
|
+
case "getBlock":
|
|
100
|
+
case "getBlockTime":
|
|
101
|
+
// No block at the requested slot. This may not be correct for blocks > 1 year old.
|
|
102
|
+
return [SVM_SLOT_SKIPPED, SVM_LONG_TERM_STORAGE_SLOT_SKIPPED].includes(code);
|
|
98
103
|
default:
|
|
99
104
|
return false;
|
|
100
105
|
}
|
|
@@ -22,6 +22,7 @@ import { Logger, QueryInterface, getDefaultRelayer } from "../relayFeeCalculator
|
|
|
22
22
|
import { Transport } from "viem";
|
|
23
23
|
import { getGasPriceEstimate } from "../../gasPriceOracle";
|
|
24
24
|
import { EvmProvider } from "../../arch/evm/types";
|
|
25
|
+
import { arch } from "../..";
|
|
25
26
|
|
|
26
27
|
export type SymbolMappingType = Record<
|
|
27
28
|
string,
|
|
@@ -167,7 +168,7 @@ export class QueryBase implements QueryInterface {
|
|
|
167
168
|
* @returns Native token cost
|
|
168
169
|
*/
|
|
169
170
|
getAuxiliaryNativeTokenCost(_deposit: RelayData): BigNumber {
|
|
170
|
-
return
|
|
171
|
+
return arch.evm.getAuxiliaryNativeTokenCost(_deposit);
|
|
171
172
|
}
|
|
172
173
|
|
|
173
174
|
/**
|
|
@@ -5,32 +5,17 @@ import {
|
|
|
5
5
|
fetchEncodedAccount,
|
|
6
6
|
isSome,
|
|
7
7
|
} from "@solana/kit";
|
|
8
|
-
import {
|
|
9
|
-
SVMProvider,
|
|
10
|
-
SolanaVoidSigner,
|
|
11
|
-
getFillRelayTx,
|
|
12
|
-
toAddress,
|
|
13
|
-
getAssociatedTokenAddress,
|
|
14
|
-
deserializeMessage,
|
|
15
|
-
} from "../../arch/svm";
|
|
8
|
+
import { SVMProvider, SolanaVoidSigner, getFillRelayTx, toAddress, getAssociatedTokenAddress } from "../../arch/svm";
|
|
16
9
|
import { Coingecko } from "../../coingecko";
|
|
17
10
|
import { CHAIN_IDs } from "../../constants";
|
|
18
11
|
import { getGasPriceEstimate } from "../../gasPriceOracle";
|
|
19
12
|
import { RelayData } from "../../interfaces";
|
|
20
|
-
import {
|
|
21
|
-
Address,
|
|
22
|
-
BigNumber,
|
|
23
|
-
BigNumberish,
|
|
24
|
-
SvmAddress,
|
|
25
|
-
TransactionCostEstimate,
|
|
26
|
-
bnZero,
|
|
27
|
-
isMessageEmpty,
|
|
28
|
-
toBN,
|
|
29
|
-
} from "../../utils";
|
|
13
|
+
import { Address, BigNumber, BigNumberish, SvmAddress, TransactionCostEstimate, toBN } from "../../utils";
|
|
30
14
|
import { Logger, QueryInterface, getDefaultRelayer } from "../relayFeeCalculator";
|
|
31
15
|
import { SymbolMappingType } from "./";
|
|
32
16
|
import { TOKEN_PROGRAM_ADDRESS } from "@solana-program/token";
|
|
33
17
|
import { TOKEN_2022_PROGRAM_ADDRESS, getTokenSize, fetchMint, Extension } from "@solana-program/token-2022";
|
|
18
|
+
import { arch } from "../..";
|
|
34
19
|
|
|
35
20
|
/**
|
|
36
21
|
* A special QueryBase implementation for SVM used for querying gas costs, token prices, and decimals of various tokens
|
|
@@ -180,10 +165,7 @@ export class SvmQuery implements QueryInterface {
|
|
|
180
165
|
* @returns Native token cost
|
|
181
166
|
*/
|
|
182
167
|
getAuxiliaryNativeTokenCost(deposit: RelayData): BigNumber {
|
|
183
|
-
|
|
184
|
-
// rely hard on Solana program to protect us from not taking more than `value_amount` rather than relying on
|
|
185
|
-
// simulation. Chain state may change between simulation and execution, so simulation alone is unreliable
|
|
186
|
-
return isMessageEmpty(deposit.message) ? bnZero : BigNumber.from(deserializeMessage(deposit.message).value_amount);
|
|
168
|
+
return arch.svm.getAuxiliaryNativeTokenCost(deposit);
|
|
187
169
|
}
|
|
188
170
|
|
|
189
171
|
/**
|