|
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, |
@@ -161,29 +161,17 @@ export type WithdrawalRpc = { |
161 | 161 | amount: QUANTITY; |
162 | 162 | }; |
163 | 163 |
|
164 | | -export type ExecutionRequestsRpc = { |
165 | | - deposits: DepositRequestRpc[]; |
166 | | - withdrawals: WithdrawalRequestRpc[]; |
167 | | - consolidations: ConsolidationRequestRpc[]; |
168 | | -}; |
| 164 | +/** |
| 165 | + * ExecutionRequestsRpc only holds 3 elements in the following order: |
| 166 | + * - ssz'ed DepositRequests |
| 167 | + * - ssz'ed WithdrawalRequests |
| 168 | + * - ssz'ed ConsolidationRequests |
| 169 | + */ |
| 170 | +export type ExecutionRequestsRpc = [DepositRequestsRpc, WithdrawalRequestsRpc, ConsolidationRequestsRpc]; |
169 | 171 |
|
170 | | -export type DepositRequestRpc = { |
171 | | - pubkey: DATA; |
172 | | - withdrawalCredentials: DATA; |
173 | | - amount: QUANTITY; |
174 | | - signature: DATA; |
175 | | - index: QUANTITY; |
176 | | -}; |
177 | | -export type WithdrawalRequestRpc = { |
178 | | - sourceAddress: DATA; |
179 | | - validatorPubkey: DATA; |
180 | | - amount: QUANTITY; |
181 | | -}; |
182 | | -export type ConsolidationRequestRpc = { |
183 | | - sourceAddress: DATA; |
184 | | - sourcePubkey: DATA; |
185 | | - targetPubkey: DATA; |
186 | | -}; |
| 172 | +export type DepositRequestsRpc = DATA; |
| 173 | +export type WithdrawalRequestsRpc = DATA; |
| 174 | +export type ConsolidationRequestsRpc = DATA; |
187 | 175 |
|
188 | 176 | export type VersionedHashesRpc = DATA[]; |
189 | 177 |
|
@@ -406,73 +394,53 @@ export function deserializeWithdrawal(serialized: WithdrawalRpc): capella.Withdr |
406 | 394 | } as capella.Withdrawal; |
407 | 395 | } |
408 | 396 |
|
409 | | -function serializeDepositRequest(depositRequest: electra.DepositRequest): DepositRequestRpc { |
410 | | - return { |
411 | | - pubkey: bytesToData(depositRequest.pubkey), |
412 | | - withdrawalCredentials: bytesToData(depositRequest.withdrawalCredentials), |
413 | | - amount: numToQuantity(depositRequest.amount), |
414 | | - signature: bytesToData(depositRequest.signature), |
415 | | - index: numToQuantity(depositRequest.index), |
416 | | - }; |
| 397 | +function serializeDepositRequests(depositRequests: electra.DepositRequests): DepositRequestsRpc { |
| 398 | + return bytesToData(ssz.electra.DepositRequests.serialize(depositRequests)); |
417 | 399 | } |
418 | 400 |
|
419 | | -function deserializeDepositRequest(serialized: DepositRequestRpc): electra.DepositRequest { |
420 | | - return { |
421 | | - pubkey: dataToBytes(serialized.pubkey, 48), |
422 | | - withdrawalCredentials: dataToBytes(serialized.withdrawalCredentials, 32), |
423 | | - amount: quantityToNum(serialized.amount), |
424 | | - signature: dataToBytes(serialized.signature, 96), |
425 | | - index: quantityToNum(serialized.index), |
426 | | - } as electra.DepositRequest; |
| 401 | +function deserializeDepositRequests(serialized: DepositRequestsRpc): electra.DepositRequests { |
| 402 | + return ssz.electra.DepositRequests.deserialize(dataToBytes(serialized, null)); |
427 | 403 | } |
428 | 404 |
|
429 | | -function serializeWithdrawalRequest(withdrawalRequest: electra.WithdrawalRequest): WithdrawalRequestRpc { |
430 | | - return { |
431 | | - sourceAddress: bytesToData(withdrawalRequest.sourceAddress), |
432 | | - validatorPubkey: bytesToData(withdrawalRequest.validatorPubkey), |
433 | | - amount: numToQuantity(withdrawalRequest.amount), |
434 | | - }; |
| 405 | +function serializeWithdrawalRequests(withdrawalRequests: electra.WithdrawalRequests): WithdrawalRequestsRpc { |
| 406 | + return bytesToData(ssz.electra.WithdrawalRequests.serialize(withdrawalRequests)); |
435 | 407 | } |
436 | 408 |
|
437 | | -function deserializeWithdrawalRequest(withdrawalRequest: WithdrawalRequestRpc): electra.WithdrawalRequest { |
438 | | - return { |
439 | | - sourceAddress: dataToBytes(withdrawalRequest.sourceAddress, 20), |
440 | | - validatorPubkey: dataToBytes(withdrawalRequest.validatorPubkey, 48), |
441 | | - amount: quantityToBigint(withdrawalRequest.amount), |
442 | | - }; |
| 409 | +function deserializeWithdrawalRequest(serialized: WithdrawalRequestsRpc): electra.WithdrawalRequests { |
| 410 | + return ssz.electra.WithdrawalRequests.deserialize(dataToBytes(serialized, null)); |
443 | 411 | } |
444 | 412 |
|
445 | | -function serializeConsolidationRequest(consolidationRequest: electra.ConsolidationRequest): ConsolidationRequestRpc { |
446 | | - return { |
447 | | - sourceAddress: bytesToData(consolidationRequest.sourceAddress), |
448 | | - sourcePubkey: bytesToData(consolidationRequest.sourcePubkey), |
449 | | - targetPubkey: bytesToData(consolidationRequest.targetPubkey), |
450 | | - }; |
| 413 | +function serializeConsolidationRequests( |
| 414 | + consolidationRequests: electra.ConsolidationRequests |
| 415 | +): ConsolidationRequestsRpc { |
| 416 | + return bytesToData(ssz.electra.ConsolidationRequests.serialize(consolidationRequests)); |
451 | 417 | } |
452 | 418 |
|
453 | | -function deserializeConsolidationRequest(consolidationRequest: ConsolidationRequestRpc): electra.ConsolidationRequest { |
454 | | - return { |
455 | | - sourceAddress: dataToBytes(consolidationRequest.sourceAddress, 20), |
456 | | - sourcePubkey: dataToBytes(consolidationRequest.sourcePubkey, 48), |
457 | | - targetPubkey: dataToBytes(consolidationRequest.targetPubkey, 48), |
458 | | - }; |
| 419 | +function deserializeConsolidationRequests(serialized: ConsolidationRequestsRpc): electra.ConsolidationRequests { |
| 420 | + return ssz.electra.ConsolidationRequests.deserialize(dataToBytes(serialized, null)); |
459 | 421 | } |
460 | 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 | + */ |
461 | 427 | export function serializeExecutionRequests(executionRequests: ExecutionRequests): ExecutionRequestsRpc { |
462 | 428 | const {deposits, withdrawals, consolidations} = executionRequests; |
463 | | - return { |
464 | | - deposits: deposits.map(serializeDepositRequest), |
465 | | - withdrawals: withdrawals.map(serializeWithdrawalRequest), |
466 | | - consolidations: consolidations.map(serializeConsolidationRequest), |
467 | | - }; |
| 429 | + |
| 430 | + return [ |
| 431 | + serializeDepositRequests(deposits), |
| 432 | + serializeWithdrawalRequests(withdrawals), |
| 433 | + serializeConsolidationRequests(consolidations), |
| 434 | + ]; |
468 | 435 | } |
469 | 436 |
|
470 | | -export function deserializeExecutionRequests(executionRequests: ExecutionRequestsRpc): ExecutionRequests { |
471 | | - const {deposits, withdrawals, consolidations} = executionRequests; |
| 437 | +export function deserializeExecutionRequests(serialized: ExecutionRequestsRpc): ExecutionRequests { |
| 438 | + const [deposits, withdrawals, consolidations] = serialized; |
| 439 | + |
472 | 440 | return { |
473 | | - deposits: deposits.map(deserializeDepositRequest), |
474 | | - withdrawals: withdrawals.map(deserializeWithdrawalRequest), |
475 | | - consolidations: consolidations.map(deserializeConsolidationRequest), |
| 441 | + deposits: deserializeDepositRequests(deposits), |
| 442 | + withdrawals: deserializeWithdrawalRequest(withdrawals), |
| 443 | + consolidations: deserializeConsolidationRequests(consolidations), |
476 | 444 | }; |
477 | 445 | } |
478 | 446 |
|
|
0 commit comments