Some useful utilities to transform WebAssembly binaries, most importantly for WebAssembly used in a deterministic / blockchain context, such as with ewasm.
Provide a list of imports (with namespace and name) and replace them with a new set of namespace and name pairs.
This can be very useful together with compilers, which do not support the specification of a namespace in imports yet. As of writing mid-2018, that includes pretty much every compiler (one exception is AssemblyScript).
Removes all exports, but the ones specified.
This comes with some presets:
ewasm: keepsmainand exported memorypwasm: keeps_call
Verifies that the module's imports are compliant with the provided import interface. Can be set to require the existence of the entire import set, or just the validity of existing imports with matching identifiers. Can be set to allow or prohibit unlisted additional imports.
The following presets are provided:
ewasm: Verifies the ewasm EEI. Disallows unlisted imports, and does not require that the entire interface be imported.
Verifies that the module's exports are compliant with the provided export interface. Can be set to allow or prohibit unlisted additional exports.
The following presets are provided:
ewasm: Verifies that themainfunction andmemoryis exported. Disallows any unlisted exports.
Wraps module into an ewasm-compatible constructor. It has two presets:
memory: wrap the module as a pre-defined memory sectioncustomsection: include the module as a custom section
wasm-chisel is available as a command line tool.
It uses features implemented in the library as well in wasm-gc and wasm-utils. It comes with a configuration file chisel.yaml.
The configuration file starts with a ruleset entry, where the name can be anything. Inside the ruleset are its options.
ewasm:
- file: "target/wasm32-unknown-unknown/release/sentinel.wasm"
- remapimports:
- style: ewasm
- deployerTBA