@streamr/node 101.0.0-beta.0 → 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.
- package/dist/package.json +8 -8
- package/dist/src/plugins/operator/MaintainTopologyHelper.d.ts +3 -3
- package/dist/src/plugins/operator/MaintainTopologyHelper.js +18 -19
- package/dist/src/plugins/operator/MaintainTopologyHelper.js.map +1 -1
- package/dist/src/plugins/operator/OperatorPlugin.d.ts +1 -1
- package/dist/src/plugins/operator/OperatorPlugin.js +45 -54
- package/dist/src/plugins/operator/OperatorPlugin.js.map +1 -1
- package/dist/src/plugins/operator/announceNodeToContract.d.ts +2 -3
- package/dist/src/plugins/operator/announceNodeToContract.js +8 -8
- package/dist/src/plugins/operator/announceNodeToContract.js.map +1 -1
- package/dist/src/plugins/operator/checkOperatorValueBreach.d.ts +2 -2
- package/dist/src/plugins/operator/checkOperatorValueBreach.js +4 -4
- package/dist/src/plugins/operator/checkOperatorValueBreach.js.map +1 -1
- package/dist/src/plugins/operator/closeExpiredFlags.d.ts +2 -3
- package/dist/src/plugins/operator/closeExpiredFlags.js +6 -6
- package/dist/src/plugins/operator/closeExpiredFlags.js.map +1 -1
- package/dist/src/plugins/operator/inspectRandomNode.d.ts +3 -4
- package/dist/src/plugins/operator/inspectRandomNode.js +6 -6
- package/dist/src/plugins/operator/inspectRandomNode.js.map +1 -1
- package/dist/src/plugins/operator/inspectionUtils.d.ts +3 -4
- package/dist/src/plugins/operator/inspectionUtils.js +8 -7
- package/dist/src/plugins/operator/inspectionUtils.js.map +1 -1
- package/dist/src/plugins/operator/maintainOperatorValue.d.ts +2 -2
- package/dist/src/plugins/operator/maintainOperatorValue.js +3 -3
- package/dist/src/plugins/operator/maintainOperatorValue.js.map +1 -1
- package/dist/src/plugins/operator/reviewSuspectNode.d.ts +3 -4
- package/dist/src/plugins/operator/reviewSuspectNode.js +4 -4
- package/dist/src/plugins/operator/reviewSuspectNode.js.map +1 -1
- package/dist/src/plugins/storage/StorageEventListener.js +4 -4
- package/dist/src/plugins/storage/StorageEventListener.js.map +1 -1
- package/package.json +8 -8
- package/dist/src/plugins/operator/ContractFacade.d.ts +0 -80
- package/dist/src/plugins/operator/ContractFacade.js +0 -376
- package/dist/src/plugins/operator/ContractFacade.js.map +0 -1
- package/dist/src/plugins/operator/fetchRedundancyFactor.d.ts +0 -2
- package/dist/src/plugins/operator/fetchRedundancyFactor.js +0 -43
- package/dist/src/plugins/operator/fetchRedundancyFactor.js.map +0 -1
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@streamr/node",
|
|
3
|
-
"version": "101.0.0-beta.
|
|
3
|
+
"version": "101.0.0-beta.2",
|
|
4
4
|
"description": "A full-featured node implementation for the Streamr Network",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -30,11 +30,11 @@
|
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@ensdomains/ens-contracts": "1.1.4",
|
|
32
32
|
"@inquirer/prompts": "^4.2.1",
|
|
33
|
-
"@streamr/config": "^5.3.
|
|
33
|
+
"@streamr/config": "^5.3.12",
|
|
34
34
|
"@streamr/network-contracts-ethers6": "^7.1.2",
|
|
35
|
-
"@streamr/protocol": "101.0.0-beta.
|
|
36
|
-
"@streamr/sdk": "101.0.0-beta.
|
|
37
|
-
"@streamr/utils": "101.0.0-beta.
|
|
35
|
+
"@streamr/protocol": "101.0.0-beta.2",
|
|
36
|
+
"@streamr/sdk": "101.0.0-beta.2",
|
|
37
|
+
"@streamr/utils": "101.0.0-beta.2",
|
|
38
38
|
"aedes": "^0.51.0",
|
|
39
39
|
"ajv": "^8.8.2",
|
|
40
40
|
"ajv-formats": "^2.1.1",
|
|
@@ -53,13 +53,13 @@
|
|
|
53
53
|
"p-limit": "^3.1.0",
|
|
54
54
|
"qs": "^6.12.0",
|
|
55
55
|
"uuid": "^9.0.1",
|
|
56
|
-
"ws": "^8.
|
|
56
|
+
"ws": "^8.17.1",
|
|
57
57
|
"zod": "^3.22.4"
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
60
|
"@inquirer/testing": "^2.1.12",
|
|
61
|
-
"@streamr/dht": "101.0.0-beta.
|
|
62
|
-
"@streamr/test-utils": "101.0.0-beta.
|
|
61
|
+
"@streamr/dht": "101.0.0-beta.2",
|
|
62
|
+
"@streamr/test-utils": "101.0.0-beta.2",
|
|
63
63
|
"@types/cors": "^2.8.17",
|
|
64
64
|
"@types/express": "^4.17.21",
|
|
65
65
|
"@types/heap": "^0.2.34",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { StreamID } from '@streamr/protocol';
|
|
2
|
+
import { Operator } from '@streamr/sdk';
|
|
2
3
|
import { EventEmitter } from 'eventemitter3';
|
|
3
|
-
import { ContractFacade } from './ContractFacade';
|
|
4
4
|
export interface MaintainTopologyHelperEvents {
|
|
5
5
|
/**
|
|
6
6
|
* Emitted when staking into a Sponsorship on a stream that we haven't staked on before (in another Sponsorship)
|
|
@@ -16,8 +16,8 @@ export declare class MaintainTopologyHelper extends EventEmitter<MaintainTopolog
|
|
|
16
16
|
private readonly sponsorshipCountOfStream;
|
|
17
17
|
private onStakedListener?;
|
|
18
18
|
private onUnstakedListener?;
|
|
19
|
-
private readonly
|
|
20
|
-
constructor(
|
|
19
|
+
private readonly operator;
|
|
20
|
+
constructor(operator: Operator);
|
|
21
21
|
start(): Promise<void>;
|
|
22
22
|
stop(): void;
|
|
23
23
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MaintainTopologyHelper = void 0;
|
|
4
|
-
const protocol_1 = require("@streamr/protocol");
|
|
5
4
|
const utils_1 = require("@streamr/utils");
|
|
6
5
|
const eventemitter3_1 = require("eventemitter3");
|
|
7
6
|
const logger = new utils_1.Logger(module);
|
|
@@ -10,17 +9,18 @@ class MaintainTopologyHelper extends eventemitter3_1.EventEmitter {
|
|
|
10
9
|
sponsorshipCountOfStream = new Map();
|
|
11
10
|
onStakedListener;
|
|
12
11
|
onUnstakedListener;
|
|
13
|
-
|
|
14
|
-
constructor(
|
|
12
|
+
operator;
|
|
13
|
+
constructor(operator) {
|
|
15
14
|
super();
|
|
16
|
-
this.
|
|
15
|
+
this.operator = operator;
|
|
17
16
|
}
|
|
18
17
|
async start() {
|
|
19
|
-
const latestBlock = await this.
|
|
20
|
-
this.onStakedListener = async (
|
|
18
|
+
const latestBlock = await this.operator.getCurrentBlockNumber();
|
|
19
|
+
this.onStakedListener = async (event) => {
|
|
20
|
+
const sponsorship = event.sponsorship;
|
|
21
21
|
logger.info('Receive "Staked" event', { sponsorship });
|
|
22
22
|
const sponsorshipAddress = (0, utils_1.toEthereumAddress)(sponsorship);
|
|
23
|
-
const streamId = await this.
|
|
23
|
+
const streamId = await this.operator.getStreamId(sponsorshipAddress); // TODO: add catching here
|
|
24
24
|
if (this.streamIdOfSponsorship.has(sponsorshipAddress)) {
|
|
25
25
|
logger.debug('Ignore already staked into sponsorship', { sponsorship });
|
|
26
26
|
return;
|
|
@@ -32,8 +32,9 @@ class MaintainTopologyHelper extends eventemitter3_1.EventEmitter {
|
|
|
32
32
|
this.emit('addStakedStreams', [streamId]);
|
|
33
33
|
}
|
|
34
34
|
};
|
|
35
|
-
this.
|
|
36
|
-
this.onUnstakedListener = (
|
|
35
|
+
this.operator.on('staked', this.onStakedListener);
|
|
36
|
+
this.onUnstakedListener = (event) => {
|
|
37
|
+
const sponsorship = event.sponsorship;
|
|
37
38
|
logger.info('Receive "Unstaked" event', { sponsorship });
|
|
38
39
|
const sponsorshipAddress = (0, utils_1.toEthereumAddress)(sponsorship);
|
|
39
40
|
const streamId = this.streamIdOfSponsorship.get(sponsorshipAddress);
|
|
@@ -49,15 +50,13 @@ class MaintainTopologyHelper extends eventemitter3_1.EventEmitter {
|
|
|
49
50
|
this.emit('removeStakedStream', streamId);
|
|
50
51
|
}
|
|
51
52
|
};
|
|
52
|
-
this.
|
|
53
|
-
const queryResult = this.
|
|
53
|
+
this.operator.on('unstaked', this.onUnstakedListener);
|
|
54
|
+
const queryResult = this.operator.pullStakedStreams(latestBlock);
|
|
54
55
|
for await (const stake of queryResult) {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
this.
|
|
59
|
-
const sponsorshipCount = (this.sponsorshipCountOfStream.get(streamId) || 0) + 1;
|
|
60
|
-
this.sponsorshipCountOfStream.set(streamId, sponsorshipCount);
|
|
56
|
+
if (this.streamIdOfSponsorship.get(stake.sponsorship) !== stake.streamId) {
|
|
57
|
+
this.streamIdOfSponsorship.set(stake.sponsorship, stake.streamId);
|
|
58
|
+
const sponsorshipCount = (this.sponsorshipCountOfStream.get(stake.streamId) || 0) + 1;
|
|
59
|
+
this.sponsorshipCountOfStream.set(stake.streamId, sponsorshipCount);
|
|
61
60
|
}
|
|
62
61
|
}
|
|
63
62
|
if (this.sponsorshipCountOfStream.size > 0) {
|
|
@@ -66,8 +65,8 @@ class MaintainTopologyHelper extends eventemitter3_1.EventEmitter {
|
|
|
66
65
|
}
|
|
67
66
|
}
|
|
68
67
|
stop() {
|
|
69
|
-
this.
|
|
70
|
-
this.
|
|
68
|
+
this.operator.off('staked', this.onStakedListener);
|
|
69
|
+
this.operator.off('unstaked', this.onUnstakedListener);
|
|
71
70
|
this.removeAllListeners();
|
|
72
71
|
}
|
|
73
72
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MaintainTopologyHelper.js","sourceRoot":"","sources":["../../../../src/plugins/operator/MaintainTopologyHelper.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"MaintainTopologyHelper.js","sourceRoot":"","sources":["../../../../src/plugins/operator/MaintainTopologyHelper.ts"],"names":[],"mappings":";;;AAEA,0CAA2E;AAC3E,iDAA4C;AAE5C,MAAM,MAAM,GAAG,IAAI,cAAM,CAAC,MAAM,CAAC,CAAA;AAcjC,MAAa,sBAAuB,SAAQ,4BAA0C;IAEjE,qBAAqB,GAAmC,IAAI,GAAG,EAAE,CAAA;IACjE,wBAAwB,GAA0B,IAAI,GAAG,EAAE,CAAA;IACpE,gBAAgB,CAAuC;IACvD,kBAAkB,CAAuC;IAChD,QAAQ,CAAU;IAEnC,YAAY,QAAkB;QAC1B,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC5B,CAAC;IAED,KAAK,CAAC,KAAK;QACP,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CAAA;QAE/D,IAAI,CAAC,gBAAgB,GAAG,KAAK,EAAE,KAAiB,EAAE,EAAE;YAChD,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAA;YACrC,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,WAAW,EAAE,CAAC,CAAA;YACtD,MAAM,kBAAkB,GAAG,IAAA,yBAAiB,EAAC,WAAW,CAAC,CAAA;YACzD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAA,CAAC,0BAA0B;YAC/F,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBACrD,MAAM,CAAC,KAAK,CAAC,wCAAwC,EAAE,EAAE,WAAW,EAAE,CAAC,CAAA;gBACvE,OAAM;YACV,CAAC;YACD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAA;YAE5D,MAAM,gBAAgB,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;YAC/E,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAA;YAC7D,IAAI,gBAAgB,KAAK,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;YAC7C,CAAC;QACL,CAAC,CAAA;QACD,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;QACjD,IAAI,CAAC,kBAAkB,GAAG,CAAC,KAAiB,EAAE,EAAE;YAC5C,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAA;YACrC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,WAAW,EAAE,CAAC,CAAA;YACxD,MAAM,kBAAkB,GAAG,IAAA,yBAAiB,EAAC,WAAW,CAAC,CAAA;YACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;YACnE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,CAAC,KAAK,CAAC,yCAAyC,EAAE,EAAE,kBAAkB,EAAE,CAAC,CAAA;gBAC/E,OAAM;YACV,CAAC;YACD,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAA;YACrD,MAAM,gBAAgB,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,QAAQ,CAAE,GAAG,CAAC,CAAA;YACzE,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAA;YAC7D,IAAI,gBAAgB,KAAK,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;gBAC9C,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAA;YAC7C,CAAC;QACL,CAAC,CAAA;QACD,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;QAErD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAA;QAChE,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACvE,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;gBACjE,MAAM,gBAAgB,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;gBACrF,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAA;YACvE,CAAC;QACL,CAAC;QACD,IAAI,IAAI,CAAC,wBAAwB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACzC,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,CAAC,CAAA;YACvE,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAA;QACjD,CAAC;IACL,CAAC;IAED,IAAI;QACA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAiB,CAAC,CAAA;QACnD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,kBAAmB,CAAC,CAAA;QACvD,IAAI,CAAC,kBAAkB,EAAE,CAAA;IAC7B,CAAC;CACJ;AAxED,wDAwEC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { SignerWithProvider, StreamrClient } from '@streamr/sdk';
|
|
1
2
|
import { EthereumAddress } from '@streamr/utils';
|
|
2
3
|
import { Schema } from 'ajv';
|
|
3
4
|
import { Overrides } from 'ethers';
|
|
4
|
-
import { StreamrClient, SignerWithProvider } from '@streamr/sdk';
|
|
5
5
|
import { Plugin } from '../../Plugin';
|
|
6
6
|
export interface OperatorPluginConfig {
|
|
7
7
|
operatorContractAddress: string;
|
|
@@ -6,42 +6,33 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.OperatorPlugin = void 0;
|
|
7
7
|
const utils_1 = require("@streamr/utils");
|
|
8
8
|
const Plugin_1 = require("../../Plugin");
|
|
9
|
-
const
|
|
9
|
+
const MaintainTopologyHelper_1 = require("./MaintainTopologyHelper");
|
|
10
10
|
const MaintainTopologyService_1 = require("./MaintainTopologyService");
|
|
11
11
|
const OperatorFleetState_1 = require("./OperatorFleetState");
|
|
12
|
-
const
|
|
13
|
-
const createIsLeaderFn_1 = require("./createIsLeaderFn");
|
|
12
|
+
const StreamPartAssignments_1 = require("./StreamPartAssignments");
|
|
14
13
|
const announceNodeToContract_1 = require("./announceNodeToContract");
|
|
15
14
|
const announceNodeToStream_1 = require("./announceNodeToStream");
|
|
16
15
|
const checkOperatorValueBreach_1 = require("./checkOperatorValueBreach");
|
|
17
|
-
const
|
|
16
|
+
const closeExpiredFlags_1 = require("./closeExpiredFlags");
|
|
17
|
+
const config_schema_json_1 = __importDefault(require("./config.schema.json"));
|
|
18
|
+
const createIsLeaderFn_1 = require("./createIsLeaderFn");
|
|
18
19
|
const formCoordinationStreamId_1 = require("./formCoordinationStreamId");
|
|
19
|
-
const StreamPartAssignments_1 = require("./StreamPartAssignments");
|
|
20
|
-
const MaintainTopologyHelper_1 = require("./MaintainTopologyHelper");
|
|
21
20
|
const inspectRandomNode_1 = require("./inspectRandomNode");
|
|
22
|
-
const
|
|
21
|
+
const maintainOperatorValue_1 = require("./maintainOperatorValue");
|
|
23
22
|
const reviewSuspectNode_1 = require("./reviewSuspectNode");
|
|
24
|
-
const closeExpiredFlags_1 = require("./closeExpiredFlags");
|
|
25
23
|
const logger = new utils_1.Logger(module);
|
|
26
24
|
class OperatorPlugin extends Plugin_1.Plugin {
|
|
27
25
|
abortController = new AbortController();
|
|
28
26
|
async start(streamrClient) {
|
|
29
|
-
const signer = await streamrClient.getSigner();
|
|
30
27
|
const nodeId = await streamrClient.getNodeId();
|
|
31
28
|
const operatorContractAddress = (0, utils_1.toEthereumAddress)(this.pluginConfig.operatorContractAddress);
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
operatorContractAddress,
|
|
35
|
-
theGraphUrl: streamrClient.getConfig().contracts.theGraphUrl,
|
|
36
|
-
getEthersOverrides: () => streamrClient.getEthersOverrides()
|
|
37
|
-
};
|
|
38
|
-
const redundancyFactor = await (0, fetchRedundancyFactor_1.fetchRedundancyFactor)(serviceConfig);
|
|
29
|
+
const operator = streamrClient.getOperator(operatorContractAddress);
|
|
30
|
+
const redundancyFactor = await operator.fetchRedundancyFactor();
|
|
39
31
|
if (redundancyFactor === undefined) {
|
|
40
32
|
throw new Error('Failed to fetch my redundancy factor');
|
|
41
33
|
}
|
|
42
34
|
logger.info('Fetched my redundancy factor', { redundancyFactor });
|
|
43
|
-
const
|
|
44
|
-
const maintainTopologyHelper = new MaintainTopologyHelper_1.MaintainTopologyHelper(contractFacade);
|
|
35
|
+
const maintainTopologyHelper = new MaintainTopologyHelper_1.MaintainTopologyHelper(operator);
|
|
45
36
|
const createOperatorFleetState = OperatorFleetState_1.OperatorFleetState.createOperatorFleetStateBuilder(streamrClient, this.pluginConfig.heartbeatUpdateIntervalInMs, this.pluginConfig.fleetState.pruneAgeInMs, this.pluginConfig.fleetState.pruneIntervalInMs, this.pluginConfig.fleetState.latencyExtraInMs, this.pluginConfig.fleetState.warmupPeriodInMs);
|
|
46
37
|
const fleetState = createOperatorFleetState((0, formCoordinationStreamId_1.formCoordinationStreamId)(operatorContractAddress));
|
|
47
38
|
const streamPartAssignments = new StreamPartAssignments_1.StreamPartAssignments(nodeId, redundancyFactor, async (streamId) => {
|
|
@@ -64,7 +55,7 @@ class OperatorPlugin extends Plugin_1.Plugin {
|
|
|
64
55
|
await (0, announceNodeToStream_1.announceNodeToStream)((0, utils_1.toEthereumAddress)(this.pluginConfig.operatorContractAddress), streamrClient);
|
|
65
56
|
})();
|
|
66
57
|
}, this.pluginConfig.heartbeatUpdateIntervalInMs, this.abortController.signal);
|
|
67
|
-
await (0, utils_1.scheduleAtInterval)(async () => (0, checkOperatorValueBreach_1.checkOperatorValueBreach)(
|
|
58
|
+
await (0, utils_1.scheduleAtInterval)(async () => (0, checkOperatorValueBreach_1.checkOperatorValueBreach)(operator, streamrClient, this.pluginConfig.maintainOperatorValue.minSponsorshipEarningsInWithdraw, this.pluginConfig.maintainOperatorValue.maxSponsorshipsInWithdraw).catch((err) => {
|
|
68
59
|
logger.warn('Encountered error', { err });
|
|
69
60
|
}), this.pluginConfig.checkOperatorValueBreachIntervalInMs, true, this.abortController.signal);
|
|
70
61
|
await fleetState.waitUntilReady();
|
|
@@ -72,7 +63,7 @@ class OperatorPlugin extends Plugin_1.Plugin {
|
|
|
72
63
|
try {
|
|
73
64
|
await (0, utils_1.scheduleAtInterval)(async () => {
|
|
74
65
|
if (isLeader()) {
|
|
75
|
-
await (0, announceNodeToContract_1.announceNodeToContract)(this.pluginConfig.announceNodeToContract.writeIntervalInMs,
|
|
66
|
+
await (0, announceNodeToContract_1.announceNodeToContract)(this.pluginConfig.announceNodeToContract.writeIntervalInMs, operator, streamrClient);
|
|
76
67
|
}
|
|
77
68
|
}, this.pluginConfig.announceNodeToContract.pollIntervalInMs, true, this.abortController.signal);
|
|
78
69
|
}
|
|
@@ -83,7 +74,7 @@ class OperatorPlugin extends Plugin_1.Plugin {
|
|
|
83
74
|
await (0, utils_1.scheduleAtInterval)(async () => {
|
|
84
75
|
if (isLeader()) {
|
|
85
76
|
try {
|
|
86
|
-
await (0, maintainOperatorValue_1.maintainOperatorValue)(this.pluginConfig.maintainOperatorValue.withdrawLimitSafetyFraction, this.pluginConfig.maintainOperatorValue.minSponsorshipEarningsInWithdraw, this.pluginConfig.maintainOperatorValue.maxSponsorshipsInWithdraw,
|
|
77
|
+
await (0, maintainOperatorValue_1.maintainOperatorValue)(this.pluginConfig.maintainOperatorValue.withdrawLimitSafetyFraction, this.pluginConfig.maintainOperatorValue.minSponsorshipEarningsInWithdraw, this.pluginConfig.maintainOperatorValue.maxSponsorshipsInWithdraw, operator);
|
|
87
78
|
}
|
|
88
79
|
catch (err) {
|
|
89
80
|
logger.error('Encountered error while checking earnings', { err });
|
|
@@ -92,10 +83,9 @@ class OperatorPlugin extends Plugin_1.Plugin {
|
|
|
92
83
|
}, this.pluginConfig.maintainOperatorValue.intervalInMs, true, this.abortController.signal);
|
|
93
84
|
await (0, utils_1.scheduleAtInterval)(async () => {
|
|
94
85
|
try {
|
|
95
|
-
await (0, inspectRandomNode_1.inspectRandomNode)(operatorContractAddress,
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
}), createOperatorFleetState, this.abortController.signal);
|
|
86
|
+
await (0, inspectRandomNode_1.inspectRandomNode)(operatorContractAddress, operator, streamPartAssignments, streamrClient, this.pluginConfig.heartbeatTimeoutInMs, async (targetOperatorContractAddress) => {
|
|
87
|
+
return streamrClient.getOperator(targetOperatorContractAddress).fetchRedundancyFactor();
|
|
88
|
+
}, createOperatorFleetState, this.abortController.signal);
|
|
99
89
|
}
|
|
100
90
|
catch (err) {
|
|
101
91
|
logger.error('Encountered error while inspecting random node', { err });
|
|
@@ -103,41 +93,42 @@ class OperatorPlugin extends Plugin_1.Plugin {
|
|
|
103
93
|
}, this.pluginConfig.inspectRandomNode.intervalInMs, false, this.abortController.signal);
|
|
104
94
|
await (0, utils_1.scheduleAtInterval)(async () => {
|
|
105
95
|
try {
|
|
106
|
-
await (0, closeExpiredFlags_1.closeExpiredFlags)(this.pluginConfig.closeExpiredFlags.maxAgeInMs,
|
|
96
|
+
await (0, closeExpiredFlags_1.closeExpiredFlags)(this.pluginConfig.closeExpiredFlags.maxAgeInMs, operator);
|
|
107
97
|
}
|
|
108
98
|
catch (err) {
|
|
109
99
|
logger.error('Encountered error while closing expired flags', { err });
|
|
110
100
|
}
|
|
111
101
|
}, this.pluginConfig.closeExpiredFlags.intervalInMs, false, this.abortController.signal);
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
102
|
+
(0, utils_1.addManagedEventListener)(operator, 'reviewRequested', (event) => {
|
|
103
|
+
setImmediate(async () => {
|
|
104
|
+
try {
|
|
105
|
+
if (isLeader()) {
|
|
106
|
+
await (0, reviewSuspectNode_1.reviewSuspectNode)({
|
|
107
|
+
sponsorshipAddress: event.sponsorship,
|
|
108
|
+
targetOperator: event.targetOperator,
|
|
109
|
+
partition: event.partition,
|
|
110
|
+
myOperator: operator,
|
|
111
|
+
streamrClient,
|
|
112
|
+
createOperatorFleetState,
|
|
113
|
+
getRedundancyFactor: async (targetOperatorContractAddress) => {
|
|
114
|
+
return streamrClient.getOperator(targetOperatorContractAddress).fetchRedundancyFactor();
|
|
115
|
+
},
|
|
116
|
+
maxSleepTime: 5 * 60 * 1000,
|
|
117
|
+
heartbeatTimeoutInMs: this.pluginConfig.heartbeatTimeoutInMs,
|
|
118
|
+
votingPeriod: {
|
|
119
|
+
startTime: event.votingPeriodStartTimestamp,
|
|
120
|
+
endTime: event.votingPeriodEndTimestamp
|
|
121
|
+
},
|
|
122
|
+
inspectionIntervalInMs: 8 * 60 * 1000,
|
|
123
|
+
maxInspections: 10,
|
|
124
|
+
abortSignal: this.abortController.signal
|
|
125
|
+
});
|
|
126
|
+
}
|
|
136
127
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
}
|
|
128
|
+
catch (err) {
|
|
129
|
+
logger.error('Encountered error while processing review request', { err });
|
|
130
|
+
}
|
|
131
|
+
});
|
|
141
132
|
}, this.abortController.signal);
|
|
142
133
|
});
|
|
143
134
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OperatorPlugin.js","sourceRoot":"","sources":["../../../../src/plugins/operator/OperatorPlugin.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"OperatorPlugin.js","sourceRoot":"","sources":["../../../../src/plugins/operator/OperatorPlugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
import StreamrClient from '@streamr/sdk';
|
|
2
|
-
|
|
3
|
-
export declare const announceNodeToContract: (writeIntervalInMs: number, contractFacade: ContractFacade, streamrClient: StreamrClient) => Promise<void>;
|
|
1
|
+
import { Operator, StreamrClient } from '@streamr/sdk';
|
|
2
|
+
export declare const announceNodeToContract: (writeIntervalInMs: number, operator: Operator, streamrClient: StreamrClient) => Promise<void>;
|
|
@@ -3,19 +3,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.announceNodeToContract = void 0;
|
|
4
4
|
const utils_1 = require("@streamr/utils");
|
|
5
5
|
const logger = new utils_1.Logger(module);
|
|
6
|
-
const announceNodeToContract = async (writeIntervalInMs,
|
|
7
|
-
if (await isHeartbeatStale(writeIntervalInMs,
|
|
8
|
-
await writeHeartbeat(
|
|
6
|
+
const announceNodeToContract = async (writeIntervalInMs, operator, streamrClient) => {
|
|
7
|
+
if (await isHeartbeatStale(writeIntervalInMs, operator)) {
|
|
8
|
+
await writeHeartbeat(operator, streamrClient);
|
|
9
9
|
}
|
|
10
10
|
};
|
|
11
11
|
exports.announceNodeToContract = announceNodeToContract;
|
|
12
|
-
const isHeartbeatStale = async (writeIntervalInMs,
|
|
12
|
+
const isHeartbeatStale = async (writeIntervalInMs, operator) => {
|
|
13
13
|
logger.debug('Polling last heartbeat timestamp', {
|
|
14
|
-
operatorContractAddress: await
|
|
14
|
+
operatorContractAddress: await operator.getContractAddress()
|
|
15
15
|
});
|
|
16
16
|
let lastHeartbeatTs;
|
|
17
17
|
try {
|
|
18
|
-
lastHeartbeatTs = await
|
|
18
|
+
lastHeartbeatTs = await operator.getTimestampOfLastHeartbeat();
|
|
19
19
|
}
|
|
20
20
|
catch (err) {
|
|
21
21
|
logger.warn('Failed to poll last heartbeat timestamp', { reason: err?.message });
|
|
@@ -25,11 +25,11 @@ const isHeartbeatStale = async (writeIntervalInMs, contractFacade) => {
|
|
|
25
25
|
logger.debug('Polled last heartbeat timestamp', { lastHeartbeatTs, stale });
|
|
26
26
|
return stale;
|
|
27
27
|
};
|
|
28
|
-
const writeHeartbeat = async (
|
|
28
|
+
const writeHeartbeat = async (operator, streamrClient) => {
|
|
29
29
|
logger.info('Write heartbeat');
|
|
30
30
|
try {
|
|
31
31
|
const nodeDescriptor = await streamrClient.getPeerDescriptor();
|
|
32
|
-
await
|
|
32
|
+
await operator.writeHeartbeat(nodeDescriptor);
|
|
33
33
|
logger.debug('Wrote heartbeat', { nodeDescriptor });
|
|
34
34
|
}
|
|
35
35
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"announceNodeToContract.js","sourceRoot":"","sources":["../../../../src/plugins/operator/announceNodeToContract.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"announceNodeToContract.js","sourceRoot":"","sources":["../../../../src/plugins/operator/announceNodeToContract.ts"],"names":[],"mappings":";;;AACA,0CAAuC;AAEvC,MAAM,MAAM,GAAG,IAAI,cAAM,CAAC,MAAM,CAAC,CAAA;AAE1B,MAAM,sBAAsB,GAAG,KAAK,EACvC,iBAAyB,EACzB,QAAkB,EAClB,aAA4B,EACf,EAAE;IACf,IAAI,MAAM,gBAAgB,CAAC,iBAAiB,EAAE,QAAQ,CAAC,EAAE,CAAC;QACtD,MAAM,cAAc,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAA;IACjD,CAAC;AACL,CAAC,CAAA;AARY,QAAA,sBAAsB,0BAQlC;AAED,MAAM,gBAAgB,GAAG,KAAK,EAC1B,iBAAyB,EACzB,QAAkB,EACF,EAAE;IAClB,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE;QAC7C,uBAAuB,EAAE,MAAM,QAAQ,CAAC,kBAAkB,EAAE;KAC/D,CAAC,CAAA;IACF,IAAI,eAAe,CAAA;IACnB,IAAI,CAAC;QACD,eAAe,GAAG,MAAM,QAAQ,CAAC,2BAA2B,EAAE,CAAA;IAClE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,MAAM,CAAC,IAAI,CAAC,yCAAyC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAA;QAChF,OAAO,KAAK,CAAA,CAAC,+EAA+E;IAChG,CAAC;IACD,MAAM,KAAK,GAAG,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,GAAG,iBAAiB,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;IACtG,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAA;IAC3E,OAAO,KAAK,CAAA;AAChB,CAAC,CAAA;AAED,MAAM,cAAc,GAAG,KAAK,EACxB,QAAkB,EAClB,aAA4B,EACf,EAAE;IACf,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;IAC9B,IAAI,CAAC;QACD,MAAM,cAAc,GAAG,MAAM,aAAa,CAAC,iBAAiB,EAAE,CAAA;QAC9D,MAAM,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,CAAA;QAC7C,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,EAAE,cAAc,EAAE,CAAC,CAAA;IACvD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAA;IACtE,CAAC;AACL,CAAC,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare const checkOperatorValueBreach: (
|
|
1
|
+
import { StreamrClient, Operator } from '@streamr/sdk';
|
|
2
|
+
export declare const checkOperatorValueBreach: (myOperator: Operator, client: StreamrClient, minSponsorshipEarningsInWithdraw: number, maxSponsorshipsInWithdraw: number) => Promise<void>;
|
|
@@ -3,18 +3,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.checkOperatorValueBreach = void 0;
|
|
4
4
|
const utils_1 = require("@streamr/utils");
|
|
5
5
|
const logger = new utils_1.Logger(module);
|
|
6
|
-
const checkOperatorValueBreach = async (
|
|
7
|
-
const targetOperatorAddress = await
|
|
6
|
+
const checkOperatorValueBreach = async (myOperator, client, minSponsorshipEarningsInWithdraw, maxSponsorshipsInWithdraw) => {
|
|
7
|
+
const targetOperatorAddress = await myOperator.getRandomOperator();
|
|
8
8
|
if (targetOperatorAddress === undefined) {
|
|
9
9
|
logger.info('No operators found');
|
|
10
10
|
return;
|
|
11
11
|
}
|
|
12
12
|
logger.info('Check other operator\'s earnings for breach', { targetOperatorAddress });
|
|
13
|
-
const { sumDataWei, maxAllowedEarningsDataWei, sponsorshipAddresses } = await
|
|
13
|
+
const { sumDataWei, maxAllowedEarningsDataWei, sponsorshipAddresses } = await client.getOperator(targetOperatorAddress).getEarnings(minSponsorshipEarningsInWithdraw, maxSponsorshipsInWithdraw);
|
|
14
14
|
logger.trace(` -> is ${sumDataWei} > ${maxAllowedEarningsDataWei}?`);
|
|
15
15
|
if (sumDataWei > maxAllowedEarningsDataWei) {
|
|
16
16
|
logger.info('Withdraw earnings from sponsorships (target operator value in breach)', { targetOperatorAddress, sponsorshipAddresses, sumDataWei, maxAllowedEarningsDataWei });
|
|
17
|
-
await
|
|
17
|
+
await myOperator.triggerAnotherOperatorWithdraw(targetOperatorAddress, sponsorshipAddresses);
|
|
18
18
|
}
|
|
19
19
|
};
|
|
20
20
|
exports.checkOperatorValueBreach = checkOperatorValueBreach;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkOperatorValueBreach.js","sourceRoot":"","sources":["../../../../src/plugins/operator/checkOperatorValueBreach.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"checkOperatorValueBreach.js","sourceRoot":"","sources":["../../../../src/plugins/operator/checkOperatorValueBreach.ts"],"names":[],"mappings":";;;AACA,0CAAuC;AAEvC,MAAM,MAAM,GAAG,IAAI,cAAM,CAAC,MAAM,CAAC,CAAA;AAE1B,MAAM,wBAAwB,GAAG,KAAK,EACzC,UAAoB,EACpB,MAAqB,EACrB,gCAAwC,EACxC,yBAAiC,EACpB,EAAE;IACf,MAAM,qBAAqB,GAAG,MAAM,UAAU,CAAC,iBAAiB,EAAE,CAAA;IAClE,IAAI,qBAAqB,KAAK,SAAS,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;QACjC,OAAM;IACV,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,6CAA6C,EAAE,EAAE,qBAAqB,EAAE,CAAC,CAAA;IACrF,MAAM,EAAE,UAAU,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC,WAAW,CAC/H,gCAAgC,EAChC,yBAAyB,CAC5B,CAAA;IACD,MAAM,CAAC,KAAK,CAAC,UAAU,UAAU,MAAM,yBAAyB,GAAG,CAAC,CAAA;IACpE,IAAI,UAAU,GAAG,yBAAyB,EAAE,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,uEAAuE,EAC/E,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,UAAU,EAAE,yBAAyB,EAAE,CAAC,CAAA;QAC3F,MAAM,UAAU,CAAC,8BAA8B,CAAC,qBAAqB,EAAE,oBAAoB,CAAC,CAAA;IAChG,CAAC;AACL,CAAC,CAAA;AAtBY,QAAA,wBAAwB,4BAsBpC"}
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
export declare const closeExpiredFlags: (maxAgeInMs: number, operatorContractAddress: EthereumAddress, contractFacade: ContractFacade) => Promise<void>;
|
|
1
|
+
import { Operator } from '@streamr/sdk';
|
|
2
|
+
export declare const closeExpiredFlags: (maxAgeInMs: number, operator: Operator) => Promise<void>;
|
|
@@ -3,21 +3,21 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.closeExpiredFlags = void 0;
|
|
4
4
|
const utils_1 = require("@streamr/utils");
|
|
5
5
|
const logger = new utils_1.Logger(module);
|
|
6
|
-
const closeExpiredFlags = async (maxAgeInMs,
|
|
6
|
+
const closeExpiredFlags = async (maxAgeInMs, operator) => {
|
|
7
7
|
logger.info('Start');
|
|
8
|
-
const sponsorships = (await
|
|
8
|
+
const sponsorships = (await operator.getSponsorships())
|
|
9
9
|
.map((sponsorship) => sponsorship.sponsorshipAddress);
|
|
10
10
|
logger.debug(`Found ${sponsorships.length} sponsorships`);
|
|
11
11
|
if (sponsorships.length === 0) {
|
|
12
12
|
return;
|
|
13
13
|
}
|
|
14
|
-
const flags = await
|
|
14
|
+
const flags = await operator.getExpiredFlags(sponsorships, maxAgeInMs);
|
|
15
15
|
logger.debug(`Found ${flags.length} expired flags to close`);
|
|
16
16
|
for (const flag of flags) {
|
|
17
|
-
const operatorAddress = flag.
|
|
18
|
-
const sponsorship = flag.sponsorship
|
|
17
|
+
const operatorAddress = flag.targetOperator;
|
|
18
|
+
const sponsorship = flag.sponsorship;
|
|
19
19
|
logger.info('Close expired flag', { flag });
|
|
20
|
-
await
|
|
20
|
+
await operator.closeFlag(sponsorship, operatorAddress);
|
|
21
21
|
}
|
|
22
22
|
};
|
|
23
23
|
exports.closeExpiredFlags = closeExpiredFlags;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"closeExpiredFlags.js","sourceRoot":"","sources":["../../../../src/plugins/operator/closeExpiredFlags.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"closeExpiredFlags.js","sourceRoot":"","sources":["../../../../src/plugins/operator/closeExpiredFlags.ts"],"names":[],"mappings":";;;AACA,0CAAuC;AAEvC,MAAM,MAAM,GAAG,IAAI,cAAM,CAAC,MAAM,CAAC,CAAA;AAE1B,MAAM,iBAAiB,GAAG,KAAK,EAClC,UAAkB,EAClB,QAAkB,EACL,EAAE;IACf,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAEpB,MAAM,YAAY,GAAG,CAAC,MAAM,QAAQ,CAAC,eAAe,EAAE,CAAC;SAClD,GAAG,CAAC,CAAC,WAA0C,EAAE,EAAE,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAA;IACxF,MAAM,CAAC,KAAK,CAAC,SAAS,YAAY,CAAC,MAAM,eAAe,CAAC,CAAA;IACzD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAM;IACV,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,YAAY,EAAE,UAAU,CAAC,CAAA;IACtE,MAAM,CAAC,KAAK,CAAC,SAAS,KAAK,CAAC,MAAM,yBAAyB,CAAC,CAAA;IAC5D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAA;QAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;QACpC,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3C,MAAM,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,eAAe,CAAC,CAAA;IAC1D,CAAC;AACL,CAAC,CAAA;AApBY,QAAA,iBAAiB,qBAoB7B"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
+
import { Operator, StreamrClient } from '@streamr/sdk';
|
|
2
3
|
import { EthereumAddress } from '@streamr/utils';
|
|
4
|
+
import { CreateOperatorFleetStateFn } from './OperatorFleetState';
|
|
3
5
|
import { StreamPartAssignments } from './StreamPartAssignments';
|
|
4
|
-
import { StreamrClient } from '@streamr/sdk';
|
|
5
6
|
import { findTarget } from './inspectionUtils';
|
|
6
|
-
|
|
7
|
-
import { CreateOperatorFleetStateFn } from './OperatorFleetState';
|
|
8
|
-
export declare function inspectRandomNode(operatorContractAddress: EthereumAddress, contractFacade: ContractFacade, assignments: StreamPartAssignments, streamrClient: StreamrClient, heartbeatTimeoutInMs: number, getRedundancyFactor: (operatorContractAddress: EthereumAddress) => Promise<number | undefined>, createOperatorFleetState: CreateOperatorFleetStateFn, abortSignal: AbortSignal, findTargetFn?: typeof findTarget): Promise<void>;
|
|
7
|
+
export declare function inspectRandomNode(operatorContractAddress: EthereumAddress, myOperator: Operator, assignments: StreamPartAssignments, streamrClient: StreamrClient, heartbeatTimeoutInMs: number, getRedundancyFactor: (operatorContractAddress: EthereumAddress) => Promise<number | undefined>, createOperatorFleetState: CreateOperatorFleetStateFn, abortSignal: AbortSignal, findTargetFn?: typeof findTarget): Promise<void>;
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.inspectRandomNode = void 0;
|
|
4
|
-
const utils_1 = require("@streamr/utils");
|
|
5
4
|
const protocol_1 = require("@streamr/protocol");
|
|
6
|
-
const
|
|
5
|
+
const utils_1 = require("@streamr/utils");
|
|
7
6
|
const inspectOverTime_1 = require("./inspectOverTime");
|
|
8
|
-
|
|
7
|
+
const inspectionUtils_1 = require("./inspectionUtils");
|
|
8
|
+
async function inspectRandomNode(operatorContractAddress, myOperator, assignments, streamrClient, heartbeatTimeoutInMs, getRedundancyFactor, createOperatorFleetState, abortSignal, findTargetFn = inspectionUtils_1.findTarget) {
|
|
9
9
|
const traceId = (0, utils_1.randomString)(6);
|
|
10
10
|
const logger = new utils_1.Logger(module, { traceId });
|
|
11
11
|
logger.info('Select a random operator to inspect');
|
|
12
|
-
const target = await findTargetFn(operatorContractAddress,
|
|
12
|
+
const target = await findTargetFn(operatorContractAddress, myOperator, assignments, streamrClient, logger);
|
|
13
13
|
if (target === undefined) {
|
|
14
14
|
return;
|
|
15
15
|
}
|
|
@@ -32,13 +32,13 @@ async function inspectRandomNode(operatorContractAddress, contractFacade, assign
|
|
|
32
32
|
logger.info('Not raising flag', { target });
|
|
33
33
|
return;
|
|
34
34
|
}
|
|
35
|
-
const flagAlreadyRaised = await
|
|
35
|
+
const flagAlreadyRaised = await streamrClient.getOperator(target.operatorAddress).hasOpenFlag(target.sponsorshipAddress);
|
|
36
36
|
if (flagAlreadyRaised) {
|
|
37
37
|
logger.info('Not raising flag (target already has open flag)', { target });
|
|
38
38
|
return;
|
|
39
39
|
}
|
|
40
40
|
logger.info('Raise flag', { target });
|
|
41
|
-
await
|
|
41
|
+
await myOperator.flag(target.sponsorshipAddress, target.operatorAddress, protocol_1.StreamPartIDUtils.getStreamPartition(target.streamPart));
|
|
42
42
|
}
|
|
43
43
|
exports.inspectRandomNode = inspectRandomNode;
|
|
44
44
|
//# sourceMappingURL=inspectRandomNode.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspectRandomNode.js","sourceRoot":"","sources":["../../../../src/plugins/operator/inspectRandomNode.ts"],"names":[],"mappings":";;;AAAA,0CAAsE;AAGtE,
|
|
1
|
+
{"version":3,"file":"inspectRandomNode.js","sourceRoot":"","sources":["../../../../src/plugins/operator/inspectRandomNode.ts"],"names":[],"mappings":";;;AAAA,gDAAqD;AAErD,0CAAsE;AAGtE,uDAAmD;AACnD,uDAA8C;AAEvC,KAAK,UAAU,iBAAiB,CACnC,uBAAwC,EACxC,UAAoB,EACpB,WAAkC,EAClC,aAA4B,EAC5B,oBAA4B,EAC5B,mBAA8F,EAC9F,wBAAoD,EACpD,WAAwB,EACxB,YAAY,GAAG,4BAAU;IAEzB,MAAM,OAAO,GAAG,IAAA,oBAAY,EAAC,CAAC,CAAC,CAAA;IAC/B,MAAM,MAAM,GAAG,IAAI,cAAM,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;IAC9C,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAA;IAElD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,uBAAuB,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,CAAC,CAAA;IAC1G,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,OAAM;IACV,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;IAE9C,MAAM,cAAc,GAAG,IAAA,iCAAe,EAAC;QACnC,MAAM;QACN,aAAa;QACb,wBAAwB;QACxB,mBAAmB;QACnB,kCAAkC,EAAE,CAAC;QACrC,oBAAoB;QACpB,sBAAsB,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;QACrC,cAAc,EAAE,EAAE;QAClB,mBAAmB,EAAE,IAAI;QACzB,WAAW;QACX,OAAO;KACV,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,MAAM,cAAc,EAAE,CAAA;IACtC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;QAC3C,OAAM;IACV,CAAC;IAED,MAAM,iBAAiB,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAA;IACxH,IAAI,iBAAiB,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,iDAAiD,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;QAC1E,OAAM;IACV,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;IACrC,MAAM,UAAU,CAAC,IAAI,CACjB,MAAM,CAAC,kBAAkB,EACzB,MAAM,CAAC,eAAe,EACtB,4BAAiB,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,CAC1D,CAAA;AACL,CAAC;AArDD,8CAqDC"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import { NetworkPeerDescriptor, StreamrClient } from '@streamr/sdk';
|
|
3
|
-
import { OperatorFleetState } from './OperatorFleetState';
|
|
4
2
|
import { StreamPartID } from '@streamr/protocol';
|
|
3
|
+
import { NetworkPeerDescriptor, Operator, StreamrClient } from '@streamr/sdk';
|
|
5
4
|
import { EthereumAddress, Logger } from '@streamr/utils';
|
|
5
|
+
import { OperatorFleetState } from './OperatorFleetState';
|
|
6
6
|
import { StreamPartAssignments } from './StreamPartAssignments';
|
|
7
|
-
import { ContractFacade } from './ContractFacade';
|
|
8
7
|
export type FindNodesForTargetGivenFleetStateFn = typeof findNodesForTargetGivenFleetState;
|
|
9
8
|
export type InspectTargetFn = typeof inspectTarget;
|
|
10
9
|
export interface Target {
|
|
@@ -12,7 +11,7 @@ export interface Target {
|
|
|
12
11
|
operatorAddress: EthereumAddress;
|
|
13
12
|
streamPart: StreamPartID;
|
|
14
13
|
}
|
|
15
|
-
export declare function findTarget(myOperatorContractAddress: EthereumAddress,
|
|
14
|
+
export declare function findTarget(myOperatorContractAddress: EthereumAddress, myOperator: Operator, assignments: StreamPartAssignments, streamrClient: StreamrClient, logger: Logger): Promise<Target | undefined>;
|
|
16
15
|
export declare function findNodesForTargetGivenFleetState(target: Target, targetOperatorFleetState: OperatorFleetState, getRedundancyFactor: (operatorContractAddress: EthereumAddress) => Promise<number | undefined>, logger: Logger): Promise<NetworkPeerDescriptor[]>;
|
|
17
16
|
export declare function inspectTarget({ target, targetPeerDescriptors, streamrClient, abortSignal, logger }: {
|
|
18
17
|
target: Target;
|