# Abstract Standalone This crate contains a `StandaloneContract` struct that can be used to interact with the abstract on-chain infrastructure.S ## Usage First, import the crate in your `Cargo.toml`. ```toml [dependencies] abstract-standalone = "" ``` You can then define the contract's constant: ```rust pub const CONTRACT_ID: &str = "my-namespace:my-contract"; pub const VERSION: &str = env!("CARGO_PKG_VERSION"); pub const MY_CONTRACT: MockStandaloneContract = MockStandaloneContract::new(CONTRACT_ID, VERSION, None); ``` Next, include the `StandaloneInstantiateMsg` struct in your contract's instantiate message. We'll need this data to instantiate the `MY_CONTRACT` state. ```rust use abstract_standlone::StandaloneInstantiateMsg; #[cosmwasm_schema::cw_serde] pub struct InstantiateMsg { pub base: StandaloneInstantiateMsg, // .. Your custom fields here. } ``` Then, use the `StandaloneInstantiateMsg` struct to instantiate the state. ```rust #[cosmwasm_std::entry_point] pub fn instantiate( deps: DepsMut, env: Env, info: MessageInfo, msg: InstantiateMsg, ) -> Result { MY_CONTRACT.instantiate(deps, info, msg.base, true)?; // Your custom logic here. } ``` Finally, you can use the `MY_CONTRACT` const to interact with the Abstract on-chain infrastructure through our [APIs](https://docs.rs/abstract-sdk/0.22.2/abstract_sdk/#traits). ```rust #[cosmwasm_std::entry_point] pub fn execute( deps: DepsMut, env: Env, info: MessageInfo, msg: ExecuteMsg, ) -> Result { // Example of using an Abstract API. let bank: Bank = MY_CONTRACT.bank(deps.as_ref()); let account_balance: Coin = bank_api.balance(&AssetEntry::new("abstract"))?; // ... Ok(MY_CONTRACT.response("mock_exec")) } ```