diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b6996ca..9ebc682 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -8,7 +8,8 @@ Run this command to locally compile an XAHL Hook source file (inside ./contracts) from .c to .wasm code: -`$ hooks-cli compile-c contracts-c build` +`$ hooks-cli compile-c contracts-c/toolbox build` +`$ hooks-cli compile-c contracts-c/txns build` You can also build a single hook with; @@ -46,4 +47,4 @@ Run JS Hooks Integration tests Run single JS Hooks Integration test -`$ yarn run test:integration-js test/integration-js/toolbox/base.test.ts` \ No newline at end of file +`$ yarn run test:integration-js test/integration-js/toolbox/base.test.ts` diff --git a/src/Xrpld.ts b/src/Xrpld.ts index 75b18a8..2c81a1c 100644 --- a/src/Xrpld.ts +++ b/src/Xrpld.ts @@ -53,8 +53,13 @@ export class Xrpld { txResponse?.result?.meta as TransactionMetadata ) if (hookExecutions.executions.length === 1) { + let returnCode = BigInt( + `0x${hookExecutions.executions[0].HookReturnCode}` + ) + if (returnCode & 0x8000000000000000n) + returnCode = -(returnCode & ~0x8000000000000000n) throw Error( - `${hookExecutions.executions[0].HookReturnCode}: ${hookExecutions.executions[0].HookReturnString}` + `${returnCode}: ${hookExecutions.executions[0].HookReturnString}` ) } throw Error(JSON.stringify(hookExecutions.executions)) diff --git a/src/models/iHookExecutions.ts b/src/models/iHookExecutions.ts index 3b5abbb..06f76f4 100644 --- a/src/models/iHookExecutions.ts +++ b/src/models/iHookExecutions.ts @@ -8,7 +8,7 @@ export interface iHookExecution { HookHash: string HookInstructionCount: string HookResult: number - HookReturnCode: number + HookReturnCode: string HookReturnString: string HookStateChangeCount: number } diff --git a/test/integration-c/hooks/toolbox/filterOnXrp.test.ts b/test/integration-c/hooks/toolbox/filterOnXrp.test.ts index 8652070..3d21b94 100644 --- a/test/integration-c/hooks/toolbox/filterOnXrp.test.ts +++ b/test/integration-c/hooks/toolbox/filterOnXrp.test.ts @@ -93,7 +93,7 @@ describe('filterOnXrp', () => { } catch (error: unknown) { if (error instanceof Error) { expect(error.message).toEqual( - 'e: filter_on_xrp: Ignoring non XAH Transaction' + '14: filter_on_xrp: Ignoring non XAH Transaction' ) } } diff --git a/test/integration-c/hooks/toolbox/hookOnTT.test.ts b/test/integration-c/hooks/toolbox/hookOnTT.test.ts index 89ff677..149d818 100644 --- a/test/integration-c/hooks/toolbox/hookOnTT.test.ts +++ b/test/integration-c/hooks/toolbox/hookOnTT.test.ts @@ -91,7 +91,7 @@ describe('hookOnTT', () => { } catch (error: unknown) { if (error instanceof Error) { expect(error.message).toEqual( - 'f: hook_on_tt: HookOn field is incorrectly set.' + '15: hook_on_tt: HookOn field is incorrectly set.' ) } } diff --git a/test/integration-c/hooks/toolbox/stateForeignBasic.test.ts b/test/integration-c/hooks/toolbox/stateForeignBasic.test.ts index 80a3d88..08fc2a4 100644 --- a/test/integration-c/hooks/toolbox/stateForeignBasic.test.ts +++ b/test/integration-c/hooks/toolbox/stateForeignBasic.test.ts @@ -131,7 +131,7 @@ describe('stateForeignBasic', () => { }) } catch (error: any) { expect(error.message).toEqual( - '22: state_foreign_basic: Could not get foreign state' + '34: state_foreign_basic: Could not get foreign state' ) } }) @@ -208,7 +208,7 @@ describe('stateForeignBasic', () => { }) } catch (error: any) { expect(error.message).toEqual( - '22: state_foreign_basic: Could not get foreign state' + '34: state_foreign_basic: Could not get foreign state' ) } }) @@ -302,7 +302,7 @@ describe('stateForeignBasic', () => { }) } catch (error: any) { expect(error.message).toEqual( - '27: state_foreign_basic: Could not set foreign state' + '39: state_foreign_basic: Could not set foreign state' ) } }) diff --git a/test/integration-c/hooks/toolbox/utilSha512.test.ts b/test/integration-c/hooks/toolbox/utilSha512.test.ts index 6b7dd44..46010cc 100644 --- a/test/integration-c/hooks/toolbox/utilSha512.test.ts +++ b/test/integration-c/hooks/toolbox/utilSha512.test.ts @@ -94,7 +94,7 @@ describe('utilSha512', () => { tx: builtTx, }) } catch (error: any) { - expect(error.message).toEqual('35: util_sha512: Hashes do not match') + expect(error.message).toEqual('53: util_sha512: Hashes do not match') } }) @@ -170,7 +170,7 @@ describe('utilSha512', () => { tx: builtTx, }) } catch (error: any) { - expect(error.message).toEqual('35: util_sha512: Hashes do not match') + expect(error.message).toEqual('53: util_sha512: Hashes do not match') } }) diff --git a/test/integration-js/hooks/toolbox/hookOnTT.js.test.ts b/test/integration-js/hooks/toolbox/hookOnTT.js.test.ts index 03cb9b9..fe19a84 100644 --- a/test/integration-js/hooks/toolbox/hookOnTT.js.test.ts +++ b/test/integration-js/hooks/toolbox/hookOnTT.js.test.ts @@ -94,7 +94,7 @@ describe('hookOnTT', () => { } catch (error: unknown) { if (error instanceof Error) { expect(error.message).toEqual( - '8000000000000025: hookOnTT.ts: HookOn field is incorrectly set.' + '-37: hookOnTT.ts: HookOn field is incorrectly set.' ) } }