verify_ed25519_message.ts 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import * as anchor from "@coral-xyz/anchor";
  2. import { Program } from "@coral-xyz/anchor";
  3. import { PythLazerSolanaContract } from "../src/idl/pyth_lazer_solana_contract";
  4. import * as pythLazerSolanaContractIdl from "../src/idl/pyth_lazer_solana_contract.json";
  5. import yargs from "yargs/yargs";
  6. import { readFileSync } from "fs";
  7. import NodeWallet from "@coral-xyz/anchor/dist/cjs/nodewallet";
  8. import { createEd25519Instruction } from "../src/ed25519";
  9. import {
  10. sendAndConfirmTransaction,
  11. SendTransactionError,
  12. SYSVAR_INSTRUCTIONS_PUBKEY,
  13. Transaction,
  14. } from "@solana/web3.js";
  15. async function main() {
  16. let argv = await yargs(process.argv.slice(2))
  17. .options({
  18. url: { type: "string", demandOption: true },
  19. "keypair-path": { type: "string", demandOption: true },
  20. message: { type: "string", demandOption: true },
  21. })
  22. .parse();
  23. const keypair = anchor.web3.Keypair.fromSecretKey(
  24. new Uint8Array(JSON.parse(readFileSync(argv.keypairPath, "ascii"))),
  25. );
  26. const wallet = new NodeWallet(keypair);
  27. const connection = new anchor.web3.Connection(argv.url, {
  28. commitment: "confirmed",
  29. });
  30. const provider = new anchor.AnchorProvider(connection, wallet);
  31. const program: Program<PythLazerSolanaContract> = new Program(
  32. pythLazerSolanaContractIdl as PythLazerSolanaContract,
  33. provider,
  34. );
  35. const instructionMessage = Buffer.from(argv.message, "hex");
  36. const ed25519Instruction = createEd25519Instruction(
  37. instructionMessage,
  38. 1,
  39. 12,
  40. );
  41. const lazerInstruction = await program.methods
  42. .verifyMessage(instructionMessage, 0, 0)
  43. .accounts({
  44. payer: wallet.publicKey,
  45. instructionsSysvar: SYSVAR_INSTRUCTIONS_PUBKEY,
  46. })
  47. .instruction();
  48. const transaction = new Transaction().add(
  49. ed25519Instruction,
  50. lazerInstruction,
  51. );
  52. console.log("transaction:", transaction);
  53. try {
  54. const signature = await sendAndConfirmTransaction(
  55. connection,
  56. transaction,
  57. [wallet.payer],
  58. {
  59. skipPreflight: true,
  60. },
  61. );
  62. console.log("Transaction confirmed with signature:", signature);
  63. } catch (e) {
  64. console.log("error", e);
  65. if (e instanceof SendTransactionError) {
  66. console.log(await e.getLogs(connection));
  67. }
  68. }
  69. }
  70. main();