[package]
name = "cosmwasm-std"
version = { workspace = true }
authors = ["Ethan Frey <ethanfrey@users.noreply.github.com>"]
description = "Standard library for Wasm based smart contracts on Cosmos blockchains"
repository = { workspace = true }
edition = { workspace = true }
license = { workspace = true }
readme = "README.md"

[package.metadata.docs.rs]
features = ["cosmwasm_3_0", "staking", "stargate", "ibc2"]

[features]
default = ["exports", "iterator", "std"]
# Enable if this cosmwasm-std is the primary version of cosmwas-std used in the contract. This
# adds exports and imports needed for basic communication between contract and VM.
exports = []
std = []
# iterator allows us to iterate over all DB items in a given range
# optional as some merkle stores (like tries) don't support this
# given Ethereum 1.0, 2.0, Substrate, and other major projects use Tries
# we keep this optional, to allow possible future integration (or different Cosmos Backends)
iterator = []
# staking exposes bindings to a required staking module in the runtime, via new
# CosmosMsg types, and new QueryRequest types. This should only be enabled on contracts
# that require these types, so other contracts can be used on systems with eg. PoA consensus
staking = []
# stargate enables stargate-dependent messages and queries, like raw protobuf messages
# as well as ibc-related functionality
stargate = []
# ibc2 enables ibc2-dependent messages, entrypoints and queries
ibc2 = []
# This feature makes `BankQuery::Supply` available for the contract to call, but requires
# the host blockchain to run CosmWasm `1.1.0` or higher.
cosmwasm_1_1 = []
# This feature makes `GovMsg::VoteWeighted` available for the contract to call, but requires
# the host blockchain to run CosmWasm `1.2.0` or higher.
cosmwasm_1_2 = ["cosmwasm_1_1"]
# This feature makes `BankQuery::DenomMetadata` available for the contract to call, but requires
# the host blockchain to run CosmWasm `1.3.0` or higher.
cosmwasm_1_3 = ["cosmwasm_1_2"]
# Together with the `iterator` feature this enables additional imports for more
# efficient iteration over DB keys or values.
# It also makes `DistributionQuery::{DelegationRewards, DelegationTotalRewards, DelegatorValidators}`
# available for the contract to call.
# It requires the host blockchain to run CosmWasm `1.4.0` or higher.
cosmwasm_1_4 = ["cosmwasm_1_3"]
# This enables functionality that is only available on 2.0 chains.
# It adds `CosmosMsg::Any`, replacing `CosmosMsg::Stargate`. It also adds `QueryRequest::Grpc`.
cosmwasm_2_0 = ["cosmwasm_1_4"]
# This enables functionality that is only available on 2.1 chains.
# It adds verification and key recovery for the secp256r1 elliptic curve.
cosmwasm_2_1 = ["cosmwasm_2_0"]
# This enables functionality that is only available on 2.2 chains.
# It adds `IbcMsg::PayPacketFee` and `IbcMsg::PayPacketFeeAsync`.
cosmwasm_2_2 = ["cosmwasm_2_1"]
# This enables functionality that is only available on 3.0 chains.
# It adds `WasmQuery::RawRange`.
cosmwasm_3_0 = ["cosmwasm_2_2"]

[dependencies]
base64 = "0.22.0"
bnum = "0.11.0"
cosmwasm-core = { workspace = true }
cosmwasm-derive = { workspace = true }
cw-schema = { workspace = true }
derive_more = { version = "2.0.1", default-features = false, features = ["debug"] }
hex = "0.4"
schemars = { workspace = true }
sha2 = "0.10.3"
serde = { workspace = true, features = ["std"] }
serde_json = "1.0.140"
static_assertions = "1.1.0"
thiserror = "1.0.26"
rmp-serde = "1.3.0"

[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
bech32 = "0.11.0"
cosmwasm-crypto = { workspace = true }
rand_core = { version = "0.6.4", features = ["getrandom"] }

[dev-dependencies]
cosmwasm-core = { workspace = true }
cosmwasm-schema = { workspace = true }
# The chrono dependency is only used in an example, which Rust compiles for us. If this causes trouble, remove it.
chrono = { version = "0.4", default-features = false, features = ["alloc", "std"] }
crc32fast = "1.3.2"
hex-literal = "0.4.1"
paste = "1.0.15"
proptest = { version = "1.5.0", default-features = false, features = ["attr-macro", "std"] }
