Thin wrapper around morpheum-sdk providing a user-friendly command-line interface
for interacting with the Morpheum blockchain and its cross-chain infrastructure.
# Build with cross-chain support
cargo build --features bank
# Add a key from BIP-39 mnemonic
morpheum keys add default --mnemonic "abandon abandon ..."
# Import a raw EVM private key
morpheum keys import-evm my-evm-wallet --private-key 0x...
# Bind every transaction to the target chain. Take both values from the chain's
# published parameters, never from the node you submit to; without a genesis
# hash, signing is refused.
morpheum config set chain_id <chain-id>
morpheum config set genesis_hash <hex>Deposit tokens from external chains into Morpheum and withdraw back via Hyperlane Warp Routes.
# EVM: Deposit 100 USDC from Sepolia
morpheum tx bank deposit --chain evm:sepolia --token USDC --amount 100
# EVM: Deposit 0.01 ETH from Sepolia with custom RPC
morpheum tx bank deposit --chain evm:sepolia --token ETH --amount 0.01 \
--chain-rpc https://my-rpc.example.com
# SVM: Deposit 0.5 SOL from Solana Devnet
morpheum tx bank deposit --chain svm:devnet --token SOL --amount 0.5# Withdraw USDC to EVM address
morpheum tx bank withdraw --chain evm:sepolia --token USDC \
--recipient 0x000000000000000000000000<20-byte-address> --amount 1000000
# Withdraw SOL to Solana address
morpheum tx bank withdraw --chain svm:devnet --token SOL \
--recipient 0x<32-byte-solana-pubkey> --amount 50000000morpheum query gmp delivery --message-id 0xabc123...Every morpheum tx … command prints a txhash (and, when the node reports it,
the routed shard) as soon as the node admits the transaction. Admission is
not finality: the transaction may still fail, be skipped, or — during a shard
outage — never land. Bound your own wait and reconcile the outcome via the
node's tx.v1.Query/QueryTxStatus RPC
(GET /tx/v1/tx/{txhash}/status — confirmed | failed | skipped | pending | not_found; pending is answered only by the node that admitted the tx).
Every transaction the CLI signs declares a gas limit. Execution fails once a
transaction uses more, and the whole limit is reserved in its block whether it
is used or not. When --gas-limit is not given, the transaction declares the
signing SDK's default (DEFAULT_GAS_LIMIT in morpheum-signing), which suits
native-module messages, or the gas limit its message states for itself when
that is larger (an SVM program call states its compute limit). Contract
deployments and calls, including tx bank withdraw (a Warp Route contract
call), can need more than either:
morpheum tx bank withdraw --chain evm:sepolia --token USDC \
--recipient 0x000000000000000000000000<20-byte-address> --amount 1000000 \
--gas-limit <gas>The value must lie between 1 and the chain's per-transaction gas budget, and
at least the gas limit the message states for itself; the CLI refuses
anything else before it signs and names the bound. morpheum --help prints
the range and the default.
Discover supported chains, tokens, and actions without hard-coded tables. Data is read directly from the SDK chain registries at runtime, so it is always accurate and requires zero manual maintenance.
# List all supported external chains
morpheum query registry chains
# List tokens for a specific chain (with available actions)
morpheum query registry tokens --chain evm:sepolia
# Find all chains that support a given token
morpheum query registry routes --token USDCQuery the on-chain asset registry managed by the bank module.
# List all registered assets (index, symbol, type, metadata)
morpheum query bank assets
# Filter by asset type (e.g. 7 = CANONICAL_STABLECOIN)
morpheum query bank assets --type-filter 7The CLI follows a layered design:
morpheum-cli-- Thin command dispatcher; no business logicmorpheum-sdk-- All heavy logic (chain registries, signing, transaction building)morpheum-signing-- BIP-39 key derivation for Native, EVM, and Solana
Cross-chain capabilities are a composable trait applied to modules, not a
separate top-level concept. The xchain module provides CrossChainExecutor
which any module can use. Currently the bank module uses it for
deposit/withdraw.
| Feature | Description |
|---|---|
bank |
Enables cross-chain deposit/withdraw via Hyperlane |