@ledgerhq/coin-tezos 6.7.0-nightly.7 → 6.7.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 (105) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +30 -55
  3. package/lib/api/index.integ.test.d.ts +2 -0
  4. package/lib/api/index.integ.test.d.ts.map +1 -0
  5. package/lib/api/index.integ.test.js +201 -0
  6. package/lib/api/index.integ.test.js.map +1 -0
  7. package/lib/api/index.test.d.ts +2 -0
  8. package/lib/api/index.test.d.ts.map +1 -0
  9. package/lib/api/index.test.js +203 -0
  10. package/lib/api/index.test.js.map +1 -0
  11. package/lib/logic/craftTransaction.integ.test.d.ts +2 -0
  12. package/lib/logic/craftTransaction.integ.test.d.ts.map +1 -0
  13. package/lib/logic/craftTransaction.integ.test.js +86 -0
  14. package/lib/logic/craftTransaction.integ.test.js.map +1 -0
  15. package/lib/logic/craftTransaction.test.d.ts +2 -0
  16. package/lib/logic/craftTransaction.test.d.ts.map +1 -0
  17. package/lib/logic/craftTransaction.test.js +153 -0
  18. package/lib/logic/craftTransaction.test.js.map +1 -0
  19. package/lib/logic/estimateFees.integ.test.d.ts +2 -0
  20. package/lib/logic/estimateFees.integ.test.d.ts.map +1 -0
  21. package/lib/logic/estimateFees.integ.test.js +71 -0
  22. package/lib/logic/estimateFees.integ.test.js.map +1 -0
  23. package/lib/logic/getBalance.test.d.ts +2 -0
  24. package/lib/logic/getBalance.test.d.ts.map +1 -0
  25. package/lib/logic/getBalance.test.js +23 -0
  26. package/lib/logic/getBalance.test.js.map +1 -0
  27. package/lib/logic/getStakes.test.d.ts +2 -0
  28. package/lib/logic/getStakes.test.d.ts.map +1 -0
  29. package/lib/logic/getStakes.test.js +133 -0
  30. package/lib/logic/getStakes.test.js.map +1 -0
  31. package/lib/logic/listOperations.js +1 -1
  32. package/lib/logic/listOperations.js.map +1 -1
  33. package/lib/logic/listOperations.test.d.ts +2 -0
  34. package/lib/logic/listOperations.test.d.ts.map +1 -0
  35. package/lib/logic/listOperations.test.js +196 -0
  36. package/lib/logic/listOperations.test.js.map +1 -0
  37. package/lib/logic/validateIntent.d.ts.map +1 -1
  38. package/lib/logic/validateIntent.js +6 -5
  39. package/lib/logic/validateIntent.js.map +1 -1
  40. package/lib/logic/validateIntent.test.d.ts +2 -0
  41. package/lib/logic/validateIntent.test.d.ts.map +1 -0
  42. package/lib/logic/validateIntent.test.js +279 -0
  43. package/lib/logic/validateIntent.test.js.map +1 -0
  44. package/lib/network/bakers.integration.test.d.ts +2 -0
  45. package/lib/network/bakers.integration.test.d.ts.map +1 -0
  46. package/lib/network/bakers.integration.test.js +57 -0
  47. package/lib/network/bakers.integration.test.js.map +1 -0
  48. package/lib/network/bakers.test.d.ts +2 -0
  49. package/lib/network/bakers.test.d.ts.map +1 -0
  50. package/lib/network/bakers.test.js +209 -0
  51. package/lib/network/bakers.test.js.map +1 -0
  52. package/lib-es/api/index.integ.test.d.ts +2 -0
  53. package/lib-es/api/index.integ.test.d.ts.map +1 -0
  54. package/lib-es/api/index.integ.test.js +199 -0
  55. package/lib-es/api/index.integ.test.js.map +1 -0
  56. package/lib-es/api/index.test.d.ts +2 -0
  57. package/lib-es/api/index.test.d.ts.map +1 -0
  58. package/lib-es/api/index.test.js +198 -0
  59. package/lib-es/api/index.test.js.map +1 -0
  60. package/lib-es/logic/craftTransaction.integ.test.d.ts +2 -0
  61. package/lib-es/logic/craftTransaction.integ.test.d.ts.map +1 -0
  62. package/lib-es/logic/craftTransaction.integ.test.js +81 -0
  63. package/lib-es/logic/craftTransaction.integ.test.js.map +1 -0
  64. package/lib-es/logic/craftTransaction.test.d.ts +2 -0
  65. package/lib-es/logic/craftTransaction.test.d.ts.map +1 -0
  66. package/lib-es/logic/craftTransaction.test.js +148 -0
  67. package/lib-es/logic/craftTransaction.test.js.map +1 -0
  68. package/lib-es/logic/estimateFees.integ.test.d.ts +2 -0
  69. package/lib-es/logic/estimateFees.integ.test.d.ts.map +1 -0
  70. package/lib-es/logic/estimateFees.integ.test.js +66 -0
  71. package/lib-es/logic/estimateFees.integ.test.js.map +1 -0
  72. package/lib-es/logic/getBalance.test.d.ts +2 -0
  73. package/lib-es/logic/getBalance.test.d.ts.map +1 -0
  74. package/lib-es/logic/getBalance.test.js +18 -0
  75. package/lib-es/logic/getBalance.test.js.map +1 -0
  76. package/lib-es/logic/getStakes.test.d.ts +2 -0
  77. package/lib-es/logic/getStakes.test.d.ts.map +1 -0
  78. package/lib-es/logic/getStakes.test.js +128 -0
  79. package/lib-es/logic/getStakes.test.js.map +1 -0
  80. package/lib-es/logic/listOperations.js +1 -1
  81. package/lib-es/logic/listOperations.js.map +1 -1
  82. package/lib-es/logic/listOperations.test.d.ts +2 -0
  83. package/lib-es/logic/listOperations.test.d.ts.map +1 -0
  84. package/lib-es/logic/listOperations.test.js +194 -0
  85. package/lib-es/logic/listOperations.test.js.map +1 -0
  86. package/lib-es/logic/validateIntent.d.ts.map +1 -1
  87. package/lib-es/logic/validateIntent.js +6 -5
  88. package/lib-es/logic/validateIntent.js.map +1 -1
  89. package/lib-es/logic/validateIntent.test.d.ts +2 -0
  90. package/lib-es/logic/validateIntent.test.d.ts.map +1 -0
  91. package/lib-es/logic/validateIntent.test.js +251 -0
  92. package/lib-es/logic/validateIntent.test.js.map +1 -0
  93. package/lib-es/network/bakers.integration.test.d.ts +2 -0
  94. package/lib-es/network/bakers.integration.test.d.ts.map +1 -0
  95. package/lib-es/network/bakers.integration.test.js +52 -0
  96. package/lib-es/network/bakers.integration.test.js.map +1 -0
  97. package/lib-es/network/bakers.test.d.ts +2 -0
  98. package/lib-es/network/bakers.test.d.ts.map +1 -0
  99. package/lib-es/network/bakers.test.js +204 -0
  100. package/lib-es/network/bakers.test.js.map +1 -0
  101. package/package.json +8 -8
  102. package/src/logic/listOperations.test.ts +5 -5
  103. package/src/logic/listOperations.ts +2 -1
  104. package/src/logic/validateIntent.test.ts +23 -0
  105. package/src/logic/validateIntent.ts +6 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bakers.integration.test.js","sourceRoot":"","sources":["../../src/network/bakers.integration.test.ts"],"names":[],"mappings":";;;;;AACA,0EAAwE;AAExE,8CAAsE;AACtE,mGAA4D;AAC5D,uDAAwD;AACxD,2CAA4C;AAE5C,SAAS,cAAc,CACrB,IAAY,EACZ,MAAc,EACd,OAAe,EACf,cAA8B;IAE9B,OAAO;QACL,EAAE,EAAE,cAAc,MAAM,IAAI,cAAc,EAAE;QAC5C,cAAc,EAAE,OAAO;QACvB,IAAI,EAAE,QAAQ,GAAG,IAAI;QACrB,cAAc;QACd,KAAK,EAAE,CAAC;QACR,YAAY,EAAE,OAAO;QACrB,gBAAgB,EAAE,EAAE;QACpB,WAAW,EAAE,CAAC;QACd,UAAU,EAAE,EAAE;QACd,iBAAiB,EAAE,EAAE;QACrB,UAAU,EAAE,OAAO;QACnB,YAAY,EAAE,EAAE;QAChB,OAAO,EAAE,GAAG;QACZ,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,EAAE;QACf,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE;KAC/C,CAAC;AACJ,CAAC;AAED,MAAM,2BAA2B,GAAG,cAAc,CAChD,sBAAsB,EACtB,oEAAoE,EACpE,sCAAsC,EACtC,QAAQ,CACT,CAAC;AAEF,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,SAAS,CAAC,GAAG,EAAE;QACb,gBAAU,CAAC,aAAa,CAAC,GAAoB,EAAE,CAAC,mBAA6B,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,MAAM,GAAG,MAAM,IAAA,mBAAU,EAAC,kCAAS,CAAC,CAAC;QAC3C,MAAM,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACtD,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,KAAK,MAAM,WAAW,IAAI,kCAAS,EAAE,CAAC;YACpC,IAAI,kBAAkB,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC7C,SAAS,EAAE,CAAC;YACd,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,SAAS,WAAW,qBAAqB,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QACD,MAAM,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,kDAAkD;IAClD,IAAI,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,OAAO,GAAG,IAAA,8BAAc,EAAC,2BAA2B,CAAC,CAAC;QAC5D,MAAM,UAAU,GAAG,MAAM,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC;QACxD,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=bakers.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bakers.test.d.ts","sourceRoot":"","sources":["../../src/network/bakers.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,209 @@
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 network_1 = __importDefault(require("@ledgerhq/live-network/network"));
7
+ const bakers_1 = require("./bakers");
8
+ const config_1 = __importDefault(require("../config"));
9
+ const config_2 = require("../test/config");
10
+ jest.mock("@ledgerhq/live-network/network");
11
+ const mockedNetwork = jest.mocked(network_1.default);
12
+ const data = [
13
+ {
14
+ address: "tz1Kf25fX1VdmYGSEzwFy1wNmkbSEZ2V83sY",
15
+ name: "Tezos Seoul",
16
+ status: "closed",
17
+ balance: 2.941247,
18
+ features: [],
19
+ delegation: {
20
+ enabled: true,
21
+ minBalance: 100,
22
+ fee: 0.07,
23
+ capacity: 0,
24
+ freeSpace: -815914.909184,
25
+ estimatedApy: 0,
26
+ features: [
27
+ {
28
+ title: "Distributed rewards",
29
+ content: "Baker doesn't pay network fee rewards",
30
+ },
31
+ ],
32
+ },
33
+ staking: {
34
+ enabled: false,
35
+ minBalance: 0,
36
+ fee: 0,
37
+ capacity: 0,
38
+ freeSpace: 0,
39
+ estimatedApy: 0.0967,
40
+ features: [],
41
+ },
42
+ },
43
+ {
44
+ address: "tz1gg5bjopPcr9agjamyu9BbXKLibNc2rbAq",
45
+ name: "hodl.farm",
46
+ status: "active",
47
+ balance: 43334.236051,
48
+ features: [
49
+ {
50
+ title: "Contribution",
51
+ content: {
52
+ project: "Tezos on Kubernetes",
53
+ link: "https://github.com/hodl-dot-farm/tezos-on-gke",
54
+ },
55
+ },
56
+ ],
57
+ delegation: {
58
+ enabled: false,
59
+ minBalance: 0,
60
+ fee: 1,
61
+ capacity: 363902.963184,
62
+ freeSpace: 162427.070878,
63
+ estimatedApy: 0,
64
+ features: [
65
+ {
66
+ title: "Distributed rewards",
67
+ content: "Baker doesn't pay network fee, denunciation and revelation rewards",
68
+ },
69
+ {
70
+ title: "Compensated loss",
71
+ content: "Baker compensates missed baking and attestation rewards",
72
+ },
73
+ ],
74
+ },
75
+ staking: {
76
+ enabled: true,
77
+ minBalance: 0,
78
+ fee: 0.075,
79
+ capacity: 363902.963184,
80
+ freeSpace: 293604.290457,
81
+ estimatedApy: 0.0894,
82
+ features: [],
83
+ },
84
+ },
85
+ {
86
+ address: "tz3LV9aGKHDnAZHCtC9SjNtTrKRu678FqSki",
87
+ name: "Ledger by Kiln",
88
+ status: "active",
89
+ balance: 801425.237986,
90
+ features: [],
91
+ delegation: {
92
+ enabled: true,
93
+ minBalance: 1,
94
+ fee: 0.12,
95
+ capacity: 7002345.443544,
96
+ freeSpace: 36021.368062,
97
+ estimatedApy: 0.0284,
98
+ features: [],
99
+ },
100
+ staking: {
101
+ enabled: true,
102
+ minBalance: 0,
103
+ fee: 0.2,
104
+ capacity: 7002345.443544,
105
+ freeSpace: 6837721.800765,
106
+ estimatedApy: 0.0774,
107
+ features: [],
108
+ },
109
+ },
110
+ {
111
+ address: "tz1KwafrdmM8RwxUMxdbbtWyZuKLWSPVxe9u",
112
+ name: "Tezberry Pie",
113
+ status: "active",
114
+ balance: 17798.149073,
115
+ features: [],
116
+ delegation: {
117
+ enabled: true,
118
+ minBalance: 10,
119
+ fee: 0.12,
120
+ capacity: 155364.334245,
121
+ freeSpace: 100030.802123,
122
+ estimatedApy: 0.0284,
123
+ features: [],
124
+ },
125
+ staking: {
126
+ enabled: true,
127
+ minBalance: 0,
128
+ fee: 0.12,
129
+ capacity: 155364.334245,
130
+ freeSpace: 100143.090362,
131
+ estimatedApy: 0.0851,
132
+ features: [],
133
+ },
134
+ },
135
+ {
136
+ address: "tz1WnfXMPaNTBmH7DBPwqCWs9cPDJdkGBTZ8",
137
+ name: "TezosHODL",
138
+ status: "active",
139
+ balance: 417336.25576,
140
+ features: [],
141
+ delegation: {
142
+ enabled: true,
143
+ minBalance: 10,
144
+ fee: 0.15,
145
+ capacity: 3733611.262254,
146
+ freeSpace: 2216838.749908,
147
+ estimatedApy: 0.0274,
148
+ features: [
149
+ {
150
+ title: "Distributed rewards",
151
+ content: "Baker doesn't pay denunciation rewards",
152
+ },
153
+ ],
154
+ },
155
+ staking: {
156
+ enabled: true,
157
+ minBalance: 0,
158
+ fee: 0.15,
159
+ capacity: 2074228.47903,
160
+ freeSpace: 1440050.488348,
161
+ estimatedApy: 0.0822,
162
+ features: [],
163
+ },
164
+ },
165
+ ];
166
+ describe("Tezos Baker", () => {
167
+ beforeAll(() => {
168
+ config_1.default.setCoinConfig(() => config_2.mockConfig);
169
+ });
170
+ afterEach(() => {
171
+ jest.clearAllMocks();
172
+ bakers_1.cache.reset();
173
+ });
174
+ describe("Get bakers from cache", () => {
175
+ beforeEach(() => {
176
+ const response = {
177
+ data,
178
+ status: 200,
179
+ headers: {},
180
+ statusText: "",
181
+ config: {
182
+ headers: {},
183
+ },
184
+ };
185
+ mockedNetwork.mockReturnValue(Promise.resolve(response));
186
+ });
187
+ it("Ledger Baker should be first in the list", async () => {
188
+ const bakers = await (0, bakers_1.cache)();
189
+ expect(bakers[0].name).toBe("Ledger by Kiln");
190
+ });
191
+ });
192
+ describe("asBaker", () => {
193
+ it("Should convert api baker to LL baker (capacity status full)", () => {
194
+ const testBaker = data.find(baker => baker.delegation.freeSpace < 0);
195
+ const baker = (0, bakers_1.asBaker)(testBaker);
196
+ expect(baker?.name).toBe(testBaker.name);
197
+ expect(baker?.nominalYield).toBe(`${Math.floor(10000 * testBaker.delegation.estimatedApy) / 100} %`);
198
+ expect(baker?.capacityStatus).toBe("full");
199
+ });
200
+ it("Should convert api baker to LL baker (capacity status normal)", () => {
201
+ const testBaker = data.find(baker => baker.delegation.freeSpace > 0);
202
+ const baker = (0, bakers_1.asBaker)(testBaker);
203
+ expect(baker?.name).toBe(testBaker.name);
204
+ expect(baker?.nominalYield).toBe(`${Math.floor(10000 * testBaker.delegation.estimatedApy) / 100} %`);
205
+ expect(baker?.capacityStatus).toBe("normal");
206
+ });
207
+ });
208
+ });
209
+ //# sourceMappingURL=bakers.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bakers.test.js","sourceRoot":"","sources":["../../src/network/bakers.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.integ.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.integ.test.d.ts","sourceRoot":"","sources":["../../src/api/index.integ.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,199 @@
1
+ import { localForger } from "@taquito/local-forging";
2
+ import { createApi } from ".";
3
+ /**
4
+ * https://teztnets.com/ghostnet-about
5
+ * https://api.tzkt.io/#section/Get-Started/Free-TzKT-API
6
+ */
7
+ describe("Tezos Api", () => {
8
+ let module;
9
+ const address = "tz1heMGVHQnx7ALDcDKqez8fan64Eyicw4DJ";
10
+ beforeAll(() => {
11
+ module = createApi({
12
+ baker: {
13
+ url: "https://baker.example.com",
14
+ },
15
+ explorer: {
16
+ url: "https://api.ghostnet.tzkt.io",
17
+ maxTxQuery: 100,
18
+ },
19
+ node: {
20
+ url: "https://rpc.ghostnet.teztnets.com",
21
+ },
22
+ fees: {
23
+ minGasLimit: 600,
24
+ minRevealGasLimit: 300,
25
+ minStorageLimit: 0,
26
+ minFees: 500,
27
+ minEstimatedFees: 500,
28
+ },
29
+ });
30
+ });
31
+ describe("estimateFees", () => {
32
+ it("returns a default value", async () => {
33
+ // Given
34
+ const amount = BigInt(100);
35
+ // When
36
+ const result = await module.estimateFees({
37
+ intentType: "transaction",
38
+ asset: { type: "native" },
39
+ type: "send",
40
+ sender: address,
41
+ recipient: "tz1heMGVHQnx7ALDcDKqez8fan64Eyicw4DJ",
42
+ amount,
43
+ });
44
+ // Then
45
+ expect(result.value).toBeGreaterThanOrEqual(BigInt(0));
46
+ expect(result.parameters).toBeDefined();
47
+ expect(result.parameters?.gasLimit).toBeGreaterThanOrEqual(BigInt(0));
48
+ expect(result.parameters?.storageLimit).toBeGreaterThanOrEqual(BigInt(0));
49
+ });
50
+ });
51
+ it.each([
52
+ [
53
+ "ed25519 / tz1",
54
+ "tz1heMGVHQnx7ALDcDKqez8fan64Eyicw4DJ",
55
+ "6D9733FB7E27C56F032FAD41E4C0C90D58D0D5F1A253B2430B702071B57E47C1",
56
+ ],
57
+ [
58
+ "secp256k1 / tz2",
59
+ "tz2DvEBHrtFkq9pTXqt6yavnf4sPe2jut2XH",
60
+ "032fede4de54cf92381832a053f0787125fdc0d065d231585eb34d5eae327c0222",
61
+ ],
62
+ [
63
+ "P256 / tz3",
64
+ "tz3DvEBHrtFkq9pTXqt6yavnf4sPe2jut2XH",
65
+ "0466839a78481025e3613f65fcd4b492a492bedd1a3cba77ae48eaa1803611d8e5f4e23c0d0f3586e2095f4f83d09c841e1c17586b2356d5d3a3ed3f45bb3a857e",
66
+ ],
67
+ ])("does not fail when providing a %s address with pub key", async (_, sender, pubKey) => {
68
+ // When
69
+ const result = await module.estimateFees({
70
+ intentType: "transaction",
71
+ asset: { type: "native" },
72
+ type: "send",
73
+ sender: "tz3DvEBHrtFkq9pTXqt6yavnf4sPe2jut2XH",
74
+ senderPublicKey: pubKey,
75
+ recipient: sender,
76
+ amount: BigInt(100),
77
+ });
78
+ // Then
79
+ expect(result.value).toBeGreaterThanOrEqual(BigInt(0));
80
+ expect(result.parameters).toBeDefined();
81
+ expect(result.parameters?.gasLimit).toBeGreaterThanOrEqual(BigInt(0));
82
+ expect(result.parameters?.storageLimit).toBeGreaterThanOrEqual(BigInt(0));
83
+ });
84
+ it("fails when using an unsupported address type", async () => {
85
+ await expect(module.estimateFees({
86
+ intentType: "transaction",
87
+ asset: { type: "native" },
88
+ type: "send",
89
+ sender: address,
90
+ recipient: "tz5heMGVHQnx7ALDcDKqez8fan64Eyicw4DJ",
91
+ amount: BigInt(100),
92
+ })).rejects.toThrow('Invalid address "tz5heMGVHQnx7ALDcDKqez8fan64Eyicw4DJ"');
93
+ });
94
+ describe("listOperations", () => {
95
+ it("returns a list regarding address parameter", async () => {
96
+ // When
97
+ const [tx, _] = await module.listOperations(address, { minHeight: 0, order: "asc" });
98
+ // Then
99
+ expect(tx.length).toBeGreaterThanOrEqual(1);
100
+ tx.forEach(operation => {
101
+ const isSenderOrReceipt = operation.senders.includes(address) || operation.recipients.includes(address);
102
+ expect(isSenderOrReceipt).toBeTruthy();
103
+ expect(operation.tx.block).toBeDefined();
104
+ });
105
+ });
106
+ it("returns all operations", async () => {
107
+ // When
108
+ const [tx, _] = await module.listOperations(address, { minHeight: 0, order: "asc" });
109
+ // Then
110
+ // Find a way to create a unique id. In Tezos, the same hash may represent different operations in case of delegation.
111
+ const checkSet = new Set(tx.map(elt => `${elt.tx.hash}${elt.type}${elt.senders[0]}`));
112
+ expect(checkSet.size).toEqual(tx.length);
113
+ });
114
+ it("returns operations from latest, but in asc order", async () => {
115
+ // When
116
+ const [txDesc] = await module.listOperations(address, { minHeight: 0, order: "desc" });
117
+ // Then
118
+ // Check if the result is sorted in ascending order
119
+ expect(txDesc[0].tx.block.height).toBeGreaterThanOrEqual(txDesc[txDesc.length - 1].tx.block.height);
120
+ });
121
+ });
122
+ describe("lastBlock", () => {
123
+ it("returns last block info", async () => {
124
+ // When
125
+ const result = await module.lastBlock();
126
+ // Then
127
+ expect(result.hash).toBeDefined();
128
+ expect(result.height).toBeDefined();
129
+ expect(result.time).toBeInstanceOf(Date);
130
+ });
131
+ });
132
+ describe("getBalance", () => {
133
+ it("returns a list regarding address parameter", async () => {
134
+ // When
135
+ const result = await module.getBalance(address);
136
+ // Then
137
+ expect(result[0].asset).toEqual({ type: "native" });
138
+ expect(result[0].value).toBeGreaterThan(0);
139
+ });
140
+ });
141
+ describe("craftTransaction", () => {
142
+ async function decode(sbytes) {
143
+ // note: strip the conventional prefix (aka watermark) added by rawEncode
144
+ // output of craftTransaction is "payload to sign = prefix + actual raw transaction"
145
+ return await localForger.parse(sbytes.slice(2));
146
+ }
147
+ it.each(["send", "delegate", "undelegate"])("returns a raw transaction with %s", async (type) => {
148
+ const recipient = "tz1aWXP237BLwNHJcCD4b3DutCevhqq2T1Z9";
149
+ const amount = BigInt(10);
150
+ // When
151
+ const { transaction: encodedTransaction } = await module.craftTransaction({
152
+ intentType: "transaction",
153
+ asset: { type: "native" },
154
+ type,
155
+ sender: address,
156
+ recipient: recipient,
157
+ amount: amount,
158
+ });
159
+ const decodedTransaction = await decode(encodedTransaction);
160
+ expect(decodedTransaction.contents).toHaveLength(1);
161
+ const operationContent = decodedTransaction.contents[0];
162
+ expect(operationContent.source).toEqual(address);
163
+ expect(BigInt(operationContent.fee)).toBeGreaterThan(0);
164
+ if (type === "send") {
165
+ expect(BigInt(operationContent.amount)).toEqual(amount);
166
+ expect(operationContent.destination).toEqual(recipient);
167
+ }
168
+ else if (type === "delegate") {
169
+ expect(operationContent.delegate).toEqual(recipient);
170
+ }
171
+ });
172
+ it("should use estimated fees when user does not provide them for crafting a transaction", async () => {
173
+ const { transaction: encodedTransaction } = await module.craftTransaction({
174
+ intentType: "transaction",
175
+ asset: { type: "native" },
176
+ type: "send",
177
+ sender: address,
178
+ recipient: "tz1aWXP237BLwNHJcCD4b3DutCevhqq2T1Z9",
179
+ amount: BigInt(10),
180
+ });
181
+ const decodedTransaction = await decode(encodedTransaction);
182
+ const transactionFee = BigInt(decodedTransaction.contents[0].fee);
183
+ expect(transactionFee).toBeGreaterThan(0);
184
+ });
185
+ it.each([1n, 50n, 99n])("should use custom user fees when user provides it for crafting a transaction", async (customFees) => {
186
+ const { transaction: encodedTransaction } = await module.craftTransaction({
187
+ intentType: "transaction",
188
+ asset: { type: "native" },
189
+ type: "send",
190
+ sender: address,
191
+ recipient: "tz1aWXP237BLwNHJcCD4b3DutCevhqq2T1Z9",
192
+ amount: BigInt(10),
193
+ }, { value: customFees });
194
+ const decodedTransaction = await decode(encodedTransaction);
195
+ expect(decodedTransaction.contents[0].fee).toEqual(customFees.toString());
196
+ });
197
+ });
198
+ });
199
+ //# sourceMappingURL=index.integ.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.integ.test.js","sourceRoot":"","sources":["../../src/api/index.integ.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../src/api/index.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,198 @@
1
+ import networkApi from "../network/tzkt";
2
+ import { createApi } from "./index";
3
+ const DEFAULT_ESTIMATED_FEES = 300n;
4
+ const DEFAULT_GAS_LIMIT = 30n;
5
+ const DEFAULT_STORAGE_LIMIT = 40n;
6
+ const logicGetTransactions = jest.fn();
7
+ const logicEstimateFees = jest.fn();
8
+ const logicCraftTransactionMock = jest.fn((_account, _transaction) => {
9
+ return { type: undefined, contents: undefined };
10
+ });
11
+ jest.mock("../logic", () => ({
12
+ listOperations: async () => logicGetTransactions(),
13
+ estimateFees: async () => logicEstimateFees(),
14
+ craftTransaction: (account, transaction) => logicCraftTransactionMock(account, transaction),
15
+ rawEncode: () => Promise.resolve("tz1heMGVHQnx7ALDcDKqez8fan64Eyicw4DJ"),
16
+ }));
17
+ jest.spyOn(networkApi, "getAccountByAddress").mockResolvedValue({
18
+ type: "user",
19
+ balance: 1000,
20
+ revealed: true,
21
+ address: "tz1test",
22
+ publicKey: "edpktest",
23
+ counter: 0,
24
+ delegationLevel: 0,
25
+ delegationTime: "2021-01-01T00:00:00Z",
26
+ numTransactions: 0,
27
+ firstActivityTime: "2021-01-01T00:00:00Z",
28
+ });
29
+ const api = createApi({
30
+ baker: {
31
+ url: "https://baker.example.com",
32
+ },
33
+ explorer: {
34
+ url: "foo",
35
+ maxTxQuery: 1,
36
+ },
37
+ node: {
38
+ url: "bar",
39
+ },
40
+ fees: {
41
+ minGasLimit: 1,
42
+ minRevealGasLimit: 1,
43
+ minStorageLimit: 1,
44
+ minFees: 1,
45
+ minEstimatedFees: 2,
46
+ },
47
+ });
48
+ describe("get operations", () => {
49
+ afterEach(() => {
50
+ logicGetTransactions.mockClear();
51
+ });
52
+ it("could return no operation", async () => {
53
+ logicGetTransactions.mockResolvedValue([[], ""]);
54
+ const [operations, token] = await api.listOperations("addr", { minHeight: 100, order: "asc" });
55
+ expect(operations).toEqual([]);
56
+ expect(token).toEqual("");
57
+ });
58
+ const op = {
59
+ id: "blockhash",
60
+ asset: { type: "native" },
61
+ tx: {
62
+ hash: "opHash",
63
+ fees: BigInt(100),
64
+ block: {
65
+ hash: "blockHash",
66
+ height: 123456,
67
+ time: new Date(),
68
+ },
69
+ date: new Date(),
70
+ },
71
+ type: "transaction",
72
+ value: BigInt(1000),
73
+ senders: ["tz1Sender"],
74
+ recipients: ["tz1Recipient"],
75
+ };
76
+ it("only does 1 iteration", async () => {
77
+ logicGetTransactions.mockResolvedValue([[op], "888"]);
78
+ const [operations, token] = await api.listOperations("addr", { minHeight: 100, order: "asc" });
79
+ expect(logicGetTransactions).toHaveBeenCalledTimes(1);
80
+ expect(operations.length).toBe(1);
81
+ expect(token).toEqual("888");
82
+ });
83
+ });
84
+ describe("Testing craftTransaction function", () => {
85
+ beforeEach(() => jest.clearAllMocks());
86
+ it("should use estimated fees when user does not provide them for crafting a transaction ", async () => {
87
+ logicEstimateFees.mockResolvedValue({
88
+ estimatedFees: DEFAULT_ESTIMATED_FEES,
89
+ gasLimit: DEFAULT_GAS_LIMIT,
90
+ storageLimit: DEFAULT_STORAGE_LIMIT,
91
+ });
92
+ await api.craftTransaction({
93
+ intentType: "transaction",
94
+ type: "send",
95
+ sender: "tz1test",
96
+ recipient: "tz1recipient",
97
+ amount: 1000n,
98
+ });
99
+ expect(logicEstimateFees).toHaveBeenCalledTimes(1);
100
+ expect(logicCraftTransactionMock).toHaveBeenCalledWith(expect.objectContaining({ address: "tz1test" }), expect.objectContaining({
101
+ fee: expect.objectContaining({
102
+ fees: DEFAULT_ESTIMATED_FEES.toString(),
103
+ gasLimit: DEFAULT_GAS_LIMIT.toString(),
104
+ storageLimit: DEFAULT_STORAGE_LIMIT.toString(),
105
+ }),
106
+ }));
107
+ });
108
+ it.each([[1n], [50n], [99n]])("should use custom user fees when user provides it for crafting a transaction", async (customFees) => {
109
+ logicEstimateFees.mockResolvedValue({
110
+ estimatedFees: DEFAULT_ESTIMATED_FEES,
111
+ gasLimit: DEFAULT_GAS_LIMIT,
112
+ storageLimit: DEFAULT_STORAGE_LIMIT,
113
+ parameters: {
114
+ gasLimit: DEFAULT_GAS_LIMIT,
115
+ storageLimit: DEFAULT_STORAGE_LIMIT,
116
+ },
117
+ });
118
+ await api.craftTransaction({
119
+ intentType: "transaction",
120
+ type: "send",
121
+ sender: "tz1test",
122
+ recipient: "tz1recipient",
123
+ amount: 1000n,
124
+ }, {
125
+ value: customFees,
126
+ });
127
+ expect(logicEstimateFees).toHaveBeenCalledTimes(1);
128
+ expect(logicCraftTransactionMock).toHaveBeenCalledWith(expect.any(Object), expect.objectContaining({
129
+ fee: {
130
+ fees: customFees.toString(),
131
+ gasLimit: DEFAULT_GAS_LIMIT.toString(),
132
+ storageLimit: DEFAULT_STORAGE_LIMIT.toString(),
133
+ },
134
+ }));
135
+ });
136
+ });
137
+ describe("Testing estimateFees function", () => {
138
+ beforeEach(() => jest.clearAllMocks());
139
+ it("should return estimation from logic module", async () => {
140
+ logicEstimateFees.mockResolvedValue({
141
+ estimatedFees: DEFAULT_ESTIMATED_FEES,
142
+ gasLimit: DEFAULT_GAS_LIMIT,
143
+ storageLimit: DEFAULT_STORAGE_LIMIT,
144
+ });
145
+ const result = await api.estimateFees({
146
+ intentType: "transaction",
147
+ type: "send",
148
+ sender: "tz1test",
149
+ recipient: "tz1recipient",
150
+ amount: 1000n,
151
+ });
152
+ expect(result).toEqual({
153
+ value: DEFAULT_ESTIMATED_FEES,
154
+ parameters: {
155
+ gasLimit: DEFAULT_GAS_LIMIT,
156
+ storageLimit: DEFAULT_STORAGE_LIMIT,
157
+ },
158
+ });
159
+ });
160
+ it("should throw taquito errors", async () => {
161
+ logicEstimateFees.mockResolvedValue({
162
+ estimatedFees: DEFAULT_ESTIMATED_FEES,
163
+ gasLimit: DEFAULT_GAS_LIMIT,
164
+ storageLimit: DEFAULT_STORAGE_LIMIT,
165
+ taquitoError: "test",
166
+ });
167
+ await expect(api.estimateFees({
168
+ intentType: "transaction",
169
+ type: "send",
170
+ sender: "tz1test",
171
+ recipient: "tz1recipient",
172
+ amount: 1000n,
173
+ })).rejects.toThrow("Fees estimation failed: test");
174
+ });
175
+ it("should not throw for delegate.unchanged errors", async () => {
176
+ logicEstimateFees.mockResolvedValue({
177
+ estimatedFees: DEFAULT_ESTIMATED_FEES,
178
+ gasLimit: DEFAULT_GAS_LIMIT,
179
+ storageLimit: DEFAULT_STORAGE_LIMIT,
180
+ taquitoError: "proto.022-PsRiotum.delegate.unchanged",
181
+ });
182
+ const result = await api.estimateFees({
183
+ intentType: "staking",
184
+ type: "delegate",
185
+ sender: "tz1test",
186
+ recipient: "tz1validator",
187
+ amount: 0n,
188
+ });
189
+ expect(result).toEqual({
190
+ value: DEFAULT_ESTIMATED_FEES,
191
+ parameters: {
192
+ gasLimit: DEFAULT_GAS_LIMIT,
193
+ storageLimit: DEFAULT_STORAGE_LIMIT,
194
+ },
195
+ });
196
+ });
197
+ });
198
+ //# sourceMappingURL=index.test.js.map