@ledgerhq/coin-celo 1.6.0-nightly.8 → 1.6.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 (75) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +30 -87
  3. package/lib/__tests__/bridge/buildOptimisticOperation.test.d.ts +2 -0
  4. package/lib/__tests__/bridge/buildOptimisticOperation.test.d.ts.map +1 -0
  5. package/lib/__tests__/bridge/buildOptimisticOperation.test.js +23 -0
  6. package/lib/__tests__/bridge/buildOptimisticOperation.test.js.map +1 -0
  7. package/lib/__tests__/bridge/buildTransaction.test.d.ts +2 -0
  8. package/lib/__tests__/bridge/buildTransaction.test.d.ts.map +1 -0
  9. package/lib/__tests__/bridge/buildTransaction.test.js +412 -0
  10. package/lib/__tests__/bridge/buildTransaction.test.js.map +1 -0
  11. package/lib/__tests__/bridge/createTransaction.test.d.ts +2 -0
  12. package/lib/__tests__/bridge/createTransaction.test.d.ts.map +1 -0
  13. package/lib/__tests__/bridge/createTransaction.test.js +22 -0
  14. package/lib/__tests__/bridge/createTransaction.test.js.map +1 -0
  15. package/lib/__tests__/bridge/deviceTransactionConfig.test.d.ts +2 -0
  16. package/lib/__tests__/bridge/deviceTransactionConfig.test.d.ts.map +1 -0
  17. package/lib/__tests__/bridge/deviceTransactionConfig.test.js +21 -0
  18. package/lib/__tests__/bridge/deviceTransactionConfig.test.js.map +1 -0
  19. package/lib/__tests__/bridge/estimateMaxSpendable.test.d.ts +2 -0
  20. package/lib/__tests__/bridge/estimateMaxSpendable.test.d.ts.map +1 -0
  21. package/lib/__tests__/bridge/estimateMaxSpendable.test.js +108 -0
  22. package/lib/__tests__/bridge/estimateMaxSpendable.test.js.map +1 -0
  23. package/lib/__tests__/bridge/getFeesForTransaction.test.d.ts +2 -0
  24. package/lib/__tests__/bridge/getFeesForTransaction.test.d.ts.map +1 -0
  25. package/lib/__tests__/bridge/getFeesForTransaction.test.js +212 -0
  26. package/lib/__tests__/bridge/getFeesForTransaction.test.js.map +1 -0
  27. package/lib/__tests__/bridge/getTransactionStatus.test.d.ts +2 -0
  28. package/lib/__tests__/bridge/getTransactionStatus.test.d.ts.map +1 -0
  29. package/lib/__tests__/bridge/getTransactionStatus.test.js +214 -0
  30. package/lib/__tests__/bridge/getTransactionStatus.test.js.map +1 -0
  31. package/lib/__tests__/bridge/logic.test.d.ts +2 -0
  32. package/lib/__tests__/bridge/logic.test.d.ts.map +1 -0
  33. package/lib/__tests__/bridge/logic.test.js +490 -0
  34. package/lib/__tests__/bridge/logic.test.js.map +1 -0
  35. package/lib/__tests__/bridge/prepareTransaction.test.d.ts +2 -0
  36. package/lib/__tests__/bridge/prepareTransaction.test.d.ts.map +1 -0
  37. package/lib/__tests__/bridge/prepareTransaction.test.js +233 -0
  38. package/lib/__tests__/bridge/prepareTransaction.test.js.map +1 -0
  39. package/lib-es/__tests__/bridge/buildOptimisticOperation.test.d.ts +2 -0
  40. package/lib-es/__tests__/bridge/buildOptimisticOperation.test.d.ts.map +1 -0
  41. package/lib-es/__tests__/bridge/buildOptimisticOperation.test.js +18 -0
  42. package/lib-es/__tests__/bridge/buildOptimisticOperation.test.js.map +1 -0
  43. package/lib-es/__tests__/bridge/buildTransaction.test.d.ts +2 -0
  44. package/lib-es/__tests__/bridge/buildTransaction.test.d.ts.map +1 -0
  45. package/lib-es/__tests__/bridge/buildTransaction.test.js +407 -0
  46. package/lib-es/__tests__/bridge/buildTransaction.test.js.map +1 -0
  47. package/lib-es/__tests__/bridge/createTransaction.test.d.ts +2 -0
  48. package/lib-es/__tests__/bridge/createTransaction.test.d.ts.map +1 -0
  49. package/lib-es/__tests__/bridge/createTransaction.test.js +17 -0
  50. package/lib-es/__tests__/bridge/createTransaction.test.js.map +1 -0
  51. package/lib-es/__tests__/bridge/deviceTransactionConfig.test.d.ts +2 -0
  52. package/lib-es/__tests__/bridge/deviceTransactionConfig.test.d.ts.map +1 -0
  53. package/lib-es/__tests__/bridge/deviceTransactionConfig.test.js +16 -0
  54. package/lib-es/__tests__/bridge/deviceTransactionConfig.test.js.map +1 -0
  55. package/lib-es/__tests__/bridge/estimateMaxSpendable.test.d.ts +2 -0
  56. package/lib-es/__tests__/bridge/estimateMaxSpendable.test.d.ts.map +1 -0
  57. package/lib-es/__tests__/bridge/estimateMaxSpendable.test.js +103 -0
  58. package/lib-es/__tests__/bridge/estimateMaxSpendable.test.js.map +1 -0
  59. package/lib-es/__tests__/bridge/getFeesForTransaction.test.d.ts +2 -0
  60. package/lib-es/__tests__/bridge/getFeesForTransaction.test.d.ts.map +1 -0
  61. package/lib-es/__tests__/bridge/getFeesForTransaction.test.js +207 -0
  62. package/lib-es/__tests__/bridge/getFeesForTransaction.test.js.map +1 -0
  63. package/lib-es/__tests__/bridge/getTransactionStatus.test.d.ts +2 -0
  64. package/lib-es/__tests__/bridge/getTransactionStatus.test.d.ts.map +1 -0
  65. package/lib-es/__tests__/bridge/getTransactionStatus.test.js +209 -0
  66. package/lib-es/__tests__/bridge/getTransactionStatus.test.js.map +1 -0
  67. package/lib-es/__tests__/bridge/logic.test.d.ts +2 -0
  68. package/lib-es/__tests__/bridge/logic.test.d.ts.map +1 -0
  69. package/lib-es/__tests__/bridge/logic.test.js +485 -0
  70. package/lib-es/__tests__/bridge/logic.test.js.map +1 -0
  71. package/lib-es/__tests__/bridge/prepareTransaction.test.d.ts +2 -0
  72. package/lib-es/__tests__/bridge/prepareTransaction.test.d.ts.map +1 -0
  73. package/lib-es/__tests__/bridge/prepareTransaction.test.js +228 -0
  74. package/lib-es/__tests__/bridge/prepareTransaction.test.js.map +1 -0
  75. package/package.json +11 -11
@@ -0,0 +1,407 @@
1
+ import BigNumber from "bignumber.js";
2
+ import buildTransaction from "../../bridge/buildTransaction";
3
+ import { accountFixture, accountWithTokenAccountFixture, transactionFixture, } from "../../bridge/fixtures";
4
+ const chainIdMock = jest.fn();
5
+ const nonceMock = jest.fn();
6
+ const voteMock = jest.fn(() => ({
7
+ txo: {
8
+ encodeABI: jest.fn(() => ({ data: "vote_data" })),
9
+ estimateGas: jest.fn(async () => 1),
10
+ },
11
+ }));
12
+ const revokeMock = jest.fn();
13
+ const voteSignerToAccountMock = jest.fn();
14
+ jest.mock("../../network/sdk", () => {
15
+ return {
16
+ celoKit: jest.fn(() => ({
17
+ contracts: {
18
+ getLockedGold: jest.fn(async () => ({
19
+ address: "address",
20
+ lock: jest.fn(() => ({
21
+ txo: {
22
+ encodeABI: jest.fn(() => ({ data: "lock_data" })),
23
+ estimateGas: jest.fn(async () => 2),
24
+ },
25
+ })),
26
+ unlock: jest.fn(() => ({
27
+ txo: {
28
+ encodeABI: jest.fn(() => ({ data: "unlock_data" })),
29
+ estimateGas: jest.fn(async () => 3),
30
+ },
31
+ })),
32
+ withdraw: jest.fn(() => ({
33
+ txo: {
34
+ encodeABI: jest.fn(() => ({ data: "withdraw_data" })),
35
+ estimateGas: jest.fn(async () => 3),
36
+ },
37
+ })),
38
+ vote: jest.fn(() => ({
39
+ txo: {
40
+ encodeABI: jest.fn(() => ({ data: "vote_data" })),
41
+ estimateGas: jest.fn(async () => 3),
42
+ },
43
+ })),
44
+ })),
45
+ getElection: jest.fn(async () => ({
46
+ vote: voteMock,
47
+ revoke: revokeMock,
48
+ activate: jest.fn(() => ({
49
+ find: jest.fn(() => ({
50
+ txo: {
51
+ encodeABI: jest.fn(() => ({ data: "vote_data" })),
52
+ estimateGas: jest.fn(async () => 3),
53
+ },
54
+ })),
55
+ })),
56
+ address: "vote_address",
57
+ })),
58
+ getAccounts: jest.fn(async () => ({
59
+ voteSignerToAccount: voteSignerToAccountMock,
60
+ createAccount: jest.fn(() => ({
61
+ txo: {
62
+ encodeABI: jest.fn(() => ({ data: "register_data" })),
63
+ estimateGas: jest.fn(async () => 3),
64
+ },
65
+ })),
66
+ address: "register_address",
67
+ })),
68
+ getStableToken: jest.fn(async () => ({
69
+ address: "stable_token_address",
70
+ transfer: jest.fn(() => ({
71
+ txo: {
72
+ encodeABI: jest.fn(() => ({ data: "send_token_data" })),
73
+ },
74
+ })),
75
+ })),
76
+ getErc20: jest.fn(async () => ({
77
+ address: "erc20_token_address",
78
+ transfer: jest.fn(() => ({
79
+ txo: {
80
+ encodeABI: jest.fn(() => ({ data: "send_token_data" })),
81
+ },
82
+ })),
83
+ })),
84
+ },
85
+ connection: {
86
+ chainId: chainIdMock,
87
+ nonce: nonceMock,
88
+ estimateGasWithInflationFactor: jest.fn().mockReturnValue(3),
89
+ web3: { eth: { getBlock: jest.fn().mockResolvedValue({ baseFeePerGas: 10 }) } },
90
+ getMaxPriorityFeePerGas: jest.fn().mockResolvedValue(1),
91
+ },
92
+ })),
93
+ };
94
+ });
95
+ describe("buildTransaction", () => {
96
+ it("should build a lock transaction", async () => {
97
+ const transaction = await buildTransaction({ ...accountFixture, spendableBalance: BigNumber(123) }, {
98
+ ...transactionFixture,
99
+ mode: "lock",
100
+ });
101
+ expect(transaction).toMatchObject({
102
+ from: accountFixture.freshAddress,
103
+ to: "address",
104
+ value: "10",
105
+ data: { data: "lock_data" },
106
+ gas: "12",
107
+ });
108
+ expect(chainIdMock).toHaveBeenCalledTimes(1);
109
+ expect(nonceMock).toHaveBeenCalledWith(accountFixture.freshAddress);
110
+ });
111
+ it("should build a lock transaction with useAllAmount", async () => {
112
+ const transaction = await buildTransaction({ ...accountFixture, spendableBalance: BigNumber(123) }, {
113
+ ...transactionFixture,
114
+ mode: "lock",
115
+ useAllAmount: true,
116
+ fees: BigNumber(2),
117
+ });
118
+ expect(transaction).toMatchObject({
119
+ from: accountFixture.freshAddress,
120
+ to: "address",
121
+ value: "121",
122
+ data: { data: "lock_data" },
123
+ gas: "12",
124
+ });
125
+ });
126
+ it("should build an unlock transaction", async () => {
127
+ const transaction = await buildTransaction({
128
+ ...accountFixture,
129
+ spendableBalance: BigNumber(123),
130
+ celoResources: {
131
+ registrationStatus: false,
132
+ lockedBalance: BigNumber(0),
133
+ nonvotingLockedBalance: BigNumber(40),
134
+ pendingWithdrawals: null,
135
+ votes: null,
136
+ electionAddress: null,
137
+ lockedGoldAddress: null,
138
+ maxNumGroupsVotedFor: BigNumber(0),
139
+ },
140
+ }, {
141
+ ...transactionFixture,
142
+ mode: "unlock",
143
+ });
144
+ expect(transaction).toMatchObject({
145
+ from: accountFixture.freshAddress,
146
+ to: "address",
147
+ data: { data: "unlock_data" },
148
+ gas: "12",
149
+ });
150
+ });
151
+ it("should build an unlock transaction with useAllAmount", async () => {
152
+ const transaction = await buildTransaction({
153
+ ...accountFixture,
154
+ spendableBalance: BigNumber(123),
155
+ celoResources: {
156
+ registrationStatus: false,
157
+ lockedBalance: BigNumber(0),
158
+ nonvotingLockedBalance: BigNumber(40),
159
+ pendingWithdrawals: null,
160
+ votes: null,
161
+ electionAddress: null,
162
+ lockedGoldAddress: null,
163
+ maxNumGroupsVotedFor: BigNumber(0),
164
+ },
165
+ }, {
166
+ ...transactionFixture,
167
+ useAllAmount: true,
168
+ mode: "unlock",
169
+ });
170
+ expect(transaction).toMatchObject({
171
+ from: accountFixture.freshAddress,
172
+ to: "address",
173
+ data: { data: "unlock_data" },
174
+ gas: "12",
175
+ });
176
+ });
177
+ it("should build a withdraw transaction", async () => {
178
+ const transaction = await buildTransaction({
179
+ ...accountFixture,
180
+ spendableBalance: BigNumber(123),
181
+ celoResources: {
182
+ registrationStatus: false,
183
+ lockedBalance: BigNumber(0),
184
+ nonvotingLockedBalance: BigNumber(40),
185
+ pendingWithdrawals: null,
186
+ votes: null,
187
+ electionAddress: null,
188
+ lockedGoldAddress: null,
189
+ maxNumGroupsVotedFor: BigNumber(0),
190
+ },
191
+ }, {
192
+ ...transactionFixture,
193
+ mode: "withdraw",
194
+ });
195
+ expect(transaction).toMatchObject({
196
+ from: accountFixture.freshAddress,
197
+ to: "address",
198
+ data: { data: "withdraw_data" },
199
+ gas: "12",
200
+ });
201
+ });
202
+ it("should build a vote transaction", async () => {
203
+ const transaction = await buildTransaction({
204
+ ...accountFixture,
205
+ spendableBalance: BigNumber(123),
206
+ celoResources: {
207
+ registrationStatus: false,
208
+ lockedBalance: BigNumber(0),
209
+ nonvotingLockedBalance: BigNumber(40),
210
+ pendingWithdrawals: null,
211
+ votes: null,
212
+ electionAddress: null,
213
+ lockedGoldAddress: null,
214
+ maxNumGroupsVotedFor: BigNumber(0),
215
+ },
216
+ }, {
217
+ ...transactionFixture,
218
+ mode: "vote",
219
+ });
220
+ expect(transaction).toMatchObject({
221
+ from: accountFixture.freshAddress,
222
+ to: "vote_address",
223
+ data: { data: "vote_data" },
224
+ gas: "12",
225
+ });
226
+ expect(voteMock).toHaveBeenCalledTimes(1);
227
+ expect(voteMock).toHaveBeenCalledWith(transactionFixture.recipient, new BigNumber(10));
228
+ });
229
+ it("should build a revoke transaction but fail without revokes", async () => {
230
+ revokeMock.mockClear();
231
+ revokeMock.mockReturnValue({
232
+ find: jest.fn(() => false),
233
+ });
234
+ expect(async () => await buildTransaction({
235
+ ...accountFixture,
236
+ spendableBalance: BigNumber(123),
237
+ celoResources: {
238
+ registrationStatus: false,
239
+ lockedBalance: BigNumber(0),
240
+ nonvotingLockedBalance: BigNumber(40),
241
+ pendingWithdrawals: null,
242
+ votes: null,
243
+ electionAddress: null,
244
+ lockedGoldAddress: null,
245
+ maxNumGroupsVotedFor: BigNumber(0),
246
+ },
247
+ }, {
248
+ ...transactionFixture,
249
+ mode: "revoke",
250
+ })).rejects.toThrow("No votes to revoke");
251
+ });
252
+ it("should build a revoke transaction", async () => {
253
+ revokeMock.mockClear();
254
+ voteSignerToAccountMock.mockReturnValue("signer_account");
255
+ revokeMock.mockReturnValue({
256
+ find: jest.fn(() => ({
257
+ txo: {
258
+ encodeABI: jest.fn(() => ({ data: "revoke_data" })),
259
+ estimateGas: jest.fn(async () => 2),
260
+ },
261
+ })),
262
+ });
263
+ const transaction = await buildTransaction({
264
+ ...accountFixture,
265
+ spendableBalance: BigNumber(123),
266
+ celoResources: {
267
+ registrationStatus: false,
268
+ lockedBalance: BigNumber(0),
269
+ nonvotingLockedBalance: BigNumber(40),
270
+ pendingWithdrawals: null,
271
+ votes: null,
272
+ electionAddress: null,
273
+ lockedGoldAddress: null,
274
+ maxNumGroupsVotedFor: BigNumber(0),
275
+ },
276
+ }, {
277
+ ...transactionFixture,
278
+ mode: "revoke",
279
+ });
280
+ expect(transaction).toMatchObject({
281
+ from: accountFixture.freshAddress,
282
+ to: "vote_address",
283
+ data: { data: "revoke_data" },
284
+ gas: "12",
285
+ });
286
+ expect(revokeMock).toHaveBeenCalledTimes(1);
287
+ expect(revokeMock).toHaveBeenCalledWith("signer_account", transactionFixture.recipient, new BigNumber(10));
288
+ expect(voteSignerToAccountMock).toHaveBeenCalledWith(accountFixture.freshAddress);
289
+ });
290
+ it("should build a revoke transaction with useAllAmount", async () => {
291
+ revokeMock.mockClear();
292
+ voteSignerToAccountMock.mockReturnValue("signer_account");
293
+ revokeMock.mockReturnValue({
294
+ find: jest.fn(() => ({
295
+ txo: {
296
+ encodeABI: jest.fn(() => ({ data: "revoke_data" })),
297
+ estimateGas: jest.fn(async () => 2),
298
+ },
299
+ })),
300
+ });
301
+ const transaction = await buildTransaction({
302
+ ...accountFixture,
303
+ spendableBalance: BigNumber(123),
304
+ celoResources: {
305
+ registrationStatus: false,
306
+ lockedBalance: BigNumber(0),
307
+ nonvotingLockedBalance: BigNumber(40),
308
+ pendingWithdrawals: null,
309
+ votes: null,
310
+ electionAddress: null,
311
+ lockedGoldAddress: null,
312
+ maxNumGroupsVotedFor: BigNumber(0),
313
+ },
314
+ }, {
315
+ ...transactionFixture,
316
+ useAllAmount: true,
317
+ mode: "revoke",
318
+ });
319
+ expect(transaction).toMatchObject({
320
+ from: accountFixture.freshAddress,
321
+ to: "vote_address",
322
+ data: { data: "revoke_data" },
323
+ gas: "12",
324
+ });
325
+ expect(revokeMock).toHaveBeenCalledTimes(1);
326
+ expect(revokeMock).toHaveBeenCalledWith("signer_account", transactionFixture.recipient, new BigNumber(10));
327
+ expect(voteSignerToAccountMock).toHaveBeenCalledWith(accountFixture.freshAddress);
328
+ });
329
+ it("should build an activate transaction", async () => {
330
+ const transaction = await buildTransaction({ ...accountFixture, spendableBalance: BigNumber(123) }, {
331
+ ...transactionFixture,
332
+ mode: "activate",
333
+ });
334
+ expect(transaction).toMatchObject({
335
+ from: accountFixture.freshAddress,
336
+ to: "vote_address",
337
+ data: { data: "vote_data" },
338
+ gas: "12",
339
+ });
340
+ });
341
+ it("should build a register transaction", async () => {
342
+ const transaction = await buildTransaction({ ...accountFixture, spendableBalance: BigNumber(123) }, {
343
+ ...transactionFixture,
344
+ mode: "register",
345
+ });
346
+ expect(transaction).toMatchObject({
347
+ from: accountFixture.freshAddress,
348
+ to: "register_address",
349
+ data: { data: "register_data" },
350
+ gas: "12",
351
+ });
352
+ });
353
+ it("should build a send transaction", async () => {
354
+ const transaction = await buildTransaction({ ...accountFixture, spendableBalance: BigNumber(123) }, {
355
+ ...transactionFixture,
356
+ mode: "send",
357
+ });
358
+ expect(transaction).toMatchObject({
359
+ from: accountFixture.freshAddress,
360
+ to: transactionFixture.recipient,
361
+ value: "10",
362
+ gas: "12",
363
+ });
364
+ });
365
+ it("should build a token transaction", async () => {
366
+ const transaction = await buildTransaction({
367
+ ...accountWithTokenAccountFixture,
368
+ spendableBalance: BigNumber(123),
369
+ }, {
370
+ ...transactionFixture,
371
+ subAccountId: accountWithTokenAccountFixture.subAccounts[0].id,
372
+ mode: "send",
373
+ });
374
+ expect(transaction).toMatchObject({
375
+ from: accountFixture.freshAddress,
376
+ to: "recipient",
377
+ value: "10",
378
+ gas: "12",
379
+ });
380
+ });
381
+ it("should build a stable token transaction", async () => {
382
+ const transaction = await buildTransaction({
383
+ ...accountWithTokenAccountFixture,
384
+ spendableBalance: BigNumber(123),
385
+ subAccounts: [
386
+ {
387
+ ...accountWithTokenAccountFixture.subAccounts[0],
388
+ token: {
389
+ ...accountWithTokenAccountFixture.subAccounts[0].token,
390
+ id: "cEUR",
391
+ },
392
+ },
393
+ ],
394
+ }, {
395
+ ...transactionFixture,
396
+ subAccountId: accountWithTokenAccountFixture.subAccounts[0].id,
397
+ mode: "send",
398
+ });
399
+ expect(transaction).toMatchObject({
400
+ from: accountFixture.freshAddress,
401
+ to: "recipient",
402
+ value: "10",
403
+ gas: "12",
404
+ });
405
+ });
406
+ });
407
+ //# sourceMappingURL=buildTransaction.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildTransaction.test.js","sourceRoot":"","sources":["../../../src/__tests__/bridge/buildTransaction.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=createTransaction.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createTransaction.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/bridge/createTransaction.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import BigNumber from "bignumber.js";
2
+ import createTransaction from "../../bridge/createTransaction";
3
+ import { accountFixture } from "../../bridge/fixtures";
4
+ describe("createTransaction", () => {
5
+ it("returns a dummy transaction", () => {
6
+ expect(createTransaction(accountFixture)).toMatchObject({
7
+ family: "celo",
8
+ amount: new BigNumber(0),
9
+ recipient: "",
10
+ useAllAmount: false,
11
+ fees: null,
12
+ mode: "send",
13
+ index: null,
14
+ });
15
+ });
16
+ });
17
+ //# sourceMappingURL=createTransaction.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createTransaction.test.js","sourceRoot":"","sources":["../../../src/__tests__/bridge/createTransaction.test.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,iBAAiB,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;YACtD,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC;YACxB,SAAS,EAAE,EAAE;YACb,YAAY,EAAE,KAAK;YACnB,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=deviceTransactionConfig.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deviceTransactionConfig.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/bridge/deviceTransactionConfig.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ import getDeviceTransactionConfig from "../../bridge/deviceTransactionConfig";
2
+ describe("deviceTransactionConfig", () => {
3
+ it("returns the expected config", () => {
4
+ expect(getDeviceTransactionConfig()).toEqual([
5
+ {
6
+ type: "amount",
7
+ label: "Amount",
8
+ },
9
+ {
10
+ type: "fees",
11
+ label: "Fees",
12
+ },
13
+ ]);
14
+ });
15
+ });
16
+ //# sourceMappingURL=deviceTransactionConfig.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deviceTransactionConfig.test.js","sourceRoot":"","sources":["../../../src/__tests__/bridge/deviceTransactionConfig.test.ts"],"names":[],"mappings":"AAAA,OAAO,0BAA0B,MAAM,sCAAsC,CAAC;AAE9E,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,0BAA0B,EAAE,CAAC,CAAC,OAAO,CAAC;YAC3C;gBACE,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,QAAQ;aAChB;YACD;gBACE,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,MAAM;aACd;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=estimateMaxSpendable.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"estimateMaxSpendable.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/bridge/estimateMaxSpendable.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,103 @@
1
+ import BigNumber from "bignumber.js";
2
+ import estimateMaxSpendable from "../../bridge/estimateMaxSpendable";
3
+ import { accountFixture, accountWithTokenAccountFixture, tokenTransactionFixture, transactionFixture, } from "../../bridge/fixtures";
4
+ jest.mock("../../bridge/getFeesForTransaction", async () => 12);
5
+ const voteMock = jest.fn(() => ({
6
+ txo: {
7
+ encodeABI: jest.fn(() => ({ data: "vote_data" })),
8
+ estimateGas: jest.fn(async () => 1),
9
+ },
10
+ }));
11
+ jest.mock("../../network/sdk", () => {
12
+ return {
13
+ celoKit: jest.fn(() => ({
14
+ contracts: {
15
+ getLockedGold: jest.fn(async () => ({
16
+ address: "address",
17
+ getAccountNonvotingLockedGold: jest.fn(async () => BigNumber(22)),
18
+ lock: jest.fn(() => ({
19
+ txo: {
20
+ encodeABI: jest.fn(() => ({ data: "lock_data" })),
21
+ estimateGas: jest.fn(async () => 2),
22
+ },
23
+ })),
24
+ unlock: jest.fn(() => ({
25
+ txo: {
26
+ encodeABI: jest.fn(() => ({ data: "unlock_data" })),
27
+ estimateGas: jest.fn(async () => 3),
28
+ },
29
+ })),
30
+ withdraw: jest.fn(() => ({
31
+ txo: {
32
+ encodeABI: jest.fn(() => ({ data: "withdraw_data" })),
33
+ estimateGas: jest.fn(async () => 3),
34
+ },
35
+ })),
36
+ vote: jest.fn(() => ({
37
+ txo: {
38
+ encodeABI: jest.fn(() => ({ data: "vote_data" })),
39
+ estimateGas: jest.fn(async () => 3),
40
+ },
41
+ })),
42
+ })),
43
+ getElection: jest.fn(async () => ({
44
+ vote: voteMock,
45
+ revoke: jest.fn(),
46
+ address: "vote_address",
47
+ })),
48
+ getAccounts: jest.fn(async () => ({
49
+ voteSignerToAccount: jest.fn(),
50
+ createAccount: jest.fn(() => ({
51
+ txo: {
52
+ encodeABI: jest.fn(() => ({ data: "register_data" })),
53
+ estimateGas: jest.fn(async () => 3),
54
+ },
55
+ })),
56
+ address: "register_address",
57
+ })),
58
+ getStableToken: jest.fn(async () => ({
59
+ address: "stable_token_address",
60
+ transfer: jest.fn(() => ({
61
+ txo: {
62
+ encodeABI: jest.fn(() => ({ data: "send_token_data" })),
63
+ },
64
+ })),
65
+ })),
66
+ getErc20: jest.fn(async () => ({
67
+ address: "erc20_token_address",
68
+ transfer: jest.fn(() => ({
69
+ txo: {
70
+ encodeABI: jest.fn(() => ({ data: "send_token_data" })),
71
+ },
72
+ })),
73
+ })),
74
+ },
75
+ connection: {
76
+ chainId: jest.fn(),
77
+ nonce: jest.fn(),
78
+ estimateGasWithInflationFactor: jest.fn().mockReturnValue(3),
79
+ },
80
+ })),
81
+ };
82
+ });
83
+ describe("estimateMaxSpendable", () => {
84
+ it("returns the maximum spendable for a celo account", async () => {
85
+ const maximumAmount = await estimateMaxSpendable({
86
+ account: { ...accountFixture, balance: BigNumber(100), spendableBalance: BigNumber(100) },
87
+ transaction: transactionFixture,
88
+ });
89
+ expect(maximumAmount).toEqual(BigNumber(100));
90
+ });
91
+ it("returns the maximum spendable for a celo account", async () => {
92
+ const maximumAmount = await estimateMaxSpendable({
93
+ account: {
94
+ ...accountWithTokenAccountFixture,
95
+ balance: BigNumber(100),
96
+ spendableBalance: BigNumber(100),
97
+ },
98
+ transaction: tokenTransactionFixture,
99
+ });
100
+ expect(maximumAmount).toEqual(BigNumber(212));
101
+ });
102
+ });
103
+ //# sourceMappingURL=estimateMaxSpendable.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"estimateMaxSpendable.test.js","sourceRoot":"","sources":["../../../src/__tests__/bridge/estimateMaxSpendable.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=getFeesForTransaction.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFeesForTransaction.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/bridge/getFeesForTransaction.test.ts"],"names":[],"mappings":""}