Remove go-ssz entirely from prysm (#8257)

* Add DepositSigningData

* gaz

* Add to ssz tests

* Rename to DepositMessage

* Remove deprecated comment

* Remove return

* Fixes from review

* Fixes

* Remove some of gossz

* Remove go-ssz entirely

* Remove unneeded file

* Fix runtime with ssztypes

* Add back ssz files

* Fix formatting

* tidy

* Remove go-ssz from static

* tidy again

* Add tests

* Change to sig

* Fix test

* fx

* Fix visiblity

* Revert "Remove unneeded file"

This reverts commit d66fcda929.

Co-authored-by: Raul Jordan <raul@prysmaticlabs.com>
Co-authored-by: Preston Van Loon <preston@prysmaticlabs.com>
Co-authored-by: prylabs-bulldozer[bot] <58059840+prylabs-bulldozer[bot]@users.noreply.github.com>
This commit is contained in:
Ivan Martinez
2021-01-20 16:03:46 -05:00
committed by GitHub
parent d6cccc18c3
commit 7c59615ae2
41 changed files with 213 additions and 242 deletions

View File

@@ -34,7 +34,6 @@ also be updated and checked in as frequently.
```bash
./scripts/update-go-pbs.sh
./scripts/update-go-ssz.sh
```
*Recommendation: Use go build only for local development and use bazel build for production.*

View File

@@ -363,10 +363,6 @@ load("//:deps.bzl", "prysm_deps")
# gazelle:repository_macro deps.bzl%prysm_deps
prysm_deps()
load("@com_github_prysmaticlabs_go_ssz//:deps.bzl", "go_ssz_dependencies")
go_ssz_dependencies()
load("@prysm//third_party/herumi:herumi.bzl", "bls_dependencies")
bls_dependencies()

View File

@@ -116,7 +116,6 @@ go_test(
"@com_github_ethereum_go_ethereum//core/types:go_default_library",
"@com_github_gogo_protobuf//proto:go_default_library",
"@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library",
"@com_github_prysmaticlabs_go_ssz//:go_default_library",
"@com_github_sirupsen_logrus//:go_default_library",
"@com_github_sirupsen_logrus//hooks/test:go_default_library",
"@in_gopkg_d4l3k_messagediff_v1//:go_default_library",
@@ -165,7 +164,6 @@ go_test(
"@com_github_ethereum_go_ethereum//core/types:go_default_library",
"@com_github_gogo_protobuf//proto:go_default_library",
"@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library",
"@com_github_prysmaticlabs_go_ssz//:go_default_library",
"@com_github_sirupsen_logrus//:go_default_library",
"@com_github_sirupsen_logrus//hooks/test:go_default_library",
"@org_golang_x_net//context:go_default_library",

View File

@@ -69,6 +69,7 @@ go_test(
shard_count = 2,
deps = [
"//beacon-chain/core/helpers:go_default_library",
"//beacon-chain/p2p/types:go_default_library",
"//beacon-chain/state:go_default_library",
"//proto/beacon/p2p/v1:go_default_library",
"//shared/aggregation:go_default_library",

View File

@@ -7,16 +7,16 @@ import (
"github.com/gogo/protobuf/proto"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/sirupsen/logrus"
"github.com/prysmaticlabs/prysm/beacon-chain/core/blocks"
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
p2ptypes "github.com/prysmaticlabs/prysm/beacon-chain/p2p/types"
"github.com/prysmaticlabs/prysm/shared/bls"
"github.com/prysmaticlabs/prysm/shared/bytesutil"
"github.com/prysmaticlabs/prysm/shared/params"
"github.com/prysmaticlabs/prysm/shared/testutil"
"github.com/prysmaticlabs/prysm/shared/testutil/assert"
"github.com/prysmaticlabs/prysm/shared/testutil/require"
"github.com/sirupsen/logrus"
)
func init() {
@@ -119,7 +119,8 @@ func TestProcessBlockHeader_DifferentSlots(t *testing.T) {
priv, err := bls.RandKey()
require.NoError(t, err)
blockSig, err := helpers.ComputeDomainAndSign(state, currentEpoch, []byte("hello"), params.BeaconConfig().DomainBeaconProposer, priv)
sszBytes := p2ptypes.SSZBytes("hello")
blockSig, err := helpers.ComputeDomainAndSign(state, currentEpoch, &sszBytes, params.BeaconConfig().DomainBeaconProposer, priv)
require.NoError(t, err)
validators[5896].PublicKey = priv.PublicKey().Marshal()
block := &ethpb.SignedBeaconBlock{
@@ -158,7 +159,8 @@ func TestProcessBlockHeader_PreviousBlockRootNotSignedRoot(t *testing.T) {
currentEpoch := helpers.CurrentEpoch(state)
priv, err := bls.RandKey()
require.NoError(t, err)
blockSig, err := helpers.ComputeDomainAndSign(state, currentEpoch, []byte("hello"), params.BeaconConfig().DomainBeaconProposer, priv)
sszBytes := p2ptypes.SSZBytes("hello")
blockSig, err := helpers.ComputeDomainAndSign(state, currentEpoch, &sszBytes, params.BeaconConfig().DomainBeaconProposer, priv)
require.NoError(t, err)
validators[5896].PublicKey = priv.PublicKey().Marshal()
pID, err := helpers.BeaconProposerIndex(state)
@@ -197,7 +199,8 @@ func TestProcessBlockHeader_SlashedProposer(t *testing.T) {
currentEpoch := helpers.CurrentEpoch(state)
priv, err := bls.RandKey()
require.NoError(t, err)
blockSig, err := helpers.ComputeDomainAndSign(state, currentEpoch, []byte("hello"), params.BeaconConfig().DomainBeaconProposer, priv)
sszBytes := p2ptypes.SSZBytes("hello")
blockSig, err := helpers.ComputeDomainAndSign(state, currentEpoch, &sszBytes, params.BeaconConfig().DomainBeaconProposer, priv)
require.NoError(t, err)
validators[12683].PublicKey = priv.PublicKey().Marshal()

View File

@@ -44,7 +44,6 @@ go_test(
"//shared/testutil/require:go_default_library",
"@com_github_gogo_protobuf//proto:go_default_library",
"@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library",
"@com_github_prysmaticlabs_go_ssz//:go_default_library",
"@in_gopkg_d4l3k_messagediff_v1//:go_default_library",
"@io_bazel_rules_go//go/tools/bazel:go_default_library",
],
@@ -80,7 +79,6 @@ go_test(
"//shared/testutil/require:go_default_library",
"@com_github_gogo_protobuf//proto:go_default_library",
"@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library",
"@com_github_prysmaticlabs_go_ssz//:go_default_library",
"@in_gopkg_d4l3k_messagediff_v1//:go_default_library",
"@io_bazel_rules_go//go/tools/bazel:go_default_library",
],

View File

@@ -37,7 +37,6 @@ go_test(
"//shared/testutil/require:go_default_library",
"@com_github_ghodss_yaml//:go_default_library",
"@com_github_gogo_protobuf//proto:go_default_library",
"@com_github_prysmaticlabs_go_ssz//:go_default_library",
"@in_gopkg_d4l3k_messagediff_v1//:go_default_library",
"@io_bazel_rules_go//go/tools/bazel:go_default_library",
],
@@ -71,7 +70,6 @@ go_test(
"//shared/testutil/require:go_default_library",
"@com_github_ghodss_yaml//:go_default_library",
"@com_github_gogo_protobuf//proto:go_default_library",
"@com_github_prysmaticlabs_go_ssz//:go_default_library",
"@in_gopkg_d4l3k_messagediff_v1//:go_default_library",
"@io_bazel_rules_go//go/tools/bazel:go_default_library",
],

View File

@@ -35,7 +35,6 @@ go_test(
"//shared/testutil:go_default_library",
"//shared/testutil/require:go_default_library",
"@com_github_gogo_protobuf//proto:go_default_library",
"@com_github_prysmaticlabs_go_ssz//:go_default_library",
"@in_gopkg_d4l3k_messagediff_v1//:go_default_library",
"@io_bazel_rules_go//go/tools/bazel:go_default_library",
],

View File

@@ -45,7 +45,6 @@ go_library(
"@com_github_pkg_errors//:go_default_library",
"@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library",
"@com_github_prysmaticlabs_go_bitfield//:go_default_library",
"@com_github_prysmaticlabs_go_ssz//:go_default_library",
],
)

View File

@@ -4,7 +4,6 @@ import (
fssz "github.com/ferranbt/fastssz"
"github.com/pkg/errors"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/go-ssz"
"github.com/prysmaticlabs/prysm/beacon-chain/state"
pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
"github.com/prysmaticlabs/prysm/shared/bls"
@@ -23,7 +22,7 @@ const DomainByteLength = 4
var ErrSigFailedToVerify = errors.New("signature did not verify")
// ComputeDomainAndSign computes the domain and signing root and sign it using the passed in private key.
func ComputeDomainAndSign(st *state.BeaconState, epoch uint64, obj interface{}, domain [4]byte, key bls.SecretKey) ([]byte, error) {
func ComputeDomainAndSign(st *state.BeaconState, epoch uint64, obj fssz.HashRoot, domain [4]byte, key bls.SecretKey) ([]byte, error) {
d, err := Domain(st.Fork(), epoch, domain, st.GenesisValidatorRoot())
if err != nil {
return nil, err
@@ -46,16 +45,8 @@ func ComputeDomainAndSign(st *state.BeaconState, epoch uint64, obj interface{},
// object_root=hash_tree_root(ssz_object),
// domain=domain,
// ))
func ComputeSigningRoot(object interface{}, domain []byte) ([32]byte, error) {
if object == nil {
return [32]byte{}, errors.New("cannot compute signing root of nil")
}
return signingData(func() ([32]byte, error) {
if v, ok := object.(fssz.HashRoot); ok {
return v.HashTreeRoot()
}
return ssz.HashTreeRoot(object)
}, domain)
func ComputeSigningRoot(object fssz.HashRoot, domain []byte) ([32]byte, error) {
return signingData(object.HashTreeRoot, domain)
}
// Computes the signing data by utilising the provided root function and then
@@ -73,7 +64,7 @@ func signingData(rootFunc func() ([32]byte, error), domain []byte) ([32]byte, er
}
// ComputeDomainVerifySigningRoot computes domain and verifies signing root of an object given the beacon state, validator index and signature.
func ComputeDomainVerifySigningRoot(st *state.BeaconState, index, epoch uint64, obj interface{}, domain [4]byte, sig []byte) error {
func ComputeDomainVerifySigningRoot(st *state.BeaconState, index, epoch uint64, obj fssz.HashRoot, domain [4]byte, sig []byte) error {
v, err := st.ValidatorAtIndex(index)
if err != nil {
return err
@@ -86,7 +77,7 @@ func ComputeDomainVerifySigningRoot(st *state.BeaconState, index, epoch uint64,
}
// VerifySigningRoot verifies the signing root of an object given it's public key, signature and domain.
func VerifySigningRoot(obj interface{}, pub, signature, domain []byte) error {
func VerifySigningRoot(obj fssz.HashRoot, pub, signature, domain []byte) error {
publicKey, err := bls.PublicKeyFromBytes(pub)
if err != nil {
return errors.Wrap(err, "could not convert bytes to public key")

View File

@@ -112,6 +112,5 @@ go_test(
"//shared/params:go_default_library",
"//shared/testutil/require:go_default_library",
"@com_github_gogo_protobuf//proto:go_default_library",
"@com_github_prysmaticlabs_go_ssz//:go_default_library",
],
)

View File

@@ -34,7 +34,6 @@ go_test(
"//shared/testutil/require:go_default_library",
"@com_github_gogo_protobuf//proto:go_default_library",
"@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library",
"@com_github_prysmaticlabs_go_ssz//:go_default_library",
"@com_github_urfave_cli_v2//:go_default_library",
"@in_gopkg_d4l3k_messagediff_v1//:go_default_library",
"@io_bazel_rules_go//go/tools/bazel:go_default_library",
@@ -69,7 +68,6 @@ go_test(
"//shared/testutil/require:go_default_library",
"@com_github_gogo_protobuf//proto:go_default_library",
"@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library",
"@com_github_prysmaticlabs_go_ssz//:go_default_library",
"@com_github_urfave_cli_v2//:go_default_library",
"@in_gopkg_d4l3k_messagediff_v1//:go_default_library",
"@io_bazel_rules_go//go/tools/bazel:go_default_library",

View File

@@ -23,10 +23,10 @@ go_library(
"@com_github_golang_protobuf//jsonpb:go_default_library_gen",
"@com_github_golang_protobuf//proto:go_default_library",
"@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library",
"@com_github_prysmaticlabs_go_ssz//:go_default_library",
"@com_github_sirupsen_logrus//:go_default_library",
"@in_gopkg_confluentinc_confluent_kafka_go_v1//kafka:go_default_library",
"@in_gopkg_confluentinc_confluent_kafka_go_v1//kafka/librdkafka:go_default_library",
"@in_gopkg_errgo_v2//fmt/errors:go_default_library",
"@io_opencensus_go//trace:go_default_library",
],
)

View File

@@ -10,13 +10,13 @@ import (
"github.com/golang/protobuf/jsonpb"
"github.com/golang/protobuf/proto"
eth "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/go-ssz"
"github.com/prysmaticlabs/prysm/beacon-chain/db/iface"
"github.com/prysmaticlabs/prysm/shared/featureconfig"
"github.com/prysmaticlabs/prysm/shared/traceutil"
"go.opencensus.io/trace"
"gopkg.in/confluentinc/confluent-kafka-go.v1/kafka"
_ "gopkg.in/confluentinc/confluent-kafka-go.v1/kafka/librdkafka" // Required for c++ kafka library.
"gopkg.in/errgo.v2/fmt/errors"
)
var _ iface.Database = (*Exporter)(nil)
@@ -59,7 +59,7 @@ func (e Exporter) publish(ctx context.Context, topic string, msg proto.Message)
if v, ok := msg.(fssz.HashRoot); ok {
key, err = v.HashTreeRoot()
} else {
key, err = ssz.HashTreeRoot(msg)
err = errors.New("object does not follow hash tree root interface")
}
if err != nil {
traceutil.AnnotateError(span, err)

View File

@@ -9,8 +9,14 @@ go_library(
"types.go",
],
importpath = "github.com/prysmaticlabs/prysm/beacon-chain/p2p/types",
visibility = ["//beacon-chain:__subpackages__"],
visibility = [
"//beacon-chain:__subpackages__",
"//shared/testutil:__pkg__",
"//slasher/rpc:__pkg__",
"//validator/client:__pkg__",
],
deps = [
"//shared/htrutils:go_default_library",
"//shared/params:go_default_library",
"@com_github_ferranbt_fastssz//:go_default_library",
"@com_github_pkg_errors//:go_default_library",

View File

@@ -6,16 +6,22 @@ package types
import (
ssz "github.com/ferranbt/fastssz"
"github.com/pkg/errors"
"github.com/prysmaticlabs/prysm/shared/htrutils"
"github.com/prysmaticlabs/prysm/shared/params"
)
// SSZUint64 is a uint64 type that satisfies the fast-ssz interface.
type SSZUint64 uint64
const rootLength = 32
const maxErrorLength = 256
// SSZUint64 is a uint64 type that satisfies the fast-ssz interface.
type SSZUint64 uint64
// SizeSSZ returns the size of the serialized representation.
func (s *SSZUint64) SizeSSZ() int {
return 8
}
// MarshalSSZTo marshals the uint64 with the provided byte slice.
func (s *SSZUint64) MarshalSSZTo(dst []byte) ([]byte, error) {
marshalledObj, err := s.MarshalSSZ()
@@ -31,11 +37,6 @@ func (s *SSZUint64) MarshalSSZ() ([]byte, error) {
return marshalledObj, nil
}
// SizeSSZ returns the size of the serialized representation.
func (s *SSZUint64) SizeSSZ() int {
return 8
}
// UnmarshalSSZ unmarshals the provided bytes buffer into the
// uint64 object.
func (s *SSZUint64) UnmarshalSSZ(buf []byte) error {
@@ -46,6 +47,35 @@ func (s *SSZUint64) UnmarshalSSZ(buf []byte) error {
return nil
}
// HashTreeRoot hashes the uint64 object following the SSZ standard.
func (s *SSZUint64) HashTreeRoot() ([32]byte, error) {
return htrutils.Uint64Root(uint64(*s)), nil
}
// HashTreeRootWith hashes the uint64 object with the given hasher.
func (s *SSZUint64) HashTreeRootWith(hh *ssz.Hasher) error {
indx := hh.Index()
hh.PutUint64(uint64(*s))
hh.Merkleize(indx)
return nil
}
// SSZUint64 is a bytes slice that satisfies the fast-ssz interface.
type SSZBytes []byte
// HashTreeRoot hashes the uint64 object following the SSZ standard.
func (b *SSZBytes) HashTreeRoot() ([32]byte, error) {
return ssz.HashWithDefaultHasher(b)
}
// HashTreeRootWith hashes the uint64 object with the given hasher.
func (b *SSZBytes) HashTreeRootWith(hh *ssz.Hasher) error {
indx := hh.Index()
hh.PutBytes(*b)
hh.Merkleize(indx)
return nil
}
// BeaconBlockByRootsReq specifies the block by roots request type.
type BeaconBlockByRootsReq [][rootLength]byte

View File

@@ -1,6 +1,8 @@
package types
import (
"bytes"
"encoding/hex"
"testing"
"github.com/prysmaticlabs/prysm/shared/params"
@@ -89,3 +91,94 @@ func roundTripTestErrorMessage(t *testing.T) {
require.NoError(t, newVal.UnmarshalSSZ(marshalledObj))
assert.DeepEqual(t, []byte(newVal), errMsg)
}
func TestSSZUint64(t *testing.T) {
tests := []struct {
name string
serializedBytes []byte
actualValue uint64
root []byte
wantErr bool
}{
{
name: "max",
serializedBytes: hexDecodeOrDie(t, "ffffffffffffffff"),
actualValue: 18446744073709551615,
root: hexDecodeOrDie(t, "ffffffffffffffff000000000000000000000000000000000000000000000000"),
wantErr: false,
},
{
name: "random",
serializedBytes: hexDecodeOrDie(t, "357c8de9d7204577"),
actualValue: 8594311575614880821,
root: hexDecodeOrDie(t, "357c8de9d7204577000000000000000000000000000000000000000000000000"),
wantErr: false,
},
{
name: "zero",
serializedBytes: hexDecodeOrDie(t, "0000000000000000"),
actualValue: 0,
root: hexDecodeOrDie(t, "0000000000000000000000000000000000000000000000000000000000000000"),
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
var s SSZUint64
if err := s.UnmarshalSSZ(tt.serializedBytes); (err != nil) != tt.wantErr {
t.Errorf("UnmarshalSSZ() error = %v, wantErr %v", err, tt.wantErr)
}
require.Equal(t, uint64(s), tt.actualValue)
serializedBytes, err := s.MarshalSSZ()
require.NoError(t, err)
require.Equal(t, true, bytes.Equal(serializedBytes, tt.serializedBytes), "serialized does not equal")
htr, err := s.HashTreeRoot()
require.NoError(t, err)
require.Equal(t, true, bytes.Equal(htr[:], tt.root), "root does not equal")
})
}
}
func TestSSZBytes_HashTreeRoot(t *testing.T) {
tests := []struct {
name string
actualValue []byte
root []byte
wantErr bool
}{
{
name: "random1",
actualValue: hexDecodeOrDie(t, "844e1063e0b396eed17be8eddb7eecd1fe3ea46542a4b72f7466e77325e5aa6d"),
root: hexDecodeOrDie(t, "844e1063e0b396eed17be8eddb7eecd1fe3ea46542a4b72f7466e77325e5aa6d"),
wantErr: false,
},
{
name: "random1",
actualValue: hexDecodeOrDie(t, "7b16162ecd9a28fa80a475080b0e4fff4c27efe19ce5134ce3554b72274d59fd534400ba4c7f699aa1c307cd37c2b103"),
root: hexDecodeOrDie(t, "128ed34ee798b9f00716f9ba5c000df5c99443dabc4d3f2e9bb86c77c732e007"),
wantErr: false,
},
{
name: "random2",
actualValue: []byte{},
root: hexDecodeOrDie(t, "0000000000000000000000000000000000000000000000000000000000000000"),
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
s := SSZBytes(tt.actualValue)
htr, err := s.HashTreeRoot()
require.NoError(t, err)
require.Equal(t, true, bytes.Equal(htr[:], tt.root), "root does not equal")
})
}
}
func hexDecodeOrDie(t *testing.T, str string) []byte {
decoded, err := hex.DecodeString(str)
require.NoError(t, err)
return decoded
}

View File

@@ -85,6 +85,5 @@ go_test(
"//shared/testutil:go_default_library",
"@com_github_protolambda_zssz//merkle:go_default_library",
"@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library",
"@com_github_prysmaticlabs_go_ssz//:go_default_library",
],
)

View File

@@ -228,5 +228,4 @@ func TestForkManualCopy_OK(t *testing.T) {
if !sszutil.DeepEqual(newState.Fork, wantedFork) {
t.Errorf("Wanted %v but got %v", wantedFork, newState.Fork)
}
}

View File

@@ -178,11 +178,8 @@ go_test(
"@com_github_libp2p_go_libp2p_pubsub//:go_default_library",
"@com_github_libp2p_go_libp2p_pubsub//pb:go_default_library",
"@com_github_patrickmn_go_cache//:go_default_library",
"@com_github_protolambda_zssz//:go_default_library",
"@com_github_protolambda_zssz//types:go_default_library",
"@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library",
"@com_github_prysmaticlabs_go_bitfield//:go_default_library",
"@com_github_prysmaticlabs_go_ssz//:go_default_library",
"@com_github_sirupsen_logrus//:go_default_library",
"@com_github_sirupsen_logrus//hooks/test:go_default_library",
],

View File

@@ -16,6 +16,7 @@ import (
"github.com/prysmaticlabs/prysm/beacon-chain/operations/attestations"
"github.com/prysmaticlabs/prysm/beacon-chain/p2p/peers"
p2ptest "github.com/prysmaticlabs/prysm/beacon-chain/p2p/testing"
p2ptypes "github.com/prysmaticlabs/prysm/beacon-chain/p2p/types"
pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
"github.com/prysmaticlabs/prysm/shared/abool"
"github.com/prysmaticlabs/prysm/shared/attestationutil"
@@ -93,7 +94,8 @@ func TestProcessPendingAtts_HasBlockSaveUnAggregatedAtt(t *testing.T) {
// Arbitrary aggregator index for testing purposes.
aggregatorIndex := committee[0]
sig, err := helpers.ComputeDomainAndSign(beaconState, 0, att.Data.Slot, params.BeaconConfig().DomainSelectionProof, privKeys[aggregatorIndex])
sszUint := p2ptypes.SSZUint64(att.Data.Slot)
sig, err := helpers.ComputeDomainAndSign(beaconState, 0, &sszUint, params.BeaconConfig().DomainSelectionProof, privKeys[aggregatorIndex])
require.NoError(t, err)
aggregateAndProof := &ethpb.AggregateAttestationAndProof{
SelectionProof: sig,
@@ -205,7 +207,8 @@ func TestProcessPendingAtts_NoBroadcastWithBadSignature(t *testing.T) {
// Arbitrary aggregator index for testing purposes.
aggregatorIndex := committee[0]
sig, err := helpers.ComputeDomainAndSign(s, 0, att.Data.Slot, params.BeaconConfig().DomainSelectionProof, privKeys[aggregatorIndex])
sszSlot := p2ptypes.SSZUint64(att.Data.Slot)
sig, err := helpers.ComputeDomainAndSign(s, 0, &sszSlot, params.BeaconConfig().DomainSelectionProof, privKeys[aggregatorIndex])
require.NoError(t, err)
aggregateAndProof := &ethpb.AggregateAttestationAndProof{
SelectionProof: sig,
@@ -281,7 +284,8 @@ func TestProcessPendingAtts_HasBlockSaveAggregatedAtt(t *testing.T) {
// Arbitrary aggregator index for testing purposes.
aggregatorIndex := committee[0]
sig, err := helpers.ComputeDomainAndSign(beaconState, 0, att.Data.Slot, params.BeaconConfig().DomainSelectionProof, privKeys[aggregatorIndex])
sszUint := p2ptypes.SSZUint64(att.Data.Slot)
sig, err := helpers.ComputeDomainAndSign(beaconState, 0, &sszUint, params.BeaconConfig().DomainSelectionProof, privKeys[aggregatorIndex])
require.NoError(t, err)
aggregateAndProof := &ethpb.AggregateAttestationAndProof{
SelectionProof: sig,

View File

@@ -1,9 +1,7 @@
package sync
import (
"bytes"
"context"
"reflect"
"sync"
"testing"
"time"
@@ -12,10 +10,7 @@ import (
"github.com/libp2p/go-libp2p-core/network"
"github.com/libp2p/go-libp2p-core/protocol"
gcache "github.com/patrickmn/go-cache"
"github.com/protolambda/zssz"
"github.com/protolambda/zssz/types"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/go-ssz"
mock "github.com/prysmaticlabs/prysm/beacon-chain/blockchain/testing"
"github.com/prysmaticlabs/prysm/beacon-chain/core/state"
db "github.com/prysmaticlabs/prysm/beacon-chain/db/testing"
@@ -175,27 +170,3 @@ func TestRecentBeaconBlocksRPCHandler_HandleZeroBlocks(t *testing.T) {
require.NoError(t, err)
assert.Equal(t, 1, int(lter.Count(stream1.Conn().RemotePeer().String())))
}
type testList [][32]byte
func (*testList) Limit() uint64 {
return 2 << 10
}
func TestSSZCompatibility(t *testing.T) {
rootA := [32]byte{'a'}
rootB := [32]byte{'B'}
rootC := [32]byte{'C'}
list := testList{rootA, rootB, rootC}
writer := bytes.NewBuffer([]byte{})
sszType, err := types.SSZFactory(reflect.TypeOf(list))
assert.NoError(t, err)
n, err := zssz.Encode(writer, list, sszType)
assert.NoError(t, err)
encodedPart := writer.Bytes()[:n]
fastSSZ, err := ssz.Marshal(list)
assert.NoError(t, err)
if !bytes.Equal(fastSSZ, encodedPart) {
t.Errorf("Wanted the same result as ZSSZ of %#x but got %#X", encodedPart, fastSSZ)
}
}

View File

@@ -11,6 +11,7 @@ import (
"github.com/prysmaticlabs/prysm/beacon-chain/core/blocks"
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
"github.com/prysmaticlabs/prysm/beacon-chain/core/state"
p2ptypes "github.com/prysmaticlabs/prysm/beacon-chain/p2p/types"
stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state"
"github.com/prysmaticlabs/prysm/shared/bls"
"github.com/prysmaticlabs/prysm/shared/bytesutil"
@@ -261,7 +262,8 @@ func validateSelectionIndex(ctx context.Context, bs *stateTrie.BeaconState, data
if err != nil {
return nil, err
}
root, err := helpers.ComputeSigningRoot(data.Slot, d)
sszUint := p2ptypes.SSZUint64(data.Slot)
root, err := helpers.ComputeSigningRoot(&sszUint, d)
if err != nil {
return nil, err
}

View File

@@ -18,6 +18,7 @@ import (
"github.com/prysmaticlabs/prysm/beacon-chain/operations/attestations"
"github.com/prysmaticlabs/prysm/beacon-chain/p2p"
p2ptest "github.com/prysmaticlabs/prysm/beacon-chain/p2p/testing"
p2ptypes "github.com/prysmaticlabs/prysm/beacon-chain/p2p/types"
mockSync "github.com/prysmaticlabs/prysm/beacon-chain/sync/initial-sync/testing"
"github.com/prysmaticlabs/prysm/shared/attestationutil"
"github.com/prysmaticlabs/prysm/shared/bls"
@@ -330,7 +331,8 @@ func TestValidateAggregateAndProof_CanValidate(t *testing.T) {
}
att.Signature = bls.AggregateSignatures(sigs).Marshal()
ai := committee[0]
sig, err := helpers.ComputeDomainAndSign(beaconState, 0, att.Data.Slot, params.BeaconConfig().DomainSelectionProof, privKeys[ai])
sszUint := p2ptypes.SSZUint64(att.Data.Slot)
sig, err := helpers.ComputeDomainAndSign(beaconState, 0, &sszUint, params.BeaconConfig().DomainSelectionProof, privKeys[ai])
require.NoError(t, err)
aggregateAndProof := &ethpb.AggregateAttestationAndProof{
SelectionProof: sig,
@@ -417,7 +419,8 @@ func TestVerifyIndexInCommittee_SeenAggregatorEpoch(t *testing.T) {
}
att.Signature = bls.AggregateSignatures(sigs).Marshal()
ai := committee[0]
sig, err := helpers.ComputeDomainAndSign(beaconState, 0, att.Data.Slot, params.BeaconConfig().DomainSelectionProof, privKeys[ai])
sszUint := p2ptypes.SSZUint64(att.Data.Slot)
sig, err := helpers.ComputeDomainAndSign(beaconState, 0, &sszUint, params.BeaconConfig().DomainSelectionProof, privKeys[ai])
require.NoError(t, err)
aggregateAndProof := &ethpb.AggregateAttestationAndProof{
SelectionProof: sig,
@@ -523,7 +526,8 @@ func TestValidateAggregateAndProof_BadBlock(t *testing.T) {
}
att.Signature = bls.AggregateSignatures(sigs).Marshal()
ai := committee[0]
sig, err := helpers.ComputeDomainAndSign(beaconState, 0, att.Data.Slot, params.BeaconConfig().DomainSelectionProof, privKeys[ai])
sszUint := p2ptypes.SSZUint64(att.Data.Slot)
sig, err := helpers.ComputeDomainAndSign(beaconState, 0, &sszUint, params.BeaconConfig().DomainSelectionProof, privKeys[ai])
require.NoError(t, err)
aggregateAndProof := &ethpb.AggregateAttestationAndProof{
@@ -611,7 +615,8 @@ func TestValidateAggregateAndProof_RejectWhenAttEpochDoesntEqualTargetEpoch(t *t
}
att.Signature = bls.AggregateSignatures(sigs).Marshal()
ai := committee[0]
sig, err := helpers.ComputeDomainAndSign(beaconState, 0, att.Data.Slot, params.BeaconConfig().DomainSelectionProof, privKeys[ai])
sszUint := p2ptypes.SSZUint64(att.Data.Slot)
sig, err := helpers.ComputeDomainAndSign(beaconState, 0, &sszUint, params.BeaconConfig().DomainSelectionProof, privKeys[ai])
require.NoError(t, err)
aggregateAndProof := &ethpb.AggregateAttestationAndProof{
SelectionProof: sig,

View File

@@ -2569,13 +2569,6 @@ def prysm_deps():
version = "v0.10.0",
)
go_repository(
name = "com_github_protolambda_zssz",
importpath = "github.com/protolambda/zssz",
sum = "h1:7fjJjissZIIaa2QcvmhS/pZISMX21zVITt49sW1ouek=",
version = "v0.1.5",
)
go_repository(
name = "com_github_prysmaticlabs_ethereumapis",
build_file_generation = "off",
@@ -2590,12 +2583,6 @@ def prysm_deps():
version = "v0.0.0-20210120104942-c3214972eb2e",
)
go_repository(
name = "com_github_prysmaticlabs_go_ssz",
importpath = "github.com/prysmaticlabs/go-ssz",
sum = "h1:7qd0Af1ozWKBU3c93YW2RH+/09hJns9+ftqWUZyts9c=",
version = "v0.0.0-20200612203617-6d5c9aa213ae",
)
go_repository(
name = "com_github_prysmaticlabs_prombbolt",
importpath = "github.com/prysmaticlabs/prombbolt",
@@ -3004,7 +2991,6 @@ def prysm_deps():
name = "com_github_wealdtech_go_eth2_types_v2",
build_directives = [
"gazelle:resolve go github.com/herumi/bls-eth-go-binary/bls @herumi_bls_eth_go_binary//:go_default_library",
"gazelle:resolve go github.com/prysmaticlabs/go-ssz @com_github_prysmaticlabs_go_ssz//:go_default_library",
],
importpath = "github.com/wealdtech/go-eth2-types/v2",
sum = "h1:59VZuwgqRaTjBu3b3CCaxG05XTmANtuTKA8hy3C6IFQ=",

View File

@@ -28,7 +28,6 @@ IMPORT_PATH = "github.com/prysmaticlabs/prysm/fuzz"
COMMON_DEPS = [
"//beacon-chain/state:go_default_library",
"//shared/featureconfig:go_default_library",
"@com_github_prysmaticlabs_go_ssz//:go_default_library",
"@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library",
] + SSZ_DEPS
@@ -195,7 +194,6 @@ go_library(
"@com_github_libp2p_go_libp2p//:go_default_library",
"@com_github_pkg_errors//:go_default_library",
"@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library",
"@com_github_prysmaticlabs_go_ssz//:go_default_library",
"@com_github_sirupsen_logrus//:go_default_library",
] + SSZ_DEPS, # keep
)

3
go.mod
View File

@@ -83,10 +83,8 @@ require (
github.com/prestonvanloon/go-recaptcha v0.0.0-20190217191114-0834cef6e8bd
github.com/prometheus/client_golang v1.9.0
github.com/prometheus/tsdb v0.10.0 // indirect
github.com/protolambda/zssz v0.1.5
github.com/prysmaticlabs/ethereumapis v0.0.0-20210115110118-c595a4e0c0a5
github.com/prysmaticlabs/go-bitfield v0.0.0-20210120104942-c3214972eb2e
github.com/prysmaticlabs/go-ssz v0.0.0-20200612203617-6d5c9aa213ae
github.com/prysmaticlabs/prombbolt v0.0.0-20200324184628-09789ef63796
github.com/rs/cors v1.7.0
github.com/schollz/progressbar/v3 v3.3.4
@@ -119,6 +117,7 @@ require (
google.golang.org/protobuf v1.25.0
gopkg.in/confluentinc/confluent-kafka-go.v1 v1.4.2
gopkg.in/d4l3k/messagediff.v1 v1.2.1
gopkg.in/errgo.v2 v2.1.0
gopkg.in/yaml.v2 v2.4.0
k8s.io/api v0.18.3
k8s.io/apimachinery v0.18.3

5
go.sum
View File

@@ -1103,8 +1103,6 @@ github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O
github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
github.com/prometheus/tsdb v0.10.0 h1:If5rVCMTp6W2SiRAQFlbpJNgVlgMEd+U2GZckwK38ic=
github.com/prometheus/tsdb v0.10.0/go.mod h1:oi49uRhEe9dPUTlS3JRZOwJuVi6tmh10QSgwXEyGCt4=
github.com/protolambda/zssz v0.1.5 h1:7fjJjissZIIaa2QcvmhS/pZISMX21zVITt49sW1ouek=
github.com/protolambda/zssz v0.1.5/go.mod h1:a4iwOX5FE7/JkKA+J/PH0Mjo9oXftN6P8NZyL28gpag=
github.com/prysmaticlabs/bazel-go-ethereum v0.0.0-20201126065335-1fb46e307951 h1:Jncuyb/nIJgXbEe0iGz3MN5JmijPVGzwk3G5FR01phI=
github.com/prysmaticlabs/bazel-go-ethereum v0.0.0-20201126065335-1fb46e307951/go.mod h1:JIfVb6esrqALTExdz9hRYvrP0xBDf6wCncIu1hNwHpM=
github.com/prysmaticlabs/ethereumapis v0.0.0-20210115110118-c595a4e0c0a5 h1:roqXwVG8cKjq6sOCbB+T5Kh+dYr1wpkk00c7/DdrqLg=
@@ -1113,8 +1111,6 @@ github.com/prysmaticlabs/go-bitfield v0.0.0-20200322041314-62c2aee71669 h1:cX6YR
github.com/prysmaticlabs/go-bitfield v0.0.0-20200322041314-62c2aee71669/go.mod h1:hCwmef+4qXWjv0jLDbQdWnL0Ol7cS7/lCSS26WR+u6s=
github.com/prysmaticlabs/go-bitfield v0.0.0-20210120104942-c3214972eb2e h1:teHQyJxTD1ZOLmdnIgNYFBruxZX9Cjo/NlSU2AmumwI=
github.com/prysmaticlabs/go-bitfield v0.0.0-20210120104942-c3214972eb2e/go.mod h1:hCwmef+4qXWjv0jLDbQdWnL0Ol7cS7/lCSS26WR+u6s=
github.com/prysmaticlabs/go-ssz v0.0.0-20200612203617-6d5c9aa213ae h1:7qd0Af1ozWKBU3c93YW2RH+/09hJns9+ftqWUZyts9c=
github.com/prysmaticlabs/go-ssz v0.0.0-20200612203617-6d5c9aa213ae/go.mod h1:VecIJZrewdAuhVckySLFt2wAAHRME934bSDurP8ftkc=
github.com/prysmaticlabs/prombbolt v0.0.0-20200324184628-09789ef63796 h1:bVD46NhbqEE6bsIqj42TCS3ELUdumti3WfAw9DXNtkg=
github.com/prysmaticlabs/prombbolt v0.0.0-20200324184628-09789ef63796/go.mod h1:5JkKm84FcLZQPNuHwjX8Mtd5emni/PH5CylWCNqnKos=
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
@@ -1741,6 +1737,7 @@ gopkg.in/confluentinc/confluent-kafka-go.v1 v1.4.2 h1:JabkIV98VYFqYKHHzXtgGMFuRg
gopkg.in/confluentinc/confluent-kafka-go.v1 v1.4.2/go.mod h1:ZdI3yfYmdNSLQPNCpO1y00EHyWaHG5EnQEyL/ntAegY=
gopkg.in/d4l3k/messagediff.v1 v1.2.1 h1:70AthpjunwzUiarMHyED52mj9UwtAnE89l1Gmrt3EU0=
gopkg.in/d4l3k/messagediff.v1 v1.2.1/go.mod h1:EUzikiKadqXWcD1AzJLagx0j/BeeWGtn++04Xniyg44=
gopkg.in/errgo.v2 v2.1.0 h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=

View File

@@ -35,7 +35,6 @@ go_test(
name = "go_default_test",
size = "small",
srcs = [
"ssz_regression_test.go",
"ssz_static_test.go",
"tags_test.go",
],
@@ -59,8 +58,6 @@ go_test(
"@com_github_ferranbt_fastssz//:go_default_library",
"@com_github_ghodss_yaml//:go_default_library",
"@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library",
"@com_github_prysmaticlabs_go_ssz//:go_default_library",
"@com_github_prysmaticlabs_go_ssz//spectests:go_default_library",
"@io_bazel_rules_go//go/tools/bazel:go_default_library",
],
)
@@ -94,8 +91,6 @@ go_test(
"@com_github_ferranbt_fastssz//:go_default_library",
"@com_github_ghodss_yaml//:go_default_library",
"@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library",
"@com_github_prysmaticlabs_go_ssz//:go_default_library",
"@com_github_prysmaticlabs_go_ssz//spectests:go_default_library",
"@io_bazel_rules_go//go/tools/bazel:go_default_library",
],
)
@@ -125,8 +120,6 @@ go_test(
"@com_github_ferranbt_fastssz//:go_default_library",
"@com_github_ghodss_yaml//:go_default_library",
"@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library",
"@com_github_prysmaticlabs_go_ssz//:go_default_library",
"@com_github_prysmaticlabs_go_ssz//spectests:go_default_library",
"@io_bazel_rules_go//go/tools/bazel:go_default_library",
],
)

View File

@@ -1,109 +0,0 @@
package testing
import (
"encoding/hex"
"fmt"
"io/ioutil"
"testing"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/go-ssz"
sszspectest "github.com/prysmaticlabs/go-ssz/spectests"
"github.com/prysmaticlabs/prysm/shared/bytesutil"
"github.com/prysmaticlabs/prysm/shared/testutil/assert"
"github.com/prysmaticlabs/prysm/shared/testutil/require"
)
// Regression tests for investigating discrepancies between ssz signing root of
// our protobuf, simple struct, and python result expected signing root.
// See comments in: https://github.com/prysmaticlabs/prysm/pull/2828
func TestBlockHeaderSigningRoot(t *testing.T) {
t.Skip("Needs updated data after v0.9.3 rm signing root PR")
tests := []struct {
header1 *ethpb.BeaconBlockHeader
header2 sszspectest.MainnetBlockHeader
expectedRoot [32]byte
}{
{
// Arbitrary example, validated by running in python.
//header = spec.BeaconBlockHeader(
// slot = uint64(0),
// parent_root = Bytes32(bytes.fromhex('0000000000000000000000000000000000000000000000000000000000000000')),
// state_root = Bytes32(bytes.fromhex('03f33c7c997b39605f1fff2b5fa4db1405b193bb9611206cc50afb460960fd6f')),
// body_root = Bytes32(bytes.fromhex('0221fd9ca547ba21c5f8df076c7f1b824aeaa208253c63e0ba6c4f6d669d4a5b')),
// signature = Bytes96(bytes.fromhex('000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000')),
//)
header1: &ethpb.BeaconBlockHeader{
StateRoot: hexDecodeOrDie(t, "03f33c7c997b39605f1fff2b5fa4db1405b193bb9611206cc50afb460960fd6f"),
BodyRoot: hexDecodeOrDie(t, "0221fd9ca547ba21c5f8df076c7f1b824aeaa208253c63e0ba6c4f6d669d4a5b"),
},
header2: sszspectest.MainnetBlockHeader{
StateRoot: hexDecodeOrDie(t, "03f33c7c997b39605f1fff2b5fa4db1405b193bb9611206cc50afb460960fd6f"),
BodyRoot: hexDecodeOrDie(t, "0221fd9ca547ba21c5f8df076c7f1b824aeaa208253c63e0ba6c4f6d669d4a5b"),
},
expectedRoot: bytesutil.ToBytes32(hexDecodeOrDie(t, "fa9dfee90cd22268800a48023e7875dd6a67b79fee240b367634fddcc14ed232")),
},
{
// First example from 0.8 ssz_mainnet_random.yaml.
// value: {slot: 14215038047959786547, parent_root: '0xf9b2785de53069d4ad16cc0ec729afe9f879e391433ec120bb15b5082a486705',
// state_root: '0x737d1c6ff6e2edf7f0627bf55381e6b08f6c2c56ed8d1895ae47a782dc09382e',
// body_root: '0xaffff5006c34a3a2bf7f18b7860675f002187ea809f708fa8f44c424321bcd1c',
// signature: '0x17d25044259a0ccd99d1b45eeec4e084e5fb0fef98d5805001b248feb555b947ecf6842b9ad546f98f63ef89117575d73223e9fb9ee8143857b6fcc79600fffed1966cea46f7524236cd1e83531aef906cb8b4c296d50695bb83efa84075d309'}
// serialized: '0x33244e45caf545c5f9b2785de53069d4ad16cc0ec729afe9f879e391433ec120bb15b5082a486705737d1c6ff6e2edf7f0627bf55381e6b08f6c2c56ed8d1895ae47a782dc09382eaffff5006c34a3a2bf7f18b7860675f002187ea809f708fa8f44c424321bcd1c17d25044259a0ccd99d1b45eeec4e084e5fb0fef98d5805001b248feb555b947ecf6842b9ad546f98f63ef89117575d73223e9fb9ee8143857b6fcc79600fffed1966cea46f7524236cd1e83531aef906cb8b4c296d50695bb83efa84075d309'
// root: '0x6ae0bafe59ff0bab856c3f26c392dfca9c32d395b0ceccdddf0bee95120facd9'
// signing_root: '0xa7b0199ee4cd6b9d764ca93ee285fb98313ddd4994c52b5d64dd75a3c4b2b85a'
header1: &ethpb.BeaconBlockHeader{
Slot: 14215038047959786547,
ParentRoot: hexDecodeOrDie(t, "f9b2785de53069d4ad16cc0ec729afe9f879e391433ec120bb15b5082a486705"),
StateRoot: hexDecodeOrDie(t, "737d1c6ff6e2edf7f0627bf55381e6b08f6c2c56ed8d1895ae47a782dc09382e"),
BodyRoot: hexDecodeOrDie(t, "affff5006c34a3a2bf7f18b7860675f002187ea809f708fa8f44c424321bcd1c"),
},
header2: sszspectest.MainnetBlockHeader{
Slot: 14215038047959786547,
ParentRoot: hexDecodeOrDie(t, "f9b2785de53069d4ad16cc0ec729afe9f879e391433ec120bb15b5082a486705"),
StateRoot: hexDecodeOrDie(t, "737d1c6ff6e2edf7f0627bf55381e6b08f6c2c56ed8d1895ae47a782dc09382e"),
BodyRoot: hexDecodeOrDie(t, "affff5006c34a3a2bf7f18b7860675f002187ea809f708fa8f44c424321bcd1c"),
Signature: hexDecodeOrDie(t, "17d25044259a0ccd99d1b45eeec4e084e5fb0fef98d5805001b248feb555b947ecf6842b9ad546f98f63ef89117575d73223e9fb9ee8143857b6fcc79600fffed1966cea46f7524236cd1e83531aef906cb8b4c296d50695bb83efa84075d309"),
},
expectedRoot: bytesutil.ToBytes32(hexDecodeOrDie(t, "a7b0199ee4cd6b9d764ca93ee285fb98313ddd4994c52b5d64dd75a3c4b2b85a")),
},
}
for i, tt := range tests {
t.Run(fmt.Sprintf("%d", i), func(t *testing.T) {
root1, err := tt.header1.HashTreeRoot()
assert.NoError(t, err)
root2, err := ssz.HashTreeRoot(tt.header2)
assert.NoError(t, err)
assert.Equal(t, root1, root2)
assert.Equal(t, tt.expectedRoot, root1)
})
}
}
func hexDecodeOrDie(t *testing.T, h string) []byte {
b, err := hex.DecodeString(h)
require.NoError(t, err)
return b
}
func TestFastSSZBitlistBug(t *testing.T) {
// See fix: https://github.com/ferranbt/fastssz/pull/18
// beacon_block_151906.ssz hashes to 0x684fd51e500001fd596ef4d4061863b6713846133f7d48e828cee4e15a0d7978.
// This test can be removed when this case is included as an upstream spec test.
b, err := ioutil.ReadFile("data/beacon_block_151906.ssz")
if err != nil {
t.Fatal(err)
}
sb := &ethpb.SignedBeaconBlock{}
if err := sb.UnmarshalSSZ(b); err != nil {
t.Fatal(err)
}
r, err := sb.HashTreeRoot()
if err != nil {
t.Fatal(err)
}
if rStr := fmt.Sprintf("%#x", r); rStr != "0x684fd51e500001fd596ef4d4061863b6713846133f7d48e828cee4e15a0d7978" {
t.Errorf("Received wrong root. Got %s, wanted %s", rStr, "0x684fd51e500001fd596ef4d4061863b6713846133f7d48e828cee4e15a0d7978")
}
}

View File

@@ -9,7 +9,6 @@ import (
fssz "github.com/ferranbt/fastssz"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/go-ssz"
"github.com/prysmaticlabs/prysm/beacon-chain/state"
pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
"github.com/prysmaticlabs/prysm/shared/params/spectest"
@@ -52,7 +51,13 @@ func runSSZStaticTests(t *testing.T, config string) {
return beaconState.HashTreeRoot(context.Background())
}
} else {
htr = ssz.HashTreeRoot
htr = func(s interface{}) ([32]byte, error) {
sszObj, ok := s.(fssz.HashRoot)
if !ok {
return [32]byte{}, errors.New("could not get hash root, not compatible object")
}
return sszObj.HashTreeRoot()
}
}
root, err := htr(object)
@@ -146,7 +151,7 @@ func UnmarshalledSSZ(t *testing.T, serializedBytes []byte, folderName string) (i
if o, ok := obj.(fssz.Unmarshaler); ok {
err = o.UnmarshalSSZ(serializedBytes)
} else {
err = ssz.Unmarshal(serializedBytes, obj)
err = errors.New("could not unmarshal object, not a fastssz compatible object")
}
return obj, err
}

View File

@@ -18,6 +18,7 @@ go_library(
deps = [
"//beacon-chain/core/helpers:go_default_library",
"//beacon-chain/core/state:go_default_library",
"//beacon-chain/p2p/types:go_default_library",
"//beacon-chain/state:go_default_library",
"//proto/beacon/p2p/v1:go_default_library",
"//shared/bls:go_default_library",
@@ -54,6 +55,7 @@ go_test(
"//beacon-chain/core/helpers:go_default_library",
"//beacon-chain/core/state:go_default_library",
"//beacon-chain/core/state/stateutils:go_default_library",
"//beacon-chain/p2p/types:go_default_library",
"//proto/beacon/p2p/v1:go_default_library",
"//shared/bytesutil:go_default_library",
"//shared/params:go_default_library",

View File

@@ -9,6 +9,7 @@ import (
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
"github.com/prysmaticlabs/prysm/beacon-chain/core/state"
p2ptypes "github.com/prysmaticlabs/prysm/beacon-chain/p2p/types"
stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state"
"github.com/prysmaticlabs/prysm/shared/bls"
"github.com/prysmaticlabs/prysm/shared/params"
@@ -26,7 +27,8 @@ func RandaoReveal(beaconState *stateTrie.BeaconState, epoch uint64, privKeys []b
binary.LittleEndian.PutUint64(buf, epoch)
// We make the previous validator's index sign the message instead of the proposer.
return helpers.ComputeDomainAndSign(beaconState, epoch, epoch, params.BeaconConfig().DomainRandao, privKeys[proposerIdx])
sszEpoch := p2ptypes.SSZUint64(epoch)
return helpers.ComputeDomainAndSign(beaconState, epoch, &sszEpoch, params.BeaconConfig().DomainRandao, privKeys[proposerIdx])
}
// BlockSignature calculates the post-state root of the block and returns the signature.

View File

@@ -6,6 +6,7 @@ import (
"testing"
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
p2ptypes "github.com/prysmaticlabs/prysm/beacon-chain/p2p/types"
"github.com/prysmaticlabs/prysm/shared/params"
"github.com/prysmaticlabs/prysm/shared/testutil/assert"
"github.com/prysmaticlabs/prysm/shared/testutil/require"
@@ -45,7 +46,8 @@ func TestRandaoReveal(t *testing.T) {
buf := make([]byte, 32)
binary.LittleEndian.PutUint64(buf, epoch)
// We make the previous validator's index sign the message instead of the proposer.
epochSignature, err := helpers.ComputeDomainAndSign(beaconState, epoch, epoch, params.BeaconConfig().DomainRandao, privKeys[proposerIdx])
sszUint := p2ptypes.SSZUint64(epoch)
epochSignature, err := helpers.ComputeDomainAndSign(beaconState, epoch, &sszUint, params.BeaconConfig().DomainRandao, privKeys[proposerIdx])
require.NoError(t, err)
if !bytes.Equal(randaoReveal, epochSignature) {

View File

@@ -48,6 +48,7 @@ go_test(
embed = [":go_default_library"],
deps = [
"//beacon-chain/core/helpers:go_default_library",
"//beacon-chain/p2p/types:go_default_library",
"//beacon-chain/state:go_default_library",
"//shared/bls:go_default_library",
"//shared/bytesutil:go_default_library",

View File

@@ -9,6 +9,7 @@ import (
"github.com/golang/mock/gomock"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
"github.com/prysmaticlabs/prysm/beacon-chain/p2p/types"
"github.com/prysmaticlabs/prysm/beacon-chain/state"
"github.com/prysmaticlabs/prysm/shared/bls"
"github.com/prysmaticlabs/prysm/shared/bytesutil"
@@ -235,7 +236,8 @@ func TestServer_IsSlashableBlock(t *testing.T) {
sbbh.Header.BodyRoot = bytesutil.PadTo([]byte(fmt.Sprintf("%d", j)), 32)
bhr, err := sbbh.Header.HashTreeRoot()
assert.NoError(t, err)
root, err := helpers.ComputeSigningRoot(bhr, domain)
sszBytes := types.SSZBytes(bhr[:])
root, err := helpers.ComputeSigningRoot(&sszBytes, domain)
assert.NoError(t, err)
sbbh.Signature = keys[sbbh.Header.ProposerIndex].Sign(root[:]).Marshal()
slashings, err := server.IsSlashableBlock(ctx, sbbh)
@@ -303,7 +305,8 @@ func TestServer_IsSlashableBlockNoUpdate(t *testing.T) {
require.NoError(t, err)
bhr, err := savedBlock.Header.HashTreeRoot()
require.NoError(t, err)
root, err := helpers.ComputeSigningRoot(bhr, domain)
sszBytes := types.SSZBytes(bhr[:])
root, err := helpers.ComputeSigningRoot(&sszBytes, domain)
require.NoError(t, err)
blockSig := keys[savedBlock.Header.ProposerIndex].Sign(root[:])
marshalledSig := blockSig.Marshal()

View File

@@ -15,9 +15,9 @@ go_library(
"//proto/beacon/p2p/v1:go_default_library",
"//shared/sszutil:go_default_library",
"//shared/version:go_default_library",
"@com_github_ferranbt_fastssz//:go_default_library",
"@com_github_kr_pretty//:go_default_library",
"@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library",
"@com_github_prysmaticlabs_go_ssz//:go_default_library",
"@com_github_sirupsen_logrus//:go_default_library",
"@com_github_urfave_cli_v2//:go_default_library",
"@com_github_x_cray_logrus_prefixed_formatter//:go_default_library",

View File

@@ -9,9 +9,9 @@ import (
"regexp"
"strings"
fssz "github.com/ferranbt/fastssz"
"github.com/kr/pretty"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/go-ssz"
"github.com/prysmaticlabs/prysm/beacon-chain/core/state"
stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state"
pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
@@ -68,7 +68,7 @@ func main() {
},
},
Action: func(c *cli.Context) error {
var data interface{}
var data fssz.Unmarshaler
switch sszType {
case "block":
data = &ethpb.BeaconBlock{}
@@ -80,6 +80,8 @@ func main() {
data = &ethpb.BeaconBlockHeader{}
case "deposit":
data = &ethpb.Deposit{}
case "deposit_message":
data = &pb.DepositMessage{}
case "proposer_slashing":
data = &ethpb.ProposerSlashing{}
case "signed_block_header":
@@ -205,15 +207,15 @@ func main() {
}
// dataFetcher fetches and unmarshals data from file to provided data structure.
func dataFetcher(fPath string, data interface{}) error {
func dataFetcher(fPath string, data fssz.Unmarshaler) error {
rawFile, err := ioutil.ReadFile(fPath)
if err != nil {
return err
}
return ssz.Unmarshal(rawFile, data)
return data.UnmarshalSSZ(rawFile)
}
func prettyPrint(sszPath string, data interface{}) {
func prettyPrint(sszPath string, data fssz.Unmarshaler) {
if err := dataFetcher(sszPath, data); err != nil {
log.Fatal(err)
}

View File

@@ -22,6 +22,7 @@ go_library(
visibility = ["//validator:__subpackages__"],
deps = [
"//beacon-chain/core/helpers:go_default_library",
"//beacon-chain/p2p/types:go_default_library",
"//proto/validator/accounts/v2:go_default_library",
"//shared/blockutil:go_default_library",
"//shared/bls:go_default_library",

View File

@@ -7,6 +7,7 @@ import (
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
p2ptypes "github.com/prysmaticlabs/prysm/beacon-chain/p2p/types"
validatorpb "github.com/prysmaticlabs/prysm/proto/validator/accounts/v2"
"github.com/prysmaticlabs/prysm/shared/bls"
"github.com/prysmaticlabs/prysm/shared/params"
@@ -123,7 +124,8 @@ func (v *validator) signSlot(ctx context.Context, pubKey [48]byte, slot uint64)
}
var sig bls.Signature
root, err := helpers.ComputeSigningRoot(slot, domain.SignatureDomain)
sszUint := p2ptypes.SSZUint64(slot)
root, err := helpers.ComputeSigningRoot(&sszUint, domain.SignatureDomain)
if err != nil {
return nil, err
}

View File

@@ -10,6 +10,7 @@ import (
"github.com/pkg/errors"
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
p2ptypes "github.com/prysmaticlabs/prysm/beacon-chain/p2p/types"
validatorpb "github.com/prysmaticlabs/prysm/proto/validator/accounts/v2"
"github.com/prysmaticlabs/prysm/shared/bls"
"github.com/prysmaticlabs/prysm/shared/bytesutil"
@@ -191,7 +192,8 @@ func (v *validator) signRandaoReveal(ctx context.Context, pubKey [48]byte, epoch
}
var randaoReveal bls.Signature
root, err := helpers.ComputeSigningRoot(epoch, domain.SignatureDomain)
sszUint := p2ptypes.SSZUint64(epoch)
root, err := helpers.ComputeSigningRoot(&sszUint, domain.SignatureDomain)
if err != nil {
return nil, err
}