Skip to content

Commit 1331994

Browse files
authored
feat: pass execution requests as bytes to engine API (#7145)
* Pass execution requests in bytes * lint
1 parent 2a0a535 commit 1331994

File tree

1 file changed

+41
-73
lines changed
  • packages/beacon-node/src/execution/engine

1 file changed

+41
-73
lines changed

packages/beacon-node/src/execution/engine/types.ts

Lines changed: 41 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
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";
22
import {
33
BYTES_PER_LOGS_BLOOM,
44
FIELD_ELEMENTS_PER_BLOB,
@@ -161,29 +161,17 @@ export type WithdrawalRpc = {
161161
amount: QUANTITY;
162162
};
163163

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];
169171

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;
187175

188176
export type VersionedHashesRpc = DATA[];
189177

@@ -406,73 +394,53 @@ export function deserializeWithdrawal(serialized: WithdrawalRpc): capella.Withdr
406394
} as capella.Withdrawal;
407395
}
408396

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));
417399
}
418400

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));
427403
}
428404

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));
435407
}
436408

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));
443411
}
444412

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));
451417
}
452418

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));
459421
}
460422

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+
*/
461427
export function serializeExecutionRequests(executionRequests: ExecutionRequests): ExecutionRequestsRpc {
462428
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+
];
468435
}
469436

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+
472440
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),
476444
};
477445
}
478446

0 commit comments

Comments
 (0)