commonware-reshare
Reshare a threshold secret over an epoched log.
CLI
The example has one binary with three subcommands:
setup creates every validator-* directory and writes node and network
config. By default, it also performs a trusted threshold setup, writes the
genesis EpochInfo, and seeds each active epoch-0 player with its private
share.
Use setup --bootstrap dkg for deployments that want the initial secret
generated by protocol. In this mode, setup writes only node and network config
and prints DKG commands only for the epoch-0 committee.
dkg runs the one-shot glue DKG bootstrap for deployments that want the initial
secret generated by protocol instead of trusted setup. Only the epoch-0 players
run it because only they receive shares. After DKG completes, the generated
genesis.json is written into every generated validator directory so all
validators can start from the same genesis.
validator starts the application chain, stateful QMDB, continuous reshare, DKG
orchestrator, DKG anchor, and stateful probe.
Node Layout
Each validator owns one directory under the configured data directory:
data/
validator-0/
node.json
network.json
genesis.json
secrets.json
runtime/
node.json contains the node's Ed25519 signing key and listen/dial addresses.
network.json contains the ordered participant list, fixed committee size, and
peer dial addresses. genesis.json is written by setup or dkg and then
consumed by validator. secrets.json is the file-backed DKG secret store.
runtime/ is the Commonware storage root for all blob partitions used by that
node.
Committees rotate deterministically: for epoch E, the committee starts at
offset E % participants.len() and takes committee_size consecutive
participants with wraparound.
The application state is intentionally tiny: one any::unordered::fixed QMDB,
one fixed key, and each non-genesis block writes its height to that key. Genesis
carries the epoch-0 EpochInfo.
State Sync
validator --state-sync is only for a new late joiner whose key is already in a
future committee. It asks peers for a finalized anchor, uses stateful::probe to
select a floor, and state-syncs QMDB from that floor before normal processing.
Do not use --state-sync as a normal restart flag. A restart recovers from
local storage. A player that misses its private dealings cannot recover them by
syncing: the ceremony completes without it and publicly reveals its share.
Limits
Generated data from older versions of this example is not migrated. Recreate the
data/validator-* directories when switching to this glue-based example.