anchor/tests/events.spec.ts

279 lines
9.4 KiB
TypeScript

import { PublicKey } from "@solana/web3.js";
import { EventParser } from "../src/program/event";
import { BorshCoder } from "../src";
describe("Events", () => {
it("Parses multiple instructions", () => {
const logs = [
"Program 11111111111111111111111111111111 invoke [1]",
"Program 11111111111111111111111111111111 success",
"Program J2XMGdW2qQLx7rAdwWtSZpTXDgAQ988BLP9QTgUZvm54 invoke [1]",
"Program J2XMGdW2qQLx7rAdwWtSZpTXDgAQ988BLP9QTgUZvm54 consumed 17867 of 200000 compute units",
"Program J2XMGdW2qQLx7rAdwWtSZpTXDgAQ988BLP9QTgUZvm54 success",
];
const idl = {
version: "0.0.0",
name: "basic_0",
instructions: [
{
name: "initialize",
accounts: [],
args: [],
},
],
};
const coder = new BorshCoder(idl);
const programId = PublicKey.default;
const eventParser = new EventParser(programId, coder);
eventParser.parseLogs(logs, () => {
throw new Error("Should never find logs");
});
});
it("Upgrade event check", () => {
const logs = [
"Upgraded program J2XMGdW2qQLx7rAdwWtSZpTXDgAQ988BLP9QTgUZvm54",
"Program 11111111111111111111111111111111 invoke [1]",
"Program 11111111111111111111111111111111 success",
"Program J2XMGdW2qQLx7rAdwWtSZpTXDgAQ988BLP9QTgUZvm54 invoke [1]",
"Program J2XMGdW2qQLx7rAdwWtSZpTXDgAQ988BLP9QTgUZvm54 consumed 17867 of 200000 compute units",
"Program J2XMGdW2qQLx7rAdwWtSZpTXDgAQ988BLP9QTgUZvm54 success",
];
const idl = {
version: "0.0.0",
name: "basic_0",
instructions: [
{
name: "initialize",
accounts: [],
args: [],
},
],
};
const coder = new BorshCoder(idl);
const programId = PublicKey.default;
const eventParser = new EventParser(programId, coder);
eventParser.parseLogs(logs, () => {
throw new Error("Should never find logs");
});
});
it("Find event with different start log.", (done) => {
const logs = [
"Upgraded program J2XMGdW2qQLx7rAdwWtSZpTXDgAQ988BLP9QTgUZvm54",
"Program J2XMGdW2qQLx7rAdwWtSZpTXDgAQ988BLP9QTgUZvm54 invoke [1]",
"Program log: Instruction: BuyNft",
"Program 11111111111111111111111111111111 invoke [2]",
"Program log: UhUxVlc2hGeTBjNPCGmmZjvNSuBOYpfpRPJLfJmTLZueJAmbgEtIMGl9lLKKH6YKy1AQd8lrsdJPPc7joZ6kCkEKlNLKhbUv",
"Program 11111111111111111111111111111111 success",
"Program 11111111111111111111111111111111 invoke [2]",
"Program 11111111111111111111111111111111 success",
"Program 11111111111111111111111111111111 invoke [2]",
"Program 11111111111111111111111111111111 success",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]",
"Program log: Instruction: Transfer",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 2549 of 141128 compute units",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]",
"Program log: Instruction: CloseAccount",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1745 of 135127 compute units",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success",
"Program log: UhUxVlc2hGeTBjNPCGmmZjvNSuBOYpfpRPJLfJmTLZueJAmbgEtIMGl9lLKKH6YKy1AQd8lrsdJPPc7joZ6kCkEKlNLKhbUv",
"Program J2XMGdW2qQLx7rAdwWtSZpTXDgAQ988BLP9QTgUZvm54 consumed 73106 of 200000 compute units",
"Program J2XMGdW2qQLx7rAdwWtSZpTXDgAQ988BLP9QTgUZvm54 success",
];
const idl = {
version: "0.0.0",
name: "basic_1",
instructions: [
{
name: "initialize",
accounts: [],
args: [],
},
],
events: [
{
name: "NftSold",
fields: [
{
name: "nftMintAddress",
type: "publicKey" as "publicKey",
index: false,
},
{
name: "accountAddress",
type: "publicKey" as "publicKey",
index: false,
},
],
},
],
};
const coder = new BorshCoder(idl);
const programId = new PublicKey(
"J2XMGdW2qQLx7rAdwWtSZpTXDgAQ988BLP9QTgUZvm54"
);
const eventParser = new EventParser(programId, coder);
eventParser.parseLogs(logs, (event) => {
expect(event.name).toEqual("NftSold");
done();
});
});
it("Find event from logs", (done) => {
const logs = [
"Program J2XMGdW2qQLx7rAdwWtSZpTXDgAQ988BLP9QTgUZvm54 invoke [1]",
"Program log: Instruction: CancelListing",
"Program log: TRANSFERED SOME TOKENS",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]",
"Program log: Instruction: Transfer",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 2549 of 182795 compute units",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success",
"Program log: TRANSFERED SOME TOKENS",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]",
"Program log: Instruction: CloseAccount",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1745 of 176782 compute units",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success",
"Program log: Vtv9xLjCsE60Ati9kl3VVU/5y8DMMeC4LaGdMLkX8WU+G59Wsi3wfky8rnO9otGb56CTRerWx3hB5M/SlRYBdht0fi+crAgFYsJcx2CHszpSWRkXNxYQ6DxQ/JqIvKnLC/8Mln7310A=",
"Program J2XMGdW2qQLx7rAdwWtSZpTXDgAQ988BLP9QTgUZvm54 consumed 31435 of 200000 compute units",
"Program J2XMGdW2qQLx7rAdwWtSZpTXDgAQ988BLP9QTgUZvm54 success",
];
const idl = {
version: "0.0.0",
name: "basic_2",
instructions: [
{
name: "cancelListing",
accounts: [
{
name: "globalState",
isMut: true,
isSigner: false,
},
{
name: "nftHolderAccount",
isMut: true,
isSigner: false,
},
{
name: "listingAccount",
isMut: true,
isSigner: false,
},
{
name: "nftAssociatedAccount",
isMut: true,
isSigner: false,
},
{
name: "signer",
isMut: true,
isSigner: true,
},
{
name: "tokenProgram",
isMut: false,
isSigner: false,
},
],
args: [],
},
],
events: [
{
name: "ListingClosed",
fields: [
{
name: "initializer",
type: "publicKey" as "publicKey",
index: false,
},
{
name: "nftMintAddress",
type: "publicKey" as "publicKey",
index: false,
},
{
name: "accountAddress",
type: "publicKey" as "publicKey",
index: false,
},
],
},
],
};
const coder = new BorshCoder(idl);
const programId = new PublicKey(
"J2XMGdW2qQLx7rAdwWtSZpTXDgAQ988BLP9QTgUZvm54"
);
const eventParser = new EventParser(programId, coder);
eventParser.parseLogs(logs, (event) => {
expect(event.name).toEqual("ListingClosed");
done();
});
});
it("Listen to different program and send other program logs with same name", () => {
const logs = [
"Program 5VcVB7jEjdWJBkriXxayCrUUkwfhrPK3rXtnkxxUvMFP invoke [1]",
"Program log: Instruction: CancelListing",
"Program log: TRANSFERED SOME TOKENS",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]",
"Program log: Instruction: Transfer",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 2549 of 182795 compute units",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success",
"Program log: TRANSFERED SOME TOKENS",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]",
"Program log: Instruction: CloseAccount",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1745 of 176782 compute units",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success",
"Program log: Vtv9xLjCsE60Ati9kl3VVU/5y8DMMeC4LaGdMLkX8WU+G59Wsi3wfky8rnO9otGb56CTRerWx3hB5M/SlRYBdht0fi+crAgFYsJcx2CHszpSWRkXNxYQ6DxQ/JqIvKnLC/8Mln7310A=",
"Program 5VcVB7jEjdWJBkriXxayCrUUkwfhrPK3rXtnkxxUvMFP consumed 31435 of 200000 compute units",
"Program 5VcVB7jEjdWJBkriXxayCrUUkwfhrPK3rXtnkxxUvMFP success",
];
const idl = {
version: "0.0.0",
name: "basic_2",
instructions: [],
events: [
{
name: "ListingClosed",
fields: [
{
name: "initializer",
type: "publicKey" as "publicKey",
index: false,
},
{
name: "nftMintAddress",
type: "publicKey" as "publicKey",
index: false,
},
{
name: "accountAddress",
type: "publicKey" as "publicKey",
index: false,
},
],
},
],
};
const coder = new BorshCoder(idl);
const programId = new PublicKey(
"J2XMGdW2qQLx7rAdwWtSZpTXDgAQ988BLP9QTgUZvm54"
);
const eventParser = new EventParser(programId, coder);
eventParser.parseLogs(logs, () => {
throw new Error("Should never find logs");
});
});
});