Skip to content
starskiff

Chains

Real-network chain nodes

Beyond the test nodes, starskiff ships instance definitions for real networks' nodes. Lifecycle and parameters are identical — the only difference is where the node comes from, per the image-first rule: an official image where a usable one exists, otherwise you inject the source.

  • Instance.xplad()XPLA. Runs the official ghcr.io/xpladev/xpla image (pinned to the mainnet version) by default. EVM + CosmWasm; exposes evmPort / evmUrl.
  • Instance.gaiad()Cosmos Hub. Runs the official ghcr.io/cosmos/gaia image (tags track mainnet exactly) by default. Useful as an IBC counterparty chain.
  • Instance.mantra()MANTRA. Runs the official ghcr.io/mantra-chain/mantrachain image (multi-arch, pinned to mainnet) by default. cosmos/evm + CosmWasm; defaults mirror mainnet (mantra-1, eth_chainId 5888).
  • Instance.xrplevm()XRPL EVM. Runs the official peersyst/exrp image (pinned to mainnet) by default. cosmos/evm; defaults mirror mainnet (xrplevm_1440000-1, eth_chainId 1440000). Set evmChainId when a custom Cosmos chainId should use a different EVM JSON-RPC identity. The image is amd64-only — on arm64 hosts pre-pull with docker pull --platform linux/amd64 (runs emulated) or pass a binary.
  • Instance.marood() — maroo. Private node source, so no default image: inject your own binary, or a private image where your CI allows it. network: 'mainnet' | 'testnet' presets select chain id + denoms; testnet matches viem's marooTestnet. The maroo module params (agent/eas/pcl/okrw) are seeded at genesis so the maroo precompiles work out of the box; pass policyAdmin / minterAddress to claim the admin-gated paths.
Instance.xplad(); // official image out of the box
Instance.gaiad(); // official image out of the box
Instance.marood({ binary: 'marood', network: 'testnet' }); // no default image — injection required

maroo v0.8+ needs Privacy ZK artifacts during genesis as well as startup. Pass an absolute host directory and starskiff supplies it to every lifecycle command:

Instance.marood({
  image: 'maroo:local',
  privacyZkArtifacts: {
    kind: 'generated-test',
    directory: '/absolute/path/to/privacy-zk-test-artifacts',
  },
});
 
Instance.marood({
  image: 'maroo:v0.8.0',
  privacyZkArtifacts: {
    kind: 'release',
    directory: '/srv/maroo/privacy-zk/v0.8.0',
  },
});

generated-test selects maroo's test-only circuit identity and therefore requires a test-tag build. release forces production/strict mode and clears that test opt-in. Docker gets a read-only mount; a local binary receives the host path directly. Starskiff only validates the path shape and existence—maroo remains responsible for strict artifact validation. Omit privacyZkArtifacts for a self-contained image that already carries the artifacts and environment.

policyAdmin and minterAddress are unset by default — pass them to claim the PCL precompile's admin methods and the OKRW mint/burn paths:

Instance.marood({
  image: 'your-registry/marood:private',
  policyAdmin: 'maroo1...',
  minterAddress: 'maroo1...',
});

Missing a chain? Define it in a few lines with cosmosBase / cosmosEvmBase.