diff --git a/beacon-chain/state/state-native/setters_withdrawal_test.go b/beacon-chain/state/state-native/setters_withdrawal_test.go index a5885af7a1f5..55849ea36eda 100644 --- a/beacon-chain/state/state-native/setters_withdrawal_test.go +++ b/beacon-chain/state/state-native/setters_withdrawal_test.go @@ -18,11 +18,13 @@ func TestSetWithdrawalQueue(t *testing.T) { WithdrawalIndex: 0, ExecutionAddress: []byte("address1"), Amount: 1, + ValidatorIndex: 2, }, { WithdrawalIndex: 1, ExecutionAddress: []byte("address2"), Amount: 2, + ValidatorIndex: 3, }, } newQ := []*enginev1.Withdrawal{ @@ -30,11 +32,13 @@ func TestSetWithdrawalQueue(t *testing.T) { WithdrawalIndex: 2, ExecutionAddress: []byte("address3"), Amount: 3, + ValidatorIndex: 4, }, { WithdrawalIndex: 3, ExecutionAddress: []byte("address4"), Amount: 4, + ValidatorIndex: 5, }, } s := BeaconState{ @@ -61,11 +65,13 @@ func TestAppendWithdrawal(t *testing.T) { WithdrawalIndex: 0, ExecutionAddress: []byte("address1"), Amount: 1, + ValidatorIndex: 2, } oldWithdrawal2 := &enginev1.Withdrawal{ WithdrawalIndex: 1, ExecutionAddress: []byte("address2"), Amount: 2, + ValidatorIndex: 3, } q := []*enginev1.Withdrawal{oldWithdrawal1, oldWithdrawal2} s := BeaconState{ @@ -80,6 +86,7 @@ func TestAppendWithdrawal(t *testing.T) { WithdrawalIndex: 2, ExecutionAddress: []byte("address3"), Amount: 3, + ValidatorIndex: 4, } err := s.AppendWithdrawal(newWithdrawal) require.NoError(t, err) diff --git a/proto/engine/v1/BUILD.bazel b/proto/engine/v1/BUILD.bazel index f2eb36f807c3..202aede75cd6 100644 --- a/proto/engine/v1/BUILD.bazel +++ b/proto/engine/v1/BUILD.bazel @@ -31,6 +31,9 @@ proto_library( ssz_gen_marshal( name = "ssz_generated_files", go_proto = ":go_proto", + includes = [ + "//consensus-types/primitives:go_default_library", + ], objs = [ "ExecutionPayload", "ExecutionPayloadCapella", diff --git a/proto/engine/v1/execution_engine.pb.go b/proto/engine/v1/execution_engine.pb.go index 0ec70a97f93c..ee1d9b70e910 100755 --- a/proto/engine/v1/execution_engine.pb.go +++ b/proto/engine/v1/execution_engine.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc v3.15.8 // source: proto/engine/v1/execution_engine.proto @@ -10,6 +10,7 @@ import ( reflect "reflect" sync "sync" + github_com_prysmaticlabs_prysm_v3_consensus_types_primitives "github.com/prysmaticlabs/prysm/v3/consensus-types/primitives" _ "github.com/prysmaticlabs/prysm/v3/proto/eth/ext" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -957,9 +958,10 @@ type Withdrawal struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - WithdrawalIndex uint64 `protobuf:"varint,1,opt,name=withdrawal_index,json=withdrawalIndex,proto3" json:"withdrawal_index,omitempty"` - ExecutionAddress []byte `protobuf:"bytes,2,opt,name=execution_address,json=executionAddress,proto3" json:"execution_address,omitempty" ssz-size:"20"` - Amount uint64 `protobuf:"varint,3,opt,name=amount,proto3" json:"amount,omitempty"` + WithdrawalIndex uint64 `protobuf:"varint,1,opt,name=withdrawal_index,json=withdrawalIndex,proto3" json:"withdrawal_index,omitempty"` + ValidatorIndex github_com_prysmaticlabs_prysm_v3_consensus_types_primitives.ValidatorIndex `protobuf:"varint,2,opt,name=validator_index,json=validatorIndex,proto3" json:"validator_index,omitempty" cast-type:"github.com/prysmaticlabs/prysm/v3/consensus-types/primitives.ValidatorIndex"` + ExecutionAddress []byte `protobuf:"bytes,3,opt,name=execution_address,json=executionAddress,proto3" json:"execution_address,omitempty" ssz-size:"20"` + Amount uint64 `protobuf:"varint,4,opt,name=amount,proto3" json:"amount,omitempty"` } func (x *Withdrawal) Reset() { @@ -1001,6 +1003,13 @@ func (x *Withdrawal) GetWithdrawalIndex() uint64 { return 0 } +func (x *Withdrawal) GetValidatorIndex() github_com_prysmaticlabs_prysm_v3_consensus_types_primitives.ValidatorIndex { + if x != nil { + return x.ValidatorIndex + } + return github_com_prysmaticlabs_prysm_v3_consensus_types_primitives.ValidatorIndex(0) +} + func (x *Withdrawal) GetExecutionAddress() []byte { if x != nil { return x.ExecutionAddress @@ -1227,26 +1236,33 @@ var file_proto_engine_v1_execution_engine_proto_rawDesc = []byte{ 0x73, 0x68, 0x12, 0x38, 0x0a, 0x14, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x33, 0x32, 0x52, 0x12, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, - 0x7a, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x22, 0x84, 0x01, 0x0a, + 0x7a, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x22, 0xfe, 0x01, 0x0a, 0x0a, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x12, 0x29, 0x0a, 0x10, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, - 0x6c, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x33, 0x0a, 0x11, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x32, 0x30, 0x52, 0x10, 0x65, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x61, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x61, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x42, 0x96, 0x01, 0x0a, 0x16, 0x6f, 0x72, 0x67, 0x2e, 0x65, 0x74, 0x68, 0x65, - 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x14, - 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, - 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, - 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, - 0x76, 0x31, 0xaa, 0x02, 0x12, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x45, 0x6e, - 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x12, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, - 0x75, 0x6d, 0x5c, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x5c, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x6c, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x78, 0x0a, 0x0f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x42, + 0x4f, 0x82, 0xb5, 0x18, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, + 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x33, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, + 0x2d, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, + 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x52, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x12, 0x33, 0x0a, 0x11, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, + 0x02, 0x32, 0x30, 0x52, 0x10, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x96, 0x01, + 0x0a, 0x16, 0x6f, 0x72, 0x67, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, + 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x14, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, + 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, + 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, + 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, + 0x2f, 0x76, 0x31, 0x3b, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x76, 0x31, 0xaa, 0x02, 0x12, 0x45, + 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x56, + 0x31, 0xca, 0x02, 0x12, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x5c, 0x45, 0x6e, 0x67, + 0x69, 0x6e, 0x65, 0x5c, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/proto/engine/v1/execution_engine.proto b/proto/engine/v1/execution_engine.proto index 7a745a1f0d40..473722747c3c 100644 --- a/proto/engine/v1/execution_engine.proto +++ b/proto/engine/v1/execution_engine.proto @@ -132,10 +132,13 @@ message Withdrawal { // Withdrawal index for accounting purposes uint64 withdrawal_index = 1; + // Validator index for the withdrawal + uint64 validator_index = 2 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/prysm/v3/consensus-types/primitives.ValidatorIndex"]; + // The execution address receiving the funds - bytes execution_address = 2 [(ethereum.eth.ext.ssz_size) = "20"]; + bytes execution_address = 3 [(ethereum.eth.ext.ssz_size) = "20"]; // The withdrawn amount in Gwei - uint64 amount = 3; + uint64 amount = 4; } diff --git a/proto/engine/v1/generated.ssz.go b/proto/engine/v1/generated.ssz.go index de0280e8b395..513f068b0b0d 100644 --- a/proto/engine/v1/generated.ssz.go +++ b/proto/engine/v1/generated.ssz.go @@ -1,9 +1,10 @@ // Code generated by fastssz. DO NOT EDIT. -// Hash: 8ff411ee7233e56f3e3ec85ef6fc9db47b6afae7e56ba24797e67208cdc309c9 +// Hash: 31e013ad8172683b80becdea6758152590fde462f910057764c6505bc7ea8a00 package enginev1 import ( ssz "github.com/prysmaticlabs/fastssz" + github_com_prysmaticlabs_prysm_v3_consensus_types_primitives "github.com/prysmaticlabs/prysm/v3/consensus-types/primitives" ) // MarshalSSZ ssz marshals the ExecutionPayload object @@ -486,7 +487,7 @@ func (e *ExecutionPayloadCapella) MarshalSSZTo(buf []byte) (dst []byte, err erro // Offset (14) 'Withdrawals' dst = ssz.WriteOffset(dst, offset) - offset += len(e.Withdrawals) * 36 + offset += len(e.Withdrawals) * 44 // Field (10) 'ExtraData' if size := len(e.ExtraData); size > 32 { @@ -657,7 +658,7 @@ func (e *ExecutionPayloadCapella) UnmarshalSSZ(buf []byte) error { // Field (14) 'Withdrawals' { buf = tail[o14:] - num, err := ssz.DivideInt2(len(buf), 36, 16) + num, err := ssz.DivideInt2(len(buf), 44, 16) if err != nil { return err } @@ -666,7 +667,7 @@ func (e *ExecutionPayloadCapella) UnmarshalSSZ(buf []byte) error { if e.Withdrawals[ii] == nil { e.Withdrawals[ii] = new(Withdrawal) } - if err = e.Withdrawals[ii].UnmarshalSSZ(buf[ii*36 : (ii+1)*36]); err != nil { + if err = e.Withdrawals[ii].UnmarshalSSZ(buf[ii*44 : (ii+1)*44]); err != nil { return err } } @@ -688,7 +689,7 @@ func (e *ExecutionPayloadCapella) SizeSSZ() (size int) { } // Field (14) 'Withdrawals' - size += len(e.Withdrawals) * 36 + size += len(e.Withdrawals) * 44 return } @@ -1511,14 +1512,17 @@ func (w *Withdrawal) MarshalSSZTo(buf []byte) (dst []byte, err error) { // Field (0) 'WithdrawalIndex' dst = ssz.MarshalUint64(dst, w.WithdrawalIndex) - // Field (1) 'ExecutionAddress' + // Field (1) 'ValidatorIndex' + dst = ssz.MarshalUint64(dst, uint64(w.ValidatorIndex)) + + // Field (2) 'ExecutionAddress' if size := len(w.ExecutionAddress); size != 20 { err = ssz.ErrBytesLengthFn("--.ExecutionAddress", size, 20) return } dst = append(dst, w.ExecutionAddress...) - // Field (2) 'Amount' + // Field (3) 'Amount' dst = ssz.MarshalUint64(dst, w.Amount) return @@ -1528,28 +1532,31 @@ func (w *Withdrawal) MarshalSSZTo(buf []byte) (dst []byte, err error) { func (w *Withdrawal) UnmarshalSSZ(buf []byte) error { var err error size := uint64(len(buf)) - if size != 36 { + if size != 44 { return ssz.ErrSize } // Field (0) 'WithdrawalIndex' w.WithdrawalIndex = ssz.UnmarshallUint64(buf[0:8]) - // Field (1) 'ExecutionAddress' + // Field (1) 'ValidatorIndex' + w.ValidatorIndex = github_com_prysmaticlabs_prysm_v3_consensus_types_primitives.ValidatorIndex(ssz.UnmarshallUint64(buf[8:16])) + + // Field (2) 'ExecutionAddress' if cap(w.ExecutionAddress) == 0 { - w.ExecutionAddress = make([]byte, 0, len(buf[8:28])) + w.ExecutionAddress = make([]byte, 0, len(buf[16:36])) } - w.ExecutionAddress = append(w.ExecutionAddress, buf[8:28]...) + w.ExecutionAddress = append(w.ExecutionAddress, buf[16:36]...) - // Field (2) 'Amount' - w.Amount = ssz.UnmarshallUint64(buf[28:36]) + // Field (3) 'Amount' + w.Amount = ssz.UnmarshallUint64(buf[36:44]) return err } // SizeSSZ returns the ssz encoded size in bytes for the Withdrawal object func (w *Withdrawal) SizeSSZ() (size int) { - size = 36 + size = 44 return } @@ -1565,14 +1572,17 @@ func (w *Withdrawal) HashTreeRootWith(hh *ssz.Hasher) (err error) { // Field (0) 'WithdrawalIndex' hh.PutUint64(w.WithdrawalIndex) - // Field (1) 'ExecutionAddress' + // Field (1) 'ValidatorIndex' + hh.PutUint64(uint64(w.ValidatorIndex)) + + // Field (2) 'ExecutionAddress' if size := len(w.ExecutionAddress); size != 20 { err = ssz.ErrBytesLengthFn("--.ExecutionAddress", size, 20) return } hh.PutBytes(w.ExecutionAddress) - // Field (2) 'Amount' + // Field (3) 'Amount' hh.PutUint64(w.Amount) if ssz.EnableVectorizedHTR { diff --git a/proto/prysm/v1alpha1/cloners.go b/proto/prysm/v1alpha1/cloners.go index 074f9078789c..1c8d23c27db4 100644 --- a/proto/prysm/v1alpha1/cloners.go +++ b/proto/prysm/v1alpha1/cloners.go @@ -558,6 +558,7 @@ func CopyWithdrawal(withdrawal *enginev1.Withdrawal) *enginev1.Withdrawal { return &enginev1.Withdrawal{ WithdrawalIndex: withdrawal.WithdrawalIndex, + ValidatorIndex: withdrawal.ValidatorIndex, ExecutionAddress: bytesutil.SafeCopyBytes(withdrawal.ExecutionAddress), Amount: withdrawal.Amount, } diff --git a/proto/prysm/v1alpha1/cloners_test.go b/proto/prysm/v1alpha1/cloners_test.go index 3fd8858179cb..ed40f5969ab0 100644 --- a/proto/prysm/v1alpha1/cloners_test.go +++ b/proto/prysm/v1alpha1/cloners_test.go @@ -775,6 +775,7 @@ func genWithdrawals(num int) []*enginev1.Withdrawal { func genWithdrawal() *enginev1.Withdrawal { return &enginev1.Withdrawal{ WithdrawalIndex: 123456, + ValidatorIndex: 654321, ExecutionAddress: bytes(20), Amount: 55555, } diff --git a/proto/prysm/v1alpha1/generated.ssz.go b/proto/prysm/v1alpha1/generated.ssz.go index f12c096d51bf..d2059202f40d 100644 --- a/proto/prysm/v1alpha1/generated.ssz.go +++ b/proto/prysm/v1alpha1/generated.ssz.go @@ -1,5 +1,5 @@ // Code generated by fastssz. DO NOT EDIT. -// Hash: 1c6f768f80da4249df93fa7adac146024bcebec0eeca716c007888075e03b2b3 +// Hash: 78cb87810a0a9059f8ff1ca454ad851165b447f064b52d2824bb03063938e4c2 package eth import ( @@ -10244,7 +10244,7 @@ func (b *BeaconStateCapella) MarshalSSZTo(buf []byte) (dst []byte, err error) { // Offset (25) 'WithdrawalQueue' dst = ssz.WriteOffset(dst, offset) - offset += len(b.WithdrawalQueue) * 36 + offset += len(b.WithdrawalQueue) * 44 // Field (26) 'NextWithdrawalIndex' dst = ssz.MarshalUint64(dst, b.NextWithdrawalIndex) @@ -10638,7 +10638,7 @@ func (b *BeaconStateCapella) UnmarshalSSZ(buf []byte) error { // Field (25) 'WithdrawalQueue' { buf = tail[o25:] - num, err := ssz.DivideInt2(len(buf), 36, 1099511627776) + num, err := ssz.DivideInt2(len(buf), 44, 1099511627776) if err != nil { return err } @@ -10647,7 +10647,7 @@ func (b *BeaconStateCapella) UnmarshalSSZ(buf []byte) error { if b.WithdrawalQueue[ii] == nil { b.WithdrawalQueue[ii] = new(v1.Withdrawal) } - if err = b.WithdrawalQueue[ii].UnmarshalSSZ(buf[ii*36 : (ii+1)*36]); err != nil { + if err = b.WithdrawalQueue[ii].UnmarshalSSZ(buf[ii*44 : (ii+1)*44]); err != nil { return err } } @@ -10687,7 +10687,7 @@ func (b *BeaconStateCapella) SizeSSZ() (size int) { size += b.LatestExecutionPayloadHeader.SizeSSZ() // Field (25) 'WithdrawalQueue' - size += len(b.WithdrawalQueue) * 36 + size += len(b.WithdrawalQueue) * 44 return }