diff --git a/beacond/cmd/main.go b/beacond/cmd/main.go index 0e79ad3cc5..53bf0b5502 100644 --- a/beacond/cmd/main.go +++ b/beacond/cmd/main.go @@ -31,6 +31,7 @@ import ( nodebuilder "github.com/berachain/beacon-kit/mod/node-builder" "github.com/berachain/beacon-kit/mod/node-builder/pkg/app" + "github.com/berachain/beacon-kit/mod/node-builder/pkg/config/spec" "go.uber.org/automaxprocs/maxprocs" ) @@ -45,7 +46,9 @@ func run() error { nb := nodebuilder.NewNodeBuilder[app.BeaconApp](). WithAppName("beacond"). WithAppDescription("beacond is a beacon node for any beacon-kit chain"). - WithDepInjectConfig(Config()) + WithDepInjectConfig(Config()). + // TODO: Don't hardcode the default chain spec. + WithChainSpec(spec.LocalnetChainSpec()) return nb.RunNode() } diff --git a/mod/node-builder/builder.go b/mod/node-builder/builder.go index e3a95b2c5f..db18af7dd0 100644 --- a/mod/node-builder/builder.go +++ b/mod/node-builder/builder.go @@ -34,7 +34,7 @@ import ( cmdlib "github.com/berachain/beacon-kit/mod/node-builder/pkg/commands" "github.com/berachain/beacon-kit/mod/node-builder/pkg/commands/utils/tos" "github.com/berachain/beacon-kit/mod/node-builder/pkg/components" - "github.com/berachain/beacon-kit/mod/node-builder/pkg/config/spec" + "github.com/berachain/beacon-kit/mod/primitives" depositdb "github.com/berachain/beacon-kit/mod/storage/pkg/deposit" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/config" @@ -61,6 +61,9 @@ type NodeBuilder[T servertypes.Application] struct { // Every node has some application it is running. appInfo *AppInfo[T] + // chainSpec is the chain specification for the application. + chainSpec primitives.ChainSpec + // rootCmd is the root command for the application. rootCmd *cobra.Command } @@ -100,7 +103,7 @@ func (nb *NodeBuilder[T]) BuildRootCmd() error { depinject.Supply( log.NewLogger(os.Stdout), viper.GetViper(), - spec.LocalnetChainSpec(), + nb.chainSpec, &depositdb.KVStore{}, ), depinject.Provide( @@ -169,6 +172,7 @@ func (nb *NodeBuilder[T]) BuildRootCmd() error { nb.rootCmd, mm, nb.AppCreator, + nb.chainSpec, ) return autoCliOpts.EnhanceRootCommand(nb.rootCmd) diff --git a/mod/node-builder/creator.go b/mod/node-builder/creator.go index 10d0539468..ab6393a85c 100644 --- a/mod/node-builder/creator.go +++ b/mod/node-builder/creator.go @@ -43,12 +43,13 @@ func (nb *NodeBuilder[T]) AppCreator( traceStore io.Writer, appOpts servertypes.AppOptions, ) T { - bk := *app.NewBeaconKitApp( + app := *app.NewBeaconKitApp( logger, db, traceStore, true, appOpts, nb.appInfo.DepInjectConfig, + nb.chainSpec, server.DefaultBaseappOptions(appOpts)..., ) - return reflect.ValueOf(bk).Convert( + return reflect.ValueOf(app).Convert( reflect.TypeOf((*T)(nil)).Elem()).Interface().(T) } diff --git a/mod/node-builder/decorators.go b/mod/node-builder/decorators.go index bdb82cc8af..70121f4ebf 100644 --- a/mod/node-builder/decorators.go +++ b/mod/node-builder/decorators.go @@ -27,6 +27,7 @@ package nodebuilder import ( "cosmossdk.io/depinject" + "github.com/berachain/beacon-kit/mod/primitives" ) // WithAppName sets the application name. @@ -49,6 +50,14 @@ func (nb *NodeBuilder[T]) WithAppDescription( return nb } +// WithChainSpec sets the chain specification. +func (nb *NodeBuilder[T]) WithChainSpec( + spec primitives.ChainSpec, +) *NodeBuilder[T] { + nb.chainSpec = spec + return nb +} + // WithDepInjectConfig sets the dependency injection configuration. func (nb *NodeBuilder[T]) WithDepInjectConfig( config depinject.Config, diff --git a/mod/node-builder/pkg/app/app.go b/mod/node-builder/pkg/app/app.go index aa3169ce2a..41f146ff0e 100644 --- a/mod/node-builder/pkg/app/app.go +++ b/mod/node-builder/pkg/app/app.go @@ -35,7 +35,7 @@ import ( "github.com/berachain/beacon-kit/mod/consensus-types/pkg/types" datypes "github.com/berachain/beacon-kit/mod/da/pkg/types" bkcomponents "github.com/berachain/beacon-kit/mod/node-builder/pkg/components" - "github.com/berachain/beacon-kit/mod/node-builder/pkg/config/spec" + "github.com/berachain/beacon-kit/mod/primitives" beaconkitruntime "github.com/berachain/beacon-kit/mod/runtime/pkg/runtime" "github.com/berachain/beacon-kit/mod/state-transition/pkg/core/state" "github.com/berachain/beacon-kit/mod/storage/pkg/deposit" @@ -79,6 +79,7 @@ func NewBeaconKitApp( loadLatest bool, appOpts servertypes.AppOptions, dCfg depinject.Config, + chainSpec primitives.ChainSpec, baseAppOptions ...func(*baseapp.BaseApp), ) *BeaconApp { app := &BeaconApp{} @@ -100,8 +101,7 @@ func NewBeaconKitApp( appOpts, // supply the logger logger, - // TODO: allow nodebuilder to inject. - spec.LocalnetChainSpec(), + chainSpec, ), ), &appBuilder, diff --git a/mod/node-builder/pkg/commands/deposit/create.go b/mod/node-builder/pkg/commands/deposit/create.go index 68b5da6407..19f43e0f0a 100644 --- a/mod/node-builder/pkg/commands/deposit/create.go +++ b/mod/node-builder/pkg/commands/deposit/create.go @@ -35,7 +35,7 @@ import ( "github.com/berachain/beacon-kit/mod/node-builder/pkg/commands/utils/parser" "github.com/berachain/beacon-kit/mod/node-builder/pkg/components" "github.com/berachain/beacon-kit/mod/node-builder/pkg/components/signer" - "github.com/berachain/beacon-kit/mod/node-builder/pkg/config/spec" + "github.com/berachain/beacon-kit/mod/primitives" "github.com/berachain/beacon-kit/mod/primitives/pkg/constants" "github.com/berachain/beacon-kit/mod/primitives/pkg/crypto" "github.com/spf13/cobra" @@ -45,7 +45,7 @@ import ( // NewValidateDeposit creates a new command for validating a deposit message. // //nolint:gomnd // lots of magic numbers -func NewCreateValidator() *cobra.Command { +func NewCreateValidator(chainSpec primitives.ChainSpec) *cobra.Command { cmd := &cobra.Command{ Use: "create-validator", Short: "Creates a validator deposit", @@ -54,7 +54,7 @@ func NewCreateValidator() *cobra.Command { amount, current version, and genesis validator root. If the broadcast flag is set to true, a private key must be provided to sign the transaction.`, Args: cobra.ExactArgs(4), //nolint:mnd // The number of arguments. - RunE: createValidatorCmd(), + RunE: createValidatorCmd(chainSpec), } cmd.Flags().BoolP( @@ -80,7 +80,9 @@ func NewCreateValidator() *cobra.Command { // for the geth client but something about the Deposit binding is not handling // other execution layers correctly. Peep the commit history for what we had. // 🤷‍♂️. -func createValidatorCmd() func(*cobra.Command, []string) error { +func createValidatorCmd( + chainSpec primitives.ChainSpec, +) func(*cobra.Command, []string) error { return func(cmd *cobra.Command, args []string) error { var ( logger = log.NewLogger(os.Stdout) @@ -115,7 +117,7 @@ func createValidatorCmd() func(*cobra.Command, []string) error { // Create and sign the deposit message. depositMsg, signature, err := types.CreateAndSignDepositMessage( types.NewForkData(currentVersion, genesisValidatorRoot), - spec.LocalnetChainSpec().DomainTypeDeposit(), + chainSpec.DomainTypeDeposit(), blsSigner, credentials, amount, @@ -129,7 +131,7 @@ func createValidatorCmd() func(*cobra.Command, []string) error { types.NewForkData(currentVersion, genesisValidatorRoot), signature, signer.BLSSigner{}.VerifySignature, - spec.LocalnetChainSpec().DomainTypeDeposit(), + chainSpec.DomainTypeDeposit(), ); err != nil { return err } diff --git a/mod/node-builder/pkg/commands/deposit/deposit.go b/mod/node-builder/pkg/commands/deposit/deposit.go index 4f55e86372..d6b736856a 100644 --- a/mod/node-builder/pkg/commands/deposit/deposit.go +++ b/mod/node-builder/pkg/commands/deposit/deposit.go @@ -29,13 +29,13 @@ import ( "github.com/berachain/beacon-kit/mod/consensus-types/pkg/types" "github.com/berachain/beacon-kit/mod/node-builder/pkg/commands/utils/parser" "github.com/berachain/beacon-kit/mod/node-builder/pkg/components/signer" - "github.com/berachain/beacon-kit/mod/node-builder/pkg/config/spec" + "github.com/berachain/beacon-kit/mod/primitives" "github.com/cosmos/cosmos-sdk/client" "github.com/spf13/cobra" ) // Commands creates a new command for deposit related actions. -func Commands() *cobra.Command { +func Commands(chainSpec primitives.ChainSpec) *cobra.Command { cmd := &cobra.Command{ Use: "deposit", Short: "deposit subcommands", @@ -45,8 +45,8 @@ func Commands() *cobra.Command { } cmd.AddCommand( - NewValidateDeposit(), - NewCreateValidator(), + NewValidateDeposit(chainSpec), + NewCreateValidator(chainSpec), ) return cmd @@ -55,7 +55,7 @@ func Commands() *cobra.Command { // NewValidateDeposit creates a new command for validating a deposit message. // //nolint:mnd // lots of magic numbers -func NewValidateDeposit() *cobra.Command { +func NewValidateDeposit(chainSpec primitives.ChainSpec) *cobra.Command { cmd := &cobra.Command{ Use: "validate", Short: "Validates a deposit message for creating a new validator", @@ -65,7 +65,7 @@ func NewValidateDeposit() *cobra.Command { withdrawal credentials, deposit amount, signature, current version, and genesis validator root.`, Args: cobra.ExactArgs(6), - RunE: validateDepositMessage, + RunE: validateDepositMessage(chainSpec), } return cmd @@ -73,51 +73,52 @@ func NewValidateDeposit() *cobra.Command { // validateDepositMessage validates a deposit message for creating a new // validator. -func validateDepositMessage( +func validateDepositMessage(chainSpec primitives.ChainSpec) func( _ *cobra.Command, args []string, ) error { - pubkey, err := parser.ConvertPubkey(args[0]) - if err != nil { - return err - } + return func(_ *cobra.Command, args []string) error { + pubkey, err := parser.ConvertPubkey(args[0]) + if err != nil { + return err + } - credentials, err := parser.ConvertWithdrawalCredentials(args[1]) - if err != nil { - return err - } + credentials, err := parser.ConvertWithdrawalCredentials(args[1]) + if err != nil { + return err + } - amount, err := parser.ConvertAmount(args[2]) - if err != nil { - return err - } + amount, err := parser.ConvertAmount(args[2]) + if err != nil { + return err + } - signature, err := parser.ConvertSignature(args[3]) - if err != nil { - return err - } + signature, err := parser.ConvertSignature(args[3]) + if err != nil { + return err + } - currentVersion, err := parser.ConvertVersion(args[4]) - if err != nil { - return err - } + currentVersion, err := parser.ConvertVersion(args[4]) + if err != nil { + return err + } - genesisValidatorRoot, err := parser.ConvertGenesisValidatorRoot(args[5]) - if err != nil { - return err - } + genesisValidatorRoot, err := parser.ConvertGenesisValidatorRoot(args[5]) + if err != nil { + return err + } - depositMessage := types.DepositMessage{ - Pubkey: pubkey, - Credentials: credentials, - Amount: amount, - } + depositMessage := types.DepositMessage{ + Pubkey: pubkey, + Credentials: credentials, + Amount: amount, + } - return depositMessage.VerifyCreateValidator( - types.NewForkData(currentVersion, genesisValidatorRoot), - signature, - signer.BLSSigner{}.VerifySignature, - // TODO: needs to be configurable. - spec.LocalnetChainSpec().DomainTypeDeposit(), - ) + return depositMessage.VerifyCreateValidator( + types.NewForkData(currentVersion, genesisValidatorRoot), + signature, + signer.BLSSigner{}.VerifySignature, + chainSpec.DomainTypeDeposit(), + ) + } } diff --git a/mod/node-builder/pkg/commands/root.go b/mod/node-builder/pkg/commands/root.go index 4493ceef46..8c092000be 100644 --- a/mod/node-builder/pkg/commands/root.go +++ b/mod/node-builder/pkg/commands/root.go @@ -33,6 +33,7 @@ import ( "github.com/berachain/beacon-kit/mod/node-builder/pkg/commands/genesis" "github.com/berachain/beacon-kit/mod/node-builder/pkg/commands/jwt" beaconconfig "github.com/berachain/beacon-kit/mod/node-builder/pkg/config" + "github.com/berachain/beacon-kit/mod/primitives" "github.com/cosmos/cosmos-sdk/client/keys" "github.com/cosmos/cosmos-sdk/client/pruning" "github.com/cosmos/cosmos-sdk/client/snapshot" @@ -49,6 +50,7 @@ func DefaultRootCommandSetup[T servertypes.Application]( rootCmd *cobra.Command, mm *module.Manager, newApp servertypes.AppCreator[T], + chainSpec primitives.ChainSpec, ) { // Add the ToS Flag to the root command. beaconconfig.AddToSFlag(rootCmd) @@ -73,7 +75,7 @@ func DefaultRootCommandSetup[T servertypes.Application]( genesis.AddPubkeyCmd(), genesis.CollectValidatorsCmd(), ), - deposit.Commands(), + deposit.Commands(chainSpec), // `jwt` jwt.Commands(), // `keys`