Expand description

Multitest is a design to simulate a blockchain environment in pure Rust. This allows us to run unit tests that involve contract -> contract, and contract -> bank interactions. This is not intended to be a full blockchain app but to simulate the Cosmos SDK x/wasm module close enough to gain confidence in multi-contract deployements before testing them on a live blockchain.

To understand the design of this module, please refer to ../DESIGN.md



Router is a persisted state. You can query this. Execution generally happens on the RouterCache, which then can be atomically committed or rolled back. We offer .execute() as a wrapper around cache, execute, commit/rollback process.
Utility to build App in stages. If particular items wont be set, defaults would be used
Wraps the exported functions from a contract and provides the normalized format Place T4 and E4 at the end, as we just want default placeholders for most contracts that don’t have sudo


We use it to allow calling into modules from another module in sudo mode. Things like gov proposals belong here.


Interface to call into a Contract


Creates new default App implementation working with customized exec and query messages. Outside of App implementation to make type elision better.

Type Definitions

Type alias for default build App to make its storing simpler in typical scenario
This is essential to create a custom app with custom handler. let mut app = BasicAppBuilder::<E, Q>::new_custom().with_custom(handler).build();