|
1 |
| -import {capella, deneb, electra, Wei, bellatrix, Root, ExecutionPayload, ExecutionRequests} from "@lodestar/types"; |
| 1 | +import {capella, deneb, electra, Wei, bellatrix, Root, ExecutionPayload, ExecutionRequests, ssz} from "@lodestar/types"; |
2 | 2 | import {
|
3 | 3 | BYTES_PER_LOGS_BLOOM,
|
4 | 4 | FIELD_ELEMENTS_PER_BLOB,
|
@@ -116,7 +116,7 @@ type ExecutionPayloadRpcWithValue = {
|
116 | 116 | // even though CL tracks this as executionPayloadValue, EL returns this as blockValue
|
117 | 117 | blockValue: QUANTITY;
|
118 | 118 | blobsBundle?: BlobsBundleRpc;
|
119 |
| - requests?: ExecutionRequestsRpc; |
| 119 | + executionRequests?: ExecutionRequestsRpc; |
120 | 120 | shouldOverrideBuilder?: boolean;
|
121 | 121 | };
|
122 | 122 | type ExecutionPayloadResponse = ExecutionPayloadRpc | ExecutionPayloadRpcWithValue;
|
@@ -159,29 +159,17 @@ export type WithdrawalRpc = {
|
159 | 159 | amount: QUANTITY;
|
160 | 160 | };
|
161 | 161 |
|
162 |
| -export type ExecutionRequestsRpc = { |
163 |
| - deposits: DepositRequestRpc[]; |
164 |
| - withdrawals: WithdrawalRequestRpc[]; |
165 |
| - consolidations: ConsolidationRequestRpc[]; |
166 |
| -}; |
| 162 | +/** |
| 163 | + * ExecutionRequestsRpc only holds 3 elements in the following order: |
| 164 | + * - ssz'ed DepositRequests |
| 165 | + * - ssz'ed WithdrawalRequests |
| 166 | + * - ssz'ed ConsolidationRequests |
| 167 | + */ |
| 168 | +export type ExecutionRequestsRpc = [DepositRequestsRpc, WithdrawalRequestsRpc, ConsolidationRequestsRpc]; |
167 | 169 |
|
168 |
| -export type DepositRequestRpc = { |
169 |
| - pubkey: DATA; |
170 |
| - withdrawalCredentials: DATA; |
171 |
| - amount: QUANTITY; |
172 |
| - signature: DATA; |
173 |
| - index: QUANTITY; |
174 |
| -}; |
175 |
| -export type WithdrawalRequestRpc = { |
176 |
| - sourceAddress: DATA; |
177 |
| - validatorPubkey: DATA; |
178 |
| - amount: QUANTITY; |
179 |
| -}; |
180 |
| -export type ConsolidationRequestRpc = { |
181 |
| - sourceAddress: DATA; |
182 |
| - sourcePubkey: DATA; |
183 |
| - targetPubkey: DATA; |
184 |
| -}; |
| 170 | +export type DepositRequestsRpc = DATA; |
| 171 | +export type WithdrawalRequestsRpc = DATA; |
| 172 | +export type ConsolidationRequestsRpc = DATA; |
185 | 173 |
|
186 | 174 | export type VersionedHashesRpc = DATA[];
|
187 | 175 |
|
@@ -278,7 +266,9 @@ export function parseExecutionPayload(
|
278 | 266 | executionPayloadValue = quantityToBigint(response.blockValue);
|
279 | 267 | data = response.executionPayload;
|
280 | 268 | blobsBundle = response.blobsBundle ? parseBlobsBundle(response.blobsBundle) : undefined;
|
281 |
| - executionRequests = response.requests ? deserializeExecutionRequests(response.requests) : undefined; |
| 269 | + executionRequests = response.executionRequests |
| 270 | + ? deserializeExecutionRequests(response.executionRequests) |
| 271 | + : undefined; |
282 | 272 | shouldOverrideBuilder = response.shouldOverrideBuilder ?? false;
|
283 | 273 | } else {
|
284 | 274 | data = response;
|
@@ -404,73 +394,53 @@ export function deserializeWithdrawal(serialized: WithdrawalRpc): capella.Withdr
|
404 | 394 | } as capella.Withdrawal;
|
405 | 395 | }
|
406 | 396 |
|
407 |
| -function serializeDepositRequest(depositRequest: electra.DepositRequest): DepositRequestRpc { |
408 |
| - return { |
409 |
| - pubkey: bytesToData(depositRequest.pubkey), |
410 |
| - withdrawalCredentials: bytesToData(depositRequest.withdrawalCredentials), |
411 |
| - amount: numToQuantity(depositRequest.amount), |
412 |
| - signature: bytesToData(depositRequest.signature), |
413 |
| - index: numToQuantity(depositRequest.index), |
414 |
| - }; |
| 397 | +function serializeDepositRequests(depositRequests: electra.DepositRequests): DepositRequestsRpc { |
| 398 | + return bytesToData(ssz.electra.DepositRequests.serialize(depositRequests)); |
415 | 399 | }
|
416 | 400 |
|
417 |
| -function deserializeDepositRequest(serialized: DepositRequestRpc): electra.DepositRequest { |
418 |
| - return { |
419 |
| - pubkey: dataToBytes(serialized.pubkey, 48), |
420 |
| - withdrawalCredentials: dataToBytes(serialized.withdrawalCredentials, 32), |
421 |
| - amount: quantityToNum(serialized.amount), |
422 |
| - signature: dataToBytes(serialized.signature, 96), |
423 |
| - index: quantityToNum(serialized.index), |
424 |
| - } as electra.DepositRequest; |
| 401 | +function deserializeDepositRequests(serialized: DepositRequestsRpc): electra.DepositRequests { |
| 402 | + return ssz.electra.DepositRequests.deserialize(dataToBytes(serialized, null)); |
425 | 403 | }
|
426 | 404 |
|
427 |
| -function serializeWithdrawalRequest(withdrawalRequest: electra.WithdrawalRequest): WithdrawalRequestRpc { |
428 |
| - return { |
429 |
| - sourceAddress: bytesToData(withdrawalRequest.sourceAddress), |
430 |
| - validatorPubkey: bytesToData(withdrawalRequest.validatorPubkey), |
431 |
| - amount: numToQuantity(withdrawalRequest.amount), |
432 |
| - }; |
| 405 | +function serializeWithdrawalRequests(withdrawalRequests: electra.WithdrawalRequests): WithdrawalRequestsRpc { |
| 406 | + return bytesToData(ssz.electra.WithdrawalRequests.serialize(withdrawalRequests)); |
433 | 407 | }
|
434 | 408 |
|
435 |
| -function deserializeWithdrawalRequest(withdrawalRequest: WithdrawalRequestRpc): electra.WithdrawalRequest { |
436 |
| - return { |
437 |
| - sourceAddress: dataToBytes(withdrawalRequest.sourceAddress, 20), |
438 |
| - validatorPubkey: dataToBytes(withdrawalRequest.validatorPubkey, 48), |
439 |
| - amount: quantityToBigint(withdrawalRequest.amount), |
440 |
| - }; |
| 409 | +function deserializeWithdrawalRequest(serialized: WithdrawalRequestsRpc): electra.WithdrawalRequests { |
| 410 | + return ssz.electra.WithdrawalRequests.deserialize(dataToBytes(serialized, null)); |
441 | 411 | }
|
442 | 412 |
|
443 |
| -function serializeConsolidationRequest(consolidationRequest: electra.ConsolidationRequest): ConsolidationRequestRpc { |
444 |
| - return { |
445 |
| - sourceAddress: bytesToData(consolidationRequest.sourceAddress), |
446 |
| - sourcePubkey: bytesToData(consolidationRequest.sourcePubkey), |
447 |
| - targetPubkey: bytesToData(consolidationRequest.targetPubkey), |
448 |
| - }; |
| 413 | +function serializeConsolidationRequests( |
| 414 | + consolidationRequests: electra.ConsolidationRequests |
| 415 | +): ConsolidationRequestsRpc { |
| 416 | + return bytesToData(ssz.electra.ConsolidationRequests.serialize(consolidationRequests)); |
449 | 417 | }
|
450 | 418 |
|
451 |
| -function deserializeConsolidationRequest(consolidationRequest: ConsolidationRequestRpc): electra.ConsolidationRequest { |
452 |
| - return { |
453 |
| - sourceAddress: dataToBytes(consolidationRequest.sourceAddress, 20), |
454 |
| - sourcePubkey: dataToBytes(consolidationRequest.sourcePubkey, 48), |
455 |
| - targetPubkey: dataToBytes(consolidationRequest.targetPubkey, 48), |
456 |
| - }; |
| 419 | +function deserializeConsolidationRequests(serialized: ConsolidationRequestsRpc): electra.ConsolidationRequests { |
| 420 | + return ssz.electra.ConsolidationRequests.deserialize(dataToBytes(serialized, null)); |
457 | 421 | }
|
458 | 422 |
|
| 423 | +/** |
| 424 | + * This is identical to get_execution_requests_list in |
| 425 | + * https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.8/specs/electra/beacon-chain.md#new-get_execution_requests_list |
| 426 | + */ |
459 | 427 | export function serializeExecutionRequests(executionRequests: ExecutionRequests): ExecutionRequestsRpc {
|
460 | 428 | const {deposits, withdrawals, consolidations} = executionRequests;
|
461 |
| - return { |
462 |
| - deposits: deposits.map(serializeDepositRequest), |
463 |
| - withdrawals: withdrawals.map(serializeWithdrawalRequest), |
464 |
| - consolidations: consolidations.map(serializeConsolidationRequest), |
465 |
| - }; |
| 429 | + |
| 430 | + return [ |
| 431 | + serializeDepositRequests(deposits), |
| 432 | + serializeWithdrawalRequests(withdrawals), |
| 433 | + serializeConsolidationRequests(consolidations), |
| 434 | + ]; |
466 | 435 | }
|
467 | 436 |
|
468 |
| -export function deserializeExecutionRequests(executionRequests: ExecutionRequestsRpc): ExecutionRequests { |
469 |
| - const {deposits, withdrawals, consolidations} = executionRequests; |
| 437 | +export function deserializeExecutionRequests(serialized: ExecutionRequestsRpc): ExecutionRequests { |
| 438 | + const [deposits, withdrawals, consolidations] = serialized; |
| 439 | + |
470 | 440 | return {
|
471 |
| - deposits: deposits.map(deserializeDepositRequest), |
472 |
| - withdrawals: withdrawals.map(deserializeWithdrawalRequest), |
473 |
| - consolidations: consolidations.map(deserializeConsolidationRequest), |
| 441 | + deposits: deserializeDepositRequests(deposits), |
| 442 | + withdrawals: deserializeWithdrawalRequest(withdrawals), |
| 443 | + consolidations: deserializeConsolidationRequests(consolidations), |
474 | 444 | };
|
475 | 445 | }
|
476 | 446 |
|
|
0 commit comments