Skip to main content
This step turns the Rust contract from Step 1 into a WASM component. Run these commands below from the contract repository root, where Cargo.toml and wit/world.wit live.
You do not need cargo-component. With crate-type = ["cdylib", "lib"] in Cargo.toml, the wasm32-wasip2 target emits a WASM component that T3N can inspect and register.

Build the release artifact

Install the WASI Preview 2 target once per machine, then build the release artifact:
rustup target add wasm32-wasip2
cargo build --target wasm32-wasip2 --release
Cargo writes the component to target/wasm32-wasip2/release/. If your package name contains hyphens, Cargo converts them to underscores in the file name. For the sample your-contract package, the output is:
target/wasm32-wasip2/release/your_contract.wasm
Confirm the file exists before moving on:
ls -lh target/wasm32-wasip2/release/*.wasm
The .wasm file is the artifact you pass to tenant.contracts.register in Step 3.

Verify the component interface

Use wasm-tools to print the component’s WIT interface:
wasm-tools component wit target/wasm32-wasip2/release/your_contract.wasm
The output should include the host interfaces you imported in wit/world.wit, such as t3n:host/kv-store, and the contract entry point:
export t3n:contract/dispatch@0.1.0;
If wasm-tools is not installed yet:
cargo install wasm-tools