generateKeypair.ts 971 B

1234567891011121314151617181920212223242526272829303132333435
  1. import { logErrorAndExit } from "./getLogs";
  2. import { RenderContext } from "./getRenderContext";
  3. import {
  4. spawnCommand,
  5. hasCommand,
  6. readStdout,
  7. waitForCommand,
  8. } from "./runCommands";
  9. export async function generateKeypair(ctx: RenderContext): Promise<string> {
  10. const hasSolanaKeygen = await hasCommand("solana-keygen");
  11. if (!hasSolanaKeygen) {
  12. logErrorAndExit(ctx.language.errors.solanaKeygenNotFound);
  13. }
  14. // Run the solana-keygen command to generate a new keypair.
  15. const child = spawnCommand("solana-keygen", [
  16. "new",
  17. "--no-bip39-passphrase",
  18. "--outfile",
  19. `${ctx.programDirectory}/keypair.json`,
  20. ]);
  21. // Wait for the command to finish and read the stdout.
  22. const [stdout] = await Promise.all([
  23. readStdout(child),
  24. waitForCommand(child),
  25. ]);
  26. // Update the render context with the generated address.
  27. const address = stdout.join("").match(/pubkey: (\w+)/)?.[1];
  28. ctx.programAddress = address;
  29. return address;
  30. }