From a9a25b8cf6ea0183b96da934c52dcdf981cda937 Mon Sep 17 00:00:00 2001 From: Yun Date: Wed, 19 Jun 2019 17:13:14 +0900 Subject: [PATCH 1/7] hrp modification for ledger address verification --- crypto/ledger_secp256k1.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crypto/ledger_secp256k1.go b/crypto/ledger_secp256k1.go index ba3b2e8e2bce..3873f92bd8d1 100644 --- a/crypto/ledger_secp256k1.go +++ b/crypto/ledger_secp256k1.go @@ -119,7 +119,8 @@ func LedgerShowAddress(path hd.BIP44Params, expectedPubKey tmcrypto.PubKey) erro return fmt.Errorf("the key's pubkey does not match with the one retrieved from Ledger. Check that the HD path and device are the correct ones") } - pubKey2, _, err := getPubKeyAddrSafe(device, path, sdk.Bech32PrefixAccAddr) + config := types.GetConfig() + pubKey2, _, err := getPubKeyAddrSafe(device, path, config.GetBech32AccountAddrPrefix()) if err != nil { return err } From d42a3ff24c800dbd522880f142d9b71c80da1460 Mon Sep 17 00:00:00 2001 From: Yun Date: Fri, 12 Jul 2019 13:04:32 +0900 Subject: [PATCH 2/7] change mock ledger to accept custom coin type from config --- crypto/ledger_mock.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crypto/ledger_mock.go b/crypto/ledger_mock.go index 28ea2c9ab107..21fc8a2b0f43 100644 --- a/crypto/ledger_mock.go +++ b/crypto/ledger_mock.go @@ -41,7 +41,8 @@ func (mock LedgerSECP256K1Mock) GetPublicKeySECP256K1(derivationPath []uint32) ( if derivationPath[0] != 44 { return nil, errors.New("Invalid derivation path") } - if derivationPath[1] != sdk.CoinType { + + if derivationPath[1] != sdk.GetConfig().GetCoinType() { return nil, errors.New("Invalid derivation path") } From 0200fa2c36f286c881e0ada503dc743b997476c5 Mon Sep 17 00:00:00 2001 From: YYS Date: Fri, 12 Jul 2019 16:21:09 +0900 Subject: [PATCH 3/7] fix import error --- crypto/ledger_secp256k1.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crypto/ledger_secp256k1.go b/crypto/ledger_secp256k1.go index 3873f92bd8d1..7e986adb383a 100644 --- a/crypto/ledger_secp256k1.go +++ b/crypto/ledger_secp256k1.go @@ -119,7 +119,7 @@ func LedgerShowAddress(path hd.BIP44Params, expectedPubKey tmcrypto.PubKey) erro return fmt.Errorf("the key's pubkey does not match with the one retrieved from Ledger. Check that the HD path and device are the correct ones") } - config := types.GetConfig() + config := sdk.GetConfig() pubKey2, _, err := getPubKeyAddrSafe(device, path, config.GetBech32AccountAddrPrefix()) if err != nil { return err From 105399c5a05e03ab0132cac582d8905c6582d86e Mon Sep 17 00:00:00 2001 From: Yun Date: Tue, 23 Jul 2019 19:30:28 +0900 Subject: [PATCH 4/7] add ledger mock testcode for custom coin type --- client/keys/add_ledger_test.go | 59 ++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/client/keys/add_ledger_test.go b/client/keys/add_ledger_test.go index 7174b0ecb8ed..339921306d0a 100644 --- a/client/keys/add_ledger_test.go +++ b/client/keys/add_ledger_test.go @@ -16,6 +16,65 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" ) +const ( + // bech32PrefixAccAddr defines the Bech32 prefix of an account's address + bech32PrefixAccAddr = "terra" + // bech32PrefixAccPub defines the Bech32 prefix of an account's public key + bech32PrefixAccPub = "terrapub" + // bech32PrefixValAddr defines the Bech32 prefix of a validator's operator address + bech32PrefixValAddr = "terravaloper" + // bech32PrefixValPub defines the Bech32 prefix of a validator's operator public key + bech32PrefixValPub = "terravaloperpub" + // bech32PrefixConsAddr defines the Bech32 prefix of a consensus node address + bech32PrefixConsAddr = "terravalcons" + // bech32PrefixConsPub defines the Bech32 prefix of a consensus node public key + bech32PrefixConsPub = "terravalconspub" +) + +func Test_runAddCmdLedgerWithCustomCoinType(t *testing.T) { + config := sdk.GetConfig() + + if config.GetBech32AccountAddrPrefix() != bech32PrefixAccAddr { + config.SetCoinType(330) + config.SetFullFundraiserPath("44'/330'/0'/0/0") + config.SetBech32PrefixForAccount(bech32PrefixAccAddr, bech32PrefixAccPub) + config.SetBech32PrefixForValidator(bech32PrefixValAddr, bech32PrefixValPub) + config.SetBech32PrefixForConsensusNode(bech32PrefixConsAddr, bech32PrefixConsPub) + config.Seal() + } + + cmd := addKeyCommand() + assert.NotNil(t, cmd) + + // Prepare a keybase + kbHome, kbCleanUp := tests.NewTestCaseDir(t) + assert.NotNil(t, kbHome) + defer kbCleanUp() + viper.Set(flags.FlagHome, kbHome) + viper.Set(flags.FlagUseLedger, true) + + /// Test Text + viper.Set(cli.OutputFlag, OutputFormatText) + // Now enter password + mockIn, _, _ := tests.ApplyMockIO(cmd) + mockIn.Reset("test1234\ntest1234\n") + assert.NoError(t, runAddCmd(cmd, []string{"keyname1"})) + + // Now check that it has been stored properly + kb, err := NewKeyBaseFromHomeFlag() + assert.NoError(t, err) + assert.NotNil(t, kb) + key1, err := kb.Get("keyname1") + assert.NoError(t, err) + assert.NotNil(t, key1) + + assert.Equal(t, "keyname1", key1.GetName()) + assert.Equal(t, keys.TypeLedger, key1.GetType()) + assert.Equal(t, + "terrapub1addwnpepqvpg7r26nl2pvqqern00m6s9uaax3hauu2rzg8qpjzq9hy6xve7sw0d84m6", + sdk.MustBech32ifyAccPub(key1.GetPubKey())) +} + func Test_runAddCmdLedger(t *testing.T) { cmd := addKeyCommand() assert.NotNil(t, cmd) From 0db3f146d73d76d60f31f4e96b2b2c559d2dabf8 Mon Sep 17 00:00:00 2001 From: Yun Date: Tue, 23 Jul 2019 19:44:44 +0900 Subject: [PATCH 5/7] reset config affter custom type test --- client/keys/add_ledger_test.go | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/client/keys/add_ledger_test.go b/client/keys/add_ledger_test.go index 339921306d0a..092182574e7e 100644 --- a/client/keys/add_ledger_test.go +++ b/client/keys/add_ledger_test.go @@ -34,14 +34,11 @@ const ( func Test_runAddCmdLedgerWithCustomCoinType(t *testing.T) { config := sdk.GetConfig() - if config.GetBech32AccountAddrPrefix() != bech32PrefixAccAddr { - config.SetCoinType(330) - config.SetFullFundraiserPath("44'/330'/0'/0/0") - config.SetBech32PrefixForAccount(bech32PrefixAccAddr, bech32PrefixAccPub) - config.SetBech32PrefixForValidator(bech32PrefixValAddr, bech32PrefixValPub) - config.SetBech32PrefixForConsensusNode(bech32PrefixConsAddr, bech32PrefixConsPub) - config.Seal() - } + config.SetCoinType(330) + config.SetFullFundraiserPath("44'/330'/0'/0/0") + config.SetBech32PrefixForAccount(bech32PrefixAccAddr, bech32PrefixAccPub) + config.SetBech32PrefixForValidator(bech32PrefixValAddr, bech32PrefixValPub) + config.SetBech32PrefixForConsensusNode(bech32PrefixConsAddr, bech32PrefixConsPub) cmd := addKeyCommand() assert.NotNil(t, cmd) @@ -73,6 +70,12 @@ func Test_runAddCmdLedgerWithCustomCoinType(t *testing.T) { assert.Equal(t, "terrapub1addwnpepqvpg7r26nl2pvqqern00m6s9uaax3hauu2rzg8qpjzq9hy6xve7sw0d84m6", sdk.MustBech32ifyAccPub(key1.GetPubKey())) + + config.SetCoinType(118) + config.SetFullFundraiserPath("44'/118'/0'/0/0") + config.SetBech32PrefixForAccount(sdk.Bech32PrefixAccAddr, sdk.Bech32PrefixAccPub) + config.SetBech32PrefixForValidator(sdk.Bech32PrefixValAddr, sdk.Bech32PrefixValPub) + config.SetBech32PrefixForConsensusNode(sdk.Bech32PrefixConsAddr, sdk.Bech32PrefixConsPub) } func Test_runAddCmdLedger(t *testing.T) { From cb9e6744cc068e4db76bba2e3159b8b3b5427f66 Mon Sep 17 00:00:00 2001 From: Yun Date: Tue, 23 Jul 2019 20:06:52 +0900 Subject: [PATCH 6/7] move test const definition to function --- client/keys/add_ledger_test.go | 22 +++++++--------------- go.mod | 1 + go.sum | 2 ++ 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/client/keys/add_ledger_test.go b/client/keys/add_ledger_test.go index 092182574e7e..8602820918ee 100644 --- a/client/keys/add_ledger_test.go +++ b/client/keys/add_ledger_test.go @@ -16,24 +16,16 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" ) -const ( - // bech32PrefixAccAddr defines the Bech32 prefix of an account's address - bech32PrefixAccAddr = "terra" - // bech32PrefixAccPub defines the Bech32 prefix of an account's public key - bech32PrefixAccPub = "terrapub" - // bech32PrefixValAddr defines the Bech32 prefix of a validator's operator address - bech32PrefixValAddr = "terravaloper" - // bech32PrefixValPub defines the Bech32 prefix of a validator's operator public key - bech32PrefixValPub = "terravaloperpub" - // bech32PrefixConsAddr defines the Bech32 prefix of a consensus node address - bech32PrefixConsAddr = "terravalcons" - // bech32PrefixConsPub defines the Bech32 prefix of a consensus node public key - bech32PrefixConsPub = "terravalconspub" -) - func Test_runAddCmdLedgerWithCustomCoinType(t *testing.T) { config := sdk.GetConfig() + bech32PrefixAccAddr := "terra" + bech32PrefixAccPub := "terrapub" + bech32PrefixValAddr := "terravaloper" + bech32PrefixValPub := "terravaloperpub" + bech32PrefixConsAddr := "terravalcons" + bech32PrefixConsPub := "terravalconspub" + config.SetCoinType(330) config.SetFullFundraiserPath("44'/330'/0'/0/0") config.SetBech32PrefixForAccount(bech32PrefixAccAddr, bech32PrefixAccPub) diff --git a/go.mod b/go.mod index 0cfc154c1c00..e1bb584bdd59 100644 --- a/go.mod +++ b/go.mod @@ -33,6 +33,7 @@ require ( github.com/tendermint/go-amino v0.15.0 github.com/tendermint/iavl v0.12.2 github.com/tendermint/tendermint v0.32.0 + golang.org/x/net v0.0.0-20190628185345-da137c7871d7 // indirect google.golang.org/grpc v1.19.0 // indirect gopkg.in/yaml.v2 v2.2.2 ) diff --git a/go.sum b/go.sum index 9cdfb8c4c405..b3322e597c35 100644 --- a/go.sum +++ b/go.sum @@ -189,6 +189,8 @@ golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a h1:oWX7TPOiFAMXLq8o0ikBYfCJVlRHBcsciT5bXOrH628= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7 h1:rTIdg5QFRR7XCaK4LCjBiPbx8j4DQRpdYMnGn/bJUEU= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= From c01e4d62e5890647a152a72dec47e4ced8544bf9 Mon Sep 17 00:00:00 2001 From: Yun Date: Mon, 29 Jul 2019 16:53:43 +0900 Subject: [PATCH 7/7] add clog --- .pending/bugfixes/keys/Fix-ledger-custom-co | 1 + 1 file changed, 1 insertion(+) create mode 100644 .pending/bugfixes/keys/Fix-ledger-custom-co diff --git a/.pending/bugfixes/keys/Fix-ledger-custom-co b/.pending/bugfixes/keys/Fix-ledger-custom-co new file mode 100644 index 000000000000..2a1b5b02e7a4 --- /dev/null +++ b/.pending/bugfixes/keys/Fix-ledger-custom-co @@ -0,0 +1 @@ +Fix ledger custom coin type support bug \ No newline at end of file