# rs-soroban-env
Rust contract-environment interface and (optional) host implementation for Soroban.
The `soroban-env-common` crate contains elements of the shared environment-interface between smart contract guest and host: the `Env` trait that defines the set of available environment functions as well as the `Val` type that can pass back and forth through the Wasm calling convention. Additionally small wrappers around subtypes of `Val` are included: `Object`, `Symbol`, `Error`, etc.
The `soroban-env-guest` crate contains the guest-side _stub implementation_ of the environment interface called `Guest` dependent on extern fns provided by the host implementation. This can be used in a Wasm runtime that provides the extern fns.
The `soroban-env-host` crate contains the host-side _full implementation_ of the environment interface called `Host`. This can be used either in the real blockchain host, or for local testing in the SDK. It also contains the shared implementation for Soroban fee compution (`fees.rs`) and a library for 'end-to-end' invocation of contracts menat to be used for applying transactions on-chain (`e2e_invoke.rs`).
The `soroban-simulation` crate contains the utilities for simulating the Soroban transactions 'end-to-end': given an invocation specification and provided with on-chain storage access, this allows users to record all the information necessary for submitting the transaction on-chain, such as the storage access footprint, necessary resources, recorded authorization payloads that need to be signed etc.
The `soroban-builtin-sdk-macros` and `soroban-env-macros` are crates dedicated to macros used internally by `soroban-env-host`. The former imitates the contract function and type definitions used by generated by `rs-soroban-sdk`, and the latter contains misc internal macros.
The `soroban-bench-utils` crate contains the utilties for running the benchmarks using for calibration of the Soroban execution costs via benchmarks.
The `soroban-synth-wasm` and `soroban-test-wasms` are crates used for tests that use smart contract. The former synthesizes simple parametric Wasms, and the latter contains various pre-compiled smart contract contracts used by tests.