Post Processing Tools
The size of the contract is a critical characteristic. The best way to keep it small is a well-designed minimalistic code with a reduced number of dependencies. It is especially important for large contracts and huge multi-contract dApps that can take a fortune to deploy.
When you have done your best with the code optimization it is worth reducing the size of the contract by minifying it.
Ready to use script
We have prepared a simple bash
script that can be used to minify .wasm
contract file. You can find it here.
The current approach to minification is the following:
- Snip (i.e. just replace with unreachable instruction) few known fat functions from the standard library (such as float formatting and panic-related) with
wasm-snip
. - Run
wasm-gc
to eliminate all functions reachable from the snipped functions. - Strip unneeded sections, such as names with
wasm-strip
. - Run
binaryen wasm-opt
, which cleans up the rest.
Requirements to run the script:
- install wasm-snip and wasm-gc with Cargo:
cargo install wasm-snip wasm-gc
- install binaryen and wabt on your system. For Ubuntu and other Debian based Linux distributions run:
apt install binaryen wabt
WARNING
Minification could be rather aggressive, so you must test the contract after minification. Standalone NEAR runtime could be helpful here.