Solana

Composition and dependencies

Select the exact devnet peers, inspect the graph and distinguish configuration from working provider authority.

Alpha documentation

Reviewed devnet payment

text
Your application — owns the order and stable operation ID
        |
        v
      Edge — coordinates the reviewed lifecycle
        +-- Circuit   — identity, reservation and retained attempts
        +-- Sentinel  — policy and exact-byte preflight
        +-- Latch     — wallet approval and signing
        +-- Dispatch  — bounded submission of the recorded attempt
        +-- Witness   — observation and receipts
        +-- Conduit   — configured RPC transport

Compass — optional intent/request shaping
Arena   — explicit simulation, never a hidden devnet fallback

Select uk.capp.sidecar.solana-edge and the six packages below in the same application's target configuration. Library selection is explicit: a dependency description does not install a peer for you. Recompile/repackage the application when changing the packaged selection or permissions, then test the package actually installed.

Package suffix after uk.capp.sidecar.solana-Devnet configurationCheck before use
edgeproviderMode: devnet, compositionMode: autoThe required graph is configured, not bundled simulation.
conduitdirect-rpc or external-adapter; network: devnet; allowWriteMethods: trueVerify observed genesis. Keep verifyDevnet enabled for the intended guarded connection.
circuitlocal-store or an independently qualified external adapterSaved state is readable and has capacity; an external field alone is not a working ledger.
sentinelconduit-peer, network: devnetExact-transfer policy, simulation, fee/amount ceilings and allowed programs match the intended payment.
latchCompatible devnet device/test-wallet or qualified external/native authorityThe actual saved payer can approve; a declared native-mwa mode is not proof that this installation supplies its native bridge.
dispatchconduit-peer, network: devnet, allowSubmission: trueSubmission is enabled independently of Conduit's transport write gate.
witnessconduit-peer, network: devnetRequested commitment and exact-transaction observations are available.

For a first local devnet integration, device-wallet retains a recoverable test wallet. devnet-test-wallet uses a temporary process-local key and is not a substitute for a saved wallet backup. See Latch before choosing an authority provider.

Inspect the graph without starting a payment

Copy the portable client module beside this example. Loading the module performs no network, wallet or ledger action. Call the inspector from a setup screen, then call the connection check deliberately. It returns a small display model instead of exporting raw provider configuration.

js
import {createSolanaClient} from './solana-client.mjs';
const client = createSolanaClient(() => window.capp?.solana);
const required = ['conduit', 'circuit', 'sentinel', 'latch', 'dispatch', 'witness'];

export async function inspectDevnetSetup() {
  const status = await client.call('edge', 'status');
  const nodes = status.composition?.nodes ?? {};
  const peers = required.map(name => {
    const node = nodes[name];
    return {
      name, selected: node?.selected === true, loaded: node?.loaded === true,
      ready: node?.status?.ready === true,
      mode: String(node?.status?.providerMode ?? 'unavailable')
    };
  });
  return {
    configuredForDevnet: status.mode === 'devnet' && status.ready === true &&
      peers.every(peer => peer.selected && peer.loaded && peer.ready),
    peers,
    issues: (Array.isArray(status.issues) ? status.issues : []).map(issue => ({
      component: String(issue.component ?? ''), message: String(issue.message ?? '')
    }))
  };
}

export async function verifyPaymentConnection() {
  const setup = await inspectDevnetSetup();
  if (!setup.configuredForDevnet) throw new Error('Resolve the selected devnet composition first');
  const observed = await client.call('conduit', 'verifyNetwork');
  return {network: observed.network, genesisHash: observed.genesisHash, verifiedAt: observed.verifiedAt};
}

Render messages as text. configuredForDevnet describes local configuration/availability: it is not evidence of funds, an unlocked wallet, a successful simulation or a successful send. verifyNetwork() makes a real provider read and can fail on a valid-looking endpoint. None of these calls creates or selects a wallet.

Useful smaller compositions

NeedStart withBoundary
Balance, token-account or activity viewConduitBounded RPC observations, not a complete indexer.
Portable payment requestCompass in local-intent, or the payment helperRequest terms, not signing or durable invoice storage.
Pending-operation ledgerCircuit in local-storeApp/origin-scoped persistence, not a distributed lock.
Local metadata-policy rehearsalSentinel in local-policyA metadata decision is not exact transaction approval.
Deterministic executionArena in deterministic-localSimulation without custody or real trading settlement.
Simulated submission/receiptDispatch and Witness in arena-peer, plus ArenaObserve the same simulated attempt; keep simulation flags visible.
Collective-review rehearsalAccord in local-controlLocal reviewer labels are not authenticated threshold signatures.
Position allocationSwitchyard in local-allocationMoving a record does not move funds.
Shared sampled chartsMarket PulsePrice quality/freshness is separate from transaction authority.

Edge demo auto uses selected compatible peers and internal simulation only where a peer is absent. A selected-but-unavailable peer fails. bundled-arena is an explicit choice to bypass peer composition for a demo. Neither establishes the live devnet path. The built-in payment flow does not automatically apply Accord or Switchyard policy simply because those packages are selected.

Selected but unavailable is an error

Missing selection, loaded-but-not-ready, wrong mode and unreachable provider are different faults. Preserve those distinctions in the UI. Never turn a disabled or failing selected provider into a new instance configured from application defaults.

External modes need their own implementation, authentication, network binding, durable state and conformance tests. The shared adapter schema does not cover every component that declares an external mode; see provider configuration before choosing it. Do not infer that an adapter URL names an existing hosted service.

Qualify the composition you will ship

Test one missing required peer, a wrong network, disabled writes, disabled Dispatch submission, declined approval and interrupted observation. Check that a selected unavailable peer is not replaced, a changed request under the same ID is rejected, and recovery does not need a newly created payer. Source/browser fixtures do not replace a rebuilt installed-device check.

Continue with the payment recipe, recovery and the individual Sidecar references.

↑ ↓ to navigate · Enter to open · Esc to close. Search stays in your browser.