mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2024-12-22 11:32:09 +00:00
initialize sig cache for verification.Initializer (#13295)
* initialize sig cache for verification.Initializer * gaz * lint --------- Co-authored-by: Kasey Kirkham <kasey@users.noreply.github.com>
This commit is contained in:
parent
83af9a5694
commit
40a3ebab91
@ -24,7 +24,6 @@ go_library(
|
|||||||
"//config/fieldparams:go_default_library",
|
"//config/fieldparams:go_default_library",
|
||||||
"//config/params:go_default_library",
|
"//config/params:go_default_library",
|
||||||
"//consensus-types/blocks:go_default_library",
|
"//consensus-types/blocks:go_default_library",
|
||||||
"//consensus-types/interfaces:go_default_library",
|
|
||||||
"//consensus-types/primitives:go_default_library",
|
"//consensus-types/primitives:go_default_library",
|
||||||
"//crypto/bls:go_default_library",
|
"//crypto/bls:go_default_library",
|
||||||
"//encoding/bytesutil:go_default_library",
|
"//encoding/bytesutil:go_default_library",
|
||||||
@ -43,6 +42,7 @@ go_test(
|
|||||||
srcs = [
|
srcs = [
|
||||||
"blob_test.go",
|
"blob_test.go",
|
||||||
"cache_test.go",
|
"cache_test.go",
|
||||||
|
"initializer_test.go",
|
||||||
],
|
],
|
||||||
embed = [":go_default_library"],
|
embed = [":go_default_library"],
|
||||||
deps = [
|
deps = [
|
||||||
@ -56,6 +56,7 @@ go_test(
|
|||||||
"//consensus-types/blocks:go_default_library",
|
"//consensus-types/blocks:go_default_library",
|
||||||
"//consensus-types/primitives:go_default_library",
|
"//consensus-types/primitives:go_default_library",
|
||||||
"//crypto/bls:go_default_library",
|
"//crypto/bls:go_default_library",
|
||||||
|
"//encoding/bytesutil:go_default_library",
|
||||||
"//proto/prysm/v1alpha1:go_default_library",
|
"//proto/prysm/v1alpha1:go_default_library",
|
||||||
"//runtime/interop:go_default_library",
|
"//runtime/interop:go_default_library",
|
||||||
"//testing/require:go_default_library",
|
"//testing/require:go_default_library",
|
||||||
|
@ -9,15 +9,9 @@ import (
|
|||||||
"github.com/prysmaticlabs/prysm/v4/beacon-chain/startup"
|
"github.com/prysmaticlabs/prysm/v4/beacon-chain/startup"
|
||||||
"github.com/prysmaticlabs/prysm/v4/beacon-chain/state"
|
"github.com/prysmaticlabs/prysm/v4/beacon-chain/state"
|
||||||
"github.com/prysmaticlabs/prysm/v4/consensus-types/blocks"
|
"github.com/prysmaticlabs/prysm/v4/consensus-types/blocks"
|
||||||
"github.com/prysmaticlabs/prysm/v4/consensus-types/interfaces"
|
|
||||||
"github.com/prysmaticlabs/prysm/v4/consensus-types/primitives"
|
"github.com/prysmaticlabs/prysm/v4/consensus-types/primitives"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Database represents the db methods that the verifiers need.
|
|
||||||
type Database interface {
|
|
||||||
Block(ctx context.Context, blockRoot [32]byte) (interfaces.ReadOnlySignedBeaconBlock, error)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Forkchoicer represents the forkchoice methods that the verifiers need.
|
// Forkchoicer represents the forkchoice methods that the verifiers need.
|
||||||
// Note that forkchoice is used here in a lock-free fashion, assuming that a version of forkchoice
|
// Note that forkchoice is used here in a lock-free fashion, assuming that a version of forkchoice
|
||||||
// is given that internally handles the details of locking the underlying store.
|
// is given that internally handles the details of locking the underlying store.
|
||||||
@ -40,7 +34,6 @@ type sharedResources struct {
|
|||||||
fc Forkchoicer
|
fc Forkchoicer
|
||||||
sc SignatureCache
|
sc SignatureCache
|
||||||
pc ProposerCache
|
pc ProposerCache
|
||||||
db Database
|
|
||||||
sr StateByRooter
|
sr StateByRooter
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,12 +64,12 @@ type InitializerWaiter struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewInitializerWaiter creates an InitializerWaiter which can be used to obtain an Initializer once async dependencies are ready.
|
// NewInitializerWaiter creates an InitializerWaiter which can be used to obtain an Initializer once async dependencies are ready.
|
||||||
func NewInitializerWaiter(cw startup.ClockWaiter, fc Forkchoicer, sc SignatureCache, pc ProposerCache, db Database, sr StateByRooter) *InitializerWaiter {
|
func NewInitializerWaiter(cw startup.ClockWaiter, fc Forkchoicer, sr StateByRooter) *InitializerWaiter {
|
||||||
|
pc := newPropCache()
|
||||||
|
// signature cache is initialized in WaitForInitializer, since we need the genesis validators root, which can be obtained from startup.Clock.
|
||||||
shared := &sharedResources{
|
shared := &sharedResources{
|
||||||
fc: fc,
|
fc: fc,
|
||||||
sc: sc,
|
|
||||||
pc: pc,
|
pc: pc,
|
||||||
db: db,
|
|
||||||
sr: sr,
|
sr: sr,
|
||||||
}
|
}
|
||||||
return &InitializerWaiter{cw: cw, ini: &Initializer{shared: shared}}
|
return &InitializerWaiter{cw: cw, ini: &Initializer{shared: shared}}
|
||||||
@ -88,6 +81,10 @@ func (w *InitializerWaiter) WaitForInitializer(ctx context.Context) (*Initialize
|
|||||||
if err := w.waitForReady(ctx); err != nil {
|
if err := w.waitForReady(ctx); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
// We wait until this point to initialize the signature cache because here we have access to the genesis validator root.
|
||||||
|
vr := w.ini.shared.clock.GenesisValidatorsRoot()
|
||||||
|
sc := newSigCache(vr[:], DefaultSignatureCacheSize)
|
||||||
|
w.ini.shared.sc = sc
|
||||||
return w.ini, nil
|
return w.ini, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
28
beacon-chain/verification/initializer_test.go
Normal file
28
beacon-chain/verification/initializer_test.go
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
package verification
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"context"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/prysmaticlabs/prysm/v4/beacon-chain/startup"
|
||||||
|
"github.com/prysmaticlabs/prysm/v4/encoding/bytesutil"
|
||||||
|
"github.com/prysmaticlabs/prysm/v4/testing/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestInitializerWaiter(t *testing.T) {
|
||||||
|
ctx := context.Background()
|
||||||
|
vr := bytesutil.ToBytes32([]byte{0, 1, 1, 2, 3, 5})
|
||||||
|
gen := time.Now()
|
||||||
|
c := startup.NewClock(gen, vr)
|
||||||
|
cs := startup.NewClockSynchronizer()
|
||||||
|
require.NoError(t, cs.SetClock(c))
|
||||||
|
|
||||||
|
w := NewInitializerWaiter(cs, &mockForkchoicer{}, &mockStateByRooter{})
|
||||||
|
ini, err := w.WaitForInitializer(ctx)
|
||||||
|
require.NoError(t, err)
|
||||||
|
csc, ok := ini.shared.sc.(*sigCache)
|
||||||
|
require.Equal(t, true, ok)
|
||||||
|
require.Equal(t, true, bytes.Equal(vr[:], csc.valRoot))
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user