From 803aafaba4f1cace2b444100f9b66a5a282a3079 Mon Sep 17 00:00:00 2001 From: testinginprod Date: Thu, 29 Aug 2024 15:42:15 +0200 Subject: [PATCH] add pubkeys to account --- simapp/app.go | 2 +- x/accounts/defaults/base/account_test.go | 2 +- x/accounts/defaults/base/pubkey.go | 12 +++++++++++- x/accounts/depinject.go | 2 +- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/simapp/app.go b/simapp/app.go index 1e64e65dee18..a5c8b4355a3d 100644 --- a/simapp/app.go +++ b/simapp/app.go @@ -305,7 +305,7 @@ func NewSimApp( accountstd.AddAccount(lockup.DELAYED_LOCKING_ACCOUNT, lockup.NewDelayedLockingAccount), accountstd.AddAccount(lockup.PERMANENT_LOCKING_ACCOUNT, lockup.NewPermanentLockingAccount), // PRODUCTION: add - baseaccount.NewAccount("base", txConfig.SignModeHandler()), + baseaccount.NewAccount("base", txConfig.SignModeHandler(), baseaccount.WithSecp256K1PubKey()), ) if err != nil { panic(err) diff --git a/x/accounts/defaults/base/account_test.go b/x/accounts/defaults/base/account_test.go index af223155fb2e..8523d47c1f9b 100644 --- a/x/accounts/defaults/base/account_test.go +++ b/x/accounts/defaults/base/account_test.go @@ -7,6 +7,7 @@ import ( gogoproto "github.com/cosmos/gogoproto/proto" types "github.com/cosmos/gogoproto/types/any" + dcrd_secp256k1 "github.com/decred/dcrd/dcrec/secp256k1/v4" "github.com/stretchr/testify/require" "cosmossdk.io/core/store" @@ -14,7 +15,6 @@ import ( v1 "cosmossdk.io/x/accounts/defaults/base/v1" aa_interface_v1 "cosmossdk.io/x/accounts/interfaces/account_abstraction/v1" "cosmossdk.io/x/tx/signing" - dcrd_secp256k1 "github.com/decred/dcrd/dcrec/secp256k1/v4" codectypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" diff --git a/x/accounts/defaults/base/pubkey.go b/x/accounts/defaults/base/pubkey.go index 835b2fb09dca..abbf37e3f058 100644 --- a/x/accounts/defaults/base/pubkey.go +++ b/x/accounts/defaults/base/pubkey.go @@ -5,6 +5,9 @@ import ( "strings" gogoproto "github.com/cosmos/gogoproto/proto" + dcrd_secp256k1 "github.com/decred/dcrd/dcrec/secp256k1/v4" + + "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" ) // this file implements a general mechanism to plugin public keys to a baseaccount @@ -12,7 +15,7 @@ import ( // PubKey defines a generic pubkey. type PubKey interface { gogoproto.Message - VerifySignature(msg []byte, sig []byte) bool + VerifySignature(msg, sig []byte) bool } type PubKeyG[T any] interface { @@ -25,6 +28,13 @@ type pubKeyImpl struct { validate func(key PubKey) error } +func WithSecp256K1PubKey() Option { + return WithPubKeyWithValidationFunc(func(pt *secp256k1.PubKey) error { + _, err := dcrd_secp256k1.ParsePubKey(pt.Key) + return err + }) +} + func WithPubKey[T any, PT PubKeyG[T]]() Option { return WithPubKeyWithValidationFunc[T, PT](func(_ PT) error { return nil diff --git a/x/accounts/depinject.go b/x/accounts/depinject.go index 04a45c533453..1110a0525a20 100644 --- a/x/accounts/depinject.go +++ b/x/accounts/depinject.go @@ -64,7 +64,7 @@ func (s directHandler) GetSignBytes(_ context.Context, _ signing.SignerData, _ s func ProvideModule(in ModuleInputs) ModuleOutputs { handler := directHandler{} - account := baseaccount.NewAccount("base", signing.NewHandlerMap(handler)) + account := baseaccount.NewAccount("base", signing.NewHandlerMap(handler), baseaccount.WithSecp256K1PubKey()) accountskeeper, err := NewKeeper( in.Cdc, in.Environment, in.AddressCodec, in.Registry, account, accountstd.AddAccount(lockup.CONTINUOUS_LOCKING_ACCOUNT, lockup.NewContinuousLockingAccount),