瀏覽代碼

ts: Check if execution context stack is empty in event parser (#524)

aac 4 年之前
父節點
當前提交
ab49478259
共有 4 個文件被更改,包括 37 次插入2 次删除
  1. 1 0
      .travis.yml
  2. 2 1
      ts/package.json
  3. 1 1
      ts/src/program/event.ts
  4. 33 0
      ts/tests/events.spec.ts

+ 1 - 0
.travis.yml

@@ -44,6 +44,7 @@ jobs:
         - cargo fmt -- --check
         - cargo fmt -- --check
         - cargo clippy --all-targets -- -D warnings
         - cargo clippy --all-targets -- -D warnings
         - cargo test
         - cargo test
+        - pushd ts && yarn && yarn test && popd
     - <<: *examples
     - <<: *examples
       name: Runs the examples 1
       name: Runs the examples 1
       script:
       script:

+ 2 - 1
ts/package.json

@@ -18,7 +18,8 @@
     "lint:fix": "prettier src/** -w",
     "lint:fix": "prettier src/** -w",
     "watch": "tsc -p tsconfig.cjs.json --watch",
     "watch": "tsc -p tsconfig.cjs.json --watch",
     "prepublishOnly": "yarn build",
     "prepublishOnly": "yarn build",
-    "docs": "typedoc --excludePrivate --includeVersion --out ../docs/src/.vuepress/dist/ts/ --readme none src/index.ts"
+    "docs": "typedoc --excludePrivate --includeVersion --out ../docs/src/.vuepress/dist/ts/ --readme none src/index.ts",
+    "test": "jest tests --detectOpenHandles"
   },
   },
   "dependencies": {
   "dependencies": {
     "@project-serum/borsh": "^0.2.2",
     "@project-serum/borsh": "^0.2.2",

+ 1 - 1
ts/src/program/event.ts

@@ -58,7 +58,7 @@ export class EventParser {
     log: string
     log: string
   ): [Event | null, string | null, boolean] {
   ): [Event | null, string | null, boolean] {
     // Executing program is this program.
     // Executing program is this program.
-    if (execution.program() === this.programId.toString()) {
+    if (execution.stack.length > 0 && execution.program() === this.programId.toString()) {
       return this.handleProgramLog(log);
       return this.handleProgramLog(log);
     }
     }
     // Executing program is not this program.
     // Executing program is not this program.

+ 33 - 0
ts/tests/events.spec.ts

@@ -0,0 +1,33 @@
+import { PublicKey } from "@solana/web3.js";
+import { EventParser } from "../src/program/event";
+import { Coder } from "../src";
+
+describe("Events", () => {
+  it("Parses multiple instructions", async () => {
+    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 Coder(idl);
+    const programId = PublicKey.default;
+    const eventParser = new EventParser(coder, programId);
+
+    eventParser.parseLogs(logs, () => {
+      throw new Error("Should never find logs");
+    });
+  });
+});