The gas comsumption of a comtract built to Wasm by different Rust versions for an Argon2 implementation.
The host is always the same, just Wasm is created differently.
Build command | Gas used | relative |
---|---|---|
cargo +1.51.0 wasm && cargo integration-test argon2 -- --nocapture | 27143267400000 | 100.0% |
cargo +1.52.1 wasm && cargo integration-test argon2 -- --nocapture | 23615946150000 | 87.0% |
cargo +1.53.0 wasm && cargo integration-test argon2 -- --nocapture | 23615432700000 | 87.0% |
cargo +1.54.0 wasm && cargo integration-test argon2 -- --nocapture | 23611119600000 | 87.0% |
cargo +1.55.0 wasm && cargo integration-test argon2 -- --nocapture | 23611119600000 | 87.0% |
cargo +1.56.1 wasm && cargo integration-test argon2 -- --nocapture | 15428757900000 | 56.8% |
cargo +1.57.0 wasm && cargo integration-test argon2 -- --nocapture | 15428757900000 | 56.8% |
cargo +1.58.1 wasm && cargo integration-test argon2 -- --nocapture | 8076343800000 | 29.8% |
Adding RUSTFLAGS='-C link-arg=-s'
makes no difference to the results above.
With wasm-opt version 105 (-Os
):
Build command | Gas used | relative |
---|---|---|
cargo +1.51.0 wasm && wasm-opt -Os target/wasm32-unknown-unknown/release/hackatom.wasm -o target/wasm32-unknown-unknown/release/hackatom.wasm && cargo integration-test argon2 -- --nocapture | 27123756900000 | 100.0% |
cargo +1.52.1 wasm && wasm-opt -Os target/wasm32-unknown-unknown/release/hackatom.wasm -o target/wasm32-unknown-unknown/release/hackatom.wasm && cargo integration-test argon2 -- --nocapture | 23594317200000 | 87.0% |
cargo +1.53.0 wasm && wasm-opt -Os target/wasm32-unknown-unknown/release/hackatom.wasm -o target/wasm32-unknown-unknown/release/hackatom.wasm && cargo integration-test argon2 -- --nocapture | 23593737300000 | 87.0% |
cargo +1.54.0 wasm && wasm-opt -Os target/wasm32-unknown-unknown/release/hackatom.wasm -o target/wasm32-unknown-unknown/release/hackatom.wasm && cargo integration-test argon2 -- --nocapture | 23590208400000 | 87.0% |
cargo +1.55.0 wasm && wasm-opt -Os target/wasm32-unknown-unknown/release/hackatom.wasm -o target/wasm32-unknown-unknown/release/hackatom.wasm && cargo integration-test argon2 -- --nocapture | 23590208400000 | 87.0% |
cargo +1.56.1 wasm && wasm-opt -Os target/wasm32-unknown-unknown/release/hackatom.wasm -o target/wasm32-unknown-unknown/release/hackatom.wasm && cargo integration-test argon2 -- --nocapture | 15403483650000 | 56.8% |
cargo +1.57.0 wasm && wasm-opt -Os target/wasm32-unknown-unknown/release/hackatom.wasm -o target/wasm32-unknown-unknown/release/hackatom.wasm && cargo integration-test argon2 -- --nocapture | 15403483650000 | 56.8% |
cargo +1.58.1 wasm && wasm-opt -Os target/wasm32-unknown-unknown/release/hackatom.wasm -o target/wasm32-unknown-unknown/release/hackatom.wasm && cargo integration-test argon2 -- --nocapture | 8002187100000 | 29.5% |
Nice tables.
As you said in chat, it would be nice to see these comparisons over more "contract-like" code that is dominated by serialisation / deserialisation work.