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  }