From bade30ba1afc4e524cddf7c1c7b28613be314747 Mon Sep 17 00:00:00 2001 From: Trinity Date: Mon, 27 Oct 2025 08:29:32 +0700 Subject: [PATCH] key v1 after upgrade --- wallet/service.go | 20 ++++++++++---------- wallet/service_test.go | 40 +++++++++++++++++++++------------------- 2 files changed, 31 insertions(+), 29 deletions(-) diff --git a/wallet/service.go b/wallet/service.go index a3e0275..a803afb 100644 --- a/wallet/service.go +++ b/wallet/service.go @@ -66,8 +66,8 @@ func (h *GprcHandler) Keygen(ctx context.Context, req *nockchain.KeygenRequest) PrivateKey: base58.Encode(masterKey.PrivateKey), Address: address, ChainCode: base58.Encode(masterKey.ChainCode), - ImportPrivateKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, privBytes, 0, crypto.KeyType_PRIVATE)), - ImportPublicKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, masterKey.PublicKey, 0, crypto.KeyType_PUBLIC)), + ImportPrivateKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, privBytes, int(req.Version), crypto.KeyType_PRIVATE)), + ImportPublicKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, masterKey.PublicKey, int(req.Version), crypto.KeyType_PUBLIC)), Version: req.Version, }, nil } @@ -118,8 +118,8 @@ func (h *GprcHandler) ImportKeys(ctx context.Context, req *nockchain.ImportKeysR PrivateKey: base58.Encode(masterKey.PrivateKey), Address: address, ChainCode: base58.Encode(masterKey.ChainCode), - ImportPrivateKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, privBytes, 0, crypto.KeyType_PRIVATE)), - ImportPublicKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, masterKey.PublicKey, 0, crypto.KeyType_PUBLIC)), + ImportPrivateKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, privBytes, int(req.Version), crypto.KeyType_PRIVATE)), + ImportPublicKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, masterKey.PublicKey, int(req.Version), crypto.KeyType_PUBLIC)), Version: req.Version, }, nil case strings.HasPrefix(req.Key, "zpub"): @@ -155,7 +155,7 @@ func (h *GprcHandler) ImportKeys(ctx context.Context, req *nockchain.ImportKeysR Address: address, ChainCode: base58.Encode(chainCode), ImportPrivateKey: "", - ImportPublicKey: base58.Encode(crypto.SerializeExtend(chainCode, publicKey, 0, crypto.KeyType_PUBLIC)), + ImportPublicKey: base58.Encode(crypto.SerializeExtend(chainCode, publicKey, int(req.Version), crypto.KeyType_PUBLIC)), Version: req.Version, }, nil default: @@ -196,8 +196,8 @@ func (h *GprcHandler) ImportKeys(ctx context.Context, req *nockchain.ImportKeysR PrivateKey: base58.Encode(masterKey.PrivateKey), Address: address, ChainCode: base58.Encode(masterKey.ChainCode), - ImportPrivateKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, privBytes, 0, crypto.KeyType_PRIVATE)), - ImportPublicKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, masterKey.PublicKey, 0, crypto.KeyType_PUBLIC)), + ImportPrivateKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, privBytes, int(req.Version), crypto.KeyType_PRIVATE)), + ImportPublicKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, masterKey.PublicKey, int(req.Version), crypto.KeyType_PUBLIC)), Version: req.Version, }, nil case nockchain.ImportType_SEEDPHRASE: @@ -223,8 +223,8 @@ func (h *GprcHandler) ImportKeys(ctx context.Context, req *nockchain.ImportKeysR PrivateKey: base58.Encode(masterKey.PrivateKey), Address: address, ChainCode: base58.Encode(masterKey.ChainCode), - ImportPrivateKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, privBytes, 0, crypto.KeyType_PRIVATE)), - ImportPublicKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, masterKey.PublicKey, 0, crypto.KeyType_PUBLIC)), + ImportPrivateKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, privBytes, int(req.Version), crypto.KeyType_PRIVATE)), + ImportPublicKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, masterKey.PublicKey, int(req.Version), crypto.KeyType_PUBLIC)), Version: req.Version, }, nil case nockchain.ImportType_WATCH_ONLY: @@ -350,7 +350,7 @@ func (h *GprcHandler) DeriveChild(ctx context.Context, req *nockchain.DeriveChil Address: address, PrivateKey: "", ChainCode: base58.Encode(childKey.ChainCode), - Version: req.Version, + Version: req.Version, }, nil default: return nil, fmt.Errorf("invalid extended key") diff --git a/wallet/service_test.go b/wallet/service_test.go index b96e027..430ac30 100644 --- a/wallet/service_test.go +++ b/wallet/service_test.go @@ -103,18 +103,18 @@ func TestKeyGenV1(t *testing.T) { // assert import priv/pubkey privBytes := append([]byte{0x00}, masterKey.PrivateKey...) - importPrivKey := crypto.SerializeExtend(masterKey.ChainCode, privBytes, 0, crypto.KeyType_PRIVATE) + importPrivKey := crypto.SerializeExtend(masterKey.ChainCode, privBytes, 1, crypto.KeyType_PRIVATE) assert.Len(t, importPrivKey, 83) - importPubKey := crypto.SerializeExtend(masterKey.ChainCode, masterKey.PublicKey, 0, crypto.KeyType_PUBLIC) + importPubKey := crypto.SerializeExtend(masterKey.ChainCode, masterKey.PublicKey, 1, crypto.KeyType_PUBLIC) assert.Len(t, importPubKey, 147) assert.Equal(t, base58.Encode(importPrivKey), - "zprvLpf3WSvYWmHRd4ifBMKZTDRa4s5sNBZo7cLx7PhFsYvdCEwv6WdHnDFYHFFvd4sKy1DcSpU4xAohfutPqVpsKGsyCdwLgZDpVH7sHSM382d6", + "zprvLxxkCBq3s5HYzjhcW8wh3FhHSt5YowSGApRdHsptZQrtcCdqibUo7qwqfa7qkazttRgcaRwy4YYwv9DLhmUNcMG9uAtsgaPkfwyiGkf5Bpib", ) assert.Equal(t, base58.Encode(importPubKey), - "zpub2jgndknkQprVYB9YTkv6VAteaXtW1rQcGMVtNEsuKUJay8MkBm5VW5LyFLYhpQyE1hChW2ZkCiN6BCcTF2wBNiVeCzu7sFP4kaV5DVHZDY3BsdYXimDjQ8GCw6o1qWH8w6kTZrMwkA8o7BSLZ6vk1BHHASi6P2qNSeDBw2No6fAHAr5xvEnUY7Xqa63m4jXYcgFD", + "zpub2kRJ7D6VCvzVfDg5e6iXb4T2ea97QJKN6JzjTArrhgZzwHo6rmT8Z3mEp11T67fNvU8ZWLcTTFS17NLwvYs7ErmqCJQNrtjRgVcvZNeWBebpztihXzrhvHZumDiejPmLb6QQNhkPhhK3uyS6XBbaPybqGDdWAgHKvPHkKirVsSJWEmDJYEj8ePN4ufscv1DL2pTD", ) } func TestImportKey(t *testing.T) { @@ -125,34 +125,36 @@ func TestImportKey(t *testing.T) { errStr string } - correctImportPrivKey := base58.Decode("zprvLpf3WSvYWmHRd3jj5oR8UXr7bi88pGnfJXj1dM9RnwJwu1MLo6fZzcKauqpxL2W7dk2fmjYKAUzavbyaGpnvqY5QndcrUzsBrPQAHXNnhiXx") + correctImportPrivKeyV0 := base58.Decode("zprvLpf3WSvYWmHRd3jj5oR8UXr7bi88pGnfJXj1dM9RnwJwu1MLo6fZzcKauqpxL2W7dk2fmjYKAUzavbyaGpnvqY5QndcrUzsBrPQAHXNnhiXx") + correctImportPrivKeyV1 := base58.Decode("zprvLxxkCBq3s5HYziigQb3G4a7pyj7pG2f8MjogoqH4UoFDJy3GRBX5LF1tJAgsTYdgZAVfuM2DGrjqAqJX96SS8cTbVAaPV23834G1GqgfEEg7") invalidImportPrivKeyPrefix := make([]byte, 83) - copy(invalidImportPrivKeyPrefix[:], correctImportPrivKey) + copy(invalidImportPrivKeyPrefix[:], correctImportPrivKeyV0) invalidImportPrivKeyPrefix[46] = 0x01 invalidImportPrivKeyChecksum := make([]byte, 83) - copy(invalidImportPrivKeyChecksum[:], correctImportPrivKey) + copy(invalidImportPrivKeyChecksum[:], correctImportPrivKeyV0) copy(invalidImportPrivKeyChecksum[79:], []byte{1, 2, 3, 4}) - correctImportPubkey := base58.Decode("zpub2jgndknkQprVYB4X4mqREyn7ZTUE5zp9qkSugdpiqhC5NSeNBceafoz6jGSLEpzJhaLryvY8MF6TokwZN627UXhsg5zd2U12woEL82UtZaLHRL8PZi8YiQnE41BiNJwkfpWjzAbq8mwbAHV3nXUEFgJW2BKCz4GmfoMCkCUDhJppYh5KFsMUkN41DzsfFZHuFrzo") + correctImportPubkeyV0 := base58.Decode("zpub2jgndknkQprVYB4X4mqREyn7ZTUE5zp9qkSugdpiqhC5NSeNBceafoz6jGSLEpzJhaLryvY8MF6TokwZN627UXhsg5zd2U12woEL82UtZaLHRL8PZi8YiQnE41BiNJwkfpWjzAbq8mwbAHV3nXUEFgJW2BKCz4GmfoMCkCUDhJppYh5KFsMUkN41DzsfFZHuFrzo") + correctImportPubkeyV1 := base58.Decode("zpub2kRJ7D6VCvzVfDb4F7drLsLVdViqUSiufhwkmZogDuTVLc5ird2DinQNHvu5WXgTcMGizEaqbnANjvg43bx3Lfz4fPVt27MPsiNBTuqqXgtvYbJZNwmXEa5vt87MGCRxKpAgo1zH6K7qy5Uokc94eUd47xEcmhij9YRm8twvU5y3ccCessJ8rdtEZahX6pv8RFBi") invalidImportPubkeyChecksum := make([]byte, 147) - copy(invalidImportPubkeyChecksum[:], correctImportPubkey) + copy(invalidImportPubkeyChecksum[:], correctImportPubkeyV0) copy(invalidImportPubkeyChecksum[143:], []byte{1, 2, 3, 4}) responseV0 := &nockchain.ImportKeysResponse{ Address: "34VqjU7ojQXWiFZz7kvXe1xfxhbdimmqqUAgp21XGESLqJSXxHkqrcquWirFcCPPj1pmSL4pRc8GndZoiiK8ijeYjgcJ3QR7fb2s4b2WdJhDao4Dx7gw3NRSt4RjXawqUQw6", PrivateKey: "3B8Q5ZTHH63h9DT6WSwNZhea5zvtueuKpxk3qwZJEjsg", ChainCode: "2ztGPxS8xYzMXoAHf3HMbMuyh4siew8X4Kz4KuTXvqX8", - ImportPrivateKey: base58.Encode(correctImportPrivKey), - ImportPublicKey: base58.Encode(correctImportPubkey), + ImportPrivateKey: base58.Encode(correctImportPrivKeyV0), + ImportPublicKey: base58.Encode(correctImportPubkeyV0), Version: 0, } responseV1 := &nockchain.ImportKeysResponse{ Address: "BAmYAxgpVrJeFqqPnKAZHVZZdmVfzrgu7bBqcRBNca8HpxQofzUZG8Q", PrivateKey: "3B8Q5ZTHH63h9DT6WSwNZhea5zvtueuKpxk3qwZJEjsg", ChainCode: "2ztGPxS8xYzMXoAHf3HMbMuyh4siew8X4Kz4KuTXvqX8", - ImportPrivateKey: base58.Encode(correctImportPrivKey), - ImportPublicKey: base58.Encode(correctImportPubkey), + ImportPrivateKey: base58.Encode(correctImportPrivKeyV1), + ImportPublicKey: base58.Encode(correctImportPubkeyV1), Version: 1, } @@ -161,7 +163,7 @@ func TestImportKey(t *testing.T) { PrivateKey: "", ChainCode: "2ztGPxS8xYzMXoAHf3HMbMuyh4siew8X4Kz4KuTXvqX8", ImportPrivateKey: "", - ImportPublicKey: base58.Encode(correctImportPubkey), + ImportPublicKey: base58.Encode(correctImportPubkeyV0), Version: 0, } responseV1ReadOnly := &nockchain.ImportKeysResponse{ @@ -169,7 +171,7 @@ func TestImportKey(t *testing.T) { PrivateKey: "", ChainCode: "2ztGPxS8xYzMXoAHf3HMbMuyh4siew8X4Kz4KuTXvqX8", ImportPrivateKey: "", - ImportPublicKey: base58.Encode(correctImportPubkey), + ImportPublicKey: base58.Encode(correctImportPubkeyV1), Version: 1, } @@ -228,7 +230,7 @@ func TestImportKey(t *testing.T) { // case success import priv key v0 { req: &nockchain.ImportKeysRequest{ - Key: base58.Encode(correctImportPrivKey), + Key: base58.Encode(correctImportPrivKeyV0), ImportType: nockchain.ImportType_EXTENDED_KEY, Version: 0, }, @@ -239,7 +241,7 @@ func TestImportKey(t *testing.T) { // case success import priv key v1 { req: &nockchain.ImportKeysRequest{ - Key: base58.Encode(correctImportPrivKey), + Key: base58.Encode(correctImportPrivKeyV1), ImportType: nockchain.ImportType_EXTENDED_KEY, Version: 1, }, @@ -271,7 +273,7 @@ func TestImportKey(t *testing.T) { // case success import pub key v0 { req: &nockchain.ImportKeysRequest{ - Key: base58.Encode(correctImportPubkey), + Key: base58.Encode(correctImportPubkeyV0), ImportType: nockchain.ImportType_EXTENDED_KEY, Version: 0, }, @@ -282,7 +284,7 @@ func TestImportKey(t *testing.T) { // case success import pub key v1 { req: &nockchain.ImportKeysRequest{ - Key: base58.Encode(correctImportPubkey), + Key: base58.Encode(correctImportPubkeyV1), ImportType: nockchain.ImportType_EXTENDED_KEY, Version: 1, },