Run the registry journey with your own provider and wallet

As a Cardano KERI integrator, you want to run the bounded Singular registry journey on a test network using an API you choose and a wallet whose signing key stays on your machine. The current ordinary path uses Koios for raw reads and signed submission, pinned genesis/history for time, and local construction and evaluation. It does not require an ordinary node socket.

This page describes the current source's configuration. A candidate's local checks, hosted gates, release archive and public-network results are separate receipts; these instructions do not claim that a new release or connected preprod run has been accepted.

Choose the network and API

The packaged journey defaults to a private generated development chain behind the project's HTTP facade. Supplying external settings runs the same registry steps through the requested API with your wallet. The launcher checks those settings before starting a private fixture.

flowchart TB
    N[Generated node] -->|raw ledger facts| F[Private HTTP facade]
    F -->|API answers| J[Registry journey]
    J -->|signs with| K[Ephemeral wallet]

The private fixture exposes its node through the facade; the journey uses the API and an ephemeral fixture wallet. Your external configuration supplies your own API, local payment key and pinned time instead:

flowchart TB
    C[Local key and pinned time] -->|configure| J[Registry journey]
    J -->|reads and signed submission| P[Koios API]
You supply Flag Environment variable
API base URL --koios-url URL SINGULAR_KOIOS_URL
Network magic --network-magic N SINGULAR_NETWORK_MAGIC
Payment signing-key file --wallet-skey FILE SINGULAR_WALLET_SKEY
Pinned time directory, when needed --network-time DIR SINGULAR_NETWORK_TIME
Optional API token file --koios-token-file FILE SINGULAR_KOIOS_TOKEN_FILE

Flags override the matching environment variable. An external run requires URL, magic and signing-key file together; a missing setting refuses by name. Preprod magic is 1, and the reviewed packaged preprod recording is the default time source there. The generated network's magic is 42, and its launcher supplies its exact published time directory. A supplied directory contains time-manifest.json, shelley-genesis.json and era-history.cbor; their raw identities, network, system start and protocol-major pin are validated. Unsupported time networks refuse rather than borrowing another recording. These submitting runners refuse mainnet.

The old --backend, --node-socket and SINGULAR_NODE_SOCKET settings refuse before wallet or provider access. A socket accepted by a separate private probe is a test-harness setting, not an ordinary provider route.

Check the archive and build its commands

For an existing published archive, verify the bytes and validator identities before using it:

tar xzf singular-onchain-release-<tag>.tar.gz
cd singular-onchain-release-<tag>
sha256sum --check SHA256SUMS
bash verify-identities.sh

The archive's command interface depends on its revision. An older node-backed archive does not acquire this interface from reading this page. The archive guide records its runnable components and unverified legacy surfaces. Build the registry and naming blueprints from that tree and export REGISTRY_BLUEPRINT and NAMING_BLUEPRINT as the guide specifies.

Fund a wallet you control

Create a payment key and derive its preprod address locally:

cardano-cli address key-gen \
  --verification-key-file joiner.vkey --signing-key-file joiner.skey
cardano-cli address build \
  --payment-verification-key-file joiner.vkey --testnet-magic 1 \
  --out-file joiner.addr
cat joiner.addr

Fund the address from the preprod faucet, then make a self-payment that leaves several ordinary outputs, including an ada-only collateral output. The runner loads the key from its local file and derives the paying address from it. A key's bytes do not belong in command output or receipts. A funded balance alone is insufficient when the transaction needs distinct seed, funding and collateral outputs.

The retained funding checks name the wallet address, available outputs and required amount. They catch an empty or inadequately funded wallet; their initial floor does not guarantee that a long run can finish with that balance.

Run the bounded registry journey

From offchain, supply your chosen API URL, test-network magic and wallet:

nix run .#journey -- \
  --koios-url "$koios_url" --network-magic 1 --wallet-skey ./joiner.skey

For an explicitly supplied time recording, add --network-time "$time_dir". The journey publishes the needed reference, boots a registry, books and folds an insertion, checks exclusion and inclusion proofs against the state read back, and attempts the retained forged-identity, changed-output and missing- witness controls. It reports the pinned and actually applied script identities. These are registry protocol steps; they do not claim a naming lifecycle.

%%{init: {'sequence': {'actorMargin': 20, 'width': 110, 'wrap': true, 'mirrorActors': false}}}%%
sequenceDiagram
    participant J as Journey
    participant P as Koios API
    J->>P: Read raw facts
    Note over J: Build and sign
    J->>P: Submit signed body
    P-->>J: Outcome
    loop Poll
        J->>P: Poll exact output
        P-->>J: Output facts
    end
    Note over J: Check readback

A successful submission answer alone is not confirmation. Confirmation requires the exact output. With a validity upper bound the provider deadline is that slot's POSIX start plus 120 seconds; without one it is now plus 300 seconds. Latest-block observation can establish expiry. A refusal, unavailable answer, timeout or mismatching proof stops the run; it is never counted as its intended accepting step.

Understand the provider boundary

The logical session is Unbound. Its multiple reads may observe different chain states. Facts are Unverified with no configured witness. Raw-source receipts identify what was consumed, but they do not prove the API answered honestly or that all reads were a coherent snapshot. Ledger acceptance remains an independent boundary.

Before construction, the builder selects an interval with at least ten seconds of usable slots at its observed tip. The moving ledger horizon can shorten the upper bound. An empty interval refuses WindowPastLedgerHorizon; a nonempty registry-limited short interval refuses WindowTooShort. Only a horizon-limited otherwise longer window permits one wait for a later horizon, bounded by slots and 20 seconds of wall time. A stalled wait refuses HorizonWaitTimedOut before signing. Build duration can consume the selected interval; this rule is not a guarantee of eventual ledger acceptance.

Deployment and naming availability

The deployment tool uses the same provider/wallet configuration. From offchain, these are its current command forms:

nix run .#deployment -- deploy \
  --koios-url "$koios_url" --network-magic 1 --wallet-skey ./joiner.skey \
  --out ./preprod.json --release "$release"
nix run .#deployment -- verify \
  --koios-url "$koios_url" --network-magic 1 --wallet-skey ./joiner.skey \
  --deployment ./preprod.json

No required hosted workflow currently exercises the legacy deployment-attach script. A compiler or scoped deployment pass does not establish that attached naming is runnable. The retained register-rows, recovery-rows and retirement-rows commands remain unverified under #172 and #283. The recovery and retirement guide documents that design, and the preprod record preserves its historical executed values. This page does not present those naming commands as a current accepted runbook.

Demo 1 has two users, Alice and Bob, starting with empty homes. Neither creates the registry or receives its creation files. Joining by state token is delivered: each joins with the state token, its own wallet and a Koios URL, with no shared directory — every command carries --state-token and no directory option, and neither actor opens the other's files. Joining by reading the registry page generated from the chain is delivered: each reads which registry this is, which release it runs, what its rules are and what it holds, from the token and the packaged release alone, as the registry page describes. Joining by a copied identity file is superseded. Not delivered: a block anchor for the last fold, documentation links checked against a published asset, and the independently derived action identity in the public report. Public replay reconstructs the trie; missing history or a root that does not chain remains a named refusal. Historical deployment and naming receipts remain evidence of their recorded revision and public chain, not a pass for this provider candidate.