Search code examples
javascriptnode.jsreactjsblockchainsolana

how to generate keypair from secret phrase (mnemonic) SOLANA


I am working with Solana and phantom wallet I have a wallet with a public key and I have it's secret phrase composed of 12 words. when I generate keypairs from the secret phrase I use:

const getKeyPair = (mnemomic) => {
  const seed = bip39.mnemonicToSeedSync(mnemomic).slice(0, 32);
  const Keypair = web3.Keypair.fromSeed(seed);
  return Keypair;
};

the generated keypair has publicKey and privateKey , but when am checking my balance using the generated public key I find the balance is always 0 even when I try to airdrop Sol using my code it's not getting in the account.

But if I check using my public key from phantom wallet I get the Sol I have and if I want to airdrop sols they also proceed normally.

Why is my generated public key not the same as the one in phantom wallet?


Solution

  • First, we need to generate the publicKey and privateKey from the seed phrase using this command :

    solana-keygen recover 'prompt:?key=0/0' -o phantom_wallet.json

    remark : our account may have many wallets the command above access the first wallet , if we need to access wallet number 10 for example we need to change the 'prompt:?key=0/0' to 'prompt:?key=10/0' "only the first 0 is changing"

    next this will generate public key "will be written in the console" and a json file with secret key contains an array of 64 element which is the secret key. now to generate the KEYPAIRS in solana web3 javascript SDK we do the following:

     let seed = Uint8Array.from(
        process.env.REACT_APP_OUR_SECRET_KEY.split(",")
      ).slice(0, 32);
    
      // create keypairs
      let KEYPAIRS = web3.Keypair.fromSeed(seed);
    

    IMPORTANT : in .env files REACT_APP_OUR_SECRET_KEY is stored without brackets [ ] example : 15,320,52,... as we see a table without brackets [ ]