@xswap-link/sdk 0.10.7 → 0.10.9

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 (73) hide show
  1. package/.eslintrc.json +10 -1
  2. package/.github/workflows/publish.yml +10 -10
  3. package/CHANGELOG.md +12 -0
  4. package/dist/index.global.js +331 -331
  5. package/dist/index.js +9 -9
  6. package/dist/index.mjs +9 -9
  7. package/package.json +6 -3
  8. package/src/components/Swap/SwapView/ConfirmationView/TxOverview/index.tsx +106 -9
  9. package/src/components/Swap/SwapView/SwapButton/index.tsx +11 -11
  10. package/src/components/TxDataCard/TxDataCardUI/index.tsx +12 -18
  11. package/src/components/TxDataCard/index.tsx +6 -2
  12. package/src/constants/index.ts +19 -2
  13. package/src/context/SwapProvider.tsx +7 -3
  14. package/src/services/api.ts +1 -0
  15. package/src/services/solana/jupiter/extract-swap-data.ts +6 -7
  16. package/src/services/svm/README.md +483 -0
  17. package/src/services/svm/bindings/accounts/AllowedOfframp.ts +73 -0
  18. package/src/services/svm/bindings/accounts/Config.ts +153 -0
  19. package/src/services/svm/bindings/accounts/DestChain.ts +113 -0
  20. package/src/services/svm/bindings/accounts/Nonce.ts +97 -0
  21. package/src/services/svm/bindings/accounts/index.ts +15 -0
  22. package/src/services/svm/bindings/accounts/tokenAdminRegistry.ts +128 -0
  23. package/src/services/svm/bindings/errors/anchor.ts +773 -0
  24. package/src/services/svm/bindings/errors/custom.ts +375 -0
  25. package/src/services/svm/bindings/errors/index.ts +62 -0
  26. package/src/services/svm/bindings/instructions/ccipSend.ts +112 -0
  27. package/src/services/svm/bindings/instructions/getFee.ts +73 -0
  28. package/src/services/svm/bindings/instructions/index.ts +4 -0
  29. package/src/services/svm/bindings/programId.ts +6 -0
  30. package/src/services/svm/bindings/types/BaseChain.ts +92 -0
  31. package/src/services/svm/bindings/types/BaseConfig.ts +184 -0
  32. package/src/services/svm/bindings/types/CodeVersion.ts +88 -0
  33. package/src/services/svm/bindings/types/CrossChainAmount.ts +53 -0
  34. package/src/services/svm/bindings/types/DestChainConfig.ts +76 -0
  35. package/src/services/svm/bindings/types/DestChainState.ts +76 -0
  36. package/src/services/svm/bindings/types/GetFeeResult.ts +72 -0
  37. package/src/services/svm/bindings/types/LockOrBurnInV1.ts +102 -0
  38. package/src/services/svm/bindings/types/LockOrBurnOutV1.ts +79 -0
  39. package/src/services/svm/bindings/types/RampMessageHeader.ts +94 -0
  40. package/src/services/svm/bindings/types/RateLimitConfig.ts +72 -0
  41. package/src/services/svm/bindings/types/RateLimitTokenBucket.ts +76 -0
  42. package/src/services/svm/bindings/types/ReleaseOrMintInV1.ts +156 -0
  43. package/src/services/svm/bindings/types/ReleaseOrMintOutV1.ts +53 -0
  44. package/src/services/svm/bindings/types/RemoteAddress.ts +61 -0
  45. package/src/services/svm/bindings/types/RemoteConfig.ts +86 -0
  46. package/src/services/svm/bindings/types/RestoreOnAction.ts +120 -0
  47. package/src/services/svm/bindings/types/SVM2AnyMessage.ts +128 -0
  48. package/src/services/svm/bindings/types/SVM2AnyRampMessage.ts +166 -0
  49. package/src/services/svm/bindings/types/SVM2AnyTokenTransfer.ts +118 -0
  50. package/src/services/svm/bindings/types/SVMTokenAmount.ts +64 -0
  51. package/src/services/svm/bindings/types/index.ts +78 -0
  52. package/src/services/svm/core/client/accounts.ts +97 -0
  53. package/src/services/svm/core/client/events.ts +95 -0
  54. package/src/services/svm/core/client/fee.ts +279 -0
  55. package/src/services/svm/core/client/index.ts +150 -0
  56. package/src/services/svm/core/client/send.ts +607 -0
  57. package/src/services/svm/core/client/utils.ts +131 -0
  58. package/src/services/svm/core/models.ts +236 -0
  59. package/src/services/svm/index.ts +32 -0
  60. package/src/services/svm/utils/conversion.ts +62 -0
  61. package/src/services/svm/utils/errors.ts +51 -0
  62. package/src/services/svm/utils/keypair.ts +19 -0
  63. package/src/services/svm/utils/logger.ts +171 -0
  64. package/src/services/svm/utils/pdas/common.ts +15 -0
  65. package/src/services/svm/utils/pdas/feeQuoter.ts +68 -0
  66. package/src/services/svm/utils/pdas/index.ts +12 -0
  67. package/src/services/svm/utils/pdas/receiver.ts +58 -0
  68. package/src/services/svm/utils/pdas/rmnRemote.ts +23 -0
  69. package/src/services/svm/utils/pdas/router.ts +328 -0
  70. package/src/services/svm/utils/pdas/tokenpool.ts +161 -0
  71. package/src/services/svm/utils/transaction.ts +132 -0
  72. package/src/utils/validation.ts +7 -3
  73. 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
+ }