Как сохранить пары ключей и отправить токены в Солане, используя node.js?

#javascript #node.js #cryptography #solana

Вопрос:

Я пытаюсь использовать Solana поверх Ethereum для конкретного решения.

Я использую NPM для таргетинга API Соланы. Используемые пакеты-это @solana/web3.js и @solana/spl-token . Мне удалось создать успешное соединение и сгенерировать пары ключей. Я хотел бы иметь возможность сохранить сгенерированную пару клавиш, но проблема, с которой я сталкиваюсь, заключается в том, что она закодирована, и вторая проблема, которую следует выделить, — это когда я использую .toString(); он декодирует его просто отлично, но это не может быть использовано в воздушном десанте.

 const solanaWeb3 = require("@solana/web3.js"),
const solanatoken = require("@solana/spl-token");

(async () => {
  // Connect to cluster
  var connection = new solanaWeb3.Connection(
    solanaWeb3.clusterApiUrl("devnet"),
    "confirmed"
  );

  // Generate a new wallet keypair and airdrop SOL
  var wallet = solanaWeb3.Keypair.generate();
  console.log("public key...", wallet.publicKey)
  // The stringPK is an example of what wallet.publicKey returns. When taking wallet.publicKey and using .toString(); it returns the decoded publicKey but that can't be used in an airdrop.
  const stringPK = `_bn: <BN: e8a4421b46f76fdeac76819ab21708cc4a4b9c9c7fc2a22e373443539cee1a81>`;
  console.log("private key...", JSON.stringify(wallet.secretKey.toString()));
  console.log(solanaWeb3.PublicKey.decode(wallet.publicKey));
  var airdropSignature = await connection.requestAirdrop(
    stringPK,
    solanaWeb3.LAMPORTS_PER_SOL
  );

  //wait for airdrop confirmation
  await connection.confirmTransaction(airdropSignature);

  let account = await connection.getAccountInfo(wallet.publicKey);
  console.log(account);
})();
 

Ответ №1:

Чтобы сохранить сгенерированную пару ключей в JS, лучше всего использовать secretKey объект пары ключей [1], запишите его в файл. Чтобы загрузить его обратно, вы прочтете этот файл, а затем используете fromSecretKey его для возврата пары клавиш [2]

Что касается вашей другой проблемы, requestAirdrop принимает PublicKey , поэтому вместо этого вы должны просто сделать:

 var airdropSignature = await connection.requestAirdrop(
    wallet.publicKey,
    solanaWeb3.LAMPORTS_PER_SOL
  );
 

[1] https://solana-labs.github.io/solana-web3.js/classes/Keypair.html#secretKey

[2] https://solana-labs.github.io/solana-web3.js/classes/Keypair.html#fromSecretKey