$ npm i -g c2wasm-cli
Run this command to locally compile an XRPL Hook source file (inside ./contracts) from .c to .wasm code:
$ c2wasm-cli contracts build
Here is what each command does in the background:
wasmcc
- compiles a Hook source file (C code) to WebAssembly (WASM) code. For example,./contracts/base.c
compiles to./build/base.wasm
wasm-opt
- optimizes the WASM code./build/base.wasm
hook-cleaner
- cleans it by removing unnecessary additional exportsguard_checker
- this checks if any guard violation has occurred in the Hooks code before submitting it inSetHook
transaction. For more information, visit this link- Converts the compiled WASM to hexadecimal characters then submits it as payload in a
SetHook
transaction
You can also build a single hook with;
$ c2wasm-cli contracts/toolbox/base.c build
tail -f xrpld/debug.log | grep HookTrace
Run Unit tests
$ poetry run python3 test.py tests/unit
Before you can run the integration tests you must have a standalone rippled server running.
-
Full env with explorer:
-
$ xrpld-netgen up:standalone
-
Docker standalone only:
-
$ docker run -p 5005:5005 -p 6006:6006 -it transia/xahaud:latest
Run Integration tests
$ poetry run python3 test.py tests/integration
Run single Integration test
$ poetry run python3 test.py test/integration/toolbox/test_base.py
- Add the myhook.c file into the
contracts
directory - Build the hooks
$ c2wasm-cli contracts/toolbox/myhook.c build
- Copy the hook
test_base.py
template into the correct folder. (audited/toolbox) - Test the hook using:
$ poetry run python3 test.py test/integration/toolbox/test_myhook.py