Skip to main content

Overview

Three properties. One protocol.

Prior distributed-ledger systems achieve at most two of the following three properties simultaneously:

  1. Anonymity to peers — submission direction, transfer amount, or contract terms are not linkable to the submitting party by any on-chain query
  2. Auditable aggregates — any third party can verify the tally, conservation invariant, or governance result without trusting the operator
  3. Recovery without memorized secrets — a participant can recover their own record, and a lawful authority can compel individual attribution, without a password, seed phrase, or any value the participant was asked to memorize

shyware achieves all three simultaneously — through write architecture, not cryptography. The same anonymous two-list state machine underlies five product embodiments across regulated domains without re-engineering the trust model for each one.

note

Trustlessness — operator-purge prevention — is a baseline property of distributed ledgers generally, not a shyware innovation. A multi-node deployment provides it through BFT consensus. Any deployment (including a private ledger) provides it when OtelTelemetryInterface is configured with an externally-managed backend (CloudWatch, X-Ray, Datadog) — the log provider controls write finality, not the operator. A deployment running NoopTelemetryInterface has no external audit trail and is not trustless.


How it works

Every submission is split at write time by a BFT ABCI state machine:

List 1 — anonymous submission record
ballot_id = H(random nonce) ← direction/amount/choice. No identity.

List 2 — participant registry record
H(identity ‖ scoping_id) ← who participated. No direction or terms.

No join key between List 1 and List 2 is ever written to the ledger. At period close, the count-match invariant |L1| = |L2| is enforced and an HSM-signed dual Merkle root attestation is committed — one root over the anonymous records, one over the identity hashes, computed from disjoint element sets.

Any observer can verify aggregate correctness using only the HSM's public key. Individual attribution requires the protected off-chain linkage store, accessible only under lawful process.


Thirteen embodiments

The same state machine is governed by a versioned shyconfig manifest. Each embodiment declares its own authority model, identity mode, signing requirements, and deployment posture — and has its own SDK client with domain-specific method names.

Contract versionDomainAuthority modelSDK client
shyvoting-v1Anonymous elections and referenda4-party count-matchvotingClient
shywire-v1Private value transfer4-party count-matchwireClient
shycustody-v1Physical commodity custody4-party count-matchcustodyClient
shycontracts-v1Anonymous smart contracts4-party count-matchcontractsClient
shyshares-v1Weighted DAO governance4-party count-matchsharesClient
shybets-v1Anonymous event betting4-party count-matchbetsClient
shylots-v1Sealed-bid auctions4-party count-matchlotsClient
shyrest-v1Informant stream4-party count-matchrestClient
shystore-v1Health record vault3-party sealer-governedstoreClient
shystore-v1Credential vault / authenticator3-party sealer-governedstoreClient
shychat-v1Confidential mailbox3-party sealer-governedchatClient
shybrowser-v1Browser analytics3-party sealer-governedbrowserClient
shystream-v1Private streaming3-party sealer-governedstreamClient

shywire is the anonymous transfer rail shared by shycustody, shycontracts, shyshares, shybets, and shylots. Count-match embodiments expose TxTypeAuthorityRescind for two-party threshold erasure. Sealer-governed embodiments have no rescission pathway — erasure means the operator deletes the sealer key, making sealed payloads permanently undecryptable.


The SDK

The shyware web SDK (@shyware/sdk) is one client module per embodiment. Each is initialized from a shyconfig manifest and exposes a consistent initialize / build / submit interface with domain-specific method names.

// Count-match (voting, wire, custody, contracts, shares, bets, lots, rest)
import { initializeFromShyConfig } from '@shyware/sdk/clients/voting'
const client = initializeFromShyConfig(shyconfig, { getAuthHeaders })
await client.voteSubmission({ scopingId: pollId, payload: 'yes', personId })

// Count-match with transfer rail (wire)
import { initializeFromShyConfig } from '@shyware/sdk/clients/wire'
const client = initializeFromShyConfig(shyconfig, { getAuthHeaders })
await client.wireSubmission({ scopingId: assetId, senderCommitment, recipientCommitment, amount })

// Sealer-governed (store, chat, browser, stream)
import { initializeFromShyConfig } from '@shyware/sdk/clients/store'
const client = initializeFromShyConfig(shyconfig, { getAuthHeaders, deriveSealerKey, signMessage })
await client.storeSubmission({ scopingId: bucketId, plaintext, category })

The Go runtime is the ABCI state machine, signing layer, and ZK verifier. The web SDK communicates with it through the REST API. See the SDK overview and adapters reference for integration details.


Current posture

This docs site is intentionally compact while the fuller SDK reference and deployment materials are being staged for public release. The underlying protocol, embodiment examples, and integration guides are being organized into a cleaner public packet.

Request access

For pilot conversations, private walkthroughs, or licensing inquiries: legal@shyware.fyi