check_trusted_signer.ts 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import * as anchor from "@coral-xyz/anchor";
  2. import { PythLazerSolanaContract } from "../target/types/pyth_lazer_solana_contract";
  3. import * as pythLazerSolanaContractIdl from "../target/idl/pyth_lazer_solana_contract.json";
  4. import yargs from "yargs/yargs";
  5. import NodeWallet from "@coral-xyz/anchor/dist/cjs/nodewallet";
  6. const parser = yargs(process.argv.slice(2)).options({
  7. url: {
  8. type: "string",
  9. demandOption: true,
  10. desc: "RPC URL to use",
  11. },
  12. "storage-id": {
  13. type: "string",
  14. demandOption: true,
  15. desc: "Storage account ID to check",
  16. },
  17. });
  18. async function main() {
  19. const argv = await parser.argv;
  20. // Setup anchor provider
  21. const connection = new anchor.web3.Connection(argv.url);
  22. const provider = new anchor.AnchorProvider(
  23. connection,
  24. new NodeWallet(anchor.web3.Keypair.generate()), // Dummy wallet since we're only reading
  25. { commitment: "confirmed" }
  26. );
  27. anchor.setProvider(provider);
  28. const program: anchor.Program<PythLazerSolanaContract> = new anchor.Program(
  29. pythLazerSolanaContractIdl as PythLazerSolanaContract,
  30. provider
  31. );
  32. // Fetch and decode storage account
  33. const storageId = new anchor.web3.PublicKey(argv["storage-id"]);
  34. const storage = await program.account.storage.fetch(storageId);
  35. // Print storage info
  36. console.log("Storage Account Info:");
  37. console.log("--------------------");
  38. console.log("Top Authority:", storage.topAuthority.toBase58());
  39. console.log("Treasury:", storage.treasury.toBase58());
  40. console.log("\nTrusted Signers:");
  41. console.log("----------------");
  42. for (const signer of storage.trustedSigners) {
  43. if (signer.pubkey.equals(anchor.web3.PublicKey.default)) continue;
  44. console.log(`\nPublic Key: ${signer.pubkey.toBase58()}`);
  45. console.log(
  46. `Expires At: ${new Date(
  47. signer.expiresAt.toNumber() * 1000
  48. ).toISOString()}`
  49. );
  50. console.log(
  51. `Active: ${
  52. signer.expiresAt.toNumber() > Date.now() / 1000 ? "Yes" : "No"
  53. }`
  54. );
  55. }
  56. }
  57. main().catch((err) => {
  58. console.error(err);
  59. process.exit(1);
  60. });