verify_ed25519_message.ts 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import * as anchor from "@coral-xyz/anchor";
  2. import { Program } from "@coral-xyz/anchor";
  3. import { PythLazerSolanaContract } from "../target/types/pyth_lazer_solana_contract";
  4. import * as pythLazerSolanaContractIdl from "../target/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. console.log(e.getLogs());
  66. }
  67. }
  68. main();