@lodestar/beacon-node 1.41.0-dev.167a02a7b9 → 1.41.0-dev.192806a314
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/lib/chain/validation/attestation.js +1 -1
- package/lib/chain/validation/attesterSlashing.d.ts.map +1 -1
- package/lib/chain/validation/attesterSlashing.js +8 -1
- package/lib/chain/validation/attesterSlashing.js.map +1 -1
- package/lib/chain/validation/block.js +1 -1
- package/lib/network/libp2p/index.d.ts.map +1 -1
- package/lib/network/libp2p/index.js +7 -22
- package/lib/network/libp2p/index.js.map +1 -1
- package/package.json +25 -25
- package/src/chain/validation/attestation.ts +1 -1
- package/src/chain/validation/attesterSlashing.ts +9 -0
- package/src/chain/validation/block.ts +1 -1
- package/src/network/libp2p/index.ts +7 -25
|
@@ -88,7 +88,7 @@ step0ValidationFn = validateAttestationNoSignatureCheck) {
|
|
|
88
88
|
}
|
|
89
89
|
else {
|
|
90
90
|
step0ResultOrErrors[oldIndex] = {
|
|
91
|
-
err: new AttestationError(GossipAction.
|
|
91
|
+
err: new AttestationError(GossipAction.REJECT, {
|
|
92
92
|
code: AttestationErrorCode.INVALID_SIGNATURE,
|
|
93
93
|
}),
|
|
94
94
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attesterSlashing.d.ts","sourceRoot":"","sources":["../../../src/chain/validation/attesterSlashing.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"attesterSlashing.d.ts","sourceRoot":"","sources":["../../../src/chain/validation/attesterSlashing.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAC,YAAY,EAAC,MAAM,aAAa,CAAC;AAEzC,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,YAAY,EACnB,gBAAgB,EAAE,gBAAgB,GACjC,OAAO,CAAC,IAAI,CAAC,CAGf;AAED,wBAAsB,8BAA8B,CAClD,KAAK,EAAE,YAAY,EACnB,gBAAgB,EAAE,gBAAgB,GACjC,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,YAAY,EACnB,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,UAAQ,GACpB,OAAO,CAAC,IAAI,CAAC,CA+Cf"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { assertValidAttesterSlashing, getAttesterSlashableIndices, getAttesterSlashingSignatureSets, } from "@lodestar/state-transition";
|
|
1
|
+
import { assertValidAttesterSlashing, getAttesterSlashableIndices, getAttesterSlashingSignatureSets, isSlashableValidator, } from "@lodestar/state-transition";
|
|
2
2
|
import { AttesterSlashingError, AttesterSlashingErrorCode, GossipAction } from "../errors/index.js";
|
|
3
3
|
export async function validateApiAttesterSlashing(chain, attesterSlashing) {
|
|
4
4
|
const prioritizeBls = true;
|
|
@@ -30,6 +30,13 @@ export async function validateAttesterSlashing(chain, attesterSlashing, prioriti
|
|
|
30
30
|
error: e,
|
|
31
31
|
});
|
|
32
32
|
}
|
|
33
|
+
const currentEpoch = state.epochCtx.epoch;
|
|
34
|
+
if (!intersectingIndices.some((index) => isSlashableValidator(state.validators.getReadonly(index), currentEpoch))) {
|
|
35
|
+
throw new AttesterSlashingError(GossipAction.REJECT, {
|
|
36
|
+
code: AttesterSlashingErrorCode.INVALID,
|
|
37
|
+
error: Error("AttesterSlashing has no slashable validators"),
|
|
38
|
+
});
|
|
39
|
+
}
|
|
33
40
|
const signatureSets = getAttesterSlashingSignatureSets(chain.config, state.slot, attesterSlashing);
|
|
34
41
|
if (!(await chain.bls.verifySignatureSets(signatureSets, { batchable: true, priority: prioritizeBls }))) {
|
|
35
42
|
throw new AttesterSlashingError(GossipAction.REJECT, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attesterSlashing.js","sourceRoot":"","sources":["../../../src/chain/validation/attesterSlashing.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,EAC3B,gCAAgC,
|
|
1
|
+
{"version":3,"file":"attesterSlashing.js","sourceRoot":"","sources":["../../../src/chain/validation/attesterSlashing.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,EAC3B,gCAAgC,EAChC,oBAAoB,GACrB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAC,qBAAqB,EAAE,yBAAyB,EAAE,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAGlG,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,KAAmB,EACnB,gBAAkC;IAElC,MAAM,aAAa,GAAG,IAAI,CAAC;IAC3B,OAAO,wBAAwB,CAAC,KAAK,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,KAAmB,EACnB,gBAAkC;IAElC,OAAO,wBAAwB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,KAAmB,EACnB,gBAAkC,EAClC,aAAa,GAAG,KAAK;IAErB,qHAAqH;IACrH,uCAAuC;IACvC,iHAAiH;IACjH,+FAA+F;IAC/F,MAAM,mBAAmB,GAAG,2BAA2B,CAAC,gBAAgB,CAAC,CAAC;IAC1E,IAAI,KAAK,CAAC,MAAM,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,qBAAqB,CAAC,YAAY,CAAC,MAAM,EAAE;YACnD,IAAI,EAAE,yBAAyB,CAAC,cAAc;SAC/C,CAAC,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;IAEnC,mFAAmF;IACnF,IAAI,CAAC;QACH,mDAAmD;QACnD,2BAA2B,CACzB,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,UAAU,CAAC,MAAM,EACvB,gBAAgB,EAChB,KAAK,CACN,CAAC;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,qBAAqB,CAAC,YAAY,CAAC,MAAM,EAAE;YACnD,IAAI,EAAE,yBAAyB,CAAC,OAAO;YACvC,KAAK,EAAE,CAAU;SAClB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC1C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;QAClH,MAAM,IAAI,qBAAqB,CAAC,YAAY,CAAC,MAAM,EAAE;YACnD,IAAI,EAAE,yBAAyB,CAAC,OAAO;YACvC,KAAK,EAAE,KAAK,CAAC,8CAA8C,CAAC;SAC7D,CAAC,CAAC;IACL,CAAC;IAED,MAAM,aAAa,GAAG,gCAAgC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IACnG,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,aAAa,EAAE,EAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAC,CAAC,CAAC,EAAE,CAAC;QACtG,MAAM,IAAI,qBAAqB,CAAC,YAAY,CAAC,MAAM,EAAE;YACnD,IAAI,EAAE,yBAAyB,CAAC,OAAO;YACvC,KAAK,EAAE,KAAK,CAAC,mBAAmB,CAAC;SAClC,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|
|
@@ -79,7 +79,7 @@ export async function validateGossipBlock(config, chain, signedBlock, fork) {
|
|
|
79
79
|
}
|
|
80
80
|
// [REJECT] The block is from a higher slot than its parent.
|
|
81
81
|
if (parentBlock.slot >= blockSlot) {
|
|
82
|
-
throw new BlockGossipError(GossipAction.
|
|
82
|
+
throw new BlockGossipError(GossipAction.REJECT, {
|
|
83
83
|
code: BlockErrorCode.NOT_LATER_THAN_PARENT,
|
|
84
84
|
parentSlot: parentBlock.slot,
|
|
85
85
|
slot: blockSlot,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/network/libp2p/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,mBAAmB,CAAC;AAMlD,OAAO,EAAC,QAAQ,EAAC,MAAM,aAAa,CAAC;AAIrC,OAAO,EAAC,MAAM,EAAqB,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAC,cAAc,EAAwB,MAAM,eAAe,CAAC;AAGpE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,QAAQ,CAAC;CAC5B,CAAC;AAEF,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAU/E;AAED,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,UAAU,EACtB,WAAW,GAAE,OAAO,CAAC,cAAc,CAAM,EACzC,gBAAgB,GAAE,gBAAqB,GACtC,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/network/libp2p/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,mBAAmB,CAAC;AAMlD,OAAO,EAAC,QAAQ,EAAC,MAAM,aAAa,CAAC;AAIrC,OAAO,EAAC,MAAM,EAAqB,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAC,cAAc,EAAwB,MAAM,eAAe,CAAC;AAGpE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,QAAQ,CAAC;CAC5B,CAAC;AAEF,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAU/E;AAED,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,UAAU,EACtB,WAAW,GAAE,OAAO,CAAC,cAAc,CAAM,EACzC,gBAAgB,GAAE,gBAAqB,GACtC,OAAO,CAAC,MAAM,CAAC,CAsHjB"}
|
|
@@ -51,27 +51,6 @@ export async function createNodeJsLibp2p(privateKey, networkOpts = {}, nodeJsLib
|
|
|
51
51
|
noiseCrypto.chaCha20Poly1305Decrypt = asCrypto.chaCha20Poly1305Decrypt;
|
|
52
52
|
noiseCrypto.chaCha20Poly1305Encrypt = asCrypto.chaCha20Poly1305Encrypt;
|
|
53
53
|
}
|
|
54
|
-
const libp2pMetrics = nodeJsLibp2pOpts.metrics
|
|
55
|
-
? (components) => {
|
|
56
|
-
const metrics = prometheusMetrics({
|
|
57
|
-
collectDefaultMetrics: false,
|
|
58
|
-
preserveExistingMetrics: true,
|
|
59
|
-
registry: nodeJsLibp2pOpts.metricsRegistry,
|
|
60
|
-
})(components);
|
|
61
|
-
// Work around identify EOF race:
|
|
62
|
-
// `trackProtocolStream` attaches a `message` listener immediately after protocol
|
|
63
|
-
// negotiation. For `/ipfs/id/1.0.0`, identify() adds its own reader later and can
|
|
64
|
-
// miss the first response frame when metrics listener drains events first.
|
|
65
|
-
const originalTrackProtocolStream = metrics.trackProtocolStream.bind(metrics);
|
|
66
|
-
metrics.trackProtocolStream = ((stream) => {
|
|
67
|
-
if (stream.protocol === "/ipfs/id/1.0.0") {
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
originalTrackProtocolStream(stream);
|
|
71
|
-
});
|
|
72
|
-
return metrics;
|
|
73
|
-
}
|
|
74
|
-
: undefined;
|
|
75
54
|
return createLibp2p({
|
|
76
55
|
privateKey,
|
|
77
56
|
nodeInfo: {
|
|
@@ -100,7 +79,13 @@ export async function createNodeJsLibp2p(privateKey, networkOpts = {}, nodeJsLib
|
|
|
100
79
|
],
|
|
101
80
|
streamMuxers: [mplex({ disconnectThreshold })],
|
|
102
81
|
peerDiscovery,
|
|
103
|
-
metrics:
|
|
82
|
+
metrics: nodeJsLibp2pOpts.metrics
|
|
83
|
+
? prometheusMetrics({
|
|
84
|
+
collectDefaultMetrics: false,
|
|
85
|
+
preserveExistingMetrics: true,
|
|
86
|
+
registry: nodeJsLibp2pOpts.metricsRegistry,
|
|
87
|
+
})
|
|
88
|
+
: undefined,
|
|
104
89
|
connectionManager: {
|
|
105
90
|
// dialer config
|
|
106
91
|
maxParallelDials: 100,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/network/libp2p/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/network/libp2p/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"bugs": {
|
|
12
12
|
"url": "https://github.com/ChainSafe/lodestar/issues"
|
|
13
13
|
},
|
|
14
|
-
"version": "1.41.0-dev.
|
|
14
|
+
"version": "1.41.0-dev.192806a314",
|
|
15
15
|
"type": "module",
|
|
16
16
|
"exports": {
|
|
17
17
|
".": {
|
|
@@ -124,28 +124,28 @@
|
|
|
124
124
|
"@fastify/cors": "^10.0.1",
|
|
125
125
|
"@fastify/swagger": "^9.0.0",
|
|
126
126
|
"@fastify/swagger-ui": "^5.0.1",
|
|
127
|
-
"@libp2p/bootstrap": "^12.0.
|
|
127
|
+
"@libp2p/bootstrap": "^12.0.12",
|
|
128
128
|
"@libp2p/crypto": "^5.1.13",
|
|
129
|
-
"@libp2p/gossipsub": "^15.0.
|
|
130
|
-
"@libp2p/identify": "^4.0.
|
|
129
|
+
"@libp2p/gossipsub": "^15.0.13",
|
|
130
|
+
"@libp2p/identify": "^4.0.11",
|
|
131
131
|
"@libp2p/interface": "^3.1.0",
|
|
132
|
-
"@libp2p/mdns": "^12.0.
|
|
133
|
-
"@libp2p/mplex": "^12.0.
|
|
132
|
+
"@libp2p/mdns": "^12.0.12",
|
|
133
|
+
"@libp2p/mplex": "^12.0.12",
|
|
134
134
|
"@libp2p/peer-id": "^6.0.4",
|
|
135
|
-
"@libp2p/prometheus-metrics": "^5.0.
|
|
136
|
-
"@libp2p/tcp": "^11.0.
|
|
137
|
-
"@lodestar/api": "^1.41.0-dev.
|
|
138
|
-
"@lodestar/config": "^1.41.0-dev.
|
|
139
|
-
"@lodestar/db": "^1.41.0-dev.
|
|
140
|
-
"@lodestar/fork-choice": "^1.41.0-dev.
|
|
141
|
-
"@lodestar/light-client": "^1.41.0-dev.
|
|
142
|
-
"@lodestar/logger": "^1.41.0-dev.
|
|
143
|
-
"@lodestar/params": "^1.41.0-dev.
|
|
144
|
-
"@lodestar/reqresp": "^1.41.0-dev.
|
|
145
|
-
"@lodestar/state-transition": "^1.41.0-dev.
|
|
146
|
-
"@lodestar/types": "^1.41.0-dev.
|
|
147
|
-
"@lodestar/utils": "^1.41.0-dev.
|
|
148
|
-
"@lodestar/validator": "^1.41.0-dev.
|
|
135
|
+
"@libp2p/prometheus-metrics": "^5.0.11",
|
|
136
|
+
"@libp2p/tcp": "^11.0.11",
|
|
137
|
+
"@lodestar/api": "^1.41.0-dev.192806a314",
|
|
138
|
+
"@lodestar/config": "^1.41.0-dev.192806a314",
|
|
139
|
+
"@lodestar/db": "^1.41.0-dev.192806a314",
|
|
140
|
+
"@lodestar/fork-choice": "^1.41.0-dev.192806a314",
|
|
141
|
+
"@lodestar/light-client": "^1.41.0-dev.192806a314",
|
|
142
|
+
"@lodestar/logger": "^1.41.0-dev.192806a314",
|
|
143
|
+
"@lodestar/params": "^1.41.0-dev.192806a314",
|
|
144
|
+
"@lodestar/reqresp": "^1.41.0-dev.192806a314",
|
|
145
|
+
"@lodestar/state-transition": "^1.41.0-dev.192806a314",
|
|
146
|
+
"@lodestar/types": "^1.41.0-dev.192806a314",
|
|
147
|
+
"@lodestar/utils": "^1.41.0-dev.192806a314",
|
|
148
|
+
"@lodestar/validator": "^1.41.0-dev.192806a314",
|
|
149
149
|
"@multiformats/multiaddr": "^13.0.1",
|
|
150
150
|
"datastore-core": "^11.0.2",
|
|
151
151
|
"datastore-fs": "^11.0.2",
|
|
@@ -154,7 +154,7 @@
|
|
|
154
154
|
"fastify": "^5.7.4",
|
|
155
155
|
"interface-datastore": "^9.0.2",
|
|
156
156
|
"jwt-simple": "0.5.6",
|
|
157
|
-
"libp2p": "3.1.
|
|
157
|
+
"libp2p": "3.1.4",
|
|
158
158
|
"multiformats": "^13.4.2",
|
|
159
159
|
"prom-client": "^15.1.0",
|
|
160
160
|
"qs": "^6.11.1",
|
|
@@ -165,10 +165,10 @@
|
|
|
165
165
|
},
|
|
166
166
|
"devDependencies": {
|
|
167
167
|
"@chainsafe/swap-or-not-shuffle": "^1.2.1",
|
|
168
|
-
"@libp2p/interface-internal": "^3.0.
|
|
168
|
+
"@libp2p/interface-internal": "^3.0.11",
|
|
169
169
|
"@libp2p/logger": "^6.2.2",
|
|
170
|
-
"@libp2p/utils": "^7.0.
|
|
171
|
-
"@lodestar/spec-test-util": "^1.41.0-dev.
|
|
170
|
+
"@libp2p/utils": "^7.0.11",
|
|
171
|
+
"@lodestar/spec-test-util": "^1.41.0-dev.192806a314",
|
|
172
172
|
"@types/js-yaml": "^4.0.5",
|
|
173
173
|
"@types/qs": "^6.9.7",
|
|
174
174
|
"@types/tmp": "^0.2.3",
|
|
@@ -185,5 +185,5 @@
|
|
|
185
185
|
"beacon",
|
|
186
186
|
"blockchain"
|
|
187
187
|
],
|
|
188
|
-
"gitHead": "
|
|
188
|
+
"gitHead": "fabb956f69834a5c14ab09bf498349516a0958f6"
|
|
189
189
|
}
|
|
@@ -186,7 +186,7 @@ export async function validateGossipAttestationsSameAttData(
|
|
|
186
186
|
chain.seenAttesters.add(targetEpoch, validatorIndex);
|
|
187
187
|
} else {
|
|
188
188
|
step0ResultOrErrors[oldIndex] = {
|
|
189
|
-
err: new AttestationError(GossipAction.
|
|
189
|
+
err: new AttestationError(GossipAction.REJECT, {
|
|
190
190
|
code: AttestationErrorCode.INVALID_SIGNATURE,
|
|
191
191
|
}),
|
|
192
192
|
};
|
|
@@ -2,6 +2,7 @@ import {
|
|
|
2
2
|
assertValidAttesterSlashing,
|
|
3
3
|
getAttesterSlashableIndices,
|
|
4
4
|
getAttesterSlashingSignatureSets,
|
|
5
|
+
isSlashableValidator,
|
|
5
6
|
} from "@lodestar/state-transition";
|
|
6
7
|
import {AttesterSlashing} from "@lodestar/types";
|
|
7
8
|
import {AttesterSlashingError, AttesterSlashingErrorCode, GossipAction} from "../errors/index.js";
|
|
@@ -58,6 +59,14 @@ export async function validateAttesterSlashing(
|
|
|
58
59
|
});
|
|
59
60
|
}
|
|
60
61
|
|
|
62
|
+
const currentEpoch = state.epochCtx.epoch;
|
|
63
|
+
if (!intersectingIndices.some((index) => isSlashableValidator(state.validators.getReadonly(index), currentEpoch))) {
|
|
64
|
+
throw new AttesterSlashingError(GossipAction.REJECT, {
|
|
65
|
+
code: AttesterSlashingErrorCode.INVALID,
|
|
66
|
+
error: Error("AttesterSlashing has no slashable validators"),
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
|
|
61
70
|
const signatureSets = getAttesterSlashingSignatureSets(chain.config, state.slot, attesterSlashing);
|
|
62
71
|
if (!(await chain.bls.verifySignatureSets(signatureSets, {batchable: true, priority: prioritizeBls}))) {
|
|
63
72
|
throw new AttesterSlashingError(GossipAction.REJECT, {
|
|
@@ -104,7 +104,7 @@ export async function validateGossipBlock(
|
|
|
104
104
|
|
|
105
105
|
// [REJECT] The block is from a higher slot than its parent.
|
|
106
106
|
if (parentBlock.slot >= blockSlot) {
|
|
107
|
-
throw new BlockGossipError(GossipAction.
|
|
107
|
+
throw new BlockGossipError(GossipAction.REJECT, {
|
|
108
108
|
code: BlockErrorCode.NOT_LATER_THAN_PARENT,
|
|
109
109
|
parentSlot: parentBlock.slot,
|
|
110
110
|
slot: blockSlot,
|
|
@@ -73,30 +73,6 @@ export async function createNodeJsLibp2p(
|
|
|
73
73
|
noiseCrypto.chaCha20Poly1305Encrypt = asCrypto.chaCha20Poly1305Encrypt;
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
const libp2pMetrics = nodeJsLibp2pOpts.metrics
|
|
77
|
-
? (components: LodestarComponents) => {
|
|
78
|
-
const metrics = prometheusMetrics({
|
|
79
|
-
collectDefaultMetrics: false,
|
|
80
|
-
preserveExistingMetrics: true,
|
|
81
|
-
registry: nodeJsLibp2pOpts.metricsRegistry,
|
|
82
|
-
})(components);
|
|
83
|
-
|
|
84
|
-
// Work around identify EOF race:
|
|
85
|
-
// `trackProtocolStream` attaches a `message` listener immediately after protocol
|
|
86
|
-
// negotiation. For `/ipfs/id/1.0.0`, identify() adds its own reader later and can
|
|
87
|
-
// miss the first response frame when metrics listener drains events first.
|
|
88
|
-
const originalTrackProtocolStream = metrics.trackProtocolStream.bind(metrics);
|
|
89
|
-
metrics.trackProtocolStream = ((stream) => {
|
|
90
|
-
if (stream.protocol === "/ipfs/id/1.0.0") {
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
originalTrackProtocolStream(stream);
|
|
94
|
-
}) as typeof metrics.trackProtocolStream;
|
|
95
|
-
|
|
96
|
-
return metrics;
|
|
97
|
-
}
|
|
98
|
-
: undefined;
|
|
99
|
-
|
|
100
76
|
return createLibp2p({
|
|
101
77
|
privateKey,
|
|
102
78
|
nodeInfo: {
|
|
@@ -125,7 +101,13 @@ export async function createNodeJsLibp2p(
|
|
|
125
101
|
],
|
|
126
102
|
streamMuxers: [mplex({disconnectThreshold})],
|
|
127
103
|
peerDiscovery,
|
|
128
|
-
metrics:
|
|
104
|
+
metrics: nodeJsLibp2pOpts.metrics
|
|
105
|
+
? prometheusMetrics({
|
|
106
|
+
collectDefaultMetrics: false,
|
|
107
|
+
preserveExistingMetrics: true,
|
|
108
|
+
registry: nodeJsLibp2pOpts.metricsRegistry,
|
|
109
|
+
})
|
|
110
|
+
: undefined,
|
|
129
111
|
connectionManager: {
|
|
130
112
|
// dialer config
|
|
131
113
|
maxParallelDials: 100,
|