@streamr/node 101.0.0-beta.1 → 101.0.0-beta.2

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 (37) hide show
  1. package/dist/package.json +6 -6
  2. package/dist/src/plugins/operator/MaintainTopologyHelper.d.ts +3 -3
  3. package/dist/src/plugins/operator/MaintainTopologyHelper.js +18 -19
  4. package/dist/src/plugins/operator/MaintainTopologyHelper.js.map +1 -1
  5. package/dist/src/plugins/operator/OperatorPlugin.d.ts +1 -1
  6. package/dist/src/plugins/operator/OperatorPlugin.js +45 -54
  7. package/dist/src/plugins/operator/OperatorPlugin.js.map +1 -1
  8. package/dist/src/plugins/operator/announceNodeToContract.d.ts +2 -3
  9. package/dist/src/plugins/operator/announceNodeToContract.js +8 -8
  10. package/dist/src/plugins/operator/announceNodeToContract.js.map +1 -1
  11. package/dist/src/plugins/operator/checkOperatorValueBreach.d.ts +2 -2
  12. package/dist/src/plugins/operator/checkOperatorValueBreach.js +4 -4
  13. package/dist/src/plugins/operator/checkOperatorValueBreach.js.map +1 -1
  14. package/dist/src/plugins/operator/closeExpiredFlags.d.ts +2 -3
  15. package/dist/src/plugins/operator/closeExpiredFlags.js +6 -6
  16. package/dist/src/plugins/operator/closeExpiredFlags.js.map +1 -1
  17. package/dist/src/plugins/operator/inspectRandomNode.d.ts +3 -4
  18. package/dist/src/plugins/operator/inspectRandomNode.js +6 -6
  19. package/dist/src/plugins/operator/inspectRandomNode.js.map +1 -1
  20. package/dist/src/plugins/operator/inspectionUtils.d.ts +3 -4
  21. package/dist/src/plugins/operator/inspectionUtils.js +8 -7
  22. package/dist/src/plugins/operator/inspectionUtils.js.map +1 -1
  23. package/dist/src/plugins/operator/maintainOperatorValue.d.ts +2 -2
  24. package/dist/src/plugins/operator/maintainOperatorValue.js +3 -3
  25. package/dist/src/plugins/operator/maintainOperatorValue.js.map +1 -1
  26. package/dist/src/plugins/operator/reviewSuspectNode.d.ts +3 -4
  27. package/dist/src/plugins/operator/reviewSuspectNode.js +4 -4
  28. package/dist/src/plugins/operator/reviewSuspectNode.js.map +1 -1
  29. package/dist/src/plugins/storage/StorageEventListener.js +4 -4
  30. package/dist/src/plugins/storage/StorageEventListener.js.map +1 -1
  31. package/package.json +6 -6
  32. package/dist/src/plugins/operator/ContractFacade.d.ts +0 -80
  33. package/dist/src/plugins/operator/ContractFacade.js +0 -376
  34. package/dist/src/plugins/operator/ContractFacade.js.map +0 -1
  35. package/dist/src/plugins/operator/fetchRedundancyFactor.d.ts +0 -2
  36. package/dist/src/plugins/operator/fetchRedundancyFactor.js +0 -43
  37. package/dist/src/plugins/operator/fetchRedundancyFactor.js.map +0 -1
@@ -1,376 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.ContractFacade = exports.parsePartitionFromReviewRequestMetadata = exports.ParseError = exports.VOTE_NO_KICK = exports.VOTE_KICK = void 0;
7
- const network_contracts_ethers6_1 = require("@streamr/network-contracts-ethers6");
8
- const protocol_1 = require("@streamr/protocol");
9
- const utils_1 = require("@streamr/utils");
10
- const ethers_1 = require("ethers");
11
- const sample_1 = __importDefault(require("lodash/sample"));
12
- const node_fetch_1 = __importDefault(require("node-fetch"));
13
- exports.VOTE_KICK = '0x0000000000000000000000000000000000000000000000000000000000000001';
14
- exports.VOTE_NO_KICK = '0x0000000000000000000000000000000000000000000000000000000000000000';
15
- class ParseError extends Error {
16
- reasonText;
17
- constructor(reasonText) {
18
- super(`Failed to parse metadata: ${reasonText}`);
19
- this.reasonText = reasonText;
20
- }
21
- }
22
- exports.ParseError = ParseError;
23
- function parsePartitionFromReviewRequestMetadata(metadataAsString) {
24
- if (metadataAsString === undefined) {
25
- throw new ParseError('no metadata');
26
- }
27
- let metadata;
28
- try {
29
- metadata = JSON.parse(metadataAsString);
30
- }
31
- catch {
32
- throw new ParseError('malformed metadata');
33
- }
34
- const partition = Number(metadata.partition);
35
- if (isNaN(partition)) {
36
- throw new ParseError('invalid or missing "partition" field');
37
- }
38
- try {
39
- (0, protocol_1.ensureValidStreamPartitionIndex)(partition);
40
- }
41
- catch {
42
- throw new ParseError('invalid partition numbering');
43
- }
44
- return partition;
45
- }
46
- exports.parsePartitionFromReviewRequestMetadata = parsePartitionFromReviewRequestMetadata;
47
- const compareBigInts = (a, b) => {
48
- if (a < b) {
49
- return -1;
50
- }
51
- else if (a > b) {
52
- return 1;
53
- }
54
- else {
55
- return 0;
56
- }
57
- };
58
- const logger = new utils_1.Logger(module);
59
- class ContractFacade {
60
- operatorContract;
61
- theGraphClient;
62
- config;
63
- // for tests
64
- constructor(operatorContract, theGraphClient, config) {
65
- this.operatorContract = operatorContract;
66
- this.theGraphClient = theGraphClient;
67
- this.config = config;
68
- }
69
- static createInstance(config) {
70
- return new ContractFacade(new ethers_1.Contract(config.operatorContractAddress, network_contracts_ethers6_1.operatorABI, config.signer), new utils_1.TheGraphClient({
71
- serverUrl: config.theGraphUrl,
72
- fetch: node_fetch_1.default,
73
- logger
74
- }), config);
75
- }
76
- async writeHeartbeat(nodeDescriptor) {
77
- const metadata = JSON.stringify(nodeDescriptor);
78
- await (await this.operatorContract.heartbeat(metadata, await this.getEthersOverrides())).wait();
79
- }
80
- async getTimestampOfLastHeartbeat() {
81
- const result = await this.theGraphClient.queryEntity({
82
- query: `{
83
- operator(id: "${await this.getOperatorContractAddress()}") {
84
- latestHeartbeatTimestamp
85
- }
86
- }`
87
- });
88
- if (result.operator === null || result.operator.latestHeartbeatTimestamp === null) {
89
- return undefined;
90
- }
91
- else {
92
- const timestampInSecs = parseInt(result.operator.latestHeartbeatTimestamp);
93
- if (isNaN(timestampInSecs)) {
94
- throw new Error('Assertion failed: unexpected non-integer latestHeartbeatTimestamp'); // should never happen
95
- }
96
- return timestampInSecs * 1000;
97
- }
98
- }
99
- async getOperatorContractAddress() {
100
- return (0, utils_1.toEthereumAddress)(await this.operatorContract.getAddress());
101
- }
102
- async getSponsorshipsOfOperator(operatorAddress) {
103
- const createQuery = (lastId, pageSize) => {
104
- return {
105
- query: `
106
- {
107
- operator(id: "${operatorAddress}") {
108
- stakes(where: {id_gt: "${lastId}"}, first: ${pageSize}) {
109
- id
110
- sponsorship {
111
- id
112
- operatorCount
113
- stream {
114
- id
115
- }
116
- }
117
- }
118
- }
119
- }
120
- `
121
- };
122
- };
123
- const parseItems = (response) => {
124
- return response.operator?.stakes ?? [];
125
- };
126
- const queryResult = this.theGraphClient.queryEntities(createQuery, parseItems);
127
- const results = [];
128
- for await (const stake of queryResult) {
129
- results.push({
130
- sponsorshipAddress: (0, utils_1.toEthereumAddress)(stake.sponsorship.id),
131
- streamId: (0, protocol_1.toStreamID)(stake.sponsorship.stream.id),
132
- operatorCount: stake.sponsorship.operatorCount
133
- });
134
- }
135
- return results;
136
- }
137
- async getExpiredFlags(sponsorships, maxAgeInMs) {
138
- const maxFlagStartTime = Math.floor((Date.now() - maxAgeInMs) / 1000);
139
- const createQuery = (lastId, pageSize) => {
140
- return {
141
- query: `
142
- {
143
- flags (where : {
144
- id_gt: "${lastId}",
145
- flaggingTimestamp_lt: ${maxFlagStartTime},
146
- result_in: ["waiting", "voting"],
147
- sponsorship_in: ${JSON.stringify(sponsorships)}
148
- }, first: ${pageSize}) {
149
- id
150
- flaggingTimestamp
151
- target {
152
- id
153
- }
154
- sponsorship {
155
- id
156
- }
157
- }
158
- }`
159
- };
160
- };
161
- const flagEntities = this.theGraphClient.queryEntities(createQuery);
162
- const flags = [];
163
- for await (const flag of flagEntities) {
164
- flags.push(flag);
165
- }
166
- return flags;
167
- }
168
- async getOperatorsInSponsorship(sponsorshipAddress) {
169
- const createQuery = (lastId, pageSize) => {
170
- return {
171
- query: `
172
- {
173
- sponsorship(id: "${sponsorshipAddress}") {
174
- stakes(where: {id_gt: "${lastId}"}, first: ${pageSize}) {
175
- id
176
- operator {
177
- id
178
- }
179
- }
180
- }
181
- }
182
- `
183
- };
184
- };
185
- const parseItems = (response) => {
186
- return response.sponsorship?.stakes ?? [];
187
- };
188
- const queryResult = this.theGraphClient.queryEntities(createQuery, parseItems);
189
- const operatorIds = [];
190
- for await (const stake of queryResult) {
191
- operatorIds.push((0, utils_1.toEthereumAddress)(stake.operator.id));
192
- }
193
- return operatorIds;
194
- }
195
- async flag(sponsorship, operator, partition) {
196
- const metadata = JSON.stringify({ partition });
197
- await (await this.operatorContract.flag(sponsorship, operator, metadata, await this.getEthersOverrides())).wait();
198
- }
199
- async getRandomOperator() {
200
- const latestBlock = await this.getProvider().getBlockNumber();
201
- const operators = await this.getOperatorAddresses(latestBlock);
202
- const excluded = await this.getOperatorContractAddress();
203
- const operatorAddresses = operators.filter((id) => id !== excluded);
204
- logger.debug(`Found ${operatorAddresses.length} operators`);
205
- return (0, sample_1.default)(operatorAddresses);
206
- }
207
- /**
208
- * Find the sum of earnings in Sponsorships (that the Operator must withdraw before the sum reaches a limit),
209
- * SUBJECT TO the constraints, set in the OperatorServiceConfig:
210
- * - only take at most maxSponsorshipsInWithdraw addresses (those with most earnings), or all if undefined
211
- * - only take sponsorships that have more than minSponsorshipEarningsInWithdraw, or all if undefined
212
- */
213
- async getEarningsOf(operatorContractAddress, minSponsorshipEarningsInWithdraw, maxSponsorshipsInWithdraw) {
214
- const operator = new ethers_1.Contract(operatorContractAddress, network_contracts_ethers6_1.operatorABI, this.config.signer);
215
- const minSponsorshipEarningsInWithdrawWei = BigInt(minSponsorshipEarningsInWithdraw ?? 0);
216
- const { addresses: allSponsorshipAddresses, earnings, maxAllowedEarnings, } = await operator.getSponsorshipsAndEarnings();
217
- const sponsorships = allSponsorshipAddresses
218
- .map((address, i) => ({ address, earnings: earnings[i] }))
219
- .filter((sponsorship) => sponsorship.earnings >= minSponsorshipEarningsInWithdrawWei)
220
- .sort((a, b) => compareBigInts(a.earnings, b.earnings)) // TODO: after Node 20, use .toSorted() instead
221
- .slice(0, maxSponsorshipsInWithdraw); // take all if maxSponsorshipsInWithdraw is undefined
222
- return {
223
- sponsorshipAddresses: sponsorships.map((sponsorship) => (0, utils_1.toEthereumAddress)(sponsorship.address)),
224
- sumDataWei: sponsorships.reduce((sum, sponsorship) => sum += sponsorship.earnings, 0n),
225
- maxAllowedEarningsDataWei: maxAllowedEarnings
226
- };
227
- }
228
- async getMyEarnings(minSponsorshipEarningsInWithdraw, maxSponsorshipsInWithdraw) {
229
- return this.getEarningsOf(await this.getOperatorContractAddress(), minSponsorshipEarningsInWithdraw, maxSponsorshipsInWithdraw);
230
- }
231
- async withdrawMyEarningsFromSponsorships(sponsorshipAddresses) {
232
- await (await this.operatorContract.withdrawEarningsFromSponsorships(sponsorshipAddresses, await this.getEthersOverrides())).wait();
233
- }
234
- async triggerWithdraw(targetOperatorAddress, sponsorshipAddresses) {
235
- await (await this.operatorContract.triggerAnotherOperatorWithdraw(targetOperatorAddress, sponsorshipAddresses, await this.getEthersOverrides())).wait();
236
- }
237
- async getOperatorAddresses(requiredBlockNumber) {
238
- // TODO: find a clever more efficient way of selecting a random operator? (NET-1113)
239
- const createQuery = (lastId, pageSize) => {
240
- return {
241
- query: `
242
- {
243
- operators(where: {totalStakeInSponsorshipsWei_gt: "0", id_gt: "${lastId}"}, first: ${pageSize}) {
244
- id
245
- }
246
- }
247
- `
248
- };
249
- };
250
- this.theGraphClient.updateRequiredBlockNumber(requiredBlockNumber);
251
- const queryResult = this.theGraphClient.queryEntities(createQuery);
252
- const operatorAddresses = [];
253
- for await (const operator of queryResult) {
254
- operatorAddresses.push((0, utils_1.toEthereumAddress)(operator.id));
255
- }
256
- return operatorAddresses;
257
- }
258
- async *pullStakedStreams(requiredBlockNumber) {
259
- const contractAddress = await this.getOperatorContractAddress();
260
- const createQuery = (lastId, pageSize) => {
261
- return {
262
- query: `
263
- {
264
- operator(id: "${contractAddress}") {
265
- stakes(where: {id_gt: "${lastId}"}, first: ${pageSize}) {
266
- sponsorship {
267
- id
268
- stream {
269
- id
270
- }
271
- }
272
- }
273
- }
274
- _meta {
275
- block {
276
- number
277
- }
278
- }
279
- }
280
- `
281
- };
282
- };
283
- const parseItems = (response) => {
284
- if (!response.operator) {
285
- logger.error('Unable to find operator in The Graph', { operatorContractAddress: contractAddress });
286
- return [];
287
- }
288
- return response.operator.stakes;
289
- };
290
- this.theGraphClient.updateRequiredBlockNumber(requiredBlockNumber);
291
- yield* this.theGraphClient.queryEntities(createQuery, parseItems);
292
- }
293
- async hasOpenFlag(operatorAddress, sponsorshipAddress) {
294
- const createQuery = () => {
295
- return {
296
- query: `
297
- {
298
- flags(where: {
299
- sponsorship: "${sponsorshipAddress}",
300
- target: "${operatorAddress}",
301
- result_in: ["waiting", "voting"]
302
- }) {
303
- id
304
- }
305
- }
306
- `
307
- };
308
- };
309
- const queryResult = this.theGraphClient.queryEntities(createQuery);
310
- const flags = await (0, utils_1.collect)(queryResult, 1);
311
- if (flags.length > 0) {
312
- logger.debug('Found open flag', { flag: flags[0] });
313
- return true;
314
- }
315
- else {
316
- return false;
317
- }
318
- }
319
- addReviewRequestListener(listener, abortSignal) {
320
- (0, utils_1.addManagedEventListener)(this.operatorContract, 'ReviewRequest', async (sponsorship, targetOperator, voteStartTimestampInSecs, voteEndTimestampInSecs, metadataAsString) => {
321
- let partition;
322
- try {
323
- partition = parsePartitionFromReviewRequestMetadata(metadataAsString);
324
- }
325
- catch (err) {
326
- if (err instanceof ParseError) {
327
- logger.warn(`Skip review request (${err.reasonText})`, {
328
- address: await this.operatorContract.getAddress(),
329
- sponsorship,
330
- targetOperator,
331
- });
332
- }
333
- else {
334
- logger.warn('Encountered unexpected error', { err });
335
- }
336
- return;
337
- }
338
- logger.debug('Receive review request', {
339
- address: await this.operatorContract.getAddress(),
340
- sponsorship,
341
- targetOperator,
342
- partition
343
- });
344
- listener((0, utils_1.toEthereumAddress)(sponsorship), (0, utils_1.toEthereumAddress)(targetOperator), partition, voteStartTimestampInSecs * 1000, voteEndTimestampInSecs * 1000);
345
- }, abortSignal);
346
- }
347
- async getStreamId(sponsorshipAddress) {
348
- const sponsorship = new ethers_1.Contract(sponsorshipAddress, network_contracts_ethers6_1.sponsorshipABI, this.config.signer);
349
- return (0, protocol_1.toStreamID)(await sponsorship.streamId());
350
- }
351
- async voteOnFlag(sponsorship, targetOperator, kick) {
352
- const voteData = kick ? exports.VOTE_KICK : exports.VOTE_NO_KICK;
353
- // typical gas cost 99336, but this has shown insufficient sometimes
354
- // TODO should we set gasLimit only here, or also for other transactions made by ContractFacade?
355
- await (await this.operatorContract.voteOnFlag(sponsorship, targetOperator, voteData, { ...this.getEthersOverrides(), gasLimit: '1300000' })).wait();
356
- }
357
- async closeFlag(sponsorship, targetOperator) {
358
- // voteOnFlag is not used to vote here but to close the expired flag. The vote data gets ignored.
359
- // Anyone can call this function at this point.
360
- await this.voteOnFlag(sponsorship, targetOperator, false);
361
- }
362
- addOperatorContractStakeEventListener(eventName, listener) {
363
- this.operatorContract.on(eventName, listener); // TODO better type
364
- }
365
- removeOperatorContractStakeEventListener(eventName, listener) {
366
- this.operatorContract.off(eventName, listener);
367
- }
368
- getProvider() {
369
- return this.config.signer.provider;
370
- }
371
- getEthersOverrides() {
372
- return this.config.getEthersOverrides();
373
- }
374
- }
375
- exports.ContractFacade = ContractFacade;
376
- //# sourceMappingURL=ContractFacade.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ContractFacade.js","sourceRoot":"","sources":["../../../../src/plugins/operator/ContractFacade.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import { OperatorServiceConfig } from './OperatorPlugin';
2
- export declare function fetchRedundancyFactor({ operatorContractAddress, signer }: Pick<OperatorServiceConfig, 'operatorContractAddress' | 'signer'>): Promise<number | undefined>;
@@ -1,43 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.fetchRedundancyFactor = void 0;
4
- const utils_1 = require("@streamr/utils");
5
- const ethers_1 = require("ethers");
6
- const network_contracts_ethers6_1 = require("@streamr/network-contracts-ethers6");
7
- const zod_1 = require("zod");
8
- const logger = new utils_1.Logger(module);
9
- const MetadataSchema = zod_1.z.object({
10
- redundancyFactor: zod_1.z.number()
11
- .int()
12
- .gte(1)
13
- });
14
- async function fetchRedundancyFactor({ operatorContractAddress, signer }) {
15
- const operator = new ethers_1.Contract(operatorContractAddress, network_contracts_ethers6_1.operatorABI, signer);
16
- const metadataAsString = await operator.metadata();
17
- if (metadataAsString.length === 0) {
18
- return 1;
19
- }
20
- let metadata;
21
- try {
22
- metadata = JSON.parse(metadataAsString);
23
- }
24
- catch {
25
- logger.warn('Encountered malformed metadata', { operatorContractAddress, metadataAsString });
26
- return undefined;
27
- }
28
- let validatedMetadata;
29
- try {
30
- validatedMetadata = MetadataSchema.parse(metadata);
31
- }
32
- catch (err) {
33
- logger.warn('Encountered invalid metadata', {
34
- operatorContractAddress,
35
- metadataAsString,
36
- reason: err?.reason
37
- });
38
- return undefined;
39
- }
40
- return validatedMetadata.redundancyFactor;
41
- }
42
- exports.fetchRedundancyFactor = fetchRedundancyFactor;
43
- //# sourceMappingURL=fetchRedundancyFactor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fetchRedundancyFactor.js","sourceRoot":"","sources":["../../../../src/plugins/operator/fetchRedundancyFactor.ts"],"names":[],"mappings":";;;AAAA,0CAAuC;AACvC,mCAAiC;AACjC,kFAA0E;AAE1E,6BAAuB;AAEvB,MAAM,MAAM,GAAG,IAAI,cAAM,CAAC,MAAM,CAAC,CAAA;AAEjC,MAAM,cAAc,GAAG,OAAC,CAAC,MAAM,CAAC;IAC5B,gBAAgB,EAAE,OAAC,CAAC,MAAM,EAAE;SACvB,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;CACd,CAAC,CAAA;AAEK,KAAK,UAAU,qBAAqB,CAAC,EACxC,uBAAuB,EACvB,MAAM,EAC0D;IAChE,MAAM,QAAQ,GAAG,IAAI,iBAAQ,CAAC,uBAAuB,EAAE,uCAAW,EAAE,MAAM,CAAwB,CAAA;IAClG,MAAM,gBAAgB,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAA;IAElD,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,CAAA;IACZ,CAAC;IAED,IAAI,QAAiC,CAAA;IACrC,IAAI,CAAC;QACD,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA;IAC3C,CAAC;IAAC,MAAM,CAAC;QACL,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,CAAC,CAAA;QAC5F,OAAO,SAAS,CAAA;IACpB,CAAC;IAED,IAAI,iBAAiD,CAAA;IACrD,IAAI,CAAC;QACD,iBAAiB,GAAG,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IACtD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE;YACxC,uBAAuB;YACvB,gBAAgB;YAChB,MAAM,EAAE,GAAG,EAAE,MAAM;SACtB,CAAC,CAAA;QACF,OAAO,SAAS,CAAA;IACpB,CAAC;IACD,OAAO,iBAAiB,CAAC,gBAAgB,CAAA;AAC7C,CAAC;AA/BD,sDA+BC"}