diff --git a/lib/tests/e2e/suite.go b/lib/tests/e2e/suite.go index aff4ec2..e02454d 100644 --- a/lib/tests/e2e/suite.go +++ b/lib/tests/e2e/suite.go @@ -88,13 +88,19 @@ func (s *E2ETestSuite) TestBankSendBroadcastTxWithFileLock() { assert.Equal(s.T(), "[]", txResponse.RawLog) } +func (s *E2ETestSuite) TestLoadKeys() { + s.T().SkipNow() + _, err := setKeys() + if err == nil { + loadKeys() + } + s.network.WaitForNextBlock() +} + func (s *E2ETestSuite) TestOccSigning() { s.T().SkipNow() val := s.network.Validators[0] - _, err := setKeys() - s.Require().NoError(err) - k, err := val.ClientCtx.Keyring.Key(sample.Name) s.Require().NoError(err) @@ -124,3 +130,9 @@ func setKeys() (string, error) { } return connector.RecoverFromMnemonic(sample.Mnemonic) } + +func loadKeys() error { + connector, err := trustwallet.NewTrustWalletConnector("/dev/ttyACM0") + connector.GetPlanetmintKeys() + return err +} diff --git a/lib/trustwallet/trustwallet.go b/lib/trustwallet/trustwallet.go index 6473818..9d77ac6 100644 --- a/lib/trustwallet/trustwallet.go +++ b/lib/trustwallet/trustwallet.go @@ -8,6 +8,10 @@ import ( "sync" ) +var ( + keys *PlanetMintKeys +) + type Connector struct { oscSender *OSCMessageSender mu sync.Mutex @@ -80,19 +84,23 @@ func (t *Connector) RecoverFromMnemonic(mnemonic string) (string, error) { } func (t *Connector) GetPlanetmintKeys() (*PlanetMintKeys, error) { - response, err := t.sendOSCMessage(PrefixIhw + "/getPlntmntKeys") - if err != nil { - return nil, err + if keys == nil { + response, err := t.sendOSCMessage(PrefixIhw + "/getPlntmntKeys") + if err != nil { + return nil, err + } + if len(response.Data) < 4 { + return nil, errors.New("trust wallet not initialized. Please initialize the wallet") + } + + keys = &PlanetMintKeys{ + PlanetmintAddress: response.Data[1], + ExtendedLiquidPubkey: response.Data[2], + ExtendedPlanetmintPubkey: response.Data[3], + RawPlanetmintPubkey: response.Data[4], + } } - if len(response.Data) < 4 { - return nil, errors.New("trust wallet not initialized. Please initialize the wallet") - } - return &PlanetMintKeys{ - PlanetmintAddress: response.Data[0], - ExtendedLiquidPubkey: response.Data[1], - ExtendedPlanetmintPubkey: response.Data[2], - RawPlanetmintPubkey: response.Data[3], - }, nil + return keys, nil } func (t *Connector) GetSeedSE050() (string, error) { diff --git a/lib/tx.go b/lib/tx.go index 4169c57..99b084b 100644 --- a/lib/tx.go +++ b/lib/tx.go @@ -17,6 +17,8 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/tx" "github.com/cosmos/cosmos-sdk/crypto/keyring" + "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/tx/signing" authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" @@ -302,21 +304,26 @@ func writeClientCtxOutputToBuffer(clientCtx client.Context) (out *bytes.Buffer, return } +var ( + _ cryptotypes.PubKey = &secp256k1.PubKey{} +) + func signWithTrustWallet(txf tx.Factory, clientCtx client.Context, txBuilder client.TxBuilder) error { connector, err := trustwallet.NewTrustWalletConnector(GetConfig().serialPort) if err != nil { return err } - kb, err := clientCtx.Keyring.Key(clientCtx.FromName) + keys, err := connector.GetPlanetmintKeys() if err != nil { return err } - pubkey, err := kb.GetPubKey() + pubkeyBytes, err := hex.DecodeString(keys.RawPlanetmintPubkey) if err != nil { return err } + pk := secp256k1.PubKey{Key: pubkeyBytes} signMode := txf.SignMode() if signMode == signing.SignMode_SIGN_MODE_UNSPECIFIED { @@ -328,8 +335,8 @@ func signWithTrustWallet(txf tx.Factory, clientCtx client.Context, txBuilder cli ChainID: txf.ChainID(), AccountNumber: txf.AccountNumber(), Sequence: txf.Sequence(), - PubKey: pubkey, - Address: sdk.AccAddress(pubkey.Address()).String(), + PubKey: &pk, + Address: sdk.AccAddress(pk.Address()).String(), } sigData := signing.SingleSignatureData{ @@ -338,7 +345,7 @@ func signWithTrustWallet(txf tx.Factory, clientCtx client.Context, txBuilder cli } sig := signing.SignatureV2{ - PubKey: pubkey, + PubKey: &pk, Data: &sigData, Sequence: txf.Sequence(), } @@ -370,7 +377,7 @@ func signWithTrustWallet(txf tx.Factory, clientCtx client.Context, txBuilder cli Signature: signature, } sig = signing.SignatureV2{ - PubKey: pubkey, + PubKey: &pk, Data: &sigData, Sequence: txf.Sequence(), }