@across-protocol/sdk 4.3.31 → 4.3.32-alpha.1
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/svm/SpokeUtils.d.ts +2 -2
- package/dist/cjs/arch/svm/SpokeUtils.js +30 -24
- package/dist/cjs/arch/svm/SpokeUtils.js.map +1 -1
- package/dist/cjs/arch/svm/encoders.d.ts +19 -0
- package/dist/cjs/arch/svm/encoders.js +52 -0
- package/dist/cjs/arch/svm/encoders.js.map +1 -0
- 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/utils.d.ts +2 -0
- package/dist/cjs/arch/svm/utils.js +18 -1
- package/dist/cjs/arch/svm/utils.js.map +1 -1
- package/dist/esm/arch/svm/SpokeUtils.d.ts +2 -2
- package/dist/esm/arch/svm/SpokeUtils.js +37 -26
- package/dist/esm/arch/svm/SpokeUtils.js.map +1 -1
- package/dist/esm/arch/svm/encoders.d.ts +19 -0
- package/dist/esm/arch/svm/encoders.js +43 -0
- package/dist/esm/arch/svm/encoders.js.map +1 -0
- 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/utils.d.ts +8 -0
- package/dist/esm/arch/svm/utils.js +22 -0
- package/dist/esm/arch/svm/utils.js.map +1 -1
- package/dist/types/arch/svm/SpokeUtils.d.ts +2 -2
- package/dist/types/arch/svm/SpokeUtils.d.ts.map +1 -1
- package/dist/types/arch/svm/encoders.d.ts +20 -0
- package/dist/types/arch/svm/encoders.d.ts.map +1 -0
- 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/utils.d.ts +8 -0
- package/dist/types/arch/svm/utils.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/arch/svm/SpokeUtils.ts +42 -20
- package/src/arch/svm/encoders.ts +86 -0
- package/src/arch/svm/index.ts +1 -0
- package/src/arch/svm/utils.ts +23 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/arch/svm/utils.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/arch/svm/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -32,9 +32,11 @@ import {
|
|
|
32
32
|
signTransactionMessageWithSigners,
|
|
33
33
|
some,
|
|
34
34
|
type TransactionSigner,
|
|
35
|
+
type WritableAccount,
|
|
36
|
+
type ReadonlyAccount,
|
|
35
37
|
} from "@solana/kit";
|
|
36
38
|
import assert from "assert";
|
|
37
|
-
import { arrayify
|
|
39
|
+
import { arrayify } from "ethers/lib/utils";
|
|
38
40
|
import { Logger } from "winston";
|
|
39
41
|
import { CHAIN_IDs, TOKEN_SYMBOLS_MAP } from "../../constants";
|
|
40
42
|
import { DepositWithBlock, FillStatus, FillWithBlock, RelayData, RelayExecutionEventInfo } from "../../interfaces";
|
|
@@ -66,6 +68,9 @@ import {
|
|
|
66
68
|
toAddress,
|
|
67
69
|
unwrapEventData,
|
|
68
70
|
getRootBundlePda,
|
|
71
|
+
getAcrossPlusMessageDecoder,
|
|
72
|
+
getAccountMeta,
|
|
73
|
+
toSvmRelayData,
|
|
69
74
|
} from "./";
|
|
70
75
|
import { SvmCpiEventsClient } from "./eventsClient";
|
|
71
76
|
import { SVM_BLOCK_NOT_AVAILABLE, SVM_SLOT_SKIPPED, isSolanaError } from "./provider";
|
|
@@ -601,6 +606,8 @@ export async function getFillRelayTx(
|
|
|
601
606
|
getEventAuthority(program),
|
|
602
607
|
]);
|
|
603
608
|
|
|
609
|
+
const _message = relayData.message.startsWith("0x") ? relayData.message.slice(2) : relayData.message;
|
|
610
|
+
const message = new Uint8Array(Buffer.from(_message, "hex"));
|
|
604
611
|
const svmRelayData: SvmSpokeClient.FillRelayInput["relayData"] = {
|
|
605
612
|
depositor: toAddress(depositor),
|
|
606
613
|
recipient: toAddress(recipient),
|
|
@@ -613,9 +620,25 @@ export async function getFillRelayTx(
|
|
|
613
620
|
depositId: new Uint8Array(intToU8Array32(relayData.depositId.toNumber())),
|
|
614
621
|
fillDeadline: relayData.fillDeadline,
|
|
615
622
|
exclusivityDeadline: relayData.exclusivityDeadline,
|
|
616
|
-
message
|
|
623
|
+
message,
|
|
617
624
|
};
|
|
618
625
|
|
|
626
|
+
// Add remaining accounts if the relayData has a non-empty message.
|
|
627
|
+
// @dev ! since in the context of creating a `fillRelayTx`, `relayData` must be defined.
|
|
628
|
+
const remainingAccounts: (WritableAccount | ReadonlyAccount)[] = [];
|
|
629
|
+
if (message.length !== 0) {
|
|
630
|
+
const acrossPlusMessageDecoder = getAcrossPlusMessageDecoder();
|
|
631
|
+
const acrossPlusMessage = acrossPlusMessageDecoder.decode(message);
|
|
632
|
+
// The first `remainingAccount` _must_ be the handler address.
|
|
633
|
+
// https://github.com/across-protocol/contracts/blob/3310f8dc716407a5f97ef5fd2eae63df83251f2f/programs/svm-spoke/src/utils/message_utils.rs#L36.
|
|
634
|
+
remainingAccounts.push(getAccountMeta(acrossPlusMessage.handler, true));
|
|
635
|
+
remainingAccounts.push(
|
|
636
|
+
...acrossPlusMessage.accounts.map((account, idx) =>
|
|
637
|
+
getAccountMeta(account, idx < acrossPlusMessage.accounts.length - acrossPlusMessage.read_only_len)
|
|
638
|
+
)
|
|
639
|
+
);
|
|
640
|
+
}
|
|
641
|
+
|
|
619
642
|
const fillInput: SvmSpokeClient.FillRelayInput = {
|
|
620
643
|
signer: signer,
|
|
621
644
|
state,
|
|
@@ -636,7 +659,7 @@ export async function getFillRelayTx(
|
|
|
636
659
|
};
|
|
637
660
|
// Pass createRecipientAtaIfNeeded =true to the createFillInstruction function to create the recipient token account
|
|
638
661
|
// if it doesn't exist.
|
|
639
|
-
return createFillInstruction(signer, solanaClient, fillInput, mintInfo.data.decimals, true);
|
|
662
|
+
return createFillInstruction(signer, solanaClient, fillInput, mintInfo.data.decimals, true, remainingAccounts);
|
|
640
663
|
}
|
|
641
664
|
|
|
642
665
|
/**
|
|
@@ -653,7 +676,8 @@ export const createFillInstruction = async (
|
|
|
653
676
|
solanaClient: SVMProvider,
|
|
654
677
|
fillInput: SvmSpokeClient.FillRelayInput,
|
|
655
678
|
tokenDecimals: number,
|
|
656
|
-
createRecipientAtaIfNeeded: boolean = true
|
|
679
|
+
createRecipientAtaIfNeeded: boolean = true,
|
|
680
|
+
remainingAccounts: (WritableAccount | ReadonlyAccount)[] = []
|
|
657
681
|
) => {
|
|
658
682
|
const mintInfo = await getMintInfo(solanaClient, fillInput.mint);
|
|
659
683
|
const approveIx = getApproveCheckedInstruction(
|
|
@@ -682,6 +706,9 @@ export const createFillInstruction = async (
|
|
|
682
706
|
|
|
683
707
|
const createFillIx = SvmSpokeClient.getFillRelayInstruction(fillInput);
|
|
684
708
|
|
|
709
|
+
// Add remaining accounts.
|
|
710
|
+
createFillIx.accounts.push(...remainingAccounts);
|
|
711
|
+
|
|
685
712
|
return pipe(
|
|
686
713
|
await createDefaultTransaction(solanaClient, signer),
|
|
687
714
|
(tx) =>
|
|
@@ -882,28 +909,23 @@ export async function getAssociatedTokenAddress(
|
|
|
882
909
|
}
|
|
883
910
|
|
|
884
911
|
export function getRelayDataHash(relayData: RelayData, destinationChainId: number): string {
|
|
885
|
-
|
|
912
|
+
assert(relayData.message.startsWith("0x"), "Message must be a hex string");
|
|
886
913
|
const uint64Encoder = getU64Encoder();
|
|
887
|
-
const uint32Encoder = getU32Encoder();
|
|
888
914
|
|
|
889
|
-
|
|
890
|
-
const
|
|
915
|
+
const svmRelayData = toSvmRelayData(relayData);
|
|
916
|
+
const relayDataEncoder = SvmSpokeClient.getRelayDataEncoder();
|
|
917
|
+
const encodedRelayData = relayDataEncoder.encode(svmRelayData);
|
|
918
|
+
const encodedMessage = Buffer.from(relayData.message.slice(2), "hex");
|
|
891
919
|
|
|
920
|
+
// Reformat the encoded relay data the same way it is done in the SvmSpoke:
|
|
921
|
+
// https://github.com/across-protocol/contracts/blob/3310f8dc716407a5f97ef5fd2eae63df83251f2f/programs/svm-spoke/src/utils/merkle_proof_utils.rs#L5
|
|
922
|
+
const messageOffset = encodedRelayData.length - 4 - encodedMessage.length;
|
|
892
923
|
const contentToHash = Buffer.concat([
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
encodeAddress(relayData.exclusiveRelayer),
|
|
896
|
-
encodeAddress(relayData.inputToken),
|
|
897
|
-
encodeAddress(relayData.outputToken),
|
|
898
|
-
arrayify(hexZeroPad(hexlify(relayData.inputAmount), 32)),
|
|
899
|
-
Uint8Array.from(uint64Encoder.encode(BigInt(relayData.outputAmount.toString()))),
|
|
900
|
-
Uint8Array.from(uint64Encoder.encode(BigInt(relayData.originChainId.toString()))),
|
|
901
|
-
arrayify(hexZeroPad(hexlify(relayData.depositId), 32)),
|
|
902
|
-
Uint8Array.from(uint32Encoder.encode(relayData.fillDeadline)),
|
|
903
|
-
Uint8Array.from(uint32Encoder.encode(relayData.exclusivityDeadline)),
|
|
904
|
-
hashNonEmptyMessage(Buffer.from(arrayify(relayData.message))),
|
|
924
|
+
encodedRelayData.slice(0, messageOffset),
|
|
925
|
+
hashNonEmptyMessage(encodedMessage),
|
|
905
926
|
Uint8Array.from(uint64Encoder.encode(BigInt(destinationChainId))),
|
|
906
927
|
]);
|
|
928
|
+
|
|
907
929
|
return keccak256(contentToHash);
|
|
908
930
|
}
|
|
909
931
|
|
|
@@ -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: 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", 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", 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
|
+
}
|
package/src/arch/svm/index.ts
CHANGED
package/src/arch/svm/utils.ts
CHANGED
|
@@ -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.
|