@ledgerhq/coin-solana 0.35.0-nightly.8 → 0.35.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 (199) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +28 -80
  3. package/lib/__fixtures__/solana-spl-epjfwdd5aufqssqem2qn1xzybapc8g4weggkzwytdt1v.json +50 -0
  4. package/lib/__tests__/fixtures/helpers.fixture.d.ts +138 -0
  5. package/lib/__tests__/fixtures/helpers.fixture.d.ts.map +1 -0
  6. package/lib/__tests__/fixtures/helpers.fixture.js +124 -0
  7. package/lib/__tests__/fixtures/helpers.fixture.js.map +1 -0
  8. package/lib/__tests__/scan-accounts.test.d.ts +2 -0
  9. package/lib/__tests__/scan-accounts.test.d.ts.map +1 -0
  10. package/lib/__tests__/scan-accounts.test.js +426 -0
  11. package/lib/__tests__/scan-accounts.test.js.map +1 -0
  12. package/lib/__tests__/unit/hw-signMessage.unit.test.d.ts +2 -0
  13. package/lib/__tests__/unit/hw-signMessage.unit.test.d.ts.map +1 -0
  14. package/lib/__tests__/unit/hw-signMessage.unit.test.js +91 -0
  15. package/lib/__tests__/unit/hw-signMessage.unit.test.js.map +1 -0
  16. package/lib/__tests__/unit/nftResolvers.unit.test.d.ts +2 -0
  17. package/lib/__tests__/unit/nftResolvers.unit.test.d.ts.map +1 -0
  18. package/lib/__tests__/unit/nftResolvers.unit.test.js +147 -0
  19. package/lib/__tests__/unit/nftResolvers.unit.test.js.map +1 -0
  20. package/lib/__tests__/unit/utils.unit.test.d.ts +2 -0
  21. package/lib/__tests__/unit/utils.unit.test.d.ts.map +1 -0
  22. package/lib/__tests__/unit/utils.unit.test.js +16 -0
  23. package/lib/__tests__/unit/utils.unit.test.js.map +1 -0
  24. package/lib/__tests__/unit/validator-app.unit.test.d.ts +2 -0
  25. package/lib/__tests__/unit/validator-app.unit.test.d.ts.map +1 -0
  26. package/lib/__tests__/unit/validator-app.unit.test.js +169 -0
  27. package/lib/__tests__/unit/validator-app.unit.test.js.map +1 -0
  28. package/lib/bridge.integration.test.d.ts +4 -0
  29. package/lib/bridge.integration.test.d.ts.map +1 -0
  30. package/lib/bridge.integration.test.js +870 -0
  31. package/lib/bridge.integration.test.js.map +1 -0
  32. package/lib/buildTransaction.test.d.ts +2 -0
  33. package/lib/buildTransaction.test.d.ts.map +1 -0
  34. package/lib/buildTransaction.test.js +164 -0
  35. package/lib/buildTransaction.test.js.map +1 -0
  36. package/lib/cryptoAssetsStore.test.d.ts +2 -0
  37. package/lib/cryptoAssetsStore.test.d.ts.map +1 -0
  38. package/lib/cryptoAssetsStore.test.js +15 -0
  39. package/lib/cryptoAssetsStore.test.js.map +1 -0
  40. package/lib/network/chain/account/parser.d.ts +1 -1
  41. package/lib/network/chain/account/stake.d.ts +23 -23
  42. package/lib/network/chain/account/token.d.ts +7 -7
  43. package/lib/network/chain/instruction/stake/types.d.ts +8 -8
  44. package/lib/network/chain/instruction/system/types.d.ts +10 -10
  45. package/lib/network/chain/web3.integration.test.d.ts +2 -0
  46. package/lib/network/chain/web3.integration.test.d.ts.map +1 -0
  47. package/lib/network/chain/web3.integration.test.js +70 -0
  48. package/lib/network/chain/web3.integration.test.js.map +1 -0
  49. package/lib/offchainMessage/format.unit.test.d.ts +2 -0
  50. package/lib/offchainMessage/format.unit.test.d.ts.map +1 -0
  51. package/lib/offchainMessage/format.unit.test.js +124 -0
  52. package/lib/offchainMessage/format.unit.test.js.map +1 -0
  53. package/lib/preload.test.d.ts +2 -0
  54. package/lib/preload.test.d.ts.map +1 -0
  55. package/lib/preload.test.js +9 -0
  56. package/lib/preload.test.js.map +1 -0
  57. package/lib/prepareTransaction.d.ts.map +1 -1
  58. package/lib/prepareTransaction.js +0 -4
  59. package/lib/prepareTransaction.js.map +1 -1
  60. package/lib/prepareTransaction.test.d.ts +2 -0
  61. package/lib/prepareTransaction.test.d.ts.map +1 -0
  62. package/lib/prepareTransaction.test.js +139 -0
  63. package/lib/prepareTransaction.test.js.map +1 -0
  64. package/lib/signOperation.d.ts.map +1 -1
  65. package/lib/signOperation.js +0 -2
  66. package/lib/signOperation.js.map +1 -1
  67. package/lib/signOperation.test.d.ts +3 -0
  68. package/lib/signOperation.test.d.ts.map +1 -0
  69. package/lib/signOperation.test.js +139 -0
  70. package/lib/signOperation.test.js.map +1 -0
  71. package/lib/signer.d.ts +0 -1
  72. package/lib/signer.d.ts.map +1 -1
  73. package/lib/signer.js.map +1 -1
  74. package/lib/tests/preload.fixtures.d.ts +5 -0
  75. package/lib/tests/preload.fixtures.d.ts.map +1 -0
  76. package/lib/tests/preload.fixtures.js +28 -0
  77. package/lib/tests/preload.fixtures.js.map +1 -0
  78. package/lib/tests/preload.unit.test.d.ts +2 -0
  79. package/lib/tests/preload.unit.test.d.ts.map +1 -0
  80. package/lib/tests/preload.unit.test.js +175 -0
  81. package/lib/tests/preload.unit.test.js.map +1 -0
  82. package/lib/tests/stakes-bridge.unit.test.d.ts +2 -0
  83. package/lib/tests/stakes-bridge.unit.test.d.ts.map +1 -0
  84. package/lib/tests/stakes-bridge.unit.test.js +166 -0
  85. package/lib/tests/stakes-bridge.unit.test.js.map +1 -0
  86. package/lib/tests/test-onchain-data.fixture.d.ts +20 -0
  87. package/lib/tests/test-onchain-data.fixture.d.ts.map +1 -0
  88. package/lib/tests/test-onchain-data.fixture.js +34 -0
  89. package/lib/tests/test-onchain-data.fixture.js.map +1 -0
  90. package/lib/tests/tokens-bridge.unit.test.d.ts +2 -0
  91. package/lib/tests/tokens-bridge.unit.test.d.ts.map +1 -0
  92. package/lib/tests/tokens-bridge.unit.test.js +615 -0
  93. package/lib/tests/tokens-bridge.unit.test.js.map +1 -0
  94. package/lib/tx-fees.js +0 -2
  95. package/lib/tx-fees.js.map +1 -1
  96. package/lib/types.d.ts +1 -2
  97. package/lib/types.d.ts.map +1 -1
  98. package/lib-es/__fixtures__/solana-spl-epjfwdd5aufqssqem2qn1xzybapc8g4weggkzwytdt1v.json +50 -0
  99. package/lib-es/__tests__/fixtures/helpers.fixture.d.ts +138 -0
  100. package/lib-es/__tests__/fixtures/helpers.fixture.d.ts.map +1 -0
  101. package/lib-es/__tests__/fixtures/helpers.fixture.js +110 -0
  102. package/lib-es/__tests__/fixtures/helpers.fixture.js.map +1 -0
  103. package/lib-es/__tests__/scan-accounts.test.d.ts +2 -0
  104. package/lib-es/__tests__/scan-accounts.test.d.ts.map +1 -0
  105. package/lib-es/__tests__/scan-accounts.test.js +398 -0
  106. package/lib-es/__tests__/scan-accounts.test.js.map +1 -0
  107. package/lib-es/__tests__/unit/hw-signMessage.unit.test.d.ts +2 -0
  108. package/lib-es/__tests__/unit/hw-signMessage.unit.test.d.ts.map +1 -0
  109. package/lib-es/__tests__/unit/hw-signMessage.unit.test.js +86 -0
  110. package/lib-es/__tests__/unit/hw-signMessage.unit.test.js.map +1 -0
  111. package/lib-es/__tests__/unit/nftResolvers.unit.test.d.ts +2 -0
  112. package/lib-es/__tests__/unit/nftResolvers.unit.test.d.ts.map +1 -0
  113. package/lib-es/__tests__/unit/nftResolvers.unit.test.js +142 -0
  114. package/lib-es/__tests__/unit/nftResolvers.unit.test.js.map +1 -0
  115. package/lib-es/__tests__/unit/utils.unit.test.d.ts +2 -0
  116. package/lib-es/__tests__/unit/utils.unit.test.d.ts.map +1 -0
  117. package/lib-es/__tests__/unit/utils.unit.test.js +14 -0
  118. package/lib-es/__tests__/unit/utils.unit.test.js.map +1 -0
  119. package/lib-es/__tests__/unit/validator-app.unit.test.d.ts +2 -0
  120. package/lib-es/__tests__/unit/validator-app.unit.test.d.ts.map +1 -0
  121. package/lib-es/__tests__/unit/validator-app.unit.test.js +144 -0
  122. package/lib-es/__tests__/unit/validator-app.unit.test.js.map +1 -0
  123. package/lib-es/bridge.integration.test.d.ts +4 -0
  124. package/lib-es/bridge.integration.test.d.ts.map +1 -0
  125. package/lib-es/bridge.integration.test.js +864 -0
  126. package/lib-es/bridge.integration.test.js.map +1 -0
  127. package/lib-es/buildTransaction.test.d.ts +2 -0
  128. package/lib-es/buildTransaction.test.d.ts.map +1 -0
  129. package/lib-es/buildTransaction.test.js +162 -0
  130. package/lib-es/buildTransaction.test.js.map +1 -0
  131. package/lib-es/cryptoAssetsStore.test.d.ts +2 -0
  132. package/lib-es/cryptoAssetsStore.test.d.ts.map +1 -0
  133. package/lib-es/cryptoAssetsStore.test.js +13 -0
  134. package/lib-es/cryptoAssetsStore.test.js.map +1 -0
  135. package/lib-es/network/chain/account/parser.d.ts +1 -1
  136. package/lib-es/network/chain/account/stake.d.ts +23 -23
  137. package/lib-es/network/chain/account/token.d.ts +7 -7
  138. package/lib-es/network/chain/instruction/stake/types.d.ts +8 -8
  139. package/lib-es/network/chain/instruction/system/types.d.ts +10 -10
  140. package/lib-es/network/chain/web3.integration.test.d.ts +2 -0
  141. package/lib-es/network/chain/web3.integration.test.d.ts.map +1 -0
  142. package/lib-es/network/chain/web3.integration.test.js +68 -0
  143. package/lib-es/network/chain/web3.integration.test.js.map +1 -0
  144. package/lib-es/offchainMessage/format.unit.test.d.ts +2 -0
  145. package/lib-es/offchainMessage/format.unit.test.d.ts.map +1 -0
  146. package/lib-es/offchainMessage/format.unit.test.js +122 -0
  147. package/lib-es/offchainMessage/format.unit.test.js.map +1 -0
  148. package/lib-es/preload.test.d.ts +2 -0
  149. package/lib-es/preload.test.d.ts.map +1 -0
  150. package/lib-es/preload.test.js +7 -0
  151. package/lib-es/preload.test.js.map +1 -0
  152. package/lib-es/prepareTransaction.d.ts.map +1 -1
  153. package/lib-es/prepareTransaction.js +0 -4
  154. package/lib-es/prepareTransaction.js.map +1 -1
  155. package/lib-es/prepareTransaction.test.d.ts +2 -0
  156. package/lib-es/prepareTransaction.test.d.ts.map +1 -0
  157. package/lib-es/prepareTransaction.test.js +134 -0
  158. package/lib-es/prepareTransaction.test.js.map +1 -0
  159. package/lib-es/signOperation.d.ts.map +1 -1
  160. package/lib-es/signOperation.js +0 -2
  161. package/lib-es/signOperation.js.map +1 -1
  162. package/lib-es/signOperation.test.d.ts +3 -0
  163. package/lib-es/signOperation.test.d.ts.map +1 -0
  164. package/lib-es/signOperation.test.js +135 -0
  165. package/lib-es/signOperation.test.js.map +1 -0
  166. package/lib-es/signer.d.ts +0 -1
  167. package/lib-es/signer.d.ts.map +1 -1
  168. package/lib-es/signer.js.map +1 -1
  169. package/lib-es/tests/preload.fixtures.d.ts +5 -0
  170. package/lib-es/tests/preload.fixtures.d.ts.map +1 -0
  171. package/lib-es/tests/preload.fixtures.js +25 -0
  172. package/lib-es/tests/preload.fixtures.js.map +1 -0
  173. package/lib-es/tests/preload.unit.test.d.ts +2 -0
  174. package/lib-es/tests/preload.unit.test.d.ts.map +1 -0
  175. package/lib-es/tests/preload.unit.test.js +147 -0
  176. package/lib-es/tests/preload.unit.test.js.map +1 -0
  177. package/lib-es/tests/stakes-bridge.unit.test.d.ts +2 -0
  178. package/lib-es/tests/stakes-bridge.unit.test.d.ts.map +1 -0
  179. package/lib-es/tests/stakes-bridge.unit.test.js +161 -0
  180. package/lib-es/tests/stakes-bridge.unit.test.js.map +1 -0
  181. package/lib-es/tests/test-onchain-data.fixture.d.ts +20 -0
  182. package/lib-es/tests/test-onchain-data.fixture.d.ts.map +1 -0
  183. package/lib-es/tests/test-onchain-data.fixture.js +28 -0
  184. package/lib-es/tests/test-onchain-data.fixture.js.map +1 -0
  185. package/lib-es/tests/tokens-bridge.unit.test.d.ts +2 -0
  186. package/lib-es/tests/tokens-bridge.unit.test.d.ts.map +1 -0
  187. package/lib-es/tests/tokens-bridge.unit.test.js +610 -0
  188. package/lib-es/tests/tokens-bridge.unit.test.js.map +1 -0
  189. package/lib-es/tx-fees.js +0 -2
  190. package/lib-es/tx-fees.js.map +1 -1
  191. package/lib-es/types.d.ts +1 -2
  192. package/lib-es/types.d.ts.map +1 -1
  193. package/package.json +9 -9
  194. package/src/prepareTransaction.ts +0 -4
  195. package/src/signOperation.ts +0 -2
  196. package/src/signer.ts +0 -1
  197. package/src/tests/preload.fixtures.ts +1 -1
  198. package/src/tx-fees.ts +0 -2
  199. package/src/types.ts +1 -2
@@ -0,0 +1,610 @@
1
+ import BigNumber from "bignumber.js";
2
+ import cloneDeep from "lodash/cloneDeep";
3
+ import { SolanaRecipientMemoIsRequired, SolanaTokenAccountFrozen, SolanaTokenNonTransferable, } from "../errors";
4
+ import { encodeAccountIdWithTokenAccountAddress } from "../logic";
5
+ import { LAST_VALID_BLOCK_HEIGHT_MOCK, LATEST_BLOCKHASH_MOCK } from "../network";
6
+ import getTransactionStatus from "../getTransactionStatus";
7
+ import { prepareTransaction } from "../prepareTransaction";
8
+ import { encodeAccountId } from "@ledgerhq/coin-framework/lib/account/accountId";
9
+ import { PublicKey } from "@solana/web3.js";
10
+ import { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_2022_PROGRAM_ID, TOKEN_PROGRAM_ID, } from "@solana/spl-token";
11
+ import { calculateToken2022TransferFees } from "../helpers/token";
12
+ import { PARSED_PROGRAMS } from "../network/chain/program/constants";
13
+ import { getCryptoAssetsStore, setCryptoAssetsStoreGetter } from "../cryptoAssetsStore";
14
+ import usdcTokenData from "../__fixtures__/solana-spl-epjfwdd5aufqssqem2qn1xzybapc8g4weggkzwytdt1v.json";
15
+ const USDC_TOKEN = usdcTokenData;
16
+ // fake addresses
17
+ const testData = {
18
+ address1: "8DpKDisipx6f76cEmuGvCX9TrA3SjeR76HaTRePxHBDe",
19
+ address2: "6oK54jLodm3D5Qd7Zju5D4LPXhWX61hzog15pvc6UVrX",
20
+ address3: "DYS9SVj8nhK2V7NprSRqbWpiF8euSGWv4QTSX45HTbfX",
21
+ mintAddress: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
22
+ ataAddress1: PublicKey.findProgramAddressSync([
23
+ new PublicKey("8DpKDisipx6f76cEmuGvCX9TrA3SjeR76HaTRePxHBDe").toBuffer(),
24
+ TOKEN_PROGRAM_ID.toBuffer(),
25
+ new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v").toBuffer(),
26
+ ], ASSOCIATED_TOKEN_PROGRAM_ID)[0].toBase58(),
27
+ fees: 5000,
28
+ };
29
+ const mainAccId = encodeAccountId({
30
+ type: "js",
31
+ version: "2",
32
+ currencyId: "solana",
33
+ xpubOrAddress: testData.address1,
34
+ derivationMode: "solanaMain",
35
+ });
36
+ const wSolSubAccId = encodeAccountIdWithTokenAccountAddress(mainAccId, testData.ataAddress1);
37
+ setCryptoAssetsStoreGetter(() =>
38
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
39
+ ({
40
+ findTokenByAddressInCurrency: (address, _currencyId) => {
41
+ if (address === "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v") {
42
+ return USDC_TOKEN;
43
+ }
44
+ return undefined;
45
+ },
46
+ }));
47
+ const wSolToken = getCryptoAssetsStore().findTokenByAddressInCurrency(testData.mintAddress, "solana");
48
+ const baseAccount = {
49
+ balance: new BigNumber(10000),
50
+ spendableBalance: new BigNumber(10000),
51
+ };
52
+ const baseAPI = {
53
+ getLatestBlockhash: () => Promise.resolve({
54
+ blockhash: LATEST_BLOCKHASH_MOCK,
55
+ lastValidBlockHeight: LAST_VALID_BLOCK_HEIGHT_MOCK,
56
+ }),
57
+ getFeeForMessage: (_msg) => Promise.resolve(testData.fees),
58
+ getRecentPrioritizationFees: (_) => {
59
+ return Promise.resolve([
60
+ {
61
+ slot: 122422797,
62
+ prioritizationFee: 0,
63
+ },
64
+ {
65
+ slot: 122422797,
66
+ prioritizationFee: 0,
67
+ },
68
+ ]);
69
+ },
70
+ getSimulationComputeUnits: (_ixs, _payer) => Promise.resolve(1000),
71
+ getBalance: (_) => Promise.resolve(10),
72
+ findAssocTokenAccAddress: (owner, mint, program) => {
73
+ return Promise.resolve(PublicKey.findProgramAddressSync([
74
+ new PublicKey(owner).toBuffer(),
75
+ program === "spl-token" ? TOKEN_PROGRAM_ID.toBuffer() : TOKEN_2022_PROGRAM_ID.toBuffer(),
76
+ new PublicKey(mint).toBuffer(),
77
+ ], ASSOCIATED_TOKEN_PROGRAM_ID)[0].toBase58());
78
+ },
79
+ };
80
+ // Broken tests as the address used is not support anymore
81
+ // Returning other errors we don't expect
82
+ describe("Solana tokens bridge integration tests", () => {
83
+ const baseSolanaAccount = {
84
+ ...baseAccount,
85
+ freshAddress: testData.address1,
86
+ solanaResources: { stakes: [], unstakeReserve: BigNumber(0) },
87
+ };
88
+ const baseTxModel = {
89
+ kind: "token.transfer",
90
+ uiState: {
91
+ subAccountId: wSolSubAccId,
92
+ },
93
+ };
94
+ const baseTx = {
95
+ model: baseTxModel,
96
+ amount: new BigNumber(10),
97
+ recipient: testData.address2,
98
+ family: "solana",
99
+ };
100
+ const baseAtaMock = {
101
+ parsed: {
102
+ info: {
103
+ isNative: false,
104
+ mint: wSolToken.contractAddress,
105
+ owner: testData.address1,
106
+ state: "initialized",
107
+ tokenAmount: {
108
+ amount: "10000000",
109
+ decimals: wSolToken.units[0].magnitude,
110
+ uiAmount: 10.0,
111
+ uiAmountString: "10",
112
+ },
113
+ },
114
+ type: "account",
115
+ },
116
+ program: PARSED_PROGRAMS.SPL_TOKEN,
117
+ space: 165,
118
+ };
119
+ const frozenAtaMock = {
120
+ ...baseAtaMock,
121
+ parsed: {
122
+ ...baseAtaMock.parsed,
123
+ info: {
124
+ ...baseAtaMock.parsed.info,
125
+ state: "frozen",
126
+ },
127
+ },
128
+ };
129
+ const mockedTokenAcc = {
130
+ type: "TokenAccount",
131
+ id: wSolSubAccId,
132
+ parentId: mainAccId,
133
+ token: wSolToken,
134
+ balance: new BigNumber(100),
135
+ operations: [],
136
+ pendingOperations: [],
137
+ spendableBalance: new BigNumber(100),
138
+ state: "initialized",
139
+ creationDate: new Date(),
140
+ operationsCount: 0,
141
+ balanceHistoryCache: {
142
+ HOUR: { balances: [], latestDate: null },
143
+ DAY: { balances: [], latestDate: null },
144
+ WEEK: { balances: [], latestDate: null },
145
+ },
146
+ swapHistory: [],
147
+ };
148
+ const baseAta2022Mock = {
149
+ parsed: {
150
+ info: {
151
+ isNative: false,
152
+ mint: wSolToken.contractAddress,
153
+ owner: testData.address1,
154
+ state: "initialized",
155
+ tokenAmount: {
156
+ amount: "10000000",
157
+ decimals: wSolToken.units[0].magnitude,
158
+ uiAmount: 10.0,
159
+ uiAmountString: "10",
160
+ },
161
+ },
162
+ type: "account",
163
+ },
164
+ program: PARSED_PROGRAMS.SPL_TOKEN_2022,
165
+ space: 165,
166
+ };
167
+ const baseTokenMintMock = {
168
+ data: {
169
+ parsed: {
170
+ info: {
171
+ decimals: 9,
172
+ freezeAuthority: null,
173
+ isInitialized: true,
174
+ mintAuthority: null,
175
+ supply: "0",
176
+ },
177
+ type: "mint",
178
+ },
179
+ program: PARSED_PROGRAMS.SPL_TOKEN,
180
+ space: 82,
181
+ },
182
+ executable: false,
183
+ lamports: 419787401967,
184
+ owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
185
+ rentEpoch: 304,
186
+ };
187
+ const baseToken2022MintMock = {
188
+ ...baseTokenMintMock,
189
+ data: {
190
+ ...baseTokenMintMock.data,
191
+ parsed: {
192
+ ...baseTokenMintMock.data.parsed,
193
+ info: {
194
+ ...baseTokenMintMock.data.parsed.info,
195
+ extensions: [],
196
+ },
197
+ },
198
+ program: PARSED_PROGRAMS.SPL_TOKEN_2022,
199
+ },
200
+ };
201
+ const mockedToken2022Acc = {
202
+ ...mockedTokenAcc,
203
+ };
204
+ const buildTransferFeeConfig = (bps, maxFee) => {
205
+ return {
206
+ extension: "transferFeeConfig",
207
+ state: {
208
+ newerTransferFee: {
209
+ epoch: 300,
210
+ maximumFee: maxFee,
211
+ transferFeeBasisPoints: bps,
212
+ },
213
+ olderTransferFee: {
214
+ epoch: 299,
215
+ maximumFee: maxFee,
216
+ transferFeeBasisPoints: bps,
217
+ },
218
+ transferFeeConfigAuthority: null,
219
+ withdrawWithheldAuthority: null,
220
+ withheldAmount: 0,
221
+ },
222
+ };
223
+ };
224
+ test("token.transfer :: status is success", async () => {
225
+ const api = {
226
+ ...baseAPI,
227
+ getAccountInfo: (address) => {
228
+ if (address === wSolToken.contractAddress) {
229
+ return Promise.resolve(baseTokenMintMock);
230
+ }
231
+ if (address === testData.address2) {
232
+ return Promise.resolve({ data: {} });
233
+ }
234
+ return Promise.resolve({ data: baseAtaMock });
235
+ },
236
+ };
237
+ const account = {
238
+ ...baseSolanaAccount,
239
+ subAccounts: [mockedTokenAcc],
240
+ };
241
+ const preparedTx = await prepareTransaction(account, baseTx, api);
242
+ const receivedTxStatus = await getTransactionStatus(account, preparedTx);
243
+ const expectedTxStatus = {
244
+ amount: new BigNumber(10),
245
+ estimatedFees: new BigNumber(testData.fees),
246
+ totalSpent: new BigNumber(10),
247
+ errors: {},
248
+ warnings: {},
249
+ };
250
+ expect(receivedTxStatus).toEqual(expectedTxStatus);
251
+ });
252
+ // Send flow
253
+ test("token.transfer :: status is success: transfer with subAccountId", async () => {
254
+ const api = {
255
+ ...baseAPI,
256
+ getAccountInfo: (address) => {
257
+ if (address === wSolToken.contractAddress) {
258
+ return Promise.resolve(baseTokenMintMock);
259
+ }
260
+ if (address === testData.address2) {
261
+ return Promise.resolve({ data: {} });
262
+ }
263
+ return Promise.resolve({ data: baseAtaMock });
264
+ },
265
+ };
266
+ const account = {
267
+ ...baseSolanaAccount,
268
+ subAccounts: [mockedTokenAcc],
269
+ };
270
+ const transferTxWithSubAccountId = {
271
+ model: {
272
+ kind: "transfer",
273
+ uiState: {},
274
+ },
275
+ amount: new BigNumber(10),
276
+ recipient: testData.address2,
277
+ family: "solana",
278
+ subAccountId: wSolSubAccId,
279
+ };
280
+ const preparedTx = await prepareTransaction(account, transferTxWithSubAccountId, api);
281
+ const receivedTxStatus = await getTransactionStatus(account, preparedTx);
282
+ const expectedTxStatus = {
283
+ amount: new BigNumber(10),
284
+ estimatedFees: new BigNumber(testData.fees),
285
+ totalSpent: new BigNumber(10),
286
+ errors: {},
287
+ warnings: {},
288
+ };
289
+ expect(preparedTx.model.commandDescriptor?.command.kind).toEqual("token.transfer");
290
+ expect(receivedTxStatus).toEqual(expectedTxStatus);
291
+ });
292
+ test("token.transfer :: status is error: sender ATA is frozen", async () => {
293
+ const api = {
294
+ ...baseAPI,
295
+ getAccountInfo: (address) => {
296
+ if (address === wSolToken.contractAddress) {
297
+ return Promise.resolve(baseTokenMintMock);
298
+ }
299
+ if (address === testData.address2) {
300
+ return Promise.resolve({ data: {} });
301
+ }
302
+ return Promise.resolve({ data: baseAtaMock });
303
+ },
304
+ };
305
+ const tokenAcc = {
306
+ ...mockedTokenAcc,
307
+ state: "frozen",
308
+ };
309
+ const account = {
310
+ ...baseSolanaAccount,
311
+ subAccounts: [tokenAcc],
312
+ };
313
+ const preparedTx = await prepareTransaction(account, baseTx, api);
314
+ const receivedTxStatus = await getTransactionStatus(account, preparedTx);
315
+ const expectedTxStatus = {
316
+ amount: new BigNumber(10),
317
+ estimatedFees: new BigNumber(testData.fees),
318
+ totalSpent: new BigNumber(10),
319
+ errors: {
320
+ amount: new SolanaTokenAccountFrozen(),
321
+ },
322
+ warnings: {},
323
+ };
324
+ expect(receivedTxStatus).toEqual(expectedTxStatus);
325
+ });
326
+ test("token.transfer :: status is error: recipient ATA is frozen", async () => {
327
+ const api = {
328
+ ...baseAPI,
329
+ getAccountInfo: (address) => {
330
+ if (address === wSolToken.contractAddress) {
331
+ return Promise.resolve(baseTokenMintMock);
332
+ }
333
+ if (address === testData.address2) {
334
+ return Promise.resolve({ data: {} });
335
+ }
336
+ return Promise.resolve({ data: frozenAtaMock });
337
+ },
338
+ };
339
+ const tokenAcc = {
340
+ ...mockedTokenAcc,
341
+ };
342
+ const account = {
343
+ ...baseSolanaAccount,
344
+ subAccounts: [tokenAcc],
345
+ };
346
+ const preparedTx = await prepareTransaction(account, baseTx, api);
347
+ const receivedTxStatus = await getTransactionStatus(account, preparedTx);
348
+ const expectedTxStatus = {
349
+ amount: new BigNumber(10),
350
+ estimatedFees: new BigNumber(testData.fees),
351
+ totalSpent: new BigNumber(10),
352
+ errors: {
353
+ recipient: new SolanaTokenAccountFrozen(),
354
+ },
355
+ warnings: {},
356
+ };
357
+ expect(receivedTxStatus).toEqual(expectedTxStatus);
358
+ });
359
+ test("token2022.transfer :: status is success", async () => {
360
+ const api = {
361
+ ...baseAPI,
362
+ getAccountInfo: (address) => {
363
+ if (address === wSolToken.contractAddress) {
364
+ return Promise.resolve(baseToken2022MintMock);
365
+ }
366
+ if (address === testData.address2) {
367
+ return Promise.resolve({ data: {} });
368
+ }
369
+ return Promise.resolve({ data: baseAta2022Mock });
370
+ },
371
+ };
372
+ const account = {
373
+ ...baseSolanaAccount,
374
+ subAccounts: [mockedToken2022Acc],
375
+ };
376
+ const preparedTx = await prepareTransaction(account, baseTx, api);
377
+ const receivedTxStatus = await getTransactionStatus(account, preparedTx);
378
+ const expectedTxStatus = {
379
+ amount: new BigNumber(10),
380
+ estimatedFees: new BigNumber(testData.fees),
381
+ totalSpent: new BigNumber(10),
382
+ errors: {},
383
+ warnings: {},
384
+ };
385
+ expect(receivedTxStatus).toEqual(expectedTxStatus);
386
+ });
387
+ test("token2022.transfer :: ATA with required memo :: status is error", async () => {
388
+ const ataWithRequiredMemoMock = cloneDeep(baseAta2022Mock);
389
+ ataWithRequiredMemoMock.parsed.info.extensions = [
390
+ {
391
+ extension: "memoTransfer",
392
+ state: { requireIncomingTransferMemos: true },
393
+ },
394
+ ];
395
+ const api = {
396
+ ...baseAPI,
397
+ getAccountInfo: (address) => {
398
+ if (address === wSolToken.contractAddress) {
399
+ return Promise.resolve(baseToken2022MintMock);
400
+ }
401
+ if (address === testData.address2) {
402
+ return Promise.resolve({ data: {} });
403
+ }
404
+ return Promise.resolve({ data: ataWithRequiredMemoMock });
405
+ },
406
+ getBalance: () => Promise.resolve(10),
407
+ };
408
+ const account = {
409
+ ...baseSolanaAccount,
410
+ subAccounts: [mockedToken2022Acc],
411
+ };
412
+ const preparedTx = await prepareTransaction(account, baseTx, api);
413
+ const receivedTxStatus = await getTransactionStatus(account, preparedTx);
414
+ const expectedErrors = {
415
+ memo: new SolanaRecipientMemoIsRequired(),
416
+ transaction: new SolanaRecipientMemoIsRequired(),
417
+ };
418
+ expect(receivedTxStatus.errors).toEqual(expectedErrors);
419
+ });
420
+ test("token2022.transfer :: correct transfer fee extension calculations", async () => {
421
+ const mintWithTransferFeeMock = cloneDeep(baseToken2022MintMock);
422
+ mintWithTransferFeeMock.data.program = PARSED_PROGRAMS.SPL_TOKEN_2022;
423
+ const magnitude = BigNumber(10).pow(baseTokenMintMock.data.parsed.info.decimals);
424
+ const maxFee = BigNumber(10).times(magnitude).toNumber();
425
+ const bps = 100;
426
+ const transferConfigExt = buildTransferFeeConfig(bps, maxFee);
427
+ mintWithTransferFeeMock.data.parsed.info.extensions = [transferConfigExt];
428
+ const api = {
429
+ ...baseAPI,
430
+ getAccountInfo: (address) => {
431
+ if (address === wSolToken.contractAddress) {
432
+ return Promise.resolve(mintWithTransferFeeMock);
433
+ }
434
+ if (address === testData.address2) {
435
+ return Promise.resolve({ data: {} });
436
+ }
437
+ return Promise.resolve({ data: baseAta2022Mock });
438
+ },
439
+ getBalance: () => Promise.resolve(BigNumber(100).times(magnitude).toNumber()),
440
+ getEpochInfo: () => Promise.resolve({ epoch: 300 }),
441
+ };
442
+ const account = {
443
+ ...baseSolanaAccount,
444
+ subAccounts: [
445
+ {
446
+ ...mockedToken2022Acc,
447
+ balance: BigNumber(100).times(magnitude),
448
+ spendableBalance: BigNumber(100).times(magnitude),
449
+ },
450
+ ],
451
+ };
452
+ const tx = {
453
+ ...baseTx,
454
+ amount: BigNumber(1).times(magnitude),
455
+ };
456
+ const preparedTx = await prepareTransaction(account, tx, api);
457
+ const receivedTxStatus = await getTransactionStatus(account, preparedTx);
458
+ const expectedExtensions = {
459
+ transferFee: calculateToken2022TransferFees({
460
+ transferAmount: tx.amount.toNumber(),
461
+ currentEpoch: 300,
462
+ transferFeeConfigState: transferConfigExt.state,
463
+ }),
464
+ };
465
+ const expectedTxStatus = {
466
+ amount: tx.amount,
467
+ estimatedFees: new BigNumber(testData.fees),
468
+ totalSpent: new BigNumber(expectedExtensions.transferFee.transferAmountIncludingFee),
469
+ errors: {},
470
+ warnings: {},
471
+ };
472
+ expect(receivedTxStatus).toEqual(expectedTxStatus);
473
+ expect((preparedTx.model.commandDescriptor?.command).extensions).toEqual(expectedExtensions);
474
+ });
475
+ test("token2022.transfer :: transfer fee with useAllAmount", async () => {
476
+ const mintWithTransferFeeMock = cloneDeep(baseToken2022MintMock);
477
+ mintWithTransferFeeMock.data.program = PARSED_PROGRAMS.SPL_TOKEN_2022;
478
+ const magnitude = BigNumber(10).pow(baseTokenMintMock.data.parsed.info.decimals);
479
+ const maxFee = BigNumber(10).times(magnitude).toNumber();
480
+ const bps = 100;
481
+ const transferConfigExt = buildTransferFeeConfig(bps, maxFee);
482
+ mintWithTransferFeeMock.data.parsed.info.extensions = [transferConfigExt];
483
+ const balance = BigNumber(100).times(magnitude);
484
+ const api = {
485
+ ...baseAPI,
486
+ getAccountInfo: (address) => {
487
+ if (address === wSolToken.contractAddress) {
488
+ return Promise.resolve(mintWithTransferFeeMock);
489
+ }
490
+ if (address === testData.address2) {
491
+ return Promise.resolve({ data: {} });
492
+ }
493
+ return Promise.resolve({ data: baseAta2022Mock });
494
+ },
495
+ getBalance: () => Promise.resolve(balance.toNumber()),
496
+ getEpochInfo: () => Promise.resolve({ epoch: 300 }),
497
+ };
498
+ const account = {
499
+ ...baseSolanaAccount,
500
+ subAccounts: [
501
+ {
502
+ ...mockedToken2022Acc,
503
+ balance: balance,
504
+ spendableBalance: balance,
505
+ extensions: {
506
+ transferFee: { feeBps: bps },
507
+ },
508
+ },
509
+ ],
510
+ };
511
+ const tx = {
512
+ ...baseTx,
513
+ useAllAmount: true,
514
+ amount: BigNumber(0),
515
+ };
516
+ const preparedTx = await prepareTransaction(account, tx, api);
517
+ const receivedTxStatus = await getTransactionStatus(account, preparedTx);
518
+ const maxSpendable = calculateToken2022TransferFees({
519
+ transferAmount: balance.toNumber(),
520
+ currentEpoch: 300,
521
+ transferFeeConfigState: transferConfigExt.state,
522
+ }).transferAmountExcludingFee;
523
+ const transferFeeConfig = calculateToken2022TransferFees({
524
+ transferAmount: maxSpendable,
525
+ currentEpoch: 300,
526
+ transferFeeConfigState: transferConfigExt.state,
527
+ });
528
+ const expectedTxStatus = {
529
+ amount: new BigNumber(maxSpendable),
530
+ estimatedFees: new BigNumber(testData.fees),
531
+ totalSpent: new BigNumber(transferFeeConfig.transferAmountIncludingFee),
532
+ errors: {},
533
+ warnings: {},
534
+ };
535
+ expect((preparedTx.model.commandDescriptor?.command).amount).toBe(maxSpendable);
536
+ expect((preparedTx.model.commandDescriptor?.command).extensions?.transferFee).toEqual(transferFeeConfig);
537
+ expect(receivedTxStatus).toEqual(expectedTxStatus);
538
+ });
539
+ test("token2022.transfer :: transfer fee is zero :: send amount success", async () => {
540
+ const mintWithTransferFeeMock = cloneDeep(baseToken2022MintMock);
541
+ mintWithTransferFeeMock.data.program = PARSED_PROGRAMS.SPL_TOKEN_2022;
542
+ const magnitude = BigNumber(10).pow(baseTokenMintMock.data.parsed.info.decimals);
543
+ const maxFee = BigNumber(10).times(magnitude).toNumber();
544
+ const bps = 0;
545
+ const transferConfigExt = buildTransferFeeConfig(bps, maxFee);
546
+ mintWithTransferFeeMock.data.parsed.info.extensions = [transferConfigExt];
547
+ const balance = BigNumber(100).times(magnitude);
548
+ const api = {
549
+ ...baseAPI,
550
+ getAccountInfo: (address) => {
551
+ if (address === wSolToken.contractAddress) {
552
+ return Promise.resolve(mintWithTransferFeeMock);
553
+ }
554
+ if (address === testData.address2) {
555
+ return Promise.resolve({ data: {} });
556
+ }
557
+ return Promise.resolve({ data: baseAta2022Mock });
558
+ },
559
+ getBalance: () => Promise.resolve(balance.toNumber()),
560
+ getEpochInfo: () => Promise.resolve({ epoch: 300 }),
561
+ };
562
+ const account = {
563
+ ...baseSolanaAccount,
564
+ subAccounts: [
565
+ {
566
+ ...mockedToken2022Acc,
567
+ balance: balance,
568
+ spendableBalance: balance,
569
+ extensions: {
570
+ transferFee: { feeBps: bps },
571
+ },
572
+ },
573
+ ],
574
+ };
575
+ const preparedTx = await prepareTransaction(account, baseTx, api);
576
+ const receivedTxStatus = await getTransactionStatus(account, preparedTx);
577
+ const expectedTxStatus = {
578
+ amount: new BigNumber(10),
579
+ estimatedFees: new BigNumber(testData.fees),
580
+ totalSpent: new BigNumber(10),
581
+ errors: {},
582
+ warnings: {},
583
+ };
584
+ expect(receivedTxStatus).toEqual(expectedTxStatus);
585
+ });
586
+ test("token2022.transfer :: NonTransferable token :: tx returns SolanaTokenNonTransferable error", async () => {
587
+ const mintWithNonTransferableExtensionMock = cloneDeep(baseToken2022MintMock);
588
+ mintWithNonTransferableExtensionMock.data.parsed.info.extensions = [
589
+ { extension: "nonTransferable" },
590
+ ];
591
+ const api = {
592
+ ...baseAPI,
593
+ getAccountInfo: (address) => {
594
+ if (address === wSolToken.contractAddress) {
595
+ return Promise.resolve(mintWithNonTransferableExtensionMock);
596
+ }
597
+ if (address === testData.address2) {
598
+ return Promise.resolve({ data: {} });
599
+ }
600
+ return Promise.resolve({ data: baseAta2022Mock });
601
+ },
602
+ };
603
+ const account = {
604
+ ...baseSolanaAccount,
605
+ subAccounts: [mockedToken2022Acc],
606
+ };
607
+ expect(prepareTransaction(account, baseTx, api)).rejects.toThrow(SolanaTokenNonTransferable);
608
+ });
609
+ });
610
+ //# sourceMappingURL=tokens-bridge.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens-bridge.unit.test.js","sourceRoot":"","sources":["../../src/tests/tokens-bridge.unit.test.ts"],"names":[],"mappings":"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"}
package/lib-es/tx-fees.js CHANGED
@@ -162,7 +162,6 @@ const createDummyTokenTransferTx = (address) => {
162
162
  walletAddress: randomAddresses[1],
163
163
  tokenAccAddress: randomAddresses[2],
164
164
  shouldCreateAsAssociatedTokenAccount: true,
165
- userInputType: "sol",
166
165
  },
167
166
  tokenProgram: PARSED_PROGRAMS.SPL_TOKEN,
168
167
  },
@@ -186,7 +185,6 @@ const createDummyTokenApproveTx = (address) => {
186
185
  walletAddress: randomAddresses[1],
187
186
  tokenAccAddress: randomAddresses[2],
188
187
  shouldCreateAsAssociatedTokenAccount: true,
189
- userInputType: "sol",
190
188
  },
191
189
  owner: address,
192
190
  amount: 0,