123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330 |
- import { ProgramErrorStack, AnchorError } from "../src/error";
- describe("ProgramErrorStack", () => {
- test("basic", () => {
- const logs = [
- "Program ERRM6YCMsccM22TEaPuu35KVU4iCY3GLCz4qMsKLYReE invoke [1]",
- "Program ERRM6YCMsccM22TEaPuu35KVU4iCY3GLCz4qMsKLYReE consumed 3797 of 200000 compute units",
- "Program ERRM6YCMsccM22TEaPuu35KVU4iCY3GLCz4qMsKLYReE failed: custom program error: 0x29",
- ];
- expect(
- ProgramErrorStack.parse(logs).stack.map((publicKey) =>
- publicKey.toString()
- )
- ).toEqual(["ERRM6YCMsccM22TEaPuu35KVU4iCY3GLCz4qMsKLYReE"]);
- });
- it("basic multiple ix", () => {
- const logs = [
- "Program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin invoke [1]",
- "Program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin consumed 4308 of 200000 compute units",
- "Program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin success",
- "Program ERRM6YCMsccM22TEaPuu35KVU4iCY3GLCz4qMsKLYReE invoke [1]",
- "Program ERRM6YCMsccM22TEaPuu35KVU4iCY3GLCz4qMsKLYReE consumed 3797 of 200000 compute units",
- "Program ERRM6YCMsccM22TEaPuu35KVU4iCY3GLCz4qMsKLYReE failed: custom program error: 0x29",
- ];
- expect(
- ProgramErrorStack.parse(logs).stack.map((publicKey) =>
- publicKey.toString()
- )
- ).toEqual(["ERRM6YCMsccM22TEaPuu35KVU4iCY3GLCz4qMsKLYReE"]);
- });
- it("failed inner ix", () => {
- const logs = [
- "Program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS invoke [1]",
- "Program log: Instruction: Create",
- "Program ERRM6YCMsccM22TEaPuu35KVU4iCY3GLCz4qMsKLYReE invoke [2]",
- "Program log: AnchorError thrown in programs/switchboard_v2/src/actions/aggregator_save_result_action.rs:235. Error Code: OracleMismatchError. Error Number: 6021. Error Message: An unexpected oracle account was provided for the transaction..",
- "Program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS consumed 12619 of 1400000 compute units",
- "Program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS failed: Program failed to complete",
- ];
- expect(
- ProgramErrorStack.parse(logs).stack.map((publicKey) =>
- publicKey.toString()
- )
- ).toEqual([
- "Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS",
- "ERRM6YCMsccM22TEaPuu35KVU4iCY3GLCz4qMsKLYReE",
- ]);
- });
- it("ignore successful inner ix", () => {
- const logs = [
- "Program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS invoke [1]",
- "Program log: Instruction: Create",
- "Program 11111111111111111111111111111111 invoke [2]",
- "Program 11111111111111111111111111111111 success",
- "Program log: panicked at programs/floats/src/lib.rs:17:9",
- "Program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS consumed 12619 of 1400000 compute units",
- "Program failed to complete: BPF program panicked",
- "Program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS failed: Program failed to complete",
- ];
- expect(
- ProgramErrorStack.parse(logs).stack.map((publicKey) =>
- publicKey.toString()
- )
- ).toEqual(["Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS"]);
- });
- it("ignore successful inner ix but don't ignore failing inner ix", () => {
- const logs = [
- "Program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS invoke [1]",
- "Program log: Instruction: Create",
- "Program 11111111111111111111111111111111 invoke [2]",
- "Program 11111111111111111111111111111111 success",
- "Program ERRM6YCMsccM22TEaPuu35KVU4iCY3GLCz4qMsKLYReE invoke [2]",
- "Program log: panicked at programs/floats/src/lib.rs:17:9",
- "Program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS consumed 12619 of 1400000 compute units",
- "Program failed to complete: BPF program panicked",
- "Program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS failed: Program failed to complete",
- ];
- expect(
- ProgramErrorStack.parse(logs).stack.map((publicKey) =>
- publicKey.toString()
- )
- ).toEqual([
- "Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS",
- "ERRM6YCMsccM22TEaPuu35KVU4iCY3GLCz4qMsKLYReE",
- ]);
- });
- it("ignore successful inner ix but don't ignore failing inner ix - big nested", () => {
- const logs = [
- "Program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS invoke [1]",
- "Program log: Instruction: Create",
- "Program 11111111111111111111111111111111 invoke [2]",
- "Program 11111111111111111111111111111111 success",
- "Program 1119iqpxV28XnisGGQVMHsABdWZAx9PjtwegepRhGm5 invoke [2]",
- "Program 1119iqpxV28XnisGGQVMHsABdWZAx9PjtwegepRhGm5 consumed 4308 of 200000 compute units",
- "Program 1119iqpxV28XnisGGQVMHsABdWZAx9PjtwegepRhGm5 success",
- "Program 222fsxyjMZSSpT9gpucChbiFmjZC2GtaZmKsBkh66KMZ invoke [2]",
- "Program 333fE7qebyWBjcaCJcVmkzwrheA1Ka9bjGChuhVD9iQr invoke [3]",
- "Program 444D5MLf9UbeJBiuFw5WzVG3bMejweunZHPboWm2oTsh invoke [4]",
- "Program 444D5MLf9UbeJBiuFw5WzVG3bMejweunZHPboWm2oTsh consumed 14343 of 200000 compute units",
- "Program 444D5MLf9UbeJBiuFw5WzVG3bMejweunZHPboWm2oTsh success",
- "Program 555CBVR14jAYjK8jRE5kurBACiSNYXkffciRSG2R3krX invoke [4]",
- "Program 555CBVR14jAYjK8jRE5kurBACiSNYXkffciRSG2R3krX consumed 163337 of 200000 compute units",
- "Program 555CBVR14jAYjK8jRE5kurBACiSNYXkffciRSG2R3krX success",
- "Program 666UBGVHWNP7qNqUdnYz86owJ8oErztVvgeF5Dd5v8cR invoke [4]",
- "Program 666UBGVHWNP7qNqUdnYz86owJ8oErztVvgeF5Dd5v8cR success",
- "Program 333fE7qebyWBjcaCJcVmkzwrheA1Ka9bjGChuhVD9iQr success",
- "Program 222fsxyjMZSSpT9gpucChbiFmjZC2GtaZmKsBkh66KMZ success",
- "Program 777UGK3pU4ygVWwnn7MDnetec1nSVg4Xi53DFSHu9D6A invoke [2]",
- "Program 888E49S65VpyDmydi6juT7tsSwNyD3ZEVkV8te1rL3iH invoke [3]",
- "Program 999X95icuyGzfYoeP6SPMb8aMn6ahfCpAt9VPddSNPPi invoke [4]",
- "Program 999X95icuyGzfYoeP6SPMb8aMn6ahfCpAt9VPddSNPPi success",
- "Program ERRM6YCMsccM22TEaPuu35KVU4iCY3GLCz4qMsKLYReE invoke [4]",
- "Program log: panicked at programs/floats/src/lib.rs:17:9",
- "Program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS consumed 12619 of 1400000 compute units",
- "Program failed to complete: BPF program panicked",
- "Program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS failed: Program failed to complete",
- ];
- expect(
- ProgramErrorStack.parse(logs).stack.map((publicKey) =>
- publicKey.toString()
- )
- ).toEqual([
- "Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS",
- "777UGK3pU4ygVWwnn7MDnetec1nSVg4Xi53DFSHu9D6A",
- "888E49S65VpyDmydi6juT7tsSwNyD3ZEVkV8te1rL3iH",
- "ERRM6YCMsccM22TEaPuu35KVU4iCY3GLCz4qMsKLYReE",
- ]);
- });
- });
- describe("AnchorError", () => {
- it("FileLine AnchorError with Pubkeys", () => {
- const logs = [
- "Program SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f invoke [1]",
- "Program log: Instruction: AggregatorSaveResult",
- "Program log: AnchorError thrown in programs/switchboard_v2/src/actions/aggregator_save_result_action.rs:235. Error Code: OracleMismatchError. Error Number: 6021. Error Message: An unexpected oracle account was provided for the transaction..",
- "Program log: Left:",
- "Program log: Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS",
- "Program log: Right:",
- "Program log: SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f",
- "Program SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f consumed 28928 of 200000 compute units",
- "Program SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f failed: custom program error: 0x1785",
- ];
- const anchorError = AnchorError.parse(logs)!;
- expect(anchorError.program.toString()).toEqual(
- "SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f"
- );
- expect(anchorError.error.errorCode).toEqual({
- code: "OracleMismatchError",
- number: 6021,
- });
- expect(anchorError.error.errorMessage).toEqual(
- "An unexpected oracle account was provided for the transaction."
- );
- expect(anchorError.error.origin).toEqual({
- file: "programs/switchboard_v2/src/actions/aggregator_save_result_action.rs",
- line: 235,
- });
- expect(
- anchorError.error.comparedValues!.map((pk) => pk.toString())
- ).toEqual([
- "Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS",
- "SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f",
- ]);
- expect(
- anchorError.programErrorStack!.map((publicKey) => publicKey.toString())
- ).toEqual(["SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f"]);
- expect(anchorError.errorLogs).toEqual([
- "Program log: AnchorError thrown in programs/switchboard_v2/src/actions/aggregator_save_result_action.rs:235. Error Code: OracleMismatchError. Error Number: 6021. Error Message: An unexpected oracle account was provided for the transaction..",
- "Program log: Left:",
- "Program log: Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS",
- "Program log: Right:",
- "Program log: SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f",
- ]);
- });
- it("FileLine AnchorError with Values", () => {
- const logs = [
- "Program SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f invoke [1]",
- "Program log: Instruction: AggregatorSaveResult",
- "Program log: AnchorError thrown in programs/switchboard_v2/src/actions/aggregator_save_result_action.rs:235. Error Code: OracleMismatchError. Error Number: 6021. Error Message: An unexpected oracle account was provided for the transaction..",
- "Program log: Left: 1337",
- "Program log: Right: 4220",
- "Program SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f consumed 28928 of 200000 compute units",
- "Program SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f failed: custom program error: 0x1785",
- ];
- const anchorError = AnchorError.parse(logs)!;
- expect(anchorError.program.toString()).toEqual(
- "SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f"
- );
- expect(anchorError.error.errorCode).toEqual({
- code: "OracleMismatchError",
- number: 6021,
- });
- expect(anchorError.error.errorMessage).toEqual(
- "An unexpected oracle account was provided for the transaction."
- );
- expect(anchorError.error.origin).toEqual({
- file: "programs/switchboard_v2/src/actions/aggregator_save_result_action.rs",
- line: 235,
- });
- expect(anchorError.error.comparedValues!).toEqual(["1337", "4220"]);
- expect(
- anchorError.programErrorStack!.map((publicKey) => publicKey.toString())
- ).toEqual(["SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f"]);
- expect(anchorError.errorLogs).toEqual([
- "Program log: AnchorError thrown in programs/switchboard_v2/src/actions/aggregator_save_result_action.rs:235. Error Code: OracleMismatchError. Error Number: 6021. Error Message: An unexpected oracle account was provided for the transaction..",
- "Program log: Left: 1337",
- "Program log: Right: 4220",
- ]);
- });
- it("AccountName AnchorError with Pubkeys", () => {
- const logs = [
- "Program SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f invoke [1]",
- "Program log: Instruction: AggregatorSaveResult",
- "Program log: AnchorError caused by account: some_account. Error Code: OracleMismatchError. Error Number: 6021. Error Message: An unexpected oracle account was provided for the transaction..",
- "Program log: Left:",
- "Program log: Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS",
- "Program log: Right:",
- "Program log: SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f",
- "Program SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f consumed 28928 of 200000 compute units",
- "Program SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f failed: custom program error: 0x1785",
- ];
- const anchorError = AnchorError.parse(logs)!;
- expect(anchorError.program.toString()).toEqual(
- "SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f"
- );
- expect(anchorError.error.errorCode).toEqual({
- code: "OracleMismatchError",
- number: 6021,
- });
- expect(anchorError.error.errorMessage).toEqual(
- "An unexpected oracle account was provided for the transaction."
- );
- expect(anchorError.error.origin).toEqual("some_account");
- expect(
- anchorError.error.comparedValues!.map((pk) => pk.toString())
- ).toEqual([
- "Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS",
- "SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f",
- ]);
- expect(
- anchorError.programErrorStack!.map((publicKey) => publicKey.toString())
- ).toEqual(["SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f"]);
- expect(anchorError.errorLogs).toEqual([
- "Program log: AnchorError caused by account: some_account. Error Code: OracleMismatchError. Error Number: 6021. Error Message: An unexpected oracle account was provided for the transaction..",
- "Program log: Left:",
- "Program log: Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS",
- "Program log: Right:",
- "Program log: SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f",
- ]);
- });
- it("AccountName AnchorError with Values", () => {
- const logs = [
- "Program SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f invoke [1]",
- "Program log: Instruction: AggregatorSaveResult",
- "Program log: AnchorError caused by account: some_account. Error Code: OracleMismatchError. Error Number: 6021. Error Message: An unexpected oracle account was provided for the transaction..",
- "Program log: Left: 1337",
- "Program log: Right: 4220",
- "Program SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f consumed 28928 of 200000 compute units",
- "Program SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f failed: custom program error: 0x1785",
- ];
- const anchorError = AnchorError.parse(logs)!;
- expect(anchorError.program.toString()).toEqual(
- "SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f"
- );
- expect(anchorError.error.errorCode).toEqual({
- code: "OracleMismatchError",
- number: 6021,
- });
- expect(anchorError.error.errorMessage).toEqual(
- "An unexpected oracle account was provided for the transaction."
- );
- expect(anchorError.error.origin).toEqual("some_account");
- expect(anchorError.error.comparedValues!).toEqual(["1337", "4220"]);
- expect(
- anchorError.programErrorStack!.map((publicKey) => publicKey.toString())
- ).toEqual(["SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f"]);
- expect(anchorError.errorLogs).toEqual([
- "Program log: AnchorError caused by account: some_account. Error Code: OracleMismatchError. Error Number: 6021. Error Message: An unexpected oracle account was provided for the transaction..",
- "Program log: Left: 1337",
- "Program log: Right: 4220",
- ]);
- });
- it("Empty AnchorError", () => {
- const logs = [
- "Program SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f invoke [1]",
- "Program log: Instruction: AggregatorSaveResult",
- "Program log: AnchorError occurred. Error Code: OracleMismatchError. Error Number: 6021. Error Message: An unexpected oracle account was provided for the transaction..",
- "Program SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f consumed 28928 of 200000 compute units",
- "Program SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f failed: custom program error: 0x1785",
- ];
- const anchorError = AnchorError.parse(logs)!;
- expect(anchorError.program.toString()).toEqual(
- "SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f"
- );
- expect(anchorError.error.errorCode).toEqual({
- code: "OracleMismatchError",
- number: 6021,
- });
- expect(anchorError.error.errorMessage).toEqual(
- "An unexpected oracle account was provided for the transaction."
- );
- expect(anchorError.error.origin).toBeUndefined();
- expect(anchorError.error.comparedValues).toBeUndefined();
- expect(
- anchorError.programErrorStack!.map((publicKey) => publicKey.toString())
- ).toEqual(["SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f"]);
- expect(anchorError.errorLogs).toEqual([
- "Program log: AnchorError occurred. Error Code: OracleMismatchError. Error Number: 6021. Error Message: An unexpected oracle account was provided for the transaction..",
- ]);
- });
- });
|