@ledgerhq/coin-tezos 6.7.0 → 6.7.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 (90) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/package.json +6 -6
  3. package/lib/api/index.integ.test.d.ts +0 -2
  4. package/lib/api/index.integ.test.d.ts.map +0 -1
  5. package/lib/api/index.integ.test.js +0 -201
  6. package/lib/api/index.integ.test.js.map +0 -1
  7. package/lib/api/index.test.d.ts +0 -2
  8. package/lib/api/index.test.d.ts.map +0 -1
  9. package/lib/api/index.test.js +0 -203
  10. package/lib/api/index.test.js.map +0 -1
  11. package/lib/logic/craftTransaction.integ.test.d.ts +0 -2
  12. package/lib/logic/craftTransaction.integ.test.d.ts.map +0 -1
  13. package/lib/logic/craftTransaction.integ.test.js +0 -86
  14. package/lib/logic/craftTransaction.integ.test.js.map +0 -1
  15. package/lib/logic/craftTransaction.test.d.ts +0 -2
  16. package/lib/logic/craftTransaction.test.d.ts.map +0 -1
  17. package/lib/logic/craftTransaction.test.js +0 -153
  18. package/lib/logic/craftTransaction.test.js.map +0 -1
  19. package/lib/logic/estimateFees.integ.test.d.ts +0 -2
  20. package/lib/logic/estimateFees.integ.test.d.ts.map +0 -1
  21. package/lib/logic/estimateFees.integ.test.js +0 -71
  22. package/lib/logic/estimateFees.integ.test.js.map +0 -1
  23. package/lib/logic/getBalance.test.d.ts +0 -2
  24. package/lib/logic/getBalance.test.d.ts.map +0 -1
  25. package/lib/logic/getBalance.test.js +0 -23
  26. package/lib/logic/getBalance.test.js.map +0 -1
  27. package/lib/logic/getStakes.test.d.ts +0 -2
  28. package/lib/logic/getStakes.test.d.ts.map +0 -1
  29. package/lib/logic/getStakes.test.js +0 -133
  30. package/lib/logic/getStakes.test.js.map +0 -1
  31. package/lib/logic/listOperations.test.d.ts +0 -2
  32. package/lib/logic/listOperations.test.d.ts.map +0 -1
  33. package/lib/logic/listOperations.test.js +0 -196
  34. package/lib/logic/listOperations.test.js.map +0 -1
  35. package/lib/logic/validateIntent.test.d.ts +0 -2
  36. package/lib/logic/validateIntent.test.d.ts.map +0 -1
  37. package/lib/logic/validateIntent.test.js +0 -279
  38. package/lib/logic/validateIntent.test.js.map +0 -1
  39. package/lib/network/bakers.integration.test.d.ts +0 -2
  40. package/lib/network/bakers.integration.test.d.ts.map +0 -1
  41. package/lib/network/bakers.integration.test.js +0 -57
  42. package/lib/network/bakers.integration.test.js.map +0 -1
  43. package/lib/network/bakers.test.d.ts +0 -2
  44. package/lib/network/bakers.test.d.ts.map +0 -1
  45. package/lib/network/bakers.test.js +0 -209
  46. package/lib/network/bakers.test.js.map +0 -1
  47. package/lib-es/api/index.integ.test.d.ts +0 -2
  48. package/lib-es/api/index.integ.test.d.ts.map +0 -1
  49. package/lib-es/api/index.integ.test.js +0 -199
  50. package/lib-es/api/index.integ.test.js.map +0 -1
  51. package/lib-es/api/index.test.d.ts +0 -2
  52. package/lib-es/api/index.test.d.ts.map +0 -1
  53. package/lib-es/api/index.test.js +0 -198
  54. package/lib-es/api/index.test.js.map +0 -1
  55. package/lib-es/logic/craftTransaction.integ.test.d.ts +0 -2
  56. package/lib-es/logic/craftTransaction.integ.test.d.ts.map +0 -1
  57. package/lib-es/logic/craftTransaction.integ.test.js +0 -81
  58. package/lib-es/logic/craftTransaction.integ.test.js.map +0 -1
  59. package/lib-es/logic/craftTransaction.test.d.ts +0 -2
  60. package/lib-es/logic/craftTransaction.test.d.ts.map +0 -1
  61. package/lib-es/logic/craftTransaction.test.js +0 -148
  62. package/lib-es/logic/craftTransaction.test.js.map +0 -1
  63. package/lib-es/logic/estimateFees.integ.test.d.ts +0 -2
  64. package/lib-es/logic/estimateFees.integ.test.d.ts.map +0 -1
  65. package/lib-es/logic/estimateFees.integ.test.js +0 -66
  66. package/lib-es/logic/estimateFees.integ.test.js.map +0 -1
  67. package/lib-es/logic/getBalance.test.d.ts +0 -2
  68. package/lib-es/logic/getBalance.test.d.ts.map +0 -1
  69. package/lib-es/logic/getBalance.test.js +0 -18
  70. package/lib-es/logic/getBalance.test.js.map +0 -1
  71. package/lib-es/logic/getStakes.test.d.ts +0 -2
  72. package/lib-es/logic/getStakes.test.d.ts.map +0 -1
  73. package/lib-es/logic/getStakes.test.js +0 -128
  74. package/lib-es/logic/getStakes.test.js.map +0 -1
  75. package/lib-es/logic/listOperations.test.d.ts +0 -2
  76. package/lib-es/logic/listOperations.test.d.ts.map +0 -1
  77. package/lib-es/logic/listOperations.test.js +0 -194
  78. package/lib-es/logic/listOperations.test.js.map +0 -1
  79. package/lib-es/logic/validateIntent.test.d.ts +0 -2
  80. package/lib-es/logic/validateIntent.test.d.ts.map +0 -1
  81. package/lib-es/logic/validateIntent.test.js +0 -251
  82. package/lib-es/logic/validateIntent.test.js.map +0 -1
  83. package/lib-es/network/bakers.integration.test.d.ts +0 -2
  84. package/lib-es/network/bakers.integration.test.d.ts.map +0 -1
  85. package/lib-es/network/bakers.integration.test.js +0 -52
  86. package/lib-es/network/bakers.integration.test.js.map +0 -1
  87. package/lib-es/network/bakers.test.d.ts +0 -2
  88. package/lib-es/network/bakers.test.d.ts.map +0 -1
  89. package/lib-es/network/bakers.test.js +0 -204
  90. package/lib-es/network/bakers.test.js.map +0 -1
@@ -1,251 +0,0 @@
1
- import { validateIntent } from "./validateIntent";
2
- import * as estimateFeesModule from "./estimateFees";
3
- import tzktApi from "../network/tzkt";
4
- import coinConfig from "../config";
5
- import { RecipientRequired, InvalidAddress, InvalidAddressBecauseDestinationIsAlsoSource, AmountRequired, NotEnoughBalance, } from "@ledgerhq/errors";
6
- describe("validateIntent", () => {
7
- const senderAddress = "tz1TzrmTBSuiVHV2VfMnGRMYvTEPCP42oSM8";
8
- const validRecipient = "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx";
9
- const mockEstimateFees = jest.spyOn(estimateFeesModule, "estimateFees");
10
- const mockGetAccountByAddress = jest.spyOn(tzktApi, "getAccountByAddress");
11
- beforeEach(() => {
12
- jest.clearAllMocks();
13
- coinConfig.setCoinConfig(() => ({
14
- status: { type: "active" },
15
- baker: { url: "http://baker.example.com" },
16
- explorer: { url: "http://tezos.explorer.com", maxTxQuery: 100 },
17
- node: { url: "http://tezos.node.com" },
18
- fees: {
19
- minGasLimit: 600,
20
- minRevealGasLimit: 300,
21
- minStorageLimit: 0,
22
- minFees: 500,
23
- minEstimatedFees: 500,
24
- },
25
- }));
26
- mockEstimateFees.mockResolvedValue({
27
- fees: BigInt(1000),
28
- gasLimit: BigInt(10000),
29
- storageLimit: BigInt(0),
30
- estimatedFees: BigInt(1000),
31
- });
32
- mockGetAccountByAddress.mockResolvedValue({
33
- type: "user",
34
- address: senderAddress,
35
- publicKey: "edpk...",
36
- balance: 5000000,
37
- revealed: true,
38
- counter: 0,
39
- delegationLevel: 0,
40
- delegationTime: "2021-01-01T00:00:00Z",
41
- numTransactions: 0,
42
- firstActivityTime: "2021-01-01T00:00:00Z",
43
- });
44
- });
45
- describe("recipient validation", () => {
46
- it("should return RecipientRequired error when recipient is missing", async () => {
47
- const result = await validateIntent({
48
- intentType: "transaction",
49
- asset: { type: "native" },
50
- type: "send",
51
- sender: senderAddress,
52
- recipient: "",
53
- amount: BigInt(1000),
54
- });
55
- expect(result.errors.recipient).toBeInstanceOf(RecipientRequired);
56
- });
57
- it("should return InvalidAddress error for invalid recipient", async () => {
58
- const result = await validateIntent({
59
- intentType: "transaction",
60
- asset: { type: "native" },
61
- type: "send",
62
- sender: senderAddress,
63
- recipient: "invalid_address",
64
- amount: BigInt(1000),
65
- });
66
- expect(result.errors.recipient).toBeInstanceOf(InvalidAddress);
67
- });
68
- it("should return InvalidAddressBecauseDestinationIsAlsoSource when sender equals recipient", async () => {
69
- const result = await validateIntent({
70
- intentType: "transaction",
71
- asset: { type: "native" },
72
- type: "send",
73
- sender: senderAddress,
74
- recipient: senderAddress,
75
- amount: BigInt(1000),
76
- });
77
- expect(result.errors.recipient).toBeInstanceOf(InvalidAddressBecauseDestinationIsAlsoSource);
78
- });
79
- });
80
- describe("amount validation", () => {
81
- it("should return AmountRequired error when amount is zero and not useAllAmount", async () => {
82
- const result = await validateIntent({
83
- intentType: "transaction",
84
- asset: { type: "native" },
85
- type: "send",
86
- sender: senderAddress,
87
- recipient: validRecipient,
88
- amount: BigInt(0),
89
- useAllAmount: false,
90
- });
91
- expect(result.errors.amount).toBeInstanceOf(AmountRequired);
92
- });
93
- it("should not return AmountRequired error when useAllAmount is true", async () => {
94
- const result = await validateIntent({
95
- intentType: "transaction",
96
- asset: { type: "native" },
97
- type: "send",
98
- sender: senderAddress,
99
- recipient: validRecipient,
100
- amount: BigInt(0),
101
- useAllAmount: true,
102
- });
103
- expect(result.errors.amount).toBeUndefined();
104
- });
105
- it.each([["stake"], ["unstake"]])("returns 0 as amount when the transaction intent is '%s'", async (intentType) => {
106
- const result = await validateIntent({
107
- intentType: "transaction",
108
- asset: { type: "native" },
109
- type: intentType,
110
- sender: "tz1TzrmTBSuiVHV2VfMnGRMYvTEPCP42oSM8",
111
- recipient: "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx",
112
- amount: BigInt(0),
113
- useAllAmount: true,
114
- });
115
- expect(result).toEqual({
116
- errors: {},
117
- warnings: {},
118
- estimatedFees: 1000n,
119
- amount: 0n,
120
- totalSpent: 1000n,
121
- });
122
- });
123
- });
124
- describe("balance validation", () => {
125
- it("should return NotEnoughBalance error when amount exceeds balance", async () => {
126
- const balance = 1000000; // 1 XTZ
127
- const amount = 2000000; // 2 XTZ
128
- mockGetAccountByAddress.mockResolvedValue({
129
- type: "user",
130
- address: senderAddress,
131
- publicKey: "edpk...",
132
- balance,
133
- revealed: true,
134
- counter: 0,
135
- delegationLevel: 0,
136
- delegationTime: "2021-01-01T00:00:00Z",
137
- numTransactions: 0,
138
- firstActivityTime: "2021-01-01T00:00:00Z",
139
- });
140
- const result = await validateIntent({
141
- intentType: "transaction",
142
- asset: { type: "native" },
143
- type: "send",
144
- sender: senderAddress,
145
- recipient: validRecipient,
146
- amount: BigInt(amount),
147
- });
148
- expect(result.errors.amount).toBeInstanceOf(NotEnoughBalance);
149
- });
150
- it("should pass validation when amount is within balance", async () => {
151
- const balance = 5000000; // 5 XTZ
152
- const amount = 1000000; // 1 XTZ
153
- mockGetAccountByAddress.mockResolvedValue({
154
- type: "user",
155
- address: senderAddress,
156
- publicKey: "edpk...",
157
- balance,
158
- revealed: true,
159
- counter: 0,
160
- delegationLevel: 0,
161
- delegationTime: "2021-01-01T00:00:00Z",
162
- numTransactions: 0,
163
- firstActivityTime: "2021-01-01T00:00:00Z",
164
- });
165
- const result = await validateIntent({
166
- intentType: "transaction",
167
- asset: { type: "native" },
168
- type: "send",
169
- sender: senderAddress,
170
- recipient: validRecipient,
171
- amount: BigInt(amount),
172
- });
173
- expect(result.errors.amount).toBeUndefined();
174
- expect(result.amount).toBe(BigInt(amount));
175
- });
176
- });
177
- describe("transaction types", () => {
178
- it("should pass validation for delegate transaction", async () => {
179
- const result = await validateIntent({
180
- intentType: "staking",
181
- asset: { type: "native" },
182
- type: "delegate",
183
- sender: senderAddress,
184
- recipient: validRecipient,
185
- amount: BigInt(0),
186
- });
187
- expect(result.errors).toEqual({});
188
- });
189
- it("should pass validation for undelegate transaction", async () => {
190
- const result = await validateIntent({
191
- intentType: "staking",
192
- asset: { type: "native" },
193
- type: "undelegate",
194
- sender: senderAddress,
195
- recipient: "",
196
- amount: BigInt(0),
197
- });
198
- expect(result.errors).toEqual({});
199
- });
200
- it("should handle stake intent (mapped to delegate)", async () => {
201
- const result = await validateIntent({
202
- intentType: "staking",
203
- asset: { type: "native" },
204
- type: "stake",
205
- sender: senderAddress,
206
- recipient: validRecipient,
207
- amount: BigInt(0),
208
- });
209
- expect(result.errors).toEqual({});
210
- });
211
- it("should handle unstake intent (mapped to undelegate)", async () => {
212
- const result = await validateIntent({
213
- intentType: "staking",
214
- asset: { type: "native" },
215
- type: "unstake",
216
- sender: senderAddress,
217
- recipient: "",
218
- amount: BigInt(0),
219
- });
220
- expect(result.errors).toEqual({});
221
- });
222
- });
223
- describe("successful validation", () => {
224
- it("should return valid result with correct values", async () => {
225
- const amount = BigInt(1000000);
226
- const estimatedFees = BigInt(1500);
227
- mockEstimateFees.mockResolvedValue({
228
- fees: BigInt(1000),
229
- gasLimit: BigInt(10000),
230
- storageLimit: BigInt(0),
231
- estimatedFees,
232
- });
233
- const result = await validateIntent({
234
- intentType: "transaction",
235
- asset: { type: "native" },
236
- type: "send",
237
- sender: senderAddress,
238
- recipient: validRecipient,
239
- amount,
240
- });
241
- expect(result).toMatchObject({
242
- errors: {},
243
- warnings: {},
244
- estimatedFees,
245
- amount,
246
- totalSpent: amount + estimatedFees,
247
- });
248
- });
249
- });
250
- });
251
- //# sourceMappingURL=validateIntent.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validateIntent.test.js","sourceRoot":"","sources":["../../src/logic/validateIntent.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=bakers.integration.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bakers.integration.test.d.ts","sourceRoot":"","sources":["../../src/network/bakers.integration.test.ts"],"names":[],"mappings":""}
@@ -1,52 +0,0 @@
1
- import { fromAccountRaw } from "@ledgerhq/coin-framework/serialization";
2
- import { loadAccountDelegation, listBakers } from "../network/bakers";
3
- import whitelist from "../network/bakers.whitelist-default";
4
- import coinConfig from "../config";
5
- import { mockConfig } from "../test/config";
6
- function makeAccountRaw(name, pubkey, address, derivationMode) {
7
- return {
8
- id: `js:2:tezos:${pubkey}:${derivationMode}`,
9
- seedIdentifier: address,
10
- name: "Tezos " + name,
11
- derivationMode,
12
- index: 0,
13
- freshAddress: address,
14
- freshAddressPath: "",
15
- blockHeight: 0,
16
- operations: [],
17
- pendingOperations: [],
18
- currencyId: "tezos",
19
- lastSyncDate: "",
20
- balance: "0",
21
- xpub: pubkey,
22
- subAccounts: [],
23
- tezosResources: { revealed: true, counter: 0 },
24
- };
25
- }
26
- const accountTZrevealedDelegating = makeAccountRaw("TZrevealedDelegating", "02389ffd73423626894cb151416e51c72ec285376673daf83545eb5edb45b261ce", "tz1boBHAVpwcvKkNFAQHYr7mjxAz1PpVgKq7", "tezbox");
27
- describe("tezos bakers", () => {
28
- beforeAll(() => {
29
- coinConfig.setCoinConfig(() => mockConfig);
30
- });
31
- test("atleast 10 whitelisted bakers are online", async () => {
32
- const bakers = await listBakers(whitelist);
33
- const retrievedAddresses = bakers.map(o => o.address);
34
- let available = 0;
35
- for (const whitelisted of whitelist) {
36
- if (retrievedAddresses.includes(whitelisted)) {
37
- available++;
38
- }
39
- else {
40
- console.warn(`Baker ${whitelisted} no longer online !`);
41
- }
42
- }
43
- expect(available).toBeGreaterThan(10);
44
- });
45
- // TODO we'll need two accounts to test diff cases
46
- test("load account baker info", async () => {
47
- const account = fromAccountRaw(accountTZrevealedDelegating);
48
- const delegation = await loadAccountDelegation(account);
49
- expect(delegation).toBe(null);
50
- });
51
- });
52
- //# sourceMappingURL=bakers.integration.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bakers.integration.test.js","sourceRoot":"","sources":["../../src/network/bakers.integration.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAExE,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,SAAS,MAAM,qCAAqC,CAAC;AAC5D,OAAO,UAA+B,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;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,UAAU,CAAC,aAAa,CAAC,GAAoB,EAAE,CAAC,UAA6B,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,SAAS,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,SAAS,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,cAAc,CAAC,2BAA2B,CAAC,CAAC;QAC5D,MAAM,UAAU,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACxD,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=bakers.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bakers.test.d.ts","sourceRoot":"","sources":["../../src/network/bakers.test.ts"],"names":[],"mappings":""}
@@ -1,204 +0,0 @@
1
- import network from "@ledgerhq/live-network/network";
2
- import { asBaker, cache } from "./bakers";
3
- import coinConfig from "../config";
4
- import { mockConfig } from "../test/config";
5
- jest.mock("@ledgerhq/live-network/network");
6
- const mockedNetwork = jest.mocked(network);
7
- const data = [
8
- {
9
- address: "tz1Kf25fX1VdmYGSEzwFy1wNmkbSEZ2V83sY",
10
- name: "Tezos Seoul",
11
- status: "closed",
12
- balance: 2.941247,
13
- features: [],
14
- delegation: {
15
- enabled: true,
16
- minBalance: 100,
17
- fee: 0.07,
18
- capacity: 0,
19
- freeSpace: -815914.909184,
20
- estimatedApy: 0,
21
- features: [
22
- {
23
- title: "Distributed rewards",
24
- content: "Baker doesn't pay network fee rewards",
25
- },
26
- ],
27
- },
28
- staking: {
29
- enabled: false,
30
- minBalance: 0,
31
- fee: 0,
32
- capacity: 0,
33
- freeSpace: 0,
34
- estimatedApy: 0.0967,
35
- features: [],
36
- },
37
- },
38
- {
39
- address: "tz1gg5bjopPcr9agjamyu9BbXKLibNc2rbAq",
40
- name: "hodl.farm",
41
- status: "active",
42
- balance: 43334.236051,
43
- features: [
44
- {
45
- title: "Contribution",
46
- content: {
47
- project: "Tezos on Kubernetes",
48
- link: "https://github.com/hodl-dot-farm/tezos-on-gke",
49
- },
50
- },
51
- ],
52
- delegation: {
53
- enabled: false,
54
- minBalance: 0,
55
- fee: 1,
56
- capacity: 363902.963184,
57
- freeSpace: 162427.070878,
58
- estimatedApy: 0,
59
- features: [
60
- {
61
- title: "Distributed rewards",
62
- content: "Baker doesn't pay network fee, denunciation and revelation rewards",
63
- },
64
- {
65
- title: "Compensated loss",
66
- content: "Baker compensates missed baking and attestation rewards",
67
- },
68
- ],
69
- },
70
- staking: {
71
- enabled: true,
72
- minBalance: 0,
73
- fee: 0.075,
74
- capacity: 363902.963184,
75
- freeSpace: 293604.290457,
76
- estimatedApy: 0.0894,
77
- features: [],
78
- },
79
- },
80
- {
81
- address: "tz3LV9aGKHDnAZHCtC9SjNtTrKRu678FqSki",
82
- name: "Ledger by Kiln",
83
- status: "active",
84
- balance: 801425.237986,
85
- features: [],
86
- delegation: {
87
- enabled: true,
88
- minBalance: 1,
89
- fee: 0.12,
90
- capacity: 7002345.443544,
91
- freeSpace: 36021.368062,
92
- estimatedApy: 0.0284,
93
- features: [],
94
- },
95
- staking: {
96
- enabled: true,
97
- minBalance: 0,
98
- fee: 0.2,
99
- capacity: 7002345.443544,
100
- freeSpace: 6837721.800765,
101
- estimatedApy: 0.0774,
102
- features: [],
103
- },
104
- },
105
- {
106
- address: "tz1KwafrdmM8RwxUMxdbbtWyZuKLWSPVxe9u",
107
- name: "Tezberry Pie",
108
- status: "active",
109
- balance: 17798.149073,
110
- features: [],
111
- delegation: {
112
- enabled: true,
113
- minBalance: 10,
114
- fee: 0.12,
115
- capacity: 155364.334245,
116
- freeSpace: 100030.802123,
117
- estimatedApy: 0.0284,
118
- features: [],
119
- },
120
- staking: {
121
- enabled: true,
122
- minBalance: 0,
123
- fee: 0.12,
124
- capacity: 155364.334245,
125
- freeSpace: 100143.090362,
126
- estimatedApy: 0.0851,
127
- features: [],
128
- },
129
- },
130
- {
131
- address: "tz1WnfXMPaNTBmH7DBPwqCWs9cPDJdkGBTZ8",
132
- name: "TezosHODL",
133
- status: "active",
134
- balance: 417336.25576,
135
- features: [],
136
- delegation: {
137
- enabled: true,
138
- minBalance: 10,
139
- fee: 0.15,
140
- capacity: 3733611.262254,
141
- freeSpace: 2216838.749908,
142
- estimatedApy: 0.0274,
143
- features: [
144
- {
145
- title: "Distributed rewards",
146
- content: "Baker doesn't pay denunciation rewards",
147
- },
148
- ],
149
- },
150
- staking: {
151
- enabled: true,
152
- minBalance: 0,
153
- fee: 0.15,
154
- capacity: 2074228.47903,
155
- freeSpace: 1440050.488348,
156
- estimatedApy: 0.0822,
157
- features: [],
158
- },
159
- },
160
- ];
161
- describe("Tezos Baker", () => {
162
- beforeAll(() => {
163
- coinConfig.setCoinConfig(() => mockConfig);
164
- });
165
- afterEach(() => {
166
- jest.clearAllMocks();
167
- cache.reset();
168
- });
169
- describe("Get bakers from cache", () => {
170
- beforeEach(() => {
171
- const response = {
172
- data,
173
- status: 200,
174
- headers: {},
175
- statusText: "",
176
- config: {
177
- headers: {},
178
- },
179
- };
180
- mockedNetwork.mockReturnValue(Promise.resolve(response));
181
- });
182
- it("Ledger Baker should be first in the list", async () => {
183
- const bakers = await cache();
184
- expect(bakers[0].name).toBe("Ledger by Kiln");
185
- });
186
- });
187
- describe("asBaker", () => {
188
- it("Should convert api baker to LL baker (capacity status full)", () => {
189
- const testBaker = data.find(baker => baker.delegation.freeSpace < 0);
190
- const baker = asBaker(testBaker);
191
- expect(baker?.name).toBe(testBaker.name);
192
- expect(baker?.nominalYield).toBe(`${Math.floor(10000 * testBaker.delegation.estimatedApy) / 100} %`);
193
- expect(baker?.capacityStatus).toBe("full");
194
- });
195
- it("Should convert api baker to LL baker (capacity status normal)", () => {
196
- const testBaker = data.find(baker => baker.delegation.freeSpace > 0);
197
- const baker = asBaker(testBaker);
198
- expect(baker?.name).toBe(testBaker.name);
199
- expect(baker?.nominalYield).toBe(`${Math.floor(10000 * testBaker.delegation.estimatedApy) / 100} %`);
200
- expect(baker?.capacityStatus).toBe("normal");
201
- });
202
- });
203
- });
204
- //# sourceMappingURL=bakers.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bakers.test.js","sourceRoot":"","sources":["../../src/network/bakers.test.ts"],"names":[],"mappings":"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"}