← Protocols
Juno
01Description

Juno is the original neutral home of CosmWasm — a Cosmos SDK / Tendermint Proof-of-Stake chain dedicated to interoperable, permissionless smart contracts. It hosts the InterWasm DAO, supports IBC and ICA out of the box, and is widely used as a sandbox for CosmWasm experimentation before deploying to production Cosmos chains.

02Best for
  • 01permissionless CosmWasm contract deployment
  • 02CosmWasm prototyping before deploying to other Cosmos chains
  • 03Cosmos DAO tooling (DAO DAO contracts originated here)
  • 04IBC-connected CosmWasm dApps
  • 05interchain accounts (ICA) controllers
03Install
  • pnpm add juno-network @cosmjs/cosmwasm-stargate @cosmjs/proto-signing
  • cargo add cosmwasm-std cw-storage-plus cw2
04Environment variables
VariableScopeDescription
JUNO_RPC_URLClientJuno Tendermint RPC endpoint (e.g., `https://juno-rpc.polkachu.com`). Required for SigningCosmWasmClient.
05Prompt snippet
Use `juno-network` (alias `@cosmoscontracts/juno-network`) for typed Juno messages and `@cosmjs/cosmwasm-stargate` for contract calls. Connect with `SigningCosmWasmClient.connectWithSigner(rpcEndpoint, offlineSigner, { gasPrice: GasPrice.fromString('0.075ujuno') })`. Upload Wasm via `client.upload(sender, wasmBytes, 'auto')`, instantiate with `client.instantiate(sender, codeId, msg, label, 'auto', { admin })`, and execute with `client.execute(sender, contractAddr, msg, 'auto', memo, funds)`. For queries use `client.queryContractSmart(contractAddr, queryMsg)`. To set up an interchain account from Juno, send `MsgRegisterInterchainAccount { owner, connection_id }` and then submit remote-chain messages via `MsgSendTx` over the controller channel.
06Gotchas
  • CosmWasm version compatibility: Juno upgrades CosmWasm in lockstep with `wasmd` (e.g., cw 1.5 → 2.0 → 2.1). Contracts compiled against a newer `cosmwasm-std` than the live chain will fail at instantiate with `gas required exceeds allowed` or unknown opcode errors. Pin `cosmwasm-std` to the version in `docs.junonetwork.io`.
  • Chain upgrades have historically been frequent and sometimes contentious; subscribe to `discord.gg/juno` and the `junonetwork/governance` repo for upgrade signaling, and run `cosmovisor` if operating a node.
  • IBC channel maintenance: Juno's IBC channels (`channel-N`) to Osmosis, Cosmos Hub, etc., are not stable across migrations; resolve via `chain-registry` (`github.com/cosmos/chain-registry/juno`) at runtime, never hard-code.
  • Slashing parameters on Juno are stricter than some Cosmos chains — double-sign slash is 5%, downtime is 0.01% with a jailing window; choose validators carefully when delegating.
  • Gas token is `ujuno` (1 JUNO = 1_000_000 ujuno). Min gas price floats around `0.075ujuno`; too low causes mempool eviction during high-traffic periods.
  • Token-factory denoms (`factory/<creator>/<subdenom>`) are first-class but NOT IBC-compatible by default — they must be sent through specific channels with PFM or wrapped via tokenfactory hooks.
  • Smart-contract admin migration: contracts instantiated without an admin are immutable forever; double-check the `admin` field on instantiate or you'll lose the ability to migrate.
07Alternatives