Wallet setup

bash
wasit wallet status [--role x402|mpp-charge] [--network <testnet>] [--json]
wasit wallet create --role x402|mpp-charge|mpp-channel [--network <testnet>] [--fund]
wasit wallet fund --role x402|mpp-charge [--network <testnet>] [--asset xlm|usdc] [--amount <n>]

Testnet-only convenience commands for the payer keys the other subcommands read from .env. --network takes testnets only, stellar:testnet (the default), eip155:84532 (Base Sepolia), eip155:11155111 (Ethereum Sepolia) or solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1 (Solana devnet), since Friendbot, the printed USDC issuer, and the whole idea of a disposable generated key only make sense on testnet.

status shows each configured role's on-chain balances (or "not yet created" for a key that has never been funded). create generates a new key and prints the exact .env line(s) to paste — it never writes to .env itself, so it can never overwrite something already there. mpp-channel generates a commitment key (a raw hex ed25519 seed that signs off-chain, not a funded account — see Configuration); x402 and mpp-charge generate a funded-account keypair. status and fund reject --role mpp-channel outright, since it has no account to inspect or fund.

A key that is set but malformed — a truncated paste, a G... public key, or a hex commitment seed in a Stellar-secret slot — is reported by name ("X is not a valid Stellar secret key") and exits 2, rather than surfacing as an SDK error. status with no --role reports it against that one role, still checks the other, and exits 0: one unchecked role is a row in a table. status --role answers one question, so it exits 2 whenever that role could not be checked — key not set, unreadable, or its balance lookup failed — and wasit wallet status --role x402 && … never goes ahead on an unchecked key. An account that has never been funded is an answer, and exits 0.

fund --asset xlm calls Stellar's public Friendbot directly and is fully automatic. fund --asset usdc creates a trustline to Circle's official testnet USDC issuer automatically, but actually receiving a balance always needs a human step: there is no scriptable, unauthenticated USDC faucet for Stellar. Either visit https://faucet.circle.com once yourself (paste the public key wasit wallet fund prints), or set WASIT_USDC_DISTRIBUTOR_SECRET in .env to an account you already funded that way — every run after that sends automatically from it.

On the other testnets only --role x402 applies: MPP runs on Stellar. create --role x402 --network eip155:84532 prints an EVM_PRIVATE_KEY=0x... line, and --network solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1 an SVM_PRIVATE_KEY=... line (base58 of the 64-byte keypair), each with the address to paste into https://faucet.circle.com. That faucet is the only step: the payer needs USDC and no ETH or SOL, since the facilitator pays the fee, so --fund is Stellar only and fund prints the faucet step. status --network shows the configured payer's USDC balance of the SDK's default asset, and exits 2 when it could not be read.