github.com/prysmaticlabs/prysm@v1.4.4/tools/interop/split-keys/main_test.go (about) 1 package main 2 3 import ( 4 "bufio" 5 "context" 6 "encoding/hex" 7 "fmt" 8 "os" 9 "path/filepath" 10 "strings" 11 "testing" 12 13 "github.com/prysmaticlabs/prysm/shared/testutil/require" 14 "github.com/prysmaticlabs/prysm/validator/accounts/wallet" 15 "github.com/prysmaticlabs/prysm/validator/keymanager" 16 "github.com/prysmaticlabs/prysm/validator/keymanager/imported" 17 ) 18 19 const testMnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about" 20 21 var ( 22 testPrivKeys = [][]byte{ 23 hexDecodeOrDie("3ec45abb2792f1f287ab1434acfde9d7aac879eb74c45cf7b59d25f15ba7a650"), 24 hexDecodeOrDie("3b6e255c01a33ccce39927196c7f96ee512e29b9aefcfe98132c2df2e2f04043"), 25 hexDecodeOrDie("39f52a9ac0a2eb05b9633ff2e125bdb1313776f40418bb7b2d82b22ab4ca534a"), 26 hexDecodeOrDie("04ef1acec58a2d7ee1c0f12d4083df2990f83a798a84ad4393b2ce6322d377d5"), 27 hexDecodeOrDie("66e05a4dea6ee3292d35f281a542c4931070b064cbe0f4436461db29208426b7"), 28 } 29 testPubKeys = [][]byte{ 30 hexDecodeOrDie("b3e445d43871965d890a398f719348a1405ac72e35b92727cc570026f54471af7ea7b2040622a8fd0b5bfb2a209b5911"), 31 hexDecodeOrDie("aeb399bf5648b0e9980c1731824c269631a41320c3d7f730c40587e1a37a5e1c8b5755fd90080a7b3fb90d3fd419c0a7"), 32 hexDecodeOrDie("92f46b0dcc7db24f4946b5773b5525efa0bbb0810088588323d9de84f0e42f22df96cbb97065b49a2006c653ec8060f4"), 33 hexDecodeOrDie("9948ea3862b8889636c3caeaa1b9877a12cffca9bf6a1ef2264fa7e69604d55c56b4f519062e6785d21d3c9593c2adcd"), 34 hexDecodeOrDie("849b4bcd8670f81909baad27c4d9c8d9b956b19192f12af8fe57d30731fa11a55a97a1ab72bb1cfd76c1461dcaba714a"), 35 } 36 ) 37 38 func Test_generateKeysFromMnemonicList(t *testing.T) { 39 rdr := strings.NewReader(testMnemonic) 40 scanner := bufio.NewScanner(rdr) 41 keysPerMnemonic := 5 42 pubKeys, privKeys, err := generateKeysFromMnemonicList(scanner, keysPerMnemonic) 43 require.NoError(t, err) 44 require.Equal(t, keysPerMnemonic, len(pubKeys)) 45 require.Equal(t, keysPerMnemonic, len(privKeys)) 46 47 // Text the generated keys match some predetermined ones for the test. 48 for i, key := range privKeys { 49 require.DeepEqual(t, testPrivKeys[i], key) 50 } 51 for i, key := range pubKeys { 52 require.DeepEqual(t, testPubKeys[i], key) 53 } 54 } 55 56 func Test_spreadKeysAcrossImportedWallets(t *testing.T) { 57 walletPassword := "Sr0ngPass0q0z929301" 58 tmpDir := filepath.Join(os.TempDir(), "testwallets") 59 t.Cleanup(func() { 60 require.NoError(t, os.RemoveAll(tmpDir)) 61 }) 62 63 // Spread 5 keys across 5 wallets, meaning there is 1 64 // key per wallet stored on disk. 65 numWallets := 5 66 keysPerWallet := 1 67 err := spreadKeysAcrossImportedWallets( 68 testPubKeys, 69 testPrivKeys, 70 numWallets, 71 keysPerWallet, 72 tmpDir, 73 walletPassword, 74 ) 75 require.NoError(t, err) 76 ctx := context.Background() 77 for i := 0; i < numWallets; i++ { 78 w, err := wallet.OpenWallet(ctx, &wallet.Config{ 79 WalletDir: filepath.Join(tmpDir, fmt.Sprintf("wallet_%d", i)), 80 KeymanagerKind: keymanager.Imported, 81 WalletPassword: walletPassword, 82 }) 83 require.NoError(t, err) 84 km, err := imported.NewKeymanager(ctx, &imported.SetupConfig{ 85 Wallet: w, 86 }) 87 require.NoError(t, err) 88 pubKeys, err := km.FetchValidatingPublicKeys(ctx) 89 require.NoError(t, err) 90 require.Equal(t, 1, len(pubKeys)) 91 require.DeepEqual(t, testPubKeys[i], pubKeys[0][:]) 92 } 93 } 94 95 func hexDecodeOrDie(str string) []byte { 96 decoded, err := hex.DecodeString(str) 97 if err != nil { 98 panic(err) 99 } 100 return decoded 101 }