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