@lodestar/beacon-node 1.42.0-dev.5295e30d5c → 1.42.0-dev.572fb8156a
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/api/impl/validator/index.js +2 -2
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/chain/blocks/index.js +1 -1
- package/lib/chain/blocks/index.js.map +1 -1
- package/lib/chain/blocks/types.d.ts +3 -3
- package/lib/chain/blocks/types.d.ts.map +1 -1
- package/lib/chain/chain.js +6 -6
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/produceBlock/computeNewStateRoot.d.ts +2 -2
- package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
- package/lib/chain/produceBlock/computeNewStateRoot.js +8 -8
- package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts +2 -2
- package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js +14 -4
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/validation/executionPayloadEnvelope.js +2 -0
- package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
- package/lib/network/gossip/topic.d.ts +2 -729
- package/lib/network/gossip/topic.d.ts.map +1 -1
- package/package.json +15 -15
- package/src/api/impl/validator/index.ts +2 -2
- package/src/chain/blocks/index.ts +1 -1
- package/src/chain/blocks/types.ts +3 -3
- package/src/chain/chain.ts +6 -6
- package/src/chain/produceBlock/computeNewStateRoot.ts +9 -9
- package/src/chain/produceBlock/produceBlockBody.ts +15 -5
- package/src/chain/validation/executionPayloadEnvelope.ts +2 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"topic.d.ts","sourceRoot":"","sources":["../../../src/network/gossip/topic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAEL,QAAQ,EAMT,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAC,WAAW,EAAE,iBAAiB,EAAmB,MAAM,iBAAiB,CAAC;AAEjF,OAAO,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAiB,WAAW,EAAE,kBAAkB,EAAE,UAAU,EAAE,oBAAoB,EAAC,MAAM,gBAAgB,CAAC;AAEjH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAAC;CACzC;AAED,qBAAa,gBAAiB,YAAW,iBAAiB;IAG5C,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAF9C,OAAO,CAAC,gBAAgB,CAA4C;IAEpE,YAA6B,iBAAiB,EAAE,iBAAiB,EAAI;IAErE,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAQtC;IAED,8DAA8D;IAC9D,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAEvD;IAED,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAInD;CACF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,CAKrG;AA8BD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW
|
|
1
|
+
{"version":3,"file":"topic.d.ts","sourceRoot":"","sources":["../../../src/network/gossip/topic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAEL,QAAQ,EAMT,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAC,WAAW,EAAE,iBAAiB,EAAmB,MAAM,iBAAiB,CAAC;AAEjF,OAAO,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAiB,WAAW,EAAE,kBAAkB,EAAE,UAAU,EAAE,oBAAoB,EAAC,MAAM,gBAAgB,CAAC;AAEjH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAAC;CACzC;AAED,qBAAa,gBAAiB,YAAW,iBAAiB;IAG5C,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAF9C,OAAO,CAAC,gBAAgB,CAA4C;IAEpE,YAA6B,iBAAiB,EAAE,iBAAiB,EAAI;IAErE,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAQtC;IAED,8DAA8D;IAC9D,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAEvD;IAED,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAInD;CACF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,CAKrG;AA8BD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAyClD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,cAAc,EAAE,UAAU,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAOnH;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,GAAG,WAAW,CAMjG;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,GAAG,iBAAiB,CAS7G;AAMD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,CAyD9G;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE;IAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAAC,wBAAwB,CAAC,EAAE,OAAO,CAAA;CAAC,GACxE,kBAAkB,CAAC,MAAM,kBAAkB,CAAC,EAAE,CA2DhD;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,aAAa,EAAE,aAAa,GAC3B,kBAAkB,CAAC,MAAM,kBAAkB,CAAC,EAAE,CAShD;AAgBD,eAAO,MAAM,sCAAsC,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,CAiB9E,CAAC"}
|
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.42.0-dev.
|
|
14
|
+
"version": "1.42.0-dev.572fb8156a",
|
|
15
15
|
"type": "module",
|
|
16
16
|
"exports": {
|
|
17
17
|
".": {
|
|
@@ -135,18 +135,18 @@
|
|
|
135
135
|
"@libp2p/peer-id": "^6.0.4",
|
|
136
136
|
"@libp2p/prometheus-metrics": "^5.0.14",
|
|
137
137
|
"@libp2p/tcp": "^11.0.13",
|
|
138
|
-
"@lodestar/api": "^1.42.0-dev.
|
|
139
|
-
"@lodestar/config": "^1.42.0-dev.
|
|
140
|
-
"@lodestar/db": "^1.42.0-dev.
|
|
141
|
-
"@lodestar/fork-choice": "^1.42.0-dev.
|
|
142
|
-
"@lodestar/light-client": "^1.42.0-dev.
|
|
143
|
-
"@lodestar/logger": "^1.42.0-dev.
|
|
144
|
-
"@lodestar/params": "^1.42.0-dev.
|
|
145
|
-
"@lodestar/reqresp": "^1.42.0-dev.
|
|
146
|
-
"@lodestar/state-transition": "^1.42.0-dev.
|
|
147
|
-
"@lodestar/types": "^1.42.0-dev.
|
|
148
|
-
"@lodestar/utils": "^1.42.0-dev.
|
|
149
|
-
"@lodestar/validator": "^1.42.0-dev.
|
|
138
|
+
"@lodestar/api": "^1.42.0-dev.572fb8156a",
|
|
139
|
+
"@lodestar/config": "^1.42.0-dev.572fb8156a",
|
|
140
|
+
"@lodestar/db": "^1.42.0-dev.572fb8156a",
|
|
141
|
+
"@lodestar/fork-choice": "^1.42.0-dev.572fb8156a",
|
|
142
|
+
"@lodestar/light-client": "^1.42.0-dev.572fb8156a",
|
|
143
|
+
"@lodestar/logger": "^1.42.0-dev.572fb8156a",
|
|
144
|
+
"@lodestar/params": "^1.42.0-dev.572fb8156a",
|
|
145
|
+
"@lodestar/reqresp": "^1.42.0-dev.572fb8156a",
|
|
146
|
+
"@lodestar/state-transition": "^1.42.0-dev.572fb8156a",
|
|
147
|
+
"@lodestar/types": "^1.42.0-dev.572fb8156a",
|
|
148
|
+
"@lodestar/utils": "^1.42.0-dev.572fb8156a",
|
|
149
|
+
"@lodestar/validator": "^1.42.0-dev.572fb8156a",
|
|
150
150
|
"@multiformats/multiaddr": "^13.0.1",
|
|
151
151
|
"datastore-core": "^11.0.2",
|
|
152
152
|
"datastore-fs": "^11.0.2",
|
|
@@ -169,7 +169,7 @@
|
|
|
169
169
|
"@libp2p/interface-internal": "^3.0.13",
|
|
170
170
|
"@libp2p/logger": "^6.2.2",
|
|
171
171
|
"@libp2p/utils": "^7.0.13",
|
|
172
|
-
"@lodestar/spec-test-util": "^1.42.0-dev.
|
|
172
|
+
"@lodestar/spec-test-util": "^1.42.0-dev.572fb8156a",
|
|
173
173
|
"@types/js-yaml": "^4.0.5",
|
|
174
174
|
"@types/qs": "^6.9.7",
|
|
175
175
|
"@types/tmp": "^0.2.3",
|
|
@@ -186,5 +186,5 @@
|
|
|
186
186
|
"beacon",
|
|
187
187
|
"blockchain"
|
|
188
188
|
],
|
|
189
|
-
"gitHead": "
|
|
189
|
+
"gitHead": "6c2cf0a25fb385dbc6502db7f64e8a50581ceb35"
|
|
190
190
|
}
|
|
@@ -1642,7 +1642,7 @@ export function getValidatorApi(
|
|
|
1642
1642
|
throw Error("Cached block production result is not full block");
|
|
1643
1643
|
}
|
|
1644
1644
|
|
|
1645
|
-
const {executionPayload, executionRequests,
|
|
1645
|
+
const {executionPayload, executionRequests, payloadEnvelopeStateRoot} = produceResult as ProduceFullGloas;
|
|
1646
1646
|
|
|
1647
1647
|
const envelope: gloas.ExecutionPayloadEnvelope = {
|
|
1648
1648
|
payload: executionPayload,
|
|
@@ -1650,7 +1650,7 @@ export function getValidatorApi(
|
|
|
1650
1650
|
builderIndex: BUILDER_INDEX_SELF_BUILD,
|
|
1651
1651
|
beaconBlockRoot,
|
|
1652
1652
|
slot,
|
|
1653
|
-
stateRoot:
|
|
1653
|
+
stateRoot: payloadEnvelopeStateRoot,
|
|
1654
1654
|
};
|
|
1655
1655
|
|
|
1656
1656
|
logger.info("Produced execution payload envelope", {
|
|
@@ -89,7 +89,7 @@ export async function processBlocks(
|
|
|
89
89
|
(block, i): FullyVerifiedBlock => ({
|
|
90
90
|
blockInput: block,
|
|
91
91
|
postBlockState: postStates[i],
|
|
92
|
-
|
|
92
|
+
postPayloadState: null,
|
|
93
93
|
parentBlockSlot: parentSlots[i],
|
|
94
94
|
executionStatus: executionStatuses[i],
|
|
95
95
|
// start supporting optimistic syncing/processing
|
|
@@ -103,7 +103,7 @@ type FullyVerifiedBlockBase = {
|
|
|
103
103
|
/**
|
|
104
104
|
* A wrapper around a `SignedBeaconBlock` that indicates that this block is fully verified and ready to import.
|
|
105
105
|
*
|
|
106
|
-
* Discriminated union on `
|
|
106
|
+
* Discriminated union on `postPayloadState`:
|
|
107
107
|
* - `null` → block has no pre-verified envelope; `executionStatus` is any `BlockExecutionStatus`
|
|
108
108
|
* - non-null → envelope was pre-verified during state transition; `executionStatus` is narrowed to
|
|
109
109
|
* `Valid | Syncing` (matching what `forkChoice.onExecutionPayload` expects)
|
|
@@ -111,12 +111,12 @@ type FullyVerifiedBlockBase = {
|
|
|
111
111
|
export type FullyVerifiedBlock = FullyVerifiedBlockBase &
|
|
112
112
|
(
|
|
113
113
|
| {
|
|
114
|
-
|
|
114
|
+
postPayloadState: null;
|
|
115
115
|
/** If the execution payload couldn't be verified because of EL syncing status, used in optimistic sync or for merge block */
|
|
116
116
|
executionStatus: BlockExecutionStatus;
|
|
117
117
|
}
|
|
118
118
|
| {
|
|
119
|
-
|
|
119
|
+
postPayloadState: IBeaconStateView;
|
|
120
120
|
executionStatus: PayloadExecutionStatus;
|
|
121
121
|
}
|
|
122
122
|
);
|
package/src/chain/chain.ts
CHANGED
|
@@ -100,7 +100,7 @@ import {
|
|
|
100
100
|
} from "./opPools/index.js";
|
|
101
101
|
import {IChainOptions} from "./options.js";
|
|
102
102
|
import {PrepareNextSlotScheduler} from "./prepareNextSlot.js";
|
|
103
|
-
import {
|
|
103
|
+
import {computeNewStateRoot, computePayloadEnvelopeStateRoot} from "./produceBlock/computeNewStateRoot.js";
|
|
104
104
|
import {AssembledBlockType, BlockType, ProduceFullGloas, ProduceResult} from "./produceBlock/index.js";
|
|
105
105
|
import {BlockAttributes, produceBlockBody, produceCommonBlockBody} from "./produceBlock/produceBlockBody.js";
|
|
106
106
|
import {QueuedStateRegenerator, RegenCaller} from "./regen/index.js";
|
|
@@ -1054,7 +1054,7 @@ export class BeaconChain implements IBeaconChain {
|
|
|
1054
1054
|
body,
|
|
1055
1055
|
} as AssembledBlockType<T>;
|
|
1056
1056
|
|
|
1057
|
-
const {newStateRoot, proposerReward,
|
|
1057
|
+
const {newStateRoot, proposerReward, postBlockState} = computeNewStateRoot(this.metrics, state, block);
|
|
1058
1058
|
block.stateRoot = newStateRoot;
|
|
1059
1059
|
const blockRoot =
|
|
1060
1060
|
produceResult.type === BlockType.Full
|
|
@@ -1078,11 +1078,11 @@ export class BeaconChain implements IBeaconChain {
|
|
|
1078
1078
|
slot,
|
|
1079
1079
|
stateRoot: ZERO_HASH,
|
|
1080
1080
|
};
|
|
1081
|
-
if (!isStatePostGloas(
|
|
1082
|
-
throw Error(`Expected gloas+ post-state for execution payload envelope, got fork=${
|
|
1081
|
+
if (!isStatePostGloas(postBlockState)) {
|
|
1082
|
+
throw Error(`Expected gloas+ post-state for execution payload envelope, got fork=${postBlockState.forkName}`);
|
|
1083
1083
|
}
|
|
1084
|
-
const
|
|
1085
|
-
gloasResult.
|
|
1084
|
+
const payloadEnvelopeStateRoot = computePayloadEnvelopeStateRoot(this.metrics, postBlockState, envelope);
|
|
1085
|
+
gloasResult.payloadEnvelopeStateRoot = payloadEnvelopeStateRoot;
|
|
1086
1086
|
}
|
|
1087
1087
|
|
|
1088
1088
|
// Track the produced block for consensus broadcast validations, later validation, etc.
|
|
@@ -19,11 +19,11 @@ export function computeNewStateRoot(
|
|
|
19
19
|
metrics: Metrics | null,
|
|
20
20
|
state: IBeaconStateView,
|
|
21
21
|
block: BeaconBlock | BlindedBeaconBlock
|
|
22
|
-
): {newStateRoot: Root; proposerReward: Gwei;
|
|
22
|
+
): {newStateRoot: Root; proposerReward: Gwei; postBlockState: IBeaconStateView} {
|
|
23
23
|
// Set signature to zero to re-use stateTransition() function which requires the SignedBeaconBlock type
|
|
24
24
|
const blockEmptySig = {message: block, signature: ZERO_HASH};
|
|
25
25
|
|
|
26
|
-
const
|
|
26
|
+
const postBlockState = state.stateTransition(
|
|
27
27
|
blockEmptySig,
|
|
28
28
|
{
|
|
29
29
|
// ExecutionPayloadStatus.valid: Assume payload valid, it has been produced by a trusted EL
|
|
@@ -42,16 +42,16 @@ export function computeNewStateRoot(
|
|
|
42
42
|
{metrics}
|
|
43
43
|
);
|
|
44
44
|
|
|
45
|
-
const {attestations, syncAggregate, slashing} =
|
|
45
|
+
const {attestations, syncAggregate, slashing} = postBlockState.proposerRewards;
|
|
46
46
|
const proposerReward = BigInt(attestations + syncAggregate + slashing);
|
|
47
47
|
|
|
48
48
|
const hashTreeRootTimer = metrics?.stateHashTreeRootTime.startTimer({
|
|
49
49
|
source: StateHashTreeRootSource.computeNewStateRoot,
|
|
50
50
|
});
|
|
51
|
-
const newStateRoot =
|
|
51
|
+
const newStateRoot = postBlockState.hashTreeRoot();
|
|
52
52
|
hashTreeRootTimer?.();
|
|
53
53
|
|
|
54
|
-
return {newStateRoot, proposerReward,
|
|
54
|
+
return {newStateRoot, proposerReward, postBlockState};
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
/**
|
|
@@ -59,7 +59,7 @@ export function computeNewStateRoot(
|
|
|
59
59
|
* Similar to `computeNewStateRoot` but for payload envelope processing.
|
|
60
60
|
*
|
|
61
61
|
*/
|
|
62
|
-
export function
|
|
62
|
+
export function computePayloadEnvelopeStateRoot(
|
|
63
63
|
metrics: Metrics | null,
|
|
64
64
|
postBlockState: IBeaconStateViewGloas,
|
|
65
65
|
envelope: gloas.ExecutionPayloadEnvelope
|
|
@@ -70,7 +70,7 @@ export function computeEnvelopeStateRoot(
|
|
|
70
70
|
};
|
|
71
71
|
|
|
72
72
|
const processEnvelopeTimer = metrics?.blockPayload.executionPayloadEnvelopeProcessingTime.startTimer();
|
|
73
|
-
const
|
|
73
|
+
const postPayloadState = postBlockState.processExecutionPayloadEnvelope(signedEnvelope, {
|
|
74
74
|
// Signature is zero-ed (G2_POINT_AT_INFINITY), skip verification
|
|
75
75
|
verifySignature: false,
|
|
76
76
|
// State root is being computed here, the envelope doesn't have it yet
|
|
@@ -81,9 +81,9 @@ export function computeEnvelopeStateRoot(
|
|
|
81
81
|
processEnvelopeTimer?.();
|
|
82
82
|
|
|
83
83
|
const hashTreeRootTimer = metrics?.stateHashTreeRootTime.startTimer({
|
|
84
|
-
source: StateHashTreeRootSource.
|
|
84
|
+
source: StateHashTreeRootSource.computePayloadEnvelopeStateRoot,
|
|
85
85
|
});
|
|
86
|
-
const stateRoot =
|
|
86
|
+
const stateRoot = postPayloadState.hashTreeRoot();
|
|
87
87
|
hashTreeRootTimer?.();
|
|
88
88
|
|
|
89
89
|
return stateRoot;
|
|
@@ -19,6 +19,7 @@ import {
|
|
|
19
19
|
IBeaconStateView,
|
|
20
20
|
type IBeaconStateViewBellatrix,
|
|
21
21
|
computeTimeAtSlot,
|
|
22
|
+
isParentBlockFull,
|
|
22
23
|
isStatePostBellatrix,
|
|
23
24
|
isStatePostCapella,
|
|
24
25
|
isStatePostGloas,
|
|
@@ -111,11 +112,11 @@ export type ProduceFullGloas = {
|
|
|
111
112
|
blobsBundle: BlobsBundle<ForkPostGloas>;
|
|
112
113
|
cells: fulu.Cell[][];
|
|
113
114
|
/**
|
|
114
|
-
* Cached envelope state root computed during block production.
|
|
115
|
+
* Cached payload envelope state root computed during block production.
|
|
115
116
|
* This is the state root after running `processExecutionPayloadEnvelope` on the
|
|
116
117
|
* post-block state, and later used to construct the `ExecutionPayloadEnvelope`.
|
|
117
118
|
*/
|
|
118
|
-
|
|
119
|
+
payloadEnvelopeStateRoot: Root;
|
|
119
120
|
};
|
|
120
121
|
export type ProduceFullFulu = {
|
|
121
122
|
type: BlockType.Full;
|
|
@@ -771,9 +772,18 @@ function preparePayloadAttributes(
|
|
|
771
772
|
throw new Error("Expected Capella state for withdrawals");
|
|
772
773
|
}
|
|
773
774
|
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
775
|
+
if (isStatePostGloas(prepareState) && !isParentBlockFull(prepareState)) {
|
|
776
|
+
// When the parent block is empty, state.payloadExpectedWithdrawals holds a batch
|
|
777
|
+
// already deducted from CL balances but never credited on the EL (the envelope
|
|
778
|
+
// was not delivered). The next payload must carry those same withdrawals to
|
|
779
|
+
// restore CL/EL consistency, otherwise validators permanently lose that balance.
|
|
780
|
+
(payloadAttributes as capella.SSEPayloadAttributes["payloadAttributes"]).withdrawals =
|
|
781
|
+
prepareState.payloadExpectedWithdrawals;
|
|
782
|
+
} else {
|
|
783
|
+
// withdrawals logic is now fork aware as it changes on electra fork post capella
|
|
784
|
+
(payloadAttributes as capella.SSEPayloadAttributes["payloadAttributes"]).withdrawals =
|
|
785
|
+
prepareState.getExpectedWithdrawals().expectedWithdrawals;
|
|
786
|
+
}
|
|
777
787
|
}
|
|
778
788
|
|
|
779
789
|
if (ForkSeq[fork] >= ForkSeq.deneb) {
|
|
@@ -121,6 +121,8 @@ async function validateExecutionPayloadEnvelope(
|
|
|
121
121
|
throw new Error(`Expected gloas+ state for execution payload envelope validation, got fork=${blockState.forkName}`);
|
|
122
122
|
}
|
|
123
123
|
|
|
124
|
+
// [REJECT] `signed_execution_payload_envelope.signature` is valid as verified
|
|
125
|
+
// by `verify_execution_payload_envelope_signature`.
|
|
124
126
|
const signatureSet = getExecutionPayloadEnvelopeSignatureSet(
|
|
125
127
|
chain.config,
|
|
126
128
|
chain.pubkeyCache,
|