verify_ed25519_message.ts 2.1 KB

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