@optimystic/db-core 0.14.1 → 0.16.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/blocks/block-store.d.ts +18 -1
- package/dist/src/blocks/block-store.d.ts.map +1 -1
- package/dist/src/blocks/helpers.d.ts +2 -2
- package/dist/src/blocks/helpers.d.ts.map +1 -1
- package/dist/src/blocks/helpers.js +2 -2
- package/dist/src/blocks/helpers.js.map +1 -1
- package/dist/src/btree/btree.d.ts +27 -6
- package/dist/src/btree/btree.d.ts.map +1 -1
- package/dist/src/btree/btree.js +104 -61
- package/dist/src/btree/btree.js.map +1 -1
- package/dist/src/chain/chain.d.ts.map +1 -1
- package/dist/src/chain/chain.js +11 -1
- package/dist/src/chain/chain.js.map +1 -1
- package/dist/src/cluster/index.d.ts +1 -0
- package/dist/src/cluster/index.d.ts.map +1 -1
- package/dist/src/cluster/index.js +1 -0
- package/dist/src/cluster/index.js.map +1 -1
- package/dist/src/cluster/membership.d.ts +49 -0
- package/dist/src/cluster/membership.d.ts.map +1 -0
- package/dist/src/cluster/membership.js +75 -0
- package/dist/src/cluster/membership.js.map +1 -0
- package/dist/src/cluster/structs.d.ts +50 -1
- package/dist/src/cluster/structs.d.ts.map +1 -1
- package/dist/src/cluster/structs.js +9 -1
- package/dist/src/cluster/structs.js.map +1 -1
- package/dist/src/cohort-topic/addressing.d.ts +8 -2
- package/dist/src/cohort-topic/addressing.d.ts.map +1 -1
- package/dist/src/cohort-topic/addressing.js +11 -3
- package/dist/src/cohort-topic/addressing.js.map +1 -1
- package/dist/src/cohort-topic/antidos/bootstrap-evidence.d.ts +13 -7
- package/dist/src/cohort-topic/antidos/bootstrap-evidence.d.ts.map +1 -1
- package/dist/src/cohort-topic/antidos/bootstrap-evidence.js +17 -6
- package/dist/src/cohort-topic/antidos/bootstrap-evidence.js.map +1 -1
- package/dist/src/cohort-topic/antidos/replay-guard.d.ts +17 -0
- package/dist/src/cohort-topic/antidos/replay-guard.d.ts.map +1 -1
- package/dist/src/cohort-topic/antidos/replay-guard.js +33 -0
- package/dist/src/cohort-topic/antidos/replay-guard.js.map +1 -1
- package/dist/src/cohort-topic/antidos/topic-budget.d.ts +7 -0
- package/dist/src/cohort-topic/antidos/topic-budget.d.ts.map +1 -1
- package/dist/src/cohort-topic/antidos/topic-budget.js +8 -2
- package/dist/src/cohort-topic/antidos/topic-budget.js.map +1 -1
- package/dist/src/cohort-topic/coldstart.d.ts +34 -14
- package/dist/src/cohort-topic/coldstart.d.ts.map +1 -1
- package/dist/src/cohort-topic/coldstart.js +25 -11
- package/dist/src/cohort-topic/coldstart.js.map +1 -1
- package/dist/src/cohort-topic/gossip/bus.d.ts +12 -1
- package/dist/src/cohort-topic/gossip/bus.d.ts.map +1 -1
- package/dist/src/cohort-topic/gossip/bus.js +27 -1
- package/dist/src/cohort-topic/gossip/bus.js.map +1 -1
- package/dist/src/cohort-topic/gossip/view.d.ts +8 -0
- package/dist/src/cohort-topic/gossip/view.d.ts.map +1 -1
- package/dist/src/cohort-topic/gossip/view.js +17 -1
- package/dist/src/cohort-topic/gossip/view.js.map +1 -1
- package/dist/src/cohort-topic/member-engine.d.ts +10 -3
- package/dist/src/cohort-topic/member-engine.d.ts.map +1 -1
- package/dist/src/cohort-topic/member-engine.js +29 -14
- package/dist/src/cohort-topic/member-engine.js.map +1 -1
- package/dist/src/cohort-topic/membership/publisher.d.ts +14 -7
- package/dist/src/cohort-topic/membership/publisher.d.ts.map +1 -1
- package/dist/src/cohort-topic/membership/publisher.js +15 -27
- package/dist/src/cohort-topic/membership/publisher.js.map +1 -1
- package/dist/src/cohort-topic/membership/verifier.d.ts +35 -0
- package/dist/src/cohort-topic/membership/verifier.d.ts.map +1 -1
- package/dist/src/cohort-topic/membership/verifier.js +88 -3
- package/dist/src/cohort-topic/membership/verifier.js.map +1 -1
- package/dist/src/cohort-topic/promotion.d.ts +7 -0
- package/dist/src/cohort-topic/promotion.d.ts.map +1 -1
- package/dist/src/cohort-topic/promotion.js +16 -2
- package/dist/src/cohort-topic/promotion.js.map +1 -1
- package/dist/src/cohort-topic/registration/renewal.d.ts +18 -0
- package/dist/src/cohort-topic/registration/renewal.d.ts.map +1 -1
- package/dist/src/cohort-topic/registration/renewal.js +54 -0
- package/dist/src/cohort-topic/registration/renewal.js.map +1 -1
- package/dist/src/cohort-topic/registration/types.d.ts +12 -0
- package/dist/src/cohort-topic/registration/types.d.ts.map +1 -1
- package/dist/src/cohort-topic/registration/types.js +14 -0
- package/dist/src/cohort-topic/registration/types.js.map +1 -1
- package/dist/src/cohort-topic/service.d.ts +4 -3
- package/dist/src/cohort-topic/service.d.ts.map +1 -1
- package/dist/src/cohort-topic/service.js +38 -12
- package/dist/src/cohort-topic/service.js.map +1 -1
- package/dist/src/cohort-topic/sig/payloads.d.ts +23 -7
- package/dist/src/cohort-topic/sig/payloads.d.ts.map +1 -1
- package/dist/src/cohort-topic/sig/payloads.js +22 -6
- package/dist/src/cohort-topic/sig/payloads.js.map +1 -1
- package/dist/src/cohort-topic/traffic.d.ts +6 -0
- package/dist/src/cohort-topic/traffic.d.ts.map +1 -1
- package/dist/src/cohort-topic/traffic.js +16 -1
- package/dist/src/cohort-topic/traffic.js.map +1 -1
- package/dist/src/cohort-topic/walk.d.ts +22 -7
- package/dist/src/cohort-topic/walk.d.ts.map +1 -1
- package/dist/src/cohort-topic/walk.js +78 -18
- package/dist/src/cohort-topic/walk.js.map +1 -1
- package/dist/src/cohort-topic/wire/codec.d.ts +3 -1
- package/dist/src/cohort-topic/wire/codec.d.ts.map +1 -1
- package/dist/src/cohort-topic/wire/codec.js +7 -1
- package/dist/src/cohort-topic/wire/codec.js.map +1 -1
- package/dist/src/cohort-topic/wire/index.d.ts +1 -1
- package/dist/src/cohort-topic/wire/index.d.ts.map +1 -1
- package/dist/src/cohort-topic/wire/index.js +1 -1
- package/dist/src/cohort-topic/wire/index.js.map +1 -1
- package/dist/src/cohort-topic/wire/payloads.d.ts +5 -4
- package/dist/src/cohort-topic/wire/payloads.d.ts.map +1 -1
- package/dist/src/cohort-topic/wire/payloads.js +14 -5
- package/dist/src/cohort-topic/wire/payloads.js.map +1 -1
- package/dist/src/cohort-topic/wire/primitives.d.ts +65 -0
- package/dist/src/cohort-topic/wire/primitives.d.ts.map +1 -0
- package/dist/src/cohort-topic/wire/primitives.js +173 -0
- package/dist/src/cohort-topic/wire/primitives.js.map +1 -0
- package/dist/src/cohort-topic/wire/types.d.ts +132 -5
- package/dist/src/cohort-topic/wire/types.d.ts.map +1 -1
- package/dist/src/cohort-topic/wire/validate.d.ts +15 -5
- package/dist/src/cohort-topic/wire/validate.d.ts.map +1 -1
- package/dist/src/cohort-topic/wire/validate.js +146 -123
- package/dist/src/cohort-topic/wire/validate.js.map +1 -1
- package/dist/src/collection/collection.d.ts +23 -12
- package/dist/src/collection/collection.d.ts.map +1 -1
- package/dist/src/collection/collection.js +111 -35
- package/dist/src/collection/collection.js.map +1 -1
- package/dist/src/collection/struct.d.ts +37 -2
- package/dist/src/collection/struct.d.ts.map +1 -1
- package/dist/src/collection/struct.js +16 -1
- package/dist/src/collection/struct.js.map +1 -1
- package/dist/src/collections/tree/tree.d.ts +18 -1
- package/dist/src/collections/tree/tree.d.ts.map +1 -1
- package/dist/src/collections/tree/tree.js +36 -6
- package/dist/src/collections/tree/tree.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/log/log.d.ts +26 -3
- package/dist/src/log/log.d.ts.map +1 -1
- package/dist/src/log/log.js +34 -7
- package/dist/src/log/log.js.map +1 -1
- package/dist/src/log/struct.d.ts +5 -4
- package/dist/src/log/struct.d.ts.map +1 -1
- package/dist/src/log/struct.js.map +1 -1
- package/dist/src/matchmaking/wire.d.ts +2 -1
- package/dist/src/matchmaking/wire.d.ts.map +1 -1
- package/dist/src/matchmaking/wire.js +13 -92
- package/dist/src/matchmaking/wire.js.map +1 -1
- package/dist/src/network/i-key-network.d.ts +9 -0
- package/dist/src/network/i-key-network.d.ts.map +1 -1
- package/dist/src/network/i-repo.d.ts +8 -0
- package/dist/src/network/i-repo.d.ts.map +1 -1
- package/dist/src/network/struct.d.ts +10 -0
- package/dist/src/network/struct.d.ts.map +1 -1
- package/dist/src/reactivity/push-state.d.ts.map +1 -1
- package/dist/src/reactivity/push-state.js +4 -33
- package/dist/src/reactivity/push-state.js.map +1 -1
- package/dist/src/reactivity/wire-validate.d.ts +7 -22
- package/dist/src/reactivity/wire-validate.d.ts.map +1 -1
- package/dist/src/reactivity/wire-validate.js +7 -73
- package/dist/src/reactivity/wire-validate.js.map +1 -1
- package/dist/src/reactivity/wire.js +3 -3
- package/dist/src/reactivity/wire.js.map +1 -1
- package/dist/src/testing/async-wait.d.ts +23 -0
- package/dist/src/testing/async-wait.d.ts.map +1 -0
- package/dist/src/testing/async-wait.js +42 -0
- package/dist/src/testing/async-wait.js.map +1 -0
- package/dist/src/testing/index.d.ts +3 -0
- package/dist/src/testing/index.d.ts.map +1 -0
- package/dist/src/testing/index.js +3 -0
- package/dist/src/testing/index.js.map +1 -0
- package/dist/src/testing/test-transactor.d.ts +44 -0
- package/dist/src/testing/test-transactor.d.ts.map +1 -0
- package/dist/src/testing/test-transactor.js +423 -0
- package/dist/src/testing/test-transactor.js.map +1 -0
- package/dist/src/transaction/actions-engine.d.ts +6 -3
- package/dist/src/transaction/actions-engine.d.ts.map +1 -1
- package/dist/src/transaction/actions-engine.js +8 -7
- package/dist/src/transaction/actions-engine.js.map +1 -1
- package/dist/src/transaction/coordinator.d.ts +43 -22
- package/dist/src/transaction/coordinator.d.ts.map +1 -1
- package/dist/src/transaction/coordinator.js +443 -178
- package/dist/src/transaction/coordinator.js.map +1 -1
- package/dist/src/transaction/errors.d.ts +82 -0
- package/dist/src/transaction/errors.d.ts.map +1 -0
- package/dist/src/transaction/errors.js +93 -0
- package/dist/src/transaction/errors.js.map +1 -0
- package/dist/src/transaction/index.d.ts +6 -3
- package/dist/src/transaction/index.d.ts.map +1 -1
- package/dist/src/transaction/index.js +4 -2
- package/dist/src/transaction/index.js.map +1 -1
- package/dist/src/transaction/operations-hash.d.ts +119 -0
- package/dist/src/transaction/operations-hash.d.ts.map +1 -0
- package/dist/src/transaction/operations-hash.js +180 -0
- package/dist/src/transaction/operations-hash.js.map +1 -0
- package/dist/src/transaction/read-dependency-collector.d.ts +43 -0
- package/dist/src/transaction/read-dependency-collector.d.ts.map +1 -0
- package/dist/src/transaction/read-dependency-collector.js +69 -0
- package/dist/src/transaction/read-dependency-collector.js.map +1 -0
- package/dist/src/transaction/session.d.ts +12 -3
- package/dist/src/transaction/session.d.ts.map +1 -1
- package/dist/src/transaction/session.js +35 -9
- package/dist/src/transaction/session.js.map +1 -1
- package/dist/src/transaction/transaction.d.ts +162 -1
- package/dist/src/transaction/transaction.d.ts.map +1 -1
- package/dist/src/transaction/transaction.js +85 -3
- package/dist/src/transaction/transaction.js.map +1 -1
- package/dist/src/transaction/validator.d.ts +3 -11
- package/dist/src/transaction/validator.d.ts.map +1 -1
- package/dist/src/transaction/validator.js +69 -28
- package/dist/src/transaction/validator.js.map +1 -1
- package/dist/src/transactor/network-transactor.d.ts +35 -0
- package/dist/src/transactor/network-transactor.d.ts.map +1 -1
- package/dist/src/transactor/network-transactor.js +146 -40
- package/dist/src/transactor/network-transactor.js.map +1 -1
- package/dist/src/transactor/transactor-source.d.ts +19 -5
- package/dist/src/transactor/transactor-source.d.ts.map +1 -1
- package/dist/src/transactor/transactor-source.js +43 -11
- package/dist/src/transactor/transactor-source.js.map +1 -1
- package/dist/src/transform/atomic-proxy.d.ts +35 -5
- package/dist/src/transform/atomic-proxy.d.ts.map +1 -1
- package/dist/src/transform/atomic-proxy.js +39 -7
- package/dist/src/transform/atomic-proxy.js.map +1 -1
- package/dist/src/transform/cache-source.d.ts +36 -5
- package/dist/src/transform/cache-source.d.ts.map +1 -1
- package/dist/src/transform/cache-source.js +84 -8
- package/dist/src/transform/cache-source.js.map +1 -1
- package/dist/src/transform/helpers.d.ts.map +1 -1
- package/dist/src/transform/helpers.js +8 -2
- package/dist/src/transform/helpers.js.map +1 -1
- package/dist/src/transform/tracker.d.ts +17 -2
- package/dist/src/transform/tracker.d.ts.map +1 -1
- package/dist/src/transform/tracker.js +66 -11
- package/dist/src/transform/tracker.js.map +1 -1
- package/dist/src/utility/backoff.d.ts +48 -0
- package/dist/src/utility/backoff.d.ts.map +1 -0
- package/dist/src/utility/backoff.js +60 -0
- package/dist/src/utility/backoff.js.map +1 -0
- package/dist/src/utility/pending.d.ts +1 -0
- package/dist/src/utility/pending.d.ts.map +1 -1
- package/dist/src/utility/pending.js +3 -1
- package/dist/src/utility/pending.js.map +1 -1
- package/package.json +4 -4
- package/src/blocks/block-store.ts +19 -1
- package/src/blocks/helpers.ts +3 -3
- package/src/btree/btree.ts +108 -63
- package/src/chain/chain.ts +11 -1
- package/src/cluster/index.ts +1 -0
- package/src/cluster/membership.ts +85 -0
- package/src/cluster/structs.ts +51 -1
- package/src/cohort-topic/addressing.ts +12 -4
- package/src/cohort-topic/antidos/bootstrap-evidence.ts +21 -9
- package/src/cohort-topic/antidos/replay-guard.ts +37 -0
- package/src/cohort-topic/antidos/topic-budget.ts +17 -2
- package/src/cohort-topic/coldstart.ts +48 -15
- package/src/cohort-topic/gossip/bus.ts +39 -2
- package/src/cohort-topic/gossip/view.ts +26 -1
- package/src/cohort-topic/member-engine.ts +36 -15
- package/src/cohort-topic/membership/publisher.ts +25 -33
- package/src/cohort-topic/membership/verifier.ts +119 -3
- package/src/cohort-topic/promotion.ts +23 -2
- package/src/cohort-topic/registration/renewal.ts +73 -1
- package/src/cohort-topic/registration/types.ts +15 -0
- package/src/cohort-topic/service.ts +41 -15
- package/src/cohort-topic/sig/payloads.ts +29 -9
- package/src/cohort-topic/traffic.ts +23 -1
- package/src/cohort-topic/walk.ts +95 -24
- package/src/cohort-topic/wire/codec.ts +12 -0
- package/src/cohort-topic/wire/index.ts +2 -0
- package/src/cohort-topic/wire/payloads.ts +14 -5
- package/src/cohort-topic/wire/primitives.ts +188 -0
- package/src/cohort-topic/wire/types.ts +136 -4
- package/src/cohort-topic/wire/validate.ts +168 -134
- package/src/collection/collection.ts +123 -40
- package/src/collection/struct.ts +44 -2
- package/src/collections/tree/tree.ts +42 -5
- package/src/index.ts +1 -0
- package/src/log/log.ts +37 -9
- package/src/log/struct.ts +5 -4
- package/src/matchmaking/wire.ts +25 -102
- package/src/network/i-key-network.ts +10 -0
- package/src/network/i-repo.ts +8 -0
- package/src/network/struct.ts +10 -0
- package/src/reactivity/push-state.ts +4 -37
- package/src/reactivity/wire-validate.ts +7 -81
- package/src/reactivity/wire.ts +3 -3
- package/src/testing/async-wait.ts +65 -0
- package/src/testing/index.ts +2 -0
- package/src/testing/test-transactor.ts +468 -0
- package/src/transaction/actions-engine.ts +8 -6
- package/src/transaction/coordinator.ts +498 -229
- package/src/transaction/errors.ts +91 -0
- package/src/transaction/index.ts +23 -3
- package/src/transaction/operations-hash.ts +196 -0
- package/src/transaction/read-dependency-collector.ts +78 -0
- package/src/transaction/session.ts +37 -9
- package/src/transaction/transaction.ts +211 -4
- package/src/transaction/validator.ts +73 -48
- package/src/transactor/network-transactor.ts +164 -49
- package/src/transactor/transactor-source.ts +47 -12
- package/src/transform/atomic-proxy.ts +92 -49
- package/src/transform/cache-source.ts +87 -9
- package/src/transform/helpers.ts +8 -2
- package/src/transform/tracker.ts +69 -11
- package/src/utility/backoff.ts +95 -0
- package/src/utility/pending.ts +3 -1
- package/src/transaction/context.ts +0 -103
|
@@ -27,6 +27,20 @@ export interface RegisterV1 {
|
|
|
27
27
|
ttl: number;
|
|
28
28
|
/** True on a root cold-start request. */
|
|
29
29
|
bootstrap?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Follow-on cold-start request: set on the **dedicated re-issue** the participant sends after a
|
|
32
|
+
* `Promoted` redirect target answered {@link RegisterResult} `no_state` (the redirect points at a
|
|
33
|
+
* tier-`(d+1)` child cohort that does not exist yet). It tells that cold child "I am here because
|
|
34
|
+
* your parent redirected me — instantiate", which drives the cold-start gate
|
|
35
|
+
* (`shouldInstantiate({ followOn, … })`) exactly as `bootstrap` drives it at the root. Constraints:
|
|
36
|
+
* always `treeTier >= 1` (a follow-on is a deeper-than-root growth point, never the root); mutually
|
|
37
|
+
* exclusive with {@link bootstrap} and {@link probe} (the walk sets at most one). Because a wire flag is
|
|
38
|
+
* participant-forgeable, safety does NOT come from its provenance: a `followOn: true` register is gated
|
|
39
|
+
* by the **same** `bootstrapEvidence` policy a `bootstrap: true` cold-root register passes (§Anti-DoS),
|
|
40
|
+
* so it carries the identical proof in {@link bootstrapEvidence} and pays the identical anti-abuse cost.
|
|
41
|
+
* Covered by `signature` (appended to `registerSigningPayload`) so a MITM cannot strip or flip it.
|
|
42
|
+
*/
|
|
43
|
+
followOn?: boolean;
|
|
30
44
|
/**
|
|
31
45
|
* Read-only lookup probe: classify + return the cohort snapshot without admitting (no record, no
|
|
32
46
|
* arrival, no promotion trigger, no topic-budget touch, and **never** a cold-start instantiation /
|
|
@@ -41,9 +55,11 @@ export interface RegisterV1 {
|
|
|
41
55
|
appPayload?: string;
|
|
42
56
|
/**
|
|
43
57
|
* Cold-start bootstrap-evidence envelope, base64url (a `BootstrapEvidenceEnvelopeV1` — see
|
|
44
|
-
* `../antidos/bootstrap-evidence-envelope.js`). Present
|
|
45
|
-
*
|
|
46
|
-
*
|
|
58
|
+
* `../antidos/bootstrap-evidence-envelope.js`). Present on a `bootstrap: true` root register **or** a
|
|
59
|
+
* `followOn: true` deeper-tier re-issue — both are cold-start requests gated by the identical evidence
|
|
60
|
+
* policy (§Anti-DoS), so both carry this proof; carries the tier-dependent proof a cold cohort demands
|
|
61
|
+
* (proof-of-work / reputation endorsement / signed parent reference — §Anti-DoS). This is a
|
|
62
|
+
* **dedicated** field, NOT `appPayload`: the cohort
|
|
47
63
|
* copies `appPayload` verbatim into the registration's `appState` and replicates it cluster-wide,
|
|
48
64
|
* whereas the bootstrap evidence is parsed-and-checked by the substrate, **covered by `signature`**
|
|
49
65
|
* (so a MITM cannot strip or swap it), and never stored as appState. Empty string is treated as
|
|
@@ -126,6 +142,51 @@ export interface RenewReplyV1 {
|
|
|
126
142
|
newBackups?: string[];
|
|
127
143
|
cohortEpoch?: string;
|
|
128
144
|
}
|
|
145
|
+
/**
|
|
146
|
+
* Child cohort → parent cohort link: "I am the tier-`d` cohort at {@link childCohortCoord}; record me as
|
|
147
|
+
* your child." A freshly cold-started deeper forwarder sends this to its tier-`(d − 1)` parent (routed the
|
|
148
|
+
* same way a participant register is, over `routeAndAct` to the parent coord) so the parent authenticates,
|
|
149
|
+
* records the child, and acks — replacing the interim plain participant-register the child used to send.
|
|
150
|
+
*/
|
|
151
|
+
export interface ChildLinkV1 {
|
|
152
|
+
v: 1;
|
|
153
|
+
/** Topic id, 32 bytes, base64url. */
|
|
154
|
+
topicId: string;
|
|
155
|
+
/**
|
|
156
|
+
* The child cohort's served coord `coord_d(childParticipantCoord, topicId)`, 32 bytes base64url — the
|
|
157
|
+
* coord the parent verifies the threshold signature against (it looks up the child cohort's
|
|
158
|
+
* {@link MembershipCertV1} at this coord).
|
|
159
|
+
*/
|
|
160
|
+
childCohortCoord: string;
|
|
161
|
+
/**
|
|
162
|
+
* A representative participant coord in the child's prefix-shard (the seed the child engine was
|
|
163
|
+
* instantiated at). Lets the parent *deterministically bind the parent-child relationship*: it recomputes
|
|
164
|
+
* `coord_childTier(childParticipantCoord, topicId) == childCohortCoord` AND
|
|
165
|
+
* `coord_(childTier-1)(childParticipantCoord, topicId) == this parent's served coord`. Any participant
|
|
166
|
+
* sharing the child's `d·log₂F`-bit prefix yields the same pair, so it is a representative, not an
|
|
167
|
+
* identity. 32 bytes base64url.
|
|
168
|
+
*/
|
|
169
|
+
childParticipantCoord: string;
|
|
170
|
+
/** Child tree tier `d` (always ≥ 1 — the root has no parent to link to). Parent serves `d − 1`. */
|
|
171
|
+
childTier: number;
|
|
172
|
+
/** Op capacity tier T0..T3 (stamped so a real parent validates the frame's tier). */
|
|
173
|
+
tier: number;
|
|
174
|
+
/** Unix ms; the parent's per-child freshness/ordering key (strictly-newer wins). */
|
|
175
|
+
effectiveAt: number;
|
|
176
|
+
/** Child cohort threshold signature over `childLinkSigningPayload`, base64url. Empty in the key-less interim. */
|
|
177
|
+
thresholdSig: string;
|
|
178
|
+
/** Signing members' PeerIds, `>= minSigs`, base64url. Empty in the key-less interim. */
|
|
179
|
+
signers: string[];
|
|
180
|
+
/** Child cohort epoch, 32 bytes base64url (the epoch the threshold sig was collected under). */
|
|
181
|
+
cohortEpoch: string;
|
|
182
|
+
}
|
|
183
|
+
/** Parent → child ack. `linked` flips the child `awaiting_parent → serving`; `rejected` keeps it awaiting. */
|
|
184
|
+
export interface ChildLinkReplyV1 {
|
|
185
|
+
v: 1;
|
|
186
|
+
result: "linked" | "rejected";
|
|
187
|
+
/** Human-readable, optional. */
|
|
188
|
+
reason?: string;
|
|
189
|
+
}
|
|
129
190
|
/** Threshold-signed promotion notice. */
|
|
130
191
|
export interface PromotionNoticeV1 {
|
|
131
192
|
v: 1;
|
|
@@ -133,6 +194,15 @@ export interface PromotionNoticeV1 {
|
|
|
133
194
|
fromTier: number;
|
|
134
195
|
/** Typically `fromTier + 1`. */
|
|
135
196
|
toTier: number;
|
|
197
|
+
/**
|
|
198
|
+
* The served coord `coord_d(participantCoord, topicId)` the deciding cohort sits at, 32 bytes, base64url
|
|
199
|
+
* — the same value as that cohort's {@link MembershipCertV1.cohortCoord}, which the threshold signature
|
|
200
|
+
* verifies against. The receiver routes the notice to the local engine for exactly this coord rather than
|
|
201
|
+
* scanning for the first engine matching `(topic, tier)`, so a node serving several sibling cohorts for
|
|
202
|
+
* one `(topic, tier)` (possible at `d ≥ 1`, where each cohort has its own served coord) applies the notice
|
|
203
|
+
* to the cohort that actually produced it. Covered by the threshold signature — rewriting it breaks verification.
|
|
204
|
+
*/
|
|
205
|
+
cohortCoord: string;
|
|
136
206
|
/** Unix ms. */
|
|
137
207
|
effectiveAt: number;
|
|
138
208
|
/** Cohort threshold signature, base64url. */
|
|
@@ -148,6 +218,13 @@ export interface DemotionNoticeV1 {
|
|
|
148
218
|
tier: number;
|
|
149
219
|
/** 32 bytes, base64url. */
|
|
150
220
|
parentCohortCoord: string;
|
|
221
|
+
/**
|
|
222
|
+
* The served coord `coord_d(participantCoord, topicId)` the deciding cohort sits at, 32 bytes, base64url —
|
|
223
|
+
* the same served-coord concept as {@link PromotionNoticeV1.cohortCoord}. Distinct from
|
|
224
|
+
* {@link parentCohortCoord} (the tier-`(d − 1)` parent this demotion hands off to): `cohortCoord` names the
|
|
225
|
+
* *demoting* cohort and is what the receiver routes + verifies by. Covered by the threshold signature.
|
|
226
|
+
*/
|
|
227
|
+
cohortCoord: string;
|
|
151
228
|
effectiveAt: number;
|
|
152
229
|
thresholdSig: string;
|
|
153
230
|
signers: string[];
|
|
@@ -183,6 +260,32 @@ export interface GossipRecordRefV1 {
|
|
|
183
260
|
topicId: string;
|
|
184
261
|
/** Participant peer id, base64url. */
|
|
185
262
|
participantId: string;
|
|
263
|
+
/**
|
|
264
|
+
* Unix ms of the evicted record's most-recent ping (mirrors {@link GossipRecordV1.lastPing}). The
|
|
265
|
+
* receiver's freshness guard for the delete: a held record newer than this stamp is a re-registration
|
|
266
|
+
* that arrived after the eviction was produced, so the stale eviction is ignored rather than deleting
|
|
267
|
+
* the fresh record. Required — every real eviction has this on hand from the held record.
|
|
268
|
+
*/
|
|
269
|
+
lastPing: number;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* A child-cohort link/unlink advertised in cohort gossip, for cross-member convergence of the child set.
|
|
273
|
+
*
|
|
274
|
+
* FRET routes a {@link ChildLinkV1} to a **single** parent member, so only that member's child registry
|
|
275
|
+
* records the child; siblings would read `childCohortCount == 0`. Gossiping the child **set** (a converged
|
|
276
|
+
* union) closes that gap: a `childLinks` ref replicates a recorded child to every parent member, and a
|
|
277
|
+
* `childUnlinks` ref replicates a released (demoted) child. Merge is **last-writer-wins by
|
|
278
|
+
* {@link effectiveAt}** per `(topicId, childCohortCoord)` — a link and a later unlink converge regardless of
|
|
279
|
+
* arrival order, and re-delivery is idempotent. The child set is keyed by child coord, not the parent's
|
|
280
|
+
* epoch, so a parent membership rotation never drops it.
|
|
281
|
+
*/
|
|
282
|
+
export interface ChildLinkRefV1 {
|
|
283
|
+
/** Topic id, 32 bytes, base64url. */
|
|
284
|
+
topicId: string;
|
|
285
|
+
/** The child cohort's served coord, 32 bytes, base64url. */
|
|
286
|
+
childCohortCoord: string;
|
|
287
|
+
/** Unix ms — the link/unlink effectiveAt; last-writer-wins per `(topicId, childCohortCoord)`. */
|
|
288
|
+
effectiveAt: number;
|
|
186
289
|
}
|
|
187
290
|
/** Intra-cohort gossip: willingness vector, load barometer, exact per-topic summaries, record deltas. */
|
|
188
291
|
export interface CohortGossipV1 {
|
|
@@ -196,6 +299,14 @@ export interface CohortGossipV1 {
|
|
|
196
299
|
*/
|
|
197
300
|
coord: string;
|
|
198
301
|
cohortEpoch: string;
|
|
302
|
+
/**
|
|
303
|
+
* The tree tier `d` the originating cohort sits at (the coord encodes the tier-shard, but a coord is a
|
|
304
|
+
* hash and cannot be inverted to recover `d`). Carried so a cold sibling that instantiates its engine
|
|
305
|
+
* off a co-member's frame (§Cold-start instantiation) adopts the right tier. Always well-defined: the
|
|
306
|
+
* only members that originate a frame already know their `treeTier`, and every member of a coord shares
|
|
307
|
+
* one `treeTier` by construction. Covered by {@link signature} so it cannot be spoofed.
|
|
308
|
+
*/
|
|
309
|
+
treeTier: number;
|
|
199
310
|
/** 4 bits T0..T3, hex. */
|
|
200
311
|
willingnessBits: string;
|
|
201
312
|
/** 4 entries, 0..7 per tier. */
|
|
@@ -211,6 +322,19 @@ export interface CohortGossipV1 {
|
|
|
211
322
|
records?: GossipRecordV1[];
|
|
212
323
|
/** Registrations this member evicted (stale), so all members converge on the active set. */
|
|
213
324
|
evicted?: GossipRecordRefV1[];
|
|
325
|
+
/**
|
|
326
|
+
* Child cohorts this member freshly recorded (links), replicated so every parent member converges on the
|
|
327
|
+
* same child set. Absent when this gossip carries no child-link changes. Merge is last-writer-wins by
|
|
328
|
+
* {@link ChildLinkRefV1.effectiveAt} per `(topicId, childCohortCoord)`; a link sets the child linked.
|
|
329
|
+
*/
|
|
330
|
+
childLinks?: ChildLinkRefV1[];
|
|
331
|
+
/**
|
|
332
|
+
* Child cohorts this member released (a demoted child unrecorded), replicated so every parent member drops
|
|
333
|
+
* it and can shrink in turn. Absent when this gossip carries no child-unlink changes. Same last-writer-wins
|
|
334
|
+
* merge as {@link childLinks}; an unlink sets the child unlinked. A link@t1 then unlink@t2 (t2 > t1)
|
|
335
|
+
* converges to unlinked regardless of arrival order.
|
|
336
|
+
*/
|
|
337
|
+
childUnlinks?: ChildLinkRefV1[];
|
|
214
338
|
timestamp: number;
|
|
215
339
|
signature: string;
|
|
216
340
|
}
|
|
@@ -234,8 +358,11 @@ export interface CohortTopicSummary {
|
|
|
234
358
|
* - `rotation` — an epoch hand-off: the endorser attests it was a member of the cohort at the **prior**
|
|
235
359
|
* epoch carried as `cohortEpoch` (the predecessor cohort threshold-signs the successor cert's payload),
|
|
236
360
|
* so the gate checks *prior*-epoch membership rather than current. See `cohort-topic-trust-anchor-rotation-production`.
|
|
361
|
+
* - `childlink` — a child cohort signs a {@link ChildLinkV1} over its **own** served coord at its current
|
|
362
|
+
* epoch (identical endorsement shape to `promotion`/`demotion`: share the current cohort + epoch around
|
|
363
|
+
* `coord`); the parent verifies it against the child cohort's cert before recording the child.
|
|
237
364
|
*/
|
|
238
|
-
export type SignKind = "membership" | "promotion" | "demotion" | "rotation";
|
|
365
|
+
export type SignKind = "membership" | "promotion" | "demotion" | "rotation" | "childlink";
|
|
239
366
|
/**
|
|
240
367
|
* Intra-cohort sign request (`/optimystic/cohort-topic/1.0.0/sign`). A member assembling a `k − x`
|
|
241
368
|
* threshold signature dials each cohort member with this; the member endorses by Ed25519-signing the
|
|
@@ -300,5 +427,5 @@ export interface MembershipCertV1 {
|
|
|
300
427
|
rotationSigners?: string[];
|
|
301
428
|
}
|
|
302
429
|
/** Discriminated union over every V1 message carried by the cohort-topic protocols. */
|
|
303
|
-
export type CohortMessageV1 = RegisterV1 | RegisterReplyV1 | RenewV1 | RenewReplyV1 | PromotionNoticeV1 | DemotionNoticeV1 | CohortGossipV1 | MembershipCertV1 | SignRequestV1 | SignReplyOkV1 | SignReplyRefusedV1;
|
|
430
|
+
export type CohortMessageV1 = RegisterV1 | RegisterReplyV1 | RenewV1 | RenewReplyV1 | ChildLinkV1 | ChildLinkReplyV1 | PromotionNoticeV1 | DemotionNoticeV1 | CohortGossipV1 | MembershipCertV1 | SignRequestV1 | SignReplyOkV1 | SignReplyRefusedV1;
|
|
304
431
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/cohort-topic/wire/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,+EAA+E;AAC/E,MAAM,WAAW,UAAU;IAC1B,CAAC,EAAE,CAAC,CAAC;IACL,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,gBAAgB,EAAE,MAAM,CAAC;IACzB,0DAA0D;IAC1D,GAAG,EAAE,MAAM,CAAC;IACZ,yCAAyC;IACzC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/cohort-topic/wire/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,17 +7,27 @@
|
|
|
7
7
|
* as base64url, or an out-of-range numeric. Validators never return partial data — they either
|
|
8
8
|
* narrow cleanly or throw.
|
|
9
9
|
*/
|
|
10
|
-
import type { CohortGossipV1, DemotionNoticeV1, MembershipCertV1, PromotionNoticeV1, RegisterReplyV1, RegisterV1, RenewReplyV1, RenewV1, SignRequestV1, SignReplyV1 } from "./types.js";
|
|
11
|
-
|
|
12
|
-
export declare class CohortWireError extends Error {
|
|
13
|
-
constructor(message: string);
|
|
14
|
-
}
|
|
10
|
+
import type { ChildLinkReplyV1, ChildLinkV1, CohortGossipV1, DemotionNoticeV1, MembershipCertV1, PromotionNoticeV1, RegisterReplyV1, RegisterV1, RenewReplyV1, RenewV1, SignRequestV1, SignReplyV1 } from "./types.js";
|
|
11
|
+
export { CohortWireError } from "./primitives.js";
|
|
15
12
|
export declare function validateRegisterV1(value: unknown): RegisterV1;
|
|
16
13
|
export declare function validateRegisterReplyV1(value: unknown): RegisterReplyV1;
|
|
17
14
|
export declare function validateRenewV1(value: unknown): RenewV1;
|
|
18
15
|
export declare function validateRenewReplyV1(value: unknown): RenewReplyV1;
|
|
19
16
|
export declare function validatePromotionNoticeV1(value: unknown): PromotionNoticeV1;
|
|
20
17
|
export declare function validateDemotionNoticeV1(value: unknown): DemotionNoticeV1;
|
|
18
|
+
/**
|
|
19
|
+
* Validate a {@link ChildLinkV1}. Enforces `childTier >= 1` (the root never links), `tier` in 0..3, and
|
|
20
|
+
* well-formed base64url on every byte field. The hash-derived fields (`topicId` / `childCohortCoord` /
|
|
21
|
+
* `cohortEpoch`) are additionally length-checked to exactly 32 bytes (each is a SHA-256 truncation); the
|
|
22
|
+
* `childParticipantCoord` follows the lenient `RegisterV1` convention (base64url only — a participant
|
|
23
|
+
* coord is not always 32 raw bytes, e.g. a multihash-encoded peer id in tests). When `minSigs`
|
|
24
|
+
* is supplied AND the frame carries a threshold signature (`thresholdSig` non-empty), `signers.length` must
|
|
25
|
+
* be `>= minSigs`; a key-less-interim frame carries neither, so that cross-field bound is skipped. `minSigs`
|
|
26
|
+
* is optional so a bare structural decode (no quorum context) still narrows the frame.
|
|
27
|
+
*/
|
|
28
|
+
export declare function validateChildLinkV1(value: unknown, minSigs?: number): ChildLinkV1;
|
|
29
|
+
/** Validate a {@link ChildLinkReplyV1}: `result` in `linked | rejected`, optional human-readable `reason`. */
|
|
30
|
+
export declare function validateChildLinkReplyV1(value: unknown): ChildLinkReplyV1;
|
|
21
31
|
export declare function validateCohortGossipV1(value: unknown): CohortGossipV1;
|
|
22
32
|
export declare function validateSignRequestV1(value: unknown): SignRequestV1;
|
|
23
33
|
export declare function validateSignReplyV1(value: unknown): SignReplyV1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../../src/cohort-topic/wire/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../../src/cohort-topic/wire/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAoBH,OAAO,KAAK,EAEX,gBAAgB,EAChB,WAAW,EACX,cAAc,EAEd,gBAAgB,EAGhB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EAEf,UAAU,EACV,YAAY,EACZ,OAAO,EAEP,aAAa,EACb,WAAW,EAEX,MAAM,YAAY,CAAC;AAMpB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAoClD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAkD7D;AAcD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CA4BvE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAevD;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAiBjE;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,CAoB3E;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAezE;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,CAyBjF;AAED,8GAA8G;AAC9G,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAUzE;AA2DD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAmErE;AAID,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAWnE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAgB/D;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAmBzE"}
|