mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-01-09 15:37:56 -05:00
ssz: Move stateutil.SliceRoot to ssz package (#14123)
This commit is contained in:
@@ -16,7 +16,6 @@ go_library(
|
|||||||
"pending_consolidations_root.go",
|
"pending_consolidations_root.go",
|
||||||
"pending_partial_withdrawals_root.go",
|
"pending_partial_withdrawals_root.go",
|
||||||
"reference.go",
|
"reference.go",
|
||||||
"slice_root.go",
|
|
||||||
"sync_committee.root.go",
|
"sync_committee.root.go",
|
||||||
"trie_helpers.go",
|
"trie_helpers.go",
|
||||||
"unrealized_justification.go",
|
"unrealized_justification.go",
|
||||||
|
|||||||
@@ -2,9 +2,10 @@ package stateutil
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
fieldparams "github.com/prysmaticlabs/prysm/v5/config/fieldparams"
|
fieldparams "github.com/prysmaticlabs/prysm/v5/config/fieldparams"
|
||||||
|
"github.com/prysmaticlabs/prysm/v5/encoding/ssz"
|
||||||
ethpb "github.com/prysmaticlabs/prysm/v5/proto/prysm/v1alpha1"
|
ethpb "github.com/prysmaticlabs/prysm/v5/proto/prysm/v1alpha1"
|
||||||
)
|
)
|
||||||
|
|
||||||
func HistoricalSummariesRoot(summaries []*ethpb.HistoricalSummary) ([32]byte, error) {
|
func HistoricalSummariesRoot(summaries []*ethpb.HistoricalSummary) ([32]byte, error) {
|
||||||
return SliceRoot(summaries, fieldparams.HistoricalRootsLength)
|
return ssz.SliceRoot(summaries, fieldparams.HistoricalRootsLength)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,9 +2,10 @@ package stateutil
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
fieldparams "github.com/prysmaticlabs/prysm/v5/config/fieldparams"
|
fieldparams "github.com/prysmaticlabs/prysm/v5/config/fieldparams"
|
||||||
|
"github.com/prysmaticlabs/prysm/v5/encoding/ssz"
|
||||||
ethpb "github.com/prysmaticlabs/prysm/v5/proto/prysm/v1alpha1"
|
ethpb "github.com/prysmaticlabs/prysm/v5/proto/prysm/v1alpha1"
|
||||||
)
|
)
|
||||||
|
|
||||||
func PendingBalanceDepositsRoot(slice []*ethpb.PendingBalanceDeposit) ([32]byte, error) {
|
func PendingBalanceDepositsRoot(slice []*ethpb.PendingBalanceDeposit) ([32]byte, error) {
|
||||||
return SliceRoot(slice, fieldparams.PendingBalanceDepositsLimit)
|
return ssz.SliceRoot(slice, fieldparams.PendingBalanceDepositsLimit)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,9 +2,10 @@ package stateutil
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
fieldparams "github.com/prysmaticlabs/prysm/v5/config/fieldparams"
|
fieldparams "github.com/prysmaticlabs/prysm/v5/config/fieldparams"
|
||||||
|
"github.com/prysmaticlabs/prysm/v5/encoding/ssz"
|
||||||
ethpb "github.com/prysmaticlabs/prysm/v5/proto/prysm/v1alpha1"
|
ethpb "github.com/prysmaticlabs/prysm/v5/proto/prysm/v1alpha1"
|
||||||
)
|
)
|
||||||
|
|
||||||
func PendingConsolidationsRoot(slice []*ethpb.PendingConsolidation) ([32]byte, error) {
|
func PendingConsolidationsRoot(slice []*ethpb.PendingConsolidation) ([32]byte, error) {
|
||||||
return SliceRoot(slice, fieldparams.PendingConsolidationsLimit)
|
return ssz.SliceRoot(slice, fieldparams.PendingConsolidationsLimit)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,9 +2,10 @@ package stateutil
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
fieldparams "github.com/prysmaticlabs/prysm/v5/config/fieldparams"
|
fieldparams "github.com/prysmaticlabs/prysm/v5/config/fieldparams"
|
||||||
|
"github.com/prysmaticlabs/prysm/v5/encoding/ssz"
|
||||||
ethpb "github.com/prysmaticlabs/prysm/v5/proto/prysm/v1alpha1"
|
ethpb "github.com/prysmaticlabs/prysm/v5/proto/prysm/v1alpha1"
|
||||||
)
|
)
|
||||||
|
|
||||||
func PendingPartialWithdrawalsRoot(slice []*ethpb.PendingPartialWithdrawal) ([32]byte, error) {
|
func PendingPartialWithdrawalsRoot(slice []*ethpb.PendingPartialWithdrawal) ([32]byte, error) {
|
||||||
return SliceRoot(slice, fieldparams.PendingPartialWithdrawalsLimit)
|
return ssz.SliceRoot(slice, fieldparams.PendingPartialWithdrawalsLimit)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ go_library(
|
|||||||
"helpers.go",
|
"helpers.go",
|
||||||
"htrutils.go",
|
"htrutils.go",
|
||||||
"merkleize.go",
|
"merkleize.go",
|
||||||
|
"slice_root.go",
|
||||||
],
|
],
|
||||||
importpath = "github.com/prysmaticlabs/prysm/v5/encoding/ssz",
|
importpath = "github.com/prysmaticlabs/prysm/v5/encoding/ssz",
|
||||||
visibility = ["//visibility:public"],
|
visibility = ["//visibility:public"],
|
||||||
|
|||||||
@@ -144,51 +144,13 @@ func WithdrawalSliceRoot(withdrawals []*enginev1.Withdrawal, limit uint64) ([32]
|
|||||||
// DepositRequestsSliceRoot computes the HTR of a slice of deposit receipts.
|
// DepositRequestsSliceRoot computes the HTR of a slice of deposit receipts.
|
||||||
// The limit parameter is used as input to the bitwise merkleization algorithm.
|
// The limit parameter is used as input to the bitwise merkleization algorithm.
|
||||||
func DepositRequestsSliceRoot(depositRequests []*enginev1.DepositRequest, limit uint64) ([32]byte, error) {
|
func DepositRequestsSliceRoot(depositRequests []*enginev1.DepositRequest, limit uint64) ([32]byte, error) {
|
||||||
roots := make([][32]byte, len(depositRequests))
|
return SliceRoot(depositRequests, limit)
|
||||||
for i := 0; i < len(depositRequests); i++ {
|
|
||||||
r, err := depositRequests[i].HashTreeRoot()
|
|
||||||
if err != nil {
|
|
||||||
return [32]byte{}, err
|
|
||||||
}
|
|
||||||
roots[i] = r
|
|
||||||
}
|
|
||||||
|
|
||||||
bytesRoot, err := BitwiseMerkleize(roots, uint64(len(roots)), limit)
|
|
||||||
if err != nil {
|
|
||||||
return [32]byte{}, errors.Wrap(err, "could not compute merkleization")
|
|
||||||
}
|
|
||||||
bytesRootBuf := new(bytes.Buffer)
|
|
||||||
if err := binary.Write(bytesRootBuf, binary.LittleEndian, uint64(len(depositRequests))); err != nil {
|
|
||||||
return [32]byte{}, errors.Wrap(err, "could not marshal length")
|
|
||||||
}
|
|
||||||
bytesRootBufRoot := make([]byte, 32)
|
|
||||||
copy(bytesRootBufRoot, bytesRootBuf.Bytes())
|
|
||||||
return MixInLength(bytesRoot, bytesRootBufRoot), nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// WithdrawalRequestsSliceRoot computes the HTR of a slice of withdrawal requests from the EL.
|
// WithdrawalRequestsSliceRoot computes the HTR of a slice of withdrawal requests from the EL.
|
||||||
// The limit parameter is used as input to the bitwise merkleization algorithm.
|
// The limit parameter is used as input to the bitwise merkleization algorithm.
|
||||||
func WithdrawalRequestsSliceRoot(withdrawalRequests []*enginev1.WithdrawalRequest, limit uint64) ([32]byte, error) {
|
func WithdrawalRequestsSliceRoot(withdrawalRequests []*enginev1.WithdrawalRequest, limit uint64) ([32]byte, error) {
|
||||||
roots := make([][32]byte, len(withdrawalRequests))
|
return SliceRoot(withdrawalRequests, limit)
|
||||||
for i := 0; i < len(withdrawalRequests); i++ {
|
|
||||||
r, err := withdrawalRequests[i].HashTreeRoot()
|
|
||||||
if err != nil {
|
|
||||||
return [32]byte{}, err
|
|
||||||
}
|
|
||||||
roots[i] = r
|
|
||||||
}
|
|
||||||
|
|
||||||
bytesRoot, err := BitwiseMerkleize(roots, uint64(len(roots)), limit)
|
|
||||||
if err != nil {
|
|
||||||
return [32]byte{}, errors.Wrap(err, "could not compute merkleization")
|
|
||||||
}
|
|
||||||
bytesRootBuf := new(bytes.Buffer)
|
|
||||||
if err := binary.Write(bytesRootBuf, binary.LittleEndian, uint64(len(withdrawalRequests))); err != nil {
|
|
||||||
return [32]byte{}, errors.Wrap(err, "could not marshal length")
|
|
||||||
}
|
|
||||||
bytesRootBufRoot := make([]byte, 32)
|
|
||||||
copy(bytesRootBufRoot, bytesRootBuf.Bytes())
|
|
||||||
return MixInLength(bytesRoot, bytesRootBufRoot), nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ByteSliceRoot is a helper func to merkleize an arbitrary List[Byte, N]
|
// ByteSliceRoot is a helper func to merkleize an arbitrary List[Byte, N]
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package stateutil
|
package ssz
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
@@ -6,11 +6,10 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/prysmaticlabs/prysm/v5/encoding/ssz"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// SliceRoot computes the root of a slice of hashable objects.
|
// SliceRoot computes the root of a slice of hashable objects.
|
||||||
func SliceRoot[T ssz.Hashable](slice []T, limit uint64) ([32]byte, error) {
|
func SliceRoot[T Hashable](slice []T, limit uint64) ([32]byte, error) {
|
||||||
max := limit
|
max := limit
|
||||||
if uint64(len(slice)) > max {
|
if uint64(len(slice)) > max {
|
||||||
return [32]byte{}, fmt.Errorf("slice exceeds max length %d", max)
|
return [32]byte{}, fmt.Errorf("slice exceeds max length %d", max)
|
||||||
@@ -25,7 +24,7 @@ func SliceRoot[T ssz.Hashable](slice []T, limit uint64) ([32]byte, error) {
|
|||||||
roots[i] = r
|
roots[i] = r
|
||||||
}
|
}
|
||||||
|
|
||||||
sliceRoot, err := ssz.BitwiseMerkleize(roots, uint64(len(roots)), limit)
|
sliceRoot, err := BitwiseMerkleize(roots, uint64(len(roots)), limit)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return [32]byte{}, errors.Wrap(err, "could not slice merkleization")
|
return [32]byte{}, errors.Wrap(err, "could not slice merkleization")
|
||||||
}
|
}
|
||||||
@@ -36,6 +35,5 @@ func SliceRoot[T ssz.Hashable](slice []T, limit uint64) ([32]byte, error) {
|
|||||||
// We need to mix in the length of the slice.
|
// We need to mix in the length of the slice.
|
||||||
sliceLenRoot := make([]byte, 32)
|
sliceLenRoot := make([]byte, 32)
|
||||||
copy(sliceLenRoot, sliceLenBuf.Bytes())
|
copy(sliceLenRoot, sliceLenBuf.Bytes())
|
||||||
res := ssz.MixInLength(sliceRoot, sliceLenRoot)
|
return MixInLength(sliceRoot, sliceLenRoot), nil
|
||||||
return res, nil
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user