Skip to content

Commit

Permalink
feat:use @type for fork struct extension
Browse files Browse the repository at this point in the history
Signed-off-by: Chen Kai <[email protected]>
  • Loading branch information
GrapeBaBa committed Oct 4, 2024
1 parent 4770fb8 commit 54acd4b
Show file tree
Hide file tree
Showing 5 changed files with 428 additions and 316 deletions.
91 changes: 52 additions & 39 deletions src/consensus/altair/types.zig
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ const std = @import("std");
const primitives = @import("../../primitives/types.zig");
const preset = @import("../../presets/preset.zig");
const consensus = @import("../../consensus/types.zig");
const phase0 = @import("../../consensus/phase0/types.zig");

pub const LightClientHeader = struct {
beacon: ?*consensus.BeaconBlockHeader,
Expand Down Expand Up @@ -78,45 +79,57 @@ pub const SignedContributionAndProof = struct {
signature: primitives.BLSSignature,
};

pub const BeaconBlockBody = struct {
randao_reveal: primitives.BLSSignature,
eth1_data: *consensus.Eth1Data, // Eth1 data vote
graffiti: primitives.Bytes32, // Arbitrary data
// Operations
proposer_slashings: []consensus.ProposerSlashing,
attester_slashings: []consensus.AttesterSlashing,
attestations: []consensus.Attestation,
deposits: []consensus.Deposit,
voluntary_exits: []consensus.SignedVoluntaryExit,
sync_aggregate: ?*consensus.SyncAggregate,
};

pub const BeaconState = struct {
genesis_time: u64,
genesis_validators_root: primitives.Root,
slot: primitives.Slot,
fork: *consensus.Fork,
latest_block_header: consensus.BeaconBlockHeader,
block_roots: []primitives.Root,
state_roots: []primitives.Root,
historical_roots: []primitives.Root,
eth1_data: ?*consensus.Eth1Data,
eth1_data_votes: []consensus.Eth1Data,
eth1_deposit_index: u64,
validators: []consensus.Validator,
balances: []primitives.Gwei,
randao_mixes: []primitives.Bytes32,
slashings: []primitives.Gwei,
previous_epoch_attestations: []consensus.PendingAttestation,
current_epoch_attestations: []consensus.PendingAttestation,
justification_bits: []bool,
previous_justified_checkpoint: *consensus.Checkpoint,
current_justified_checkpoint: *consensus.Checkpoint,
finalized_checkpoint: *consensus.Checkpoint,
inactivity_scores: []u64,
current_sync_committee: ?*consensus.SyncCommittee,
next_sync_committee: ?*consensus.SyncCommittee,
};
pub const BeaconBlockBody = @Type(
.{
.@"struct" = .{
.layout = .auto,
.fields = @typeInfo(phase0.BeaconBlockBody).@"struct".fields ++ &[_]std.builtin.Type.StructField{
.{
.name = "sync_aggregate",
.type = ?*consensus.SyncAggregate,
.default_value = null,
.is_comptime = false,
.alignment = @alignOf(?*consensus.SyncAggregate),
},
},
.decls = &.{},
.is_tuple = false,
},
},
);

pub const BeaconState = @Type(
.{
.@"struct" = .{
.layout = .auto,
.fields = @typeInfo(phase0.BeaconState).@"struct".fields ++ &[_]std.builtin.Type.StructField{
.{
.name = "inactivity_scores",
.type = []u64,
.default_value = null,
.is_comptime = false,
.alignment = @alignOf([]u64),
},
.{
.name = "current_sync_committee",
.type = ?*consensus.SyncCommittee,
.default_value = null,
.is_comptime = false,
.alignment = @alignOf(?*consensus.SyncCommittee),
},
.{
.name = "next_sync_committee",
.type = ?*consensus.SyncCommittee,
.default_value = null,
.is_comptime = false,
.alignment = @alignOf(?*consensus.SyncCommittee),
},
},
.decls = &.{},
.is_tuple = false,
},
},
);

test "test BeaconState" {
const state = BeaconState{
Expand Down
77 changes: 37 additions & 40 deletions src/consensus/bellatrix/types.zig
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ const std = @import("std");
pub const primitives = @import("../../primitives/types.zig");
const preset = @import("../../presets/preset.zig");
const consensus = @import("../../consensus/types.zig");
const altair = @import("../../consensus/altair/types.zig");

pub const PowBlock = struct {
block_hash: primitives.Hash32,
Expand Down Expand Up @@ -46,47 +47,43 @@ pub const ExecutionPayload = struct {
transactions: []primitives.Transaction, // with a maximum length of MAX_TRANSACTIONS_PER_PAYLOAD
};

pub const BeaconBlockBody = struct {
randao_reveal: primitives.BLSSignature,
eth1_data: *consensus.Eth1Data, // Eth1 data vote
graffiti: primitives.Bytes32, // Arbitrary data
// Operations
proposer_slashings: []consensus.ProposerSlashing,
attester_slashings: []consensus.AttesterSlashing,
attestations: []consensus.Attestation,
deposits: []consensus.Deposit,
voluntary_exits: []consensus.SignedVoluntaryExit,
sync_aggregate: ?*consensus.SyncAggregate,
execution_payload: ?*consensus.ExecutionPayload,
};
pub const BeaconBlockBody = @Type(
.{
.@"struct" = .{
.layout = .auto,
.fields = @typeInfo(altair.BeaconBlockBody).@"struct".fields ++ &[_]std.builtin.Type.StructField{
.{
.name = "execution_payload",
.type = ?*consensus.ExecutionPayload,
.default_value = null,
.is_comptime = false,
.alignment = @alignOf(?*consensus.ExecutionPayload),
},
},
.decls = &.{},
.is_tuple = false,
},
},
);

pub const BeaconState = struct {
genesis_time: u64,
genesis_validators_root: primitives.Root,
slot: primitives.Slot,
fork: *consensus.Fork,
latest_block_header: consensus.BeaconBlockHeader,
block_roots: []primitives.Root,
state_roots: []primitives.Root,
historical_roots: []primitives.Root,
eth1_data: ?*consensus.Eth1Data,
eth1_data_votes: []consensus.Eth1Data,
eth1_deposit_index: u64,
validators: []consensus.Validator,
balances: []primitives.Gwei,
randao_mixes: []primitives.Bytes32,
slashings: []primitives.Gwei,
previous_epoch_attestations: []consensus.PendingAttestation,
current_epoch_attestations: []consensus.PendingAttestation,
justification_bits: []bool,
previous_justified_checkpoint: *consensus.Checkpoint,
current_justified_checkpoint: *consensus.Checkpoint,
finalized_checkpoint: *consensus.Checkpoint,
inactivity_scores: []u64,
current_sync_committee: ?*consensus.SyncCommittee,
next_sync_committee: ?*consensus.SyncCommittee,
latest_execution_payload_header: ?*consensus.ExecutionPayloadHeader,
};
pub const BeaconState = @Type(
.{
.@"struct" = .{
.layout = .auto,
.fields = @typeInfo(altair.BeaconState).@"struct".fields ++ &[_]std.builtin.Type.StructField{
.{
.name = "latest_execution_payload_header",
.type = ?*consensus.ExecutionPayloadHeader,
.default_value = null,
.is_comptime = false,
.alignment = @alignOf(?*consensus.ExecutionPayloadHeader),
},
},
.decls = &.{},
.is_tuple = false,
},
},
);

test "test ExecutionPayloadHeader" {
const header = ExecutionPayloadHeader{
Expand Down
Loading

0 comments on commit 54acd4b

Please sign in to comment.