Skip to content

Instantly share code, notes, and snippets.

@webmaster128
Last active February 4, 2022 12:09
Show Gist options
  • Save webmaster128/c0f8292d071522f694fd69a11e280738 to your computer and use it in GitHub Desktop.
Save webmaster128/c0f8292d071522f694fd69a11e280738 to your computer and use it in GitHub Desktop.

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%
@maurolacy
Copy link

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment