@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.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +30 -55
- package/lib/api/index.integ.test.d.ts +2 -0
- package/lib/api/index.integ.test.d.ts.map +1 -0
- package/lib/api/index.integ.test.js +201 -0
- package/lib/api/index.integ.test.js.map +1 -0
- package/lib/api/index.test.d.ts +2 -0
- package/lib/api/index.test.d.ts.map +1 -0
- package/lib/api/index.test.js +203 -0
- package/lib/api/index.test.js.map +1 -0
- package/lib/logic/craftTransaction.integ.test.d.ts +2 -0
- package/lib/logic/craftTransaction.integ.test.d.ts.map +1 -0
- package/lib/logic/craftTransaction.integ.test.js +86 -0
- package/lib/logic/craftTransaction.integ.test.js.map +1 -0
- package/lib/logic/craftTransaction.test.d.ts +2 -0
- package/lib/logic/craftTransaction.test.d.ts.map +1 -0
- package/lib/logic/craftTransaction.test.js +153 -0
- package/lib/logic/craftTransaction.test.js.map +1 -0
- package/lib/logic/estimateFees.integ.test.d.ts +2 -0
- package/lib/logic/estimateFees.integ.test.d.ts.map +1 -0
- package/lib/logic/estimateFees.integ.test.js +71 -0
- package/lib/logic/estimateFees.integ.test.js.map +1 -0
- package/lib/logic/getBalance.test.d.ts +2 -0
- package/lib/logic/getBalance.test.d.ts.map +1 -0
- package/lib/logic/getBalance.test.js +23 -0
- package/lib/logic/getBalance.test.js.map +1 -0
- package/lib/logic/getStakes.test.d.ts +2 -0
- package/lib/logic/getStakes.test.d.ts.map +1 -0
- package/lib/logic/getStakes.test.js +133 -0
- package/lib/logic/getStakes.test.js.map +1 -0
- package/lib/logic/listOperations.js +1 -1
- package/lib/logic/listOperations.js.map +1 -1
- package/lib/logic/listOperations.test.d.ts +2 -0
- package/lib/logic/listOperations.test.d.ts.map +1 -0
- package/lib/logic/listOperations.test.js +196 -0
- package/lib/logic/listOperations.test.js.map +1 -0
- package/lib/logic/validateIntent.d.ts.map +1 -1
- package/lib/logic/validateIntent.js +6 -5
- package/lib/logic/validateIntent.js.map +1 -1
- package/lib/logic/validateIntent.test.d.ts +2 -0
- package/lib/logic/validateIntent.test.d.ts.map +1 -0
- package/lib/logic/validateIntent.test.js +279 -0
- package/lib/logic/validateIntent.test.js.map +1 -0
- package/lib/network/bakers.integration.test.d.ts +2 -0
- package/lib/network/bakers.integration.test.d.ts.map +1 -0
- package/lib/network/bakers.integration.test.js +57 -0
- package/lib/network/bakers.integration.test.js.map +1 -0
- package/lib/network/bakers.test.d.ts +2 -0
- package/lib/network/bakers.test.d.ts.map +1 -0
- package/lib/network/bakers.test.js +209 -0
- package/lib/network/bakers.test.js.map +1 -0
- package/lib-es/api/index.integ.test.d.ts +2 -0
- package/lib-es/api/index.integ.test.d.ts.map +1 -0
- package/lib-es/api/index.integ.test.js +199 -0
- package/lib-es/api/index.integ.test.js.map +1 -0
- package/lib-es/api/index.test.d.ts +2 -0
- package/lib-es/api/index.test.d.ts.map +1 -0
- package/lib-es/api/index.test.js +198 -0
- package/lib-es/api/index.test.js.map +1 -0
- package/lib-es/logic/craftTransaction.integ.test.d.ts +2 -0
- package/lib-es/logic/craftTransaction.integ.test.d.ts.map +1 -0
- package/lib-es/logic/craftTransaction.integ.test.js +81 -0
- package/lib-es/logic/craftTransaction.integ.test.js.map +1 -0
- package/lib-es/logic/craftTransaction.test.d.ts +2 -0
- package/lib-es/logic/craftTransaction.test.d.ts.map +1 -0
- package/lib-es/logic/craftTransaction.test.js +148 -0
- package/lib-es/logic/craftTransaction.test.js.map +1 -0
- package/lib-es/logic/estimateFees.integ.test.d.ts +2 -0
- package/lib-es/logic/estimateFees.integ.test.d.ts.map +1 -0
- package/lib-es/logic/estimateFees.integ.test.js +66 -0
- package/lib-es/logic/estimateFees.integ.test.js.map +1 -0
- package/lib-es/logic/getBalance.test.d.ts +2 -0
- package/lib-es/logic/getBalance.test.d.ts.map +1 -0
- package/lib-es/logic/getBalance.test.js +18 -0
- package/lib-es/logic/getBalance.test.js.map +1 -0
- package/lib-es/logic/getStakes.test.d.ts +2 -0
- package/lib-es/logic/getStakes.test.d.ts.map +1 -0
- package/lib-es/logic/getStakes.test.js +128 -0
- package/lib-es/logic/getStakes.test.js.map +1 -0
- package/lib-es/logic/listOperations.js +1 -1
- package/lib-es/logic/listOperations.js.map +1 -1
- package/lib-es/logic/listOperations.test.d.ts +2 -0
- package/lib-es/logic/listOperations.test.d.ts.map +1 -0
- package/lib-es/logic/listOperations.test.js +194 -0
- package/lib-es/logic/listOperations.test.js.map +1 -0
- package/lib-es/logic/validateIntent.d.ts.map +1 -1
- package/lib-es/logic/validateIntent.js +6 -5
- package/lib-es/logic/validateIntent.js.map +1 -1
- package/lib-es/logic/validateIntent.test.d.ts +2 -0
- package/lib-es/logic/validateIntent.test.d.ts.map +1 -0
- package/lib-es/logic/validateIntent.test.js +251 -0
- package/lib-es/logic/validateIntent.test.js.map +1 -0
- package/lib-es/network/bakers.integration.test.d.ts +2 -0
- package/lib-es/network/bakers.integration.test.d.ts.map +1 -0
- package/lib-es/network/bakers.integration.test.js +52 -0
- package/lib-es/network/bakers.integration.test.js.map +1 -0
- package/lib-es/network/bakers.test.d.ts +2 -0
- package/lib-es/network/bakers.test.d.ts.map +1 -0
- package/lib-es/network/bakers.test.js +204 -0
- package/lib-es/network/bakers.test.js.map +1 -0
- package/package.json +8 -8
- package/src/logic/listOperations.test.ts +5 -5
- package/src/logic/listOperations.ts +2 -1
- package/src/logic/validateIntent.test.ts +23 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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
|