call_anchor.spec.ts 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import expect from 'expect';
  2. import { Contract, publicKeyToHex } from '@solana/solidity';
  3. import {
  4. SystemProgram,
  5. PublicKey,
  6. Keypair,
  7. Connection,
  8. LAMPORTS_PER_SOL,
  9. BpfLoader,
  10. BPF_LOADER_PROGRAM_ID
  11. } from '@solana/web3.js';
  12. import * as fs from "fs";
  13. async function newAccountWithLamports(connection: Connection): Promise<Keypair> {
  14. const account = Keypair.generate();
  15. let signature = await connection.requestAirdrop(account.publicKey, 16 * LAMPORTS_PER_SOL);
  16. await connection.confirmTransaction(signature, 'confirmed');
  17. return account;
  18. }
  19. describe('Call Anchor program from Solidity via IDL', () => {
  20. it('call_anchor', async function () {
  21. // This program instantiates an anchor program, calls various functions on it and checks the return values
  22. const connection = new Connection("http://localhost:8899", {
  23. commitment: "confirmed",
  24. confirmTransactionInitialTimeout: 1e6,
  25. });
  26. const payer = await newAccountWithLamports(connection);
  27. const program = Keypair.generate();
  28. await BpfLoader.load(connection, payer, program, fs.readFileSync("./tests/call_anchor.so"), BPF_LOADER_PROGRAM_ID);
  29. const file_name = "call_anchor";
  30. const abi = JSON.parse(fs.readFileSync("tests/" + file_name + ".abi", 'utf8'));
  31. const storage = Keypair.generate();
  32. const contract = new Contract(connection, program.publicKey, storage.publicKey, abi, payer);
  33. const data = Keypair.generate();
  34. await contract.deploy(file_name, [data.publicKey.toBytes()], storage, 8192);
  35. const programId = new PublicKey("z7FbDfQDfucxJz5o8jrGLgvSbdoeSqX5VrxBb5TVjHq");
  36. let { result } = await contract.functions.test(payer.publicKey.toBytes(), { accounts: [programId, SystemProgram.programId], signers: [data, payer] });
  37. expect(Number(result)).toStrictEqual(11);
  38. });
  39. });