@xswap-link/sdk 0.10.8 → 0.10.10
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/.eslintrc.json +10 -1
- package/CHANGELOG.md +12 -0
- package/dist/index.global.js +331 -331
- package/dist/index.js +9 -9
- package/dist/index.mjs +9 -9
- package/package.json +6 -3
- package/src/components/Swap/SwapView/ConfirmationView/TxOverview/index.tsx +106 -9
- package/src/components/Swap/SwapView/SwapButton/index.tsx +11 -11
- package/src/constants/index.ts +18 -0
- package/src/context/SwapProvider.tsx +7 -3
- package/src/services/api.ts +1 -0
- package/src/services/svm/README.md +483 -0
- package/src/services/svm/bindings/accounts/AllowedOfframp.ts +73 -0
- package/src/services/svm/bindings/accounts/Config.ts +153 -0
- package/src/services/svm/bindings/accounts/DestChain.ts +113 -0
- package/src/services/svm/bindings/accounts/Nonce.ts +97 -0
- package/src/services/svm/bindings/accounts/index.ts +15 -0
- package/src/services/svm/bindings/accounts/tokenAdminRegistry.ts +128 -0
- package/src/services/svm/bindings/errors/anchor.ts +773 -0
- package/src/services/svm/bindings/errors/custom.ts +375 -0
- package/src/services/svm/bindings/errors/index.ts +62 -0
- package/src/services/svm/bindings/instructions/ccipSend.ts +112 -0
- package/src/services/svm/bindings/instructions/getFee.ts +73 -0
- package/src/services/svm/bindings/instructions/index.ts +4 -0
- package/src/services/svm/bindings/programId.ts +6 -0
- package/src/services/svm/bindings/types/BaseChain.ts +92 -0
- package/src/services/svm/bindings/types/BaseConfig.ts +184 -0
- package/src/services/svm/bindings/types/CodeVersion.ts +88 -0
- package/src/services/svm/bindings/types/CrossChainAmount.ts +53 -0
- package/src/services/svm/bindings/types/DestChainConfig.ts +76 -0
- package/src/services/svm/bindings/types/DestChainState.ts +76 -0
- package/src/services/svm/bindings/types/GetFeeResult.ts +72 -0
- package/src/services/svm/bindings/types/LockOrBurnInV1.ts +102 -0
- package/src/services/svm/bindings/types/LockOrBurnOutV1.ts +79 -0
- package/src/services/svm/bindings/types/RampMessageHeader.ts +94 -0
- package/src/services/svm/bindings/types/RateLimitConfig.ts +72 -0
- package/src/services/svm/bindings/types/RateLimitTokenBucket.ts +76 -0
- package/src/services/svm/bindings/types/ReleaseOrMintInV1.ts +156 -0
- package/src/services/svm/bindings/types/ReleaseOrMintOutV1.ts +53 -0
- package/src/services/svm/bindings/types/RemoteAddress.ts +61 -0
- package/src/services/svm/bindings/types/RemoteConfig.ts +86 -0
- package/src/services/svm/bindings/types/RestoreOnAction.ts +120 -0
- package/src/services/svm/bindings/types/SVM2AnyMessage.ts +128 -0
- package/src/services/svm/bindings/types/SVM2AnyRampMessage.ts +166 -0
- package/src/services/svm/bindings/types/SVM2AnyTokenTransfer.ts +118 -0
- package/src/services/svm/bindings/types/SVMTokenAmount.ts +64 -0
- package/src/services/svm/bindings/types/index.ts +78 -0
- package/src/services/svm/core/client/accounts.ts +97 -0
- package/src/services/svm/core/client/events.ts +95 -0
- package/src/services/svm/core/client/fee.ts +279 -0
- package/src/services/svm/core/client/index.ts +150 -0
- package/src/services/svm/core/client/send.ts +607 -0
- package/src/services/svm/core/client/utils.ts +131 -0
- package/src/services/svm/core/models.ts +236 -0
- package/src/services/svm/index.ts +32 -0
- package/src/services/svm/utils/conversion.ts +62 -0
- package/src/services/svm/utils/errors.ts +51 -0
- package/src/services/svm/utils/keypair.ts +19 -0
- package/src/services/svm/utils/logger.ts +171 -0
- package/src/services/svm/utils/pdas/common.ts +15 -0
- package/src/services/svm/utils/pdas/feeQuoter.ts +68 -0
- package/src/services/svm/utils/pdas/index.ts +12 -0
- package/src/services/svm/utils/pdas/receiver.ts +58 -0
- package/src/services/svm/utils/pdas/rmnRemote.ts +23 -0
- package/src/services/svm/utils/pdas/router.ts +328 -0
- package/src/services/svm/utils/pdas/tokenpool.ts +161 -0
- package/src/services/svm/utils/transaction.ts +132 -0
- package/src/utils/validation.ts +7 -3
- package/tsconfig.json +2 -1
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { PublicKey } from "@solana/web3.js" // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
2
|
+
import BN from "bn.js" // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
3
|
+
import * as types from "../types" // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
4
|
+
import * as borsh from "@coral-xyz/borsh"
|
|
5
|
+
|
|
6
|
+
export interface RemoteConfigFields {
|
|
7
|
+
poolAddresses: Array<types.RemoteAddressFields>
|
|
8
|
+
tokenAddress: types.RemoteAddressFields
|
|
9
|
+
decimals: number
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface RemoteConfigJSON {
|
|
13
|
+
poolAddresses: Array<types.RemoteAddressJSON>
|
|
14
|
+
tokenAddress: types.RemoteAddressJSON
|
|
15
|
+
decimals: number
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export class RemoteConfig {
|
|
19
|
+
readonly poolAddresses: Array<types.RemoteAddress>
|
|
20
|
+
readonly tokenAddress: types.RemoteAddress
|
|
21
|
+
readonly decimals: number
|
|
22
|
+
|
|
23
|
+
constructor(fields: RemoteConfigFields) {
|
|
24
|
+
this.poolAddresses = fields.poolAddresses.map(
|
|
25
|
+
(item) => new types.RemoteAddress({ ...item })
|
|
26
|
+
)
|
|
27
|
+
this.tokenAddress = new types.RemoteAddress({ ...fields.tokenAddress })
|
|
28
|
+
this.decimals = fields.decimals
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
static layout(property?: string) {
|
|
32
|
+
return borsh.struct(
|
|
33
|
+
[
|
|
34
|
+
borsh.vec(types.RemoteAddress.layout(), "poolAddresses"),
|
|
35
|
+
types.RemoteAddress.layout("tokenAddress"),
|
|
36
|
+
borsh.u8("decimals"),
|
|
37
|
+
],
|
|
38
|
+
property
|
|
39
|
+
)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
43
|
+
static fromDecoded(obj: any) {
|
|
44
|
+
return new RemoteConfig({
|
|
45
|
+
poolAddresses: obj.poolAddresses.map(
|
|
46
|
+
(
|
|
47
|
+
item: any /* eslint-disable-line @typescript-eslint/no-explicit-any */
|
|
48
|
+
) => types.RemoteAddress.fromDecoded(item)
|
|
49
|
+
),
|
|
50
|
+
tokenAddress: types.RemoteAddress.fromDecoded(obj.tokenAddress),
|
|
51
|
+
decimals: obj.decimals,
|
|
52
|
+
})
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
static toEncodable(fields: RemoteConfigFields) {
|
|
56
|
+
return {
|
|
57
|
+
poolAddresses: fields.poolAddresses.map((item) =>
|
|
58
|
+
types.RemoteAddress.toEncodable(item)
|
|
59
|
+
),
|
|
60
|
+
tokenAddress: types.RemoteAddress.toEncodable(fields.tokenAddress),
|
|
61
|
+
decimals: fields.decimals,
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
toJSON(): RemoteConfigJSON {
|
|
66
|
+
return {
|
|
67
|
+
poolAddresses: this.poolAddresses.map((item) => item.toJSON()),
|
|
68
|
+
tokenAddress: this.tokenAddress.toJSON(),
|
|
69
|
+
decimals: this.decimals,
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
static fromJSON(obj: RemoteConfigJSON): RemoteConfig {
|
|
74
|
+
return new RemoteConfig({
|
|
75
|
+
poolAddresses: obj.poolAddresses.map((item) =>
|
|
76
|
+
types.RemoteAddress.fromJSON(item)
|
|
77
|
+
),
|
|
78
|
+
tokenAddress: types.RemoteAddress.fromJSON(obj.tokenAddress),
|
|
79
|
+
decimals: obj.decimals,
|
|
80
|
+
})
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
toEncodable() {
|
|
84
|
+
return RemoteConfig.toEncodable(this)
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { PublicKey } from "@solana/web3.js" // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
2
|
+
import BN from "bn.js" // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
3
|
+
import * as types from "../types" // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
4
|
+
import * as borsh from "@coral-xyz/borsh"
|
|
5
|
+
|
|
6
|
+
export interface NoneJSON {
|
|
7
|
+
kind: "None"
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export class None {
|
|
11
|
+
static readonly discriminator = 0
|
|
12
|
+
static readonly kind = "None"
|
|
13
|
+
readonly discriminator = 0
|
|
14
|
+
readonly kind = "None"
|
|
15
|
+
|
|
16
|
+
toJSON(): NoneJSON {
|
|
17
|
+
return {
|
|
18
|
+
kind: "None",
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
toEncodable() {
|
|
23
|
+
return {
|
|
24
|
+
None: {},
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface UpgradeJSON {
|
|
30
|
+
kind: "Upgrade"
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export class Upgrade {
|
|
34
|
+
static readonly discriminator = 1
|
|
35
|
+
static readonly kind = "Upgrade"
|
|
36
|
+
readonly discriminator = 1
|
|
37
|
+
readonly kind = "Upgrade"
|
|
38
|
+
|
|
39
|
+
toJSON(): UpgradeJSON {
|
|
40
|
+
return {
|
|
41
|
+
kind: "Upgrade",
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
toEncodable() {
|
|
46
|
+
return {
|
|
47
|
+
Upgrade: {},
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export interface RollbackJSON {
|
|
53
|
+
kind: "Rollback"
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export class Rollback {
|
|
57
|
+
static readonly discriminator = 2
|
|
58
|
+
static readonly kind = "Rollback"
|
|
59
|
+
readonly discriminator = 2
|
|
60
|
+
readonly kind = "Rollback"
|
|
61
|
+
|
|
62
|
+
toJSON(): RollbackJSON {
|
|
63
|
+
return {
|
|
64
|
+
kind: "Rollback",
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
toEncodable() {
|
|
69
|
+
return {
|
|
70
|
+
Rollback: {},
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
76
|
+
export function fromDecoded(obj: any): types.RestoreOnActionKind {
|
|
77
|
+
if (typeof obj !== "object") {
|
|
78
|
+
throw new Error("Invalid enum object")
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if ("None" in obj) {
|
|
82
|
+
return new None()
|
|
83
|
+
}
|
|
84
|
+
if ("Upgrade" in obj) {
|
|
85
|
+
return new Upgrade()
|
|
86
|
+
}
|
|
87
|
+
if ("Rollback" in obj) {
|
|
88
|
+
return new Rollback()
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
throw new Error("Invalid enum object")
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export function fromJSON(
|
|
95
|
+
obj: types.RestoreOnActionJSON
|
|
96
|
+
): types.RestoreOnActionKind {
|
|
97
|
+
switch (obj.kind) {
|
|
98
|
+
case "None": {
|
|
99
|
+
return new None()
|
|
100
|
+
}
|
|
101
|
+
case "Upgrade": {
|
|
102
|
+
return new Upgrade()
|
|
103
|
+
}
|
|
104
|
+
case "Rollback": {
|
|
105
|
+
return new Rollback()
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export function layout(property?: string) {
|
|
111
|
+
const ret = borsh.rustEnum([
|
|
112
|
+
borsh.struct([], "None"),
|
|
113
|
+
borsh.struct([], "Upgrade"),
|
|
114
|
+
borsh.struct([], "Rollback"),
|
|
115
|
+
])
|
|
116
|
+
if (property !== undefined) {
|
|
117
|
+
return ret.replicate(property)
|
|
118
|
+
}
|
|
119
|
+
return ret
|
|
120
|
+
}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { PublicKey } from "@solana/web3.js" // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
2
|
+
import BN from "bn.js" // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
3
|
+
import * as types from "../types" // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
4
|
+
import * as borsh from "@coral-xyz/borsh"
|
|
5
|
+
|
|
6
|
+
export interface SVM2AnyMessageFields {
|
|
7
|
+
receiver: Uint8Array
|
|
8
|
+
data: Uint8Array
|
|
9
|
+
tokenAmounts: Array<types.SVMTokenAmountFields>
|
|
10
|
+
feeToken: PublicKey
|
|
11
|
+
extraArgs: Uint8Array
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface SVM2AnyMessageJSON {
|
|
15
|
+
receiver: Array<number>
|
|
16
|
+
data: Array<number>
|
|
17
|
+
tokenAmounts: Array<types.SVMTokenAmountJSON>
|
|
18
|
+
feeToken: string
|
|
19
|
+
extraArgs: Array<number>
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export class SVM2AnyMessage {
|
|
23
|
+
readonly receiver: Uint8Array
|
|
24
|
+
readonly data: Uint8Array
|
|
25
|
+
readonly tokenAmounts: Array<types.SVMTokenAmount>
|
|
26
|
+
readonly feeToken: PublicKey
|
|
27
|
+
readonly extraArgs: Uint8Array
|
|
28
|
+
|
|
29
|
+
constructor(fields: SVM2AnyMessageFields) {
|
|
30
|
+
this.receiver = fields.receiver
|
|
31
|
+
this.data = fields.data
|
|
32
|
+
this.tokenAmounts = fields.tokenAmounts.map(
|
|
33
|
+
(item) => new types.SVMTokenAmount({ ...item })
|
|
34
|
+
)
|
|
35
|
+
this.feeToken = fields.feeToken
|
|
36
|
+
this.extraArgs = fields.extraArgs
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
static layout(property?: string) {
|
|
40
|
+
return borsh.struct(
|
|
41
|
+
[
|
|
42
|
+
borsh.vecU8("receiver"),
|
|
43
|
+
borsh.vecU8("data"),
|
|
44
|
+
borsh.vec(types.SVMTokenAmount.layout(), "tokenAmounts"),
|
|
45
|
+
borsh.publicKey("feeToken"),
|
|
46
|
+
borsh.vecU8("extraArgs"),
|
|
47
|
+
],
|
|
48
|
+
property
|
|
49
|
+
)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
53
|
+
static fromDecoded(obj: any) {
|
|
54
|
+
return new SVM2AnyMessage({
|
|
55
|
+
receiver: new Uint8Array(
|
|
56
|
+
obj.receiver.buffer,
|
|
57
|
+
obj.receiver.byteOffset,
|
|
58
|
+
obj.receiver.length
|
|
59
|
+
),
|
|
60
|
+
data: new Uint8Array(
|
|
61
|
+
obj.data.buffer,
|
|
62
|
+
obj.data.byteOffset,
|
|
63
|
+
obj.data.length
|
|
64
|
+
),
|
|
65
|
+
tokenAmounts: obj.tokenAmounts.map(
|
|
66
|
+
(
|
|
67
|
+
item: any /* eslint-disable-line @typescript-eslint/no-explicit-any */
|
|
68
|
+
) => types.SVMTokenAmount.fromDecoded(item)
|
|
69
|
+
),
|
|
70
|
+
feeToken: obj.feeToken,
|
|
71
|
+
extraArgs: new Uint8Array(
|
|
72
|
+
obj.extraArgs.buffer,
|
|
73
|
+
obj.extraArgs.byteOffset,
|
|
74
|
+
obj.extraArgs.length
|
|
75
|
+
),
|
|
76
|
+
})
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
static toEncodable(fields: SVM2AnyMessageFields) {
|
|
80
|
+
return {
|
|
81
|
+
receiver: Buffer.from(
|
|
82
|
+
fields.receiver.buffer,
|
|
83
|
+
fields.receiver.byteOffset,
|
|
84
|
+
fields.receiver.length
|
|
85
|
+
),
|
|
86
|
+
data: Buffer.from(
|
|
87
|
+
fields.data.buffer,
|
|
88
|
+
fields.data.byteOffset,
|
|
89
|
+
fields.data.length
|
|
90
|
+
),
|
|
91
|
+
tokenAmounts: fields.tokenAmounts.map((item) =>
|
|
92
|
+
types.SVMTokenAmount.toEncodable(item)
|
|
93
|
+
),
|
|
94
|
+
feeToken: fields.feeToken,
|
|
95
|
+
extraArgs: Buffer.from(
|
|
96
|
+
fields.extraArgs.buffer,
|
|
97
|
+
fields.extraArgs.byteOffset,
|
|
98
|
+
fields.extraArgs.length
|
|
99
|
+
),
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
toJSON(): SVM2AnyMessageJSON {
|
|
104
|
+
return {
|
|
105
|
+
receiver: Array.from(this.receiver.values()),
|
|
106
|
+
data: Array.from(this.data.values()),
|
|
107
|
+
tokenAmounts: this.tokenAmounts.map((item) => item.toJSON()),
|
|
108
|
+
feeToken: this.feeToken.toString(),
|
|
109
|
+
extraArgs: Array.from(this.extraArgs.values()),
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
static fromJSON(obj: SVM2AnyMessageJSON): SVM2AnyMessage {
|
|
114
|
+
return new SVM2AnyMessage({
|
|
115
|
+
receiver: Uint8Array.from(obj.receiver),
|
|
116
|
+
data: Uint8Array.from(obj.data),
|
|
117
|
+
tokenAmounts: obj.tokenAmounts.map((item) =>
|
|
118
|
+
types.SVMTokenAmount.fromJSON(item)
|
|
119
|
+
),
|
|
120
|
+
feeToken: new PublicKey(obj.feeToken),
|
|
121
|
+
extraArgs: Uint8Array.from(obj.extraArgs),
|
|
122
|
+
})
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
toEncodable() {
|
|
126
|
+
return SVM2AnyMessage.toEncodable(this)
|
|
127
|
+
}
|
|
128
|
+
}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { PublicKey } from "@solana/web3.js" // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
2
|
+
import BN from "bn.js" // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
3
|
+
import * as types from "../types" // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
4
|
+
import * as borsh from "@coral-xyz/borsh"
|
|
5
|
+
|
|
6
|
+
export interface SVM2AnyRampMessageFields {
|
|
7
|
+
header: types.RampMessageHeaderFields
|
|
8
|
+
sender: PublicKey
|
|
9
|
+
data: Uint8Array
|
|
10
|
+
receiver: Uint8Array
|
|
11
|
+
extraArgs: Uint8Array
|
|
12
|
+
feeToken: PublicKey
|
|
13
|
+
tokenAmounts: Array<types.SVM2AnyTokenTransferFields>
|
|
14
|
+
feeTokenAmount: types.CrossChainAmountFields
|
|
15
|
+
feeValueJuels: types.CrossChainAmountFields
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface SVM2AnyRampMessageJSON {
|
|
19
|
+
header: types.RampMessageHeaderJSON
|
|
20
|
+
sender: string
|
|
21
|
+
data: Array<number>
|
|
22
|
+
receiver: Array<number>
|
|
23
|
+
extraArgs: Array<number>
|
|
24
|
+
feeToken: string
|
|
25
|
+
tokenAmounts: Array<types.SVM2AnyTokenTransferJSON>
|
|
26
|
+
feeTokenAmount: types.CrossChainAmountJSON
|
|
27
|
+
feeValueJuels: types.CrossChainAmountJSON
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export class SVM2AnyRampMessage {
|
|
31
|
+
readonly header: types.RampMessageHeader
|
|
32
|
+
readonly sender: PublicKey
|
|
33
|
+
readonly data: Uint8Array
|
|
34
|
+
readonly receiver: Uint8Array
|
|
35
|
+
readonly extraArgs: Uint8Array
|
|
36
|
+
readonly feeToken: PublicKey
|
|
37
|
+
readonly tokenAmounts: Array<types.SVM2AnyTokenTransfer>
|
|
38
|
+
readonly feeTokenAmount: types.CrossChainAmount
|
|
39
|
+
readonly feeValueJuels: types.CrossChainAmount
|
|
40
|
+
|
|
41
|
+
constructor(fields: SVM2AnyRampMessageFields) {
|
|
42
|
+
this.header = new types.RampMessageHeader({ ...fields.header })
|
|
43
|
+
this.sender = fields.sender
|
|
44
|
+
this.data = fields.data
|
|
45
|
+
this.receiver = fields.receiver
|
|
46
|
+
this.extraArgs = fields.extraArgs
|
|
47
|
+
this.feeToken = fields.feeToken
|
|
48
|
+
this.tokenAmounts = fields.tokenAmounts.map(
|
|
49
|
+
(item) => new types.SVM2AnyTokenTransfer({ ...item })
|
|
50
|
+
)
|
|
51
|
+
this.feeTokenAmount = new types.CrossChainAmount({
|
|
52
|
+
...fields.feeTokenAmount,
|
|
53
|
+
})
|
|
54
|
+
this.feeValueJuels = new types.CrossChainAmount({ ...fields.feeValueJuels })
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
static layout(property?: string) {
|
|
58
|
+
return borsh.struct(
|
|
59
|
+
[
|
|
60
|
+
types.RampMessageHeader.layout("header"),
|
|
61
|
+
borsh.publicKey("sender"),
|
|
62
|
+
borsh.vecU8("data"),
|
|
63
|
+
borsh.vecU8("receiver"),
|
|
64
|
+
borsh.vecU8("extraArgs"),
|
|
65
|
+
borsh.publicKey("feeToken"),
|
|
66
|
+
borsh.vec(types.SVM2AnyTokenTransfer.layout(), "tokenAmounts"),
|
|
67
|
+
types.CrossChainAmount.layout("feeTokenAmount"),
|
|
68
|
+
types.CrossChainAmount.layout("feeValueJuels"),
|
|
69
|
+
],
|
|
70
|
+
property
|
|
71
|
+
)
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
75
|
+
static fromDecoded(obj: any) {
|
|
76
|
+
return new SVM2AnyRampMessage({
|
|
77
|
+
header: types.RampMessageHeader.fromDecoded(obj.header),
|
|
78
|
+
sender: obj.sender,
|
|
79
|
+
data: new Uint8Array(
|
|
80
|
+
obj.data.buffer,
|
|
81
|
+
obj.data.byteOffset,
|
|
82
|
+
obj.data.length
|
|
83
|
+
),
|
|
84
|
+
receiver: new Uint8Array(
|
|
85
|
+
obj.receiver.buffer,
|
|
86
|
+
obj.receiver.byteOffset,
|
|
87
|
+
obj.receiver.length
|
|
88
|
+
),
|
|
89
|
+
extraArgs: new Uint8Array(
|
|
90
|
+
obj.extraArgs.buffer,
|
|
91
|
+
obj.extraArgs.byteOffset,
|
|
92
|
+
obj.extraArgs.length
|
|
93
|
+
),
|
|
94
|
+
feeToken: obj.feeToken,
|
|
95
|
+
tokenAmounts: obj.tokenAmounts.map(
|
|
96
|
+
(
|
|
97
|
+
item: any /* eslint-disable-line @typescript-eslint/no-explicit-any */
|
|
98
|
+
) => types.SVM2AnyTokenTransfer.fromDecoded(item)
|
|
99
|
+
),
|
|
100
|
+
feeTokenAmount: types.CrossChainAmount.fromDecoded(obj.feeTokenAmount),
|
|
101
|
+
feeValueJuels: types.CrossChainAmount.fromDecoded(obj.feeValueJuels),
|
|
102
|
+
})
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
static toEncodable(fields: SVM2AnyRampMessageFields) {
|
|
106
|
+
return {
|
|
107
|
+
header: types.RampMessageHeader.toEncodable(fields.header),
|
|
108
|
+
sender: fields.sender,
|
|
109
|
+
data: Buffer.from(
|
|
110
|
+
fields.data.buffer,
|
|
111
|
+
fields.data.byteOffset,
|
|
112
|
+
fields.data.length
|
|
113
|
+
),
|
|
114
|
+
receiver: Buffer.from(
|
|
115
|
+
fields.receiver.buffer,
|
|
116
|
+
fields.receiver.byteOffset,
|
|
117
|
+
fields.receiver.length
|
|
118
|
+
),
|
|
119
|
+
extraArgs: Buffer.from(
|
|
120
|
+
fields.extraArgs.buffer,
|
|
121
|
+
fields.extraArgs.byteOffset,
|
|
122
|
+
fields.extraArgs.length
|
|
123
|
+
),
|
|
124
|
+
feeToken: fields.feeToken,
|
|
125
|
+
tokenAmounts: fields.tokenAmounts.map((item) =>
|
|
126
|
+
types.SVM2AnyTokenTransfer.toEncodable(item)
|
|
127
|
+
),
|
|
128
|
+
feeTokenAmount: types.CrossChainAmount.toEncodable(fields.feeTokenAmount),
|
|
129
|
+
feeValueJuels: types.CrossChainAmount.toEncodable(fields.feeValueJuels),
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
toJSON(): SVM2AnyRampMessageJSON {
|
|
134
|
+
return {
|
|
135
|
+
header: this.header.toJSON(),
|
|
136
|
+
sender: this.sender.toString(),
|
|
137
|
+
data: Array.from(this.data.values()),
|
|
138
|
+
receiver: Array.from(this.receiver.values()),
|
|
139
|
+
extraArgs: Array.from(this.extraArgs.values()),
|
|
140
|
+
feeToken: this.feeToken.toString(),
|
|
141
|
+
tokenAmounts: this.tokenAmounts.map((item) => item.toJSON()),
|
|
142
|
+
feeTokenAmount: this.feeTokenAmount.toJSON(),
|
|
143
|
+
feeValueJuels: this.feeValueJuels.toJSON(),
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
static fromJSON(obj: SVM2AnyRampMessageJSON): SVM2AnyRampMessage {
|
|
148
|
+
return new SVM2AnyRampMessage({
|
|
149
|
+
header: types.RampMessageHeader.fromJSON(obj.header),
|
|
150
|
+
sender: new PublicKey(obj.sender),
|
|
151
|
+
data: Uint8Array.from(obj.data),
|
|
152
|
+
receiver: Uint8Array.from(obj.receiver),
|
|
153
|
+
extraArgs: Uint8Array.from(obj.extraArgs),
|
|
154
|
+
feeToken: new PublicKey(obj.feeToken),
|
|
155
|
+
tokenAmounts: obj.tokenAmounts.map((item) =>
|
|
156
|
+
types.SVM2AnyTokenTransfer.fromJSON(item)
|
|
157
|
+
),
|
|
158
|
+
feeTokenAmount: types.CrossChainAmount.fromJSON(obj.feeTokenAmount),
|
|
159
|
+
feeValueJuels: types.CrossChainAmount.fromJSON(obj.feeValueJuels),
|
|
160
|
+
})
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
toEncodable() {
|
|
164
|
+
return SVM2AnyRampMessage.toEncodable(this)
|
|
165
|
+
}
|
|
166
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { PublicKey } from "@solana/web3.js" // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
2
|
+
import BN from "bn.js" // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
3
|
+
import * as types from "../types" // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
4
|
+
import * as borsh from "@coral-xyz/borsh"
|
|
5
|
+
|
|
6
|
+
export interface SVM2AnyTokenTransferFields {
|
|
7
|
+
sourcePoolAddress: PublicKey
|
|
8
|
+
destTokenAddress: Uint8Array
|
|
9
|
+
extraData: Uint8Array
|
|
10
|
+
amount: types.CrossChainAmountFields
|
|
11
|
+
destExecData: Uint8Array
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface SVM2AnyTokenTransferJSON {
|
|
15
|
+
sourcePoolAddress: string
|
|
16
|
+
destTokenAddress: Array<number>
|
|
17
|
+
extraData: Array<number>
|
|
18
|
+
amount: types.CrossChainAmountJSON
|
|
19
|
+
destExecData: Array<number>
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export class SVM2AnyTokenTransfer {
|
|
23
|
+
readonly sourcePoolAddress: PublicKey
|
|
24
|
+
readonly destTokenAddress: Uint8Array
|
|
25
|
+
readonly extraData: Uint8Array
|
|
26
|
+
readonly amount: types.CrossChainAmount
|
|
27
|
+
readonly destExecData: Uint8Array
|
|
28
|
+
|
|
29
|
+
constructor(fields: SVM2AnyTokenTransferFields) {
|
|
30
|
+
this.sourcePoolAddress = fields.sourcePoolAddress
|
|
31
|
+
this.destTokenAddress = fields.destTokenAddress
|
|
32
|
+
this.extraData = fields.extraData
|
|
33
|
+
this.amount = new types.CrossChainAmount({ ...fields.amount })
|
|
34
|
+
this.destExecData = fields.destExecData
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
static layout(property?: string) {
|
|
38
|
+
return borsh.struct(
|
|
39
|
+
[
|
|
40
|
+
borsh.publicKey("sourcePoolAddress"),
|
|
41
|
+
borsh.vecU8("destTokenAddress"),
|
|
42
|
+
borsh.vecU8("extraData"),
|
|
43
|
+
types.CrossChainAmount.layout("amount"),
|
|
44
|
+
borsh.vecU8("destExecData"),
|
|
45
|
+
],
|
|
46
|
+
property
|
|
47
|
+
)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
51
|
+
static fromDecoded(obj: any) {
|
|
52
|
+
return new SVM2AnyTokenTransfer({
|
|
53
|
+
sourcePoolAddress: obj.sourcePoolAddress,
|
|
54
|
+
destTokenAddress: new Uint8Array(
|
|
55
|
+
obj.destTokenAddress.buffer,
|
|
56
|
+
obj.destTokenAddress.byteOffset,
|
|
57
|
+
obj.destTokenAddress.length
|
|
58
|
+
),
|
|
59
|
+
extraData: new Uint8Array(
|
|
60
|
+
obj.extraData.buffer,
|
|
61
|
+
obj.extraData.byteOffset,
|
|
62
|
+
obj.extraData.length
|
|
63
|
+
),
|
|
64
|
+
amount: types.CrossChainAmount.fromDecoded(obj.amount),
|
|
65
|
+
destExecData: new Uint8Array(
|
|
66
|
+
obj.destExecData.buffer,
|
|
67
|
+
obj.destExecData.byteOffset,
|
|
68
|
+
obj.destExecData.length
|
|
69
|
+
),
|
|
70
|
+
})
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
static toEncodable(fields: SVM2AnyTokenTransferFields) {
|
|
74
|
+
return {
|
|
75
|
+
sourcePoolAddress: fields.sourcePoolAddress,
|
|
76
|
+
destTokenAddress: Buffer.from(
|
|
77
|
+
fields.destTokenAddress.buffer,
|
|
78
|
+
fields.destTokenAddress.byteOffset,
|
|
79
|
+
fields.destTokenAddress.length
|
|
80
|
+
),
|
|
81
|
+
extraData: Buffer.from(
|
|
82
|
+
fields.extraData.buffer,
|
|
83
|
+
fields.extraData.byteOffset,
|
|
84
|
+
fields.extraData.length
|
|
85
|
+
),
|
|
86
|
+
amount: types.CrossChainAmount.toEncodable(fields.amount),
|
|
87
|
+
destExecData: Buffer.from(
|
|
88
|
+
fields.destExecData.buffer,
|
|
89
|
+
fields.destExecData.byteOffset,
|
|
90
|
+
fields.destExecData.length
|
|
91
|
+
),
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
toJSON(): SVM2AnyTokenTransferJSON {
|
|
96
|
+
return {
|
|
97
|
+
sourcePoolAddress: this.sourcePoolAddress.toString(),
|
|
98
|
+
destTokenAddress: Array.from(this.destTokenAddress.values()),
|
|
99
|
+
extraData: Array.from(this.extraData.values()),
|
|
100
|
+
amount: this.amount.toJSON(),
|
|
101
|
+
destExecData: Array.from(this.destExecData.values()),
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
static fromJSON(obj: SVM2AnyTokenTransferJSON): SVM2AnyTokenTransfer {
|
|
106
|
+
return new SVM2AnyTokenTransfer({
|
|
107
|
+
sourcePoolAddress: new PublicKey(obj.sourcePoolAddress),
|
|
108
|
+
destTokenAddress: Uint8Array.from(obj.destTokenAddress),
|
|
109
|
+
extraData: Uint8Array.from(obj.extraData),
|
|
110
|
+
amount: types.CrossChainAmount.fromJSON(obj.amount),
|
|
111
|
+
destExecData: Uint8Array.from(obj.destExecData),
|
|
112
|
+
})
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
toEncodable() {
|
|
116
|
+
return SVM2AnyTokenTransfer.toEncodable(this)
|
|
117
|
+
}
|
|
118
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { PublicKey } from "@solana/web3.js" // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
2
|
+
import BN from "bn.js" // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
3
|
+
import * as types from "../types" // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
4
|
+
import * as borsh from "@coral-xyz/borsh"
|
|
5
|
+
|
|
6
|
+
export interface SVMTokenAmountFields {
|
|
7
|
+
token: PublicKey
|
|
8
|
+
amount: BN
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface SVMTokenAmountJSON {
|
|
12
|
+
token: string
|
|
13
|
+
amount: string
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export class SVMTokenAmount {
|
|
17
|
+
readonly token: PublicKey
|
|
18
|
+
readonly amount: BN
|
|
19
|
+
|
|
20
|
+
constructor(fields: SVMTokenAmountFields) {
|
|
21
|
+
this.token = fields.token
|
|
22
|
+
this.amount = fields.amount
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
static layout(property?: string) {
|
|
26
|
+
return borsh.struct(
|
|
27
|
+
[borsh.publicKey("token"), borsh.u64("amount")],
|
|
28
|
+
property
|
|
29
|
+
)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
33
|
+
static fromDecoded(obj: any) {
|
|
34
|
+
return new SVMTokenAmount({
|
|
35
|
+
token: obj.token,
|
|
36
|
+
amount: obj.amount,
|
|
37
|
+
})
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
static toEncodable(fields: SVMTokenAmountFields) {
|
|
41
|
+
return {
|
|
42
|
+
token: fields.token,
|
|
43
|
+
amount: fields.amount,
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
toJSON(): SVMTokenAmountJSON {
|
|
48
|
+
return {
|
|
49
|
+
token: this.token.toString(),
|
|
50
|
+
amount: this.amount.toString(),
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
static fromJSON(obj: SVMTokenAmountJSON): SVMTokenAmount {
|
|
55
|
+
return new SVMTokenAmount({
|
|
56
|
+
token: new PublicKey(obj.token),
|
|
57
|
+
amount: new BN(obj.amount),
|
|
58
|
+
})
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
toEncodable() {
|
|
62
|
+
return SVMTokenAmount.toEncodable(this)
|
|
63
|
+
}
|
|
64
|
+
}
|