@across-protocol/sdk 4.3.32 → 4.3.34-alpha.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.
Files changed (52) hide show
  1. package/dist/cjs/arch/svm/SpokeUtils.d.ts +11 -10
  2. package/dist/cjs/arch/svm/SpokeUtils.js +67 -25
  3. package/dist/cjs/arch/svm/SpokeUtils.js.map +1 -1
  4. package/dist/cjs/arch/svm/encoders.d.ts +19 -0
  5. package/dist/cjs/arch/svm/encoders.js +52 -0
  6. package/dist/cjs/arch/svm/encoders.js.map +1 -0
  7. package/dist/cjs/arch/svm/index.d.ts +1 -0
  8. package/dist/cjs/arch/svm/index.js +1 -0
  9. package/dist/cjs/arch/svm/index.js.map +1 -1
  10. package/dist/cjs/arch/svm/utils.d.ts +2 -0
  11. package/dist/cjs/arch/svm/utils.js +18 -1
  12. package/dist/cjs/arch/svm/utils.js.map +1 -1
  13. package/dist/cjs/providers/quicknode.d.ts +2 -0
  14. package/dist/cjs/providers/quicknode.js +25 -0
  15. package/dist/cjs/providers/quicknode.js.map +1 -0
  16. package/dist/cjs/providers/utils.js +3 -1
  17. package/dist/cjs/providers/utils.js.map +1 -1
  18. package/dist/esm/arch/svm/SpokeUtils.d.ts +18 -10
  19. package/dist/esm/arch/svm/SpokeUtils.js +79 -26
  20. package/dist/esm/arch/svm/SpokeUtils.js.map +1 -1
  21. package/dist/esm/arch/svm/encoders.d.ts +19 -0
  22. package/dist/esm/arch/svm/encoders.js +43 -0
  23. package/dist/esm/arch/svm/encoders.js.map +1 -0
  24. package/dist/esm/arch/svm/index.d.ts +1 -0
  25. package/dist/esm/arch/svm/index.js +1 -0
  26. package/dist/esm/arch/svm/index.js.map +1 -1
  27. package/dist/esm/arch/svm/utils.d.ts +8 -0
  28. package/dist/esm/arch/svm/utils.js +22 -0
  29. package/dist/esm/arch/svm/utils.js.map +1 -1
  30. package/dist/esm/providers/quicknode.d.ts +2 -0
  31. package/dist/esm/providers/quicknode.js +22 -0
  32. package/dist/esm/providers/quicknode.js.map +1 -0
  33. package/dist/esm/providers/utils.js +3 -1
  34. package/dist/esm/providers/utils.js.map +1 -1
  35. package/dist/types/arch/svm/SpokeUtils.d.ts +18 -10
  36. package/dist/types/arch/svm/SpokeUtils.d.ts.map +1 -1
  37. package/dist/types/arch/svm/encoders.d.ts +20 -0
  38. package/dist/types/arch/svm/encoders.d.ts.map +1 -0
  39. package/dist/types/arch/svm/index.d.ts +1 -0
  40. package/dist/types/arch/svm/index.d.ts.map +1 -1
  41. package/dist/types/arch/svm/utils.d.ts +8 -0
  42. package/dist/types/arch/svm/utils.d.ts.map +1 -1
  43. package/dist/types/providers/quicknode.d.ts +3 -0
  44. package/dist/types/providers/quicknode.d.ts.map +1 -0
  45. package/dist/types/providers/utils.d.ts.map +1 -1
  46. package/package.json +1 -1
  47. package/src/arch/svm/SpokeUtils.ts +85 -20
  48. package/src/arch/svm/encoders.ts +86 -0
  49. package/src/arch/svm/index.ts +1 -0
  50. package/src/arch/svm/utils.ts +23 -0
  51. package/src/providers/quicknode.ts +26 -0
  52. package/src/providers/utils.ts +3 -1
@@ -0,0 +1,86 @@
1
+ import {
2
+ AccountRole,
3
+ addDecoderSizePrefix,
4
+ addEncoderSizePrefix,
5
+ getAddressDecoder,
6
+ getAddressEncoder,
7
+ getArrayEncoder,
8
+ getArrayDecoder,
9
+ getBytesDecoder,
10
+ getBytesEncoder,
11
+ getStructDecoder,
12
+ getStructEncoder,
13
+ getU8Decoder,
14
+ getU8Encoder,
15
+ getU32Decoder,
16
+ getU32Encoder,
17
+ getU64Decoder,
18
+ getU64Encoder,
19
+ type Address,
20
+ type Decoder,
21
+ type Encoder,
22
+ type ReadonlyUint8Array,
23
+ type WritableAccount,
24
+ type ReadonlyAccount,
25
+ } from "@solana/kit";
26
+
27
+ export type AcrossPlusMessage = {
28
+ handler: Address;
29
+ read_only_len: number;
30
+ value_amount: bigint;
31
+ accounts: Array<Address>;
32
+ handler_message: ReadonlyUint8Array;
33
+ };
34
+
35
+ export type CompiledIx = {
36
+ program_id_index: number;
37
+ account_key_indexes: Array<number>;
38
+ data: ReadonlyUint8Array;
39
+ };
40
+
41
+ export function getAcrossPlusMessageEncoder(): Encoder<AcrossPlusMessage> {
42
+ return getStructEncoder([
43
+ ["handler", getAddressEncoder()],
44
+ ["read_only_len", getU8Encoder()],
45
+ ["value_amount", getU64Encoder()],
46
+ ["accounts", getArrayEncoder(getAddressEncoder())],
47
+ ["handler_message", addEncoderSizePrefix(getBytesEncoder(), getU32Encoder())],
48
+ ]);
49
+ }
50
+
51
+ export function getAcrossPlusMessageDecoder(): Decoder<AcrossPlusMessage> {
52
+ return getStructDecoder([
53
+ ["handler", getAddressDecoder()],
54
+ ["read_only_len", getU8Decoder()],
55
+ ["value_amount", getU64Decoder()],
56
+ ["accounts", getArrayDecoder(getAddressDecoder())],
57
+ ["handler_message", addDecoderSizePrefix(getBytesDecoder(), getU32Decoder())],
58
+ ]);
59
+ }
60
+
61
+ export function getHandlerMessageEncoder(): Encoder<Array<CompiledIx>> {
62
+ return getArrayEncoder(getCompiledIxEncoder());
63
+ }
64
+
65
+ export function getCompiledIxEncoder(): Encoder<CompiledIx> {
66
+ return getStructEncoder([
67
+ ["program_id_index", getU8Encoder()],
68
+ ["account_key_indexes", getArrayEncoder(getU8Encoder())],
69
+ ["data", addEncoderSizePrefix(getBytesEncoder(), getU32Encoder())],
70
+ ]);
71
+ }
72
+
73
+ export function getCompiledIxDecoder(): Decoder<CompiledIx> {
74
+ return getStructDecoder([
75
+ ["program_id_index", getU8Decoder()],
76
+ ["account_key_indexes", getArrayDecoder(getU8Decoder())],
77
+ ["data", addDecoderSizePrefix(getBytesDecoder(), getU32Decoder())],
78
+ ]);
79
+ }
80
+
81
+ export function getAccountMeta(value: Address, isWritable: boolean): WritableAccount | ReadonlyAccount {
82
+ return Object.freeze({
83
+ address: value,
84
+ role: isWritable ? AccountRole.WRITABLE : AccountRole.READONLY,
85
+ });
86
+ }
@@ -5,3 +5,4 @@ export * from "./utils";
5
5
  export * from "./constants";
6
6
  export * from "./BlockUtils";
7
7
  export * from "./provider";
8
+ export * from "./encoders";
@@ -507,6 +507,29 @@ export const getEmergencyDeleteRootBundleRootBundleId = (body: Buffer): number =
507
507
  return result.rootBundleId.toNumber();
508
508
  };
509
509
 
510
+ /**
511
+ * Converts a common `RelayData` type to an SvmSpokeClient.RelayData` type. This is useful for when we need
512
+ * to interface directly with the SvmSpoke.
513
+ * @param relayData The common RelayData TS type.
514
+ * @returns RelayData which conforms to the typing of the SvmSpoke.
515
+ */
516
+ export function toSvmRelayData(relayData: RelayData): SvmSpokeClient.RelayData {
517
+ return {
518
+ originChainId: BigInt(relayData.originChainId),
519
+ depositor: address(relayData.depositor.toBase58()),
520
+ recipient: address(relayData.recipient.toBase58()),
521
+ depositId: ethers.utils.arrayify(ethers.utils.hexZeroPad(relayData.depositId.toHexString(), 32)),
522
+ inputToken: address(relayData.inputToken.toBase58()),
523
+ outputToken: address(relayData.outputToken.toBase58()),
524
+ inputAmount: ethers.utils.arrayify(ethers.utils.hexZeroPad(relayData.inputAmount.toHexString(), 32)),
525
+ outputAmount: relayData.outputAmount.toBigInt(),
526
+ message: Uint8Array.from(Buffer.from(relayData.message.slice(2), "hex")),
527
+ fillDeadline: relayData.fillDeadline,
528
+ exclusiveRelayer: address(relayData.exclusiveRelayer.toBase58()),
529
+ exclusivityDeadline: relayData.exclusivityDeadline,
530
+ };
531
+ }
532
+
510
533
  /**
511
534
  * Convert a bigint (0 ≤ n < 2^256) to a 32-byte Uint8Array (big-endian).
512
535
  * @param n The bigint to convert.
@@ -0,0 +1,26 @@
1
+ import { CHAIN_IDs, PUBLIC_NETWORKS } from "../constants";
2
+ import { RPCTransport } from "./types";
3
+
4
+ export function getURL(chainId: number, apiKey: string, transport: RPCTransport): string {
5
+ const envVar = "RPC_PROVIDER_KEY_QUICKNODE_PREFIX";
6
+ const prefix = process.env[`${envVar}_${chainId}`] ?? process.env[envVar];
7
+ if (!prefix) {
8
+ throw new Error(`No API key prefix supplied for QuickNode (${envVar})`);
9
+ }
10
+
11
+ /* Ethereum and Optimism are special snowflakes */
12
+ if (chainId === CHAIN_IDs.MAINNET) {
13
+ return `${transport}://${prefix}.quicknode.pro/${apiKey}`;
14
+ }
15
+
16
+ if (chainId === CHAIN_IDs.OPTIMISM) {
17
+ return `${transport}://${prefix}.optimism.quicknode.pro/${apiKey}`;
18
+ }
19
+
20
+ const chain = PUBLIC_NETWORKS[chainId]?.name.toLowerCase().replace(" ", "-");
21
+ if (!chain) {
22
+ throw new Error(`No known QuickNode provider for chainId ${chainId}`);
23
+ }
24
+
25
+ return `${transport}://${prefix}.${chain}.quicknode.pro/${apiKey}`;
26
+ }
@@ -7,6 +7,7 @@ import { RPCProvider, RPCTransport } from "./types";
7
7
  import * as alchemy from "./alchemy";
8
8
  import * as infura from "./infura";
9
9
  import * as drpc from "./drpc";
10
+ import * as quicknode from "./quicknode";
10
11
 
11
12
  /**
12
13
  * Infura DIN is identified separately to allow it to be configured explicitly.
@@ -16,6 +17,7 @@ const PROVIDERS = {
16
17
  INFURA: infura.getURL,
17
18
  INFURA_DIN: infura.getURL,
18
19
  DRPC: drpc.getURL,
20
+ QUICKNODE: quicknode.getURL,
19
21
  };
20
22
 
21
23
  /**
@@ -24,7 +26,7 @@ const PROVIDERS = {
24
26
  * @returns True if the provider string is a supported provider.
25
27
  */
26
28
  export function isSupportedProvider(provider: string): provider is RPCProvider {
27
- return ["ALCHEMY", "INFURA", "INFURA_DIN", "DRPC"].includes(provider);
29
+ return Object.keys(PROVIDERS).includes(provider);
28
30
  }
29
31
 
30
32
  /**