@optimystic/db-p2p 0.13.4 → 0.14.0
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/README.md +6 -6
- package/dist/src/cluster/block-transfer-service.d.ts +67 -8
- package/dist/src/cluster/block-transfer-service.d.ts.map +1 -1
- package/dist/src/cluster/block-transfer-service.js +101 -62
- package/dist/src/cluster/block-transfer-service.js.map +1 -1
- package/dist/src/cluster/client.d.ts +18 -1
- package/dist/src/cluster/client.d.ts.map +1 -1
- package/dist/src/cluster/client.js +55 -39
- package/dist/src/cluster/client.js.map +1 -1
- package/dist/src/cluster/cluster-error.d.ts +38 -0
- package/dist/src/cluster/cluster-error.d.ts.map +1 -0
- package/dist/src/cluster/cluster-error.js +51 -0
- package/dist/src/cluster/cluster-error.js.map +1 -0
- package/dist/src/cluster/cluster-repo.d.ts +135 -3
- package/dist/src/cluster/cluster-repo.d.ts.map +1 -1
- package/dist/src/cluster/cluster-repo.js +333 -58
- package/dist/src/cluster/cluster-repo.js.map +1 -1
- package/dist/src/cluster/commit-cert.d.ts +63 -0
- package/dist/src/cluster/commit-cert.d.ts.map +1 -0
- package/dist/src/cluster/commit-cert.js +108 -0
- package/dist/src/cluster/commit-cert.js.map +1 -0
- package/dist/src/cluster/service.d.ts +46 -11
- package/dist/src/cluster/service.d.ts.map +1 -1
- package/dist/src/cluster/service.js +97 -33
- package/dist/src/cluster/service.js.map +1 -1
- package/dist/src/cluster/spread-on-churn.d.ts +13 -0
- package/dist/src/cluster/spread-on-churn.d.ts.map +1 -1
- package/dist/src/cluster/spread-on-churn.js +34 -4
- package/dist/src/cluster/spread-on-churn.js.map +1 -1
- package/dist/src/cohort-topic/bootstrap-evidence-builder.d.ts +59 -0
- package/dist/src/cohort-topic/bootstrap-evidence-builder.d.ts.map +1 -0
- package/dist/src/cohort-topic/bootstrap-evidence-builder.js +79 -0
- package/dist/src/cohort-topic/bootstrap-evidence-builder.js.map +1 -0
- package/dist/src/cohort-topic/bootstrap-evidence-verifiers.d.ts +81 -0
- package/dist/src/cohort-topic/bootstrap-evidence-verifiers.d.ts.map +1 -0
- package/dist/src/cohort-topic/bootstrap-evidence-verifiers.js +93 -0
- package/dist/src/cohort-topic/bootstrap-evidence-verifiers.js.map +1 -0
- package/dist/src/cohort-topic/bootstrap-parent-reference.d.ts +108 -0
- package/dist/src/cohort-topic/bootstrap-parent-reference.d.ts.map +1 -0
- package/dist/src/cohort-topic/bootstrap-parent-reference.js +108 -0
- package/dist/src/cohort-topic/bootstrap-parent-reference.js.map +1 -0
- package/dist/src/cohort-topic/change-bridge.d.ts +65 -0
- package/dist/src/cohort-topic/change-bridge.d.ts.map +1 -0
- package/dist/src/cohort-topic/change-bridge.js +76 -0
- package/dist/src/cohort-topic/change-bridge.js.map +1 -0
- package/dist/src/cohort-topic/cohort-gossip-driver.d.ts +74 -0
- package/dist/src/cohort-topic/cohort-gossip-driver.d.ts.map +1 -0
- package/dist/src/cohort-topic/cohort-gossip-driver.js +87 -0
- package/dist/src/cohort-topic/cohort-gossip-driver.js.map +1 -0
- package/dist/src/cohort-topic/cohort-gossip-transport.d.ts +42 -0
- package/dist/src/cohort-topic/cohort-gossip-transport.d.ts.map +1 -0
- package/dist/src/cohort-topic/cohort-gossip-transport.js +57 -0
- package/dist/src/cohort-topic/cohort-gossip-transport.js.map +1 -0
- package/dist/src/cohort-topic/fret-trust-anchor.d.ts +100 -0
- package/dist/src/cohort-topic/fret-trust-anchor.d.ts.map +1 -0
- package/dist/src/cohort-topic/fret-trust-anchor.js +115 -0
- package/dist/src/cohort-topic/fret-trust-anchor.js.map +1 -0
- package/dist/src/cohort-topic/host.d.ts +573 -0
- package/dist/src/cohort-topic/host.d.ts.map +1 -0
- package/dist/src/cohort-topic/host.js +1460 -0
- package/dist/src/cohort-topic/host.js.map +1 -0
- package/dist/src/cohort-topic/index.d.ts +14 -0
- package/dist/src/cohort-topic/index.d.ts.map +1 -0
- package/dist/src/cohort-topic/index.js +14 -0
- package/dist/src/cohort-topic/index.js.map +1 -0
- package/dist/src/cohort-topic/membership-publish-sink.d.ts +14 -0
- package/dist/src/cohort-topic/membership-publish-sink.d.ts.map +1 -0
- package/dist/src/cohort-topic/membership-publish-sink.js +17 -0
- package/dist/src/cohort-topic/membership-publish-sink.js.map +1 -0
- package/dist/src/cohort-topic/membership-source.d.ts +36 -0
- package/dist/src/cohort-topic/membership-source.d.ts.map +1 -0
- package/dist/src/cohort-topic/membership-source.js +58 -0
- package/dist/src/cohort-topic/membership-source.js.map +1 -0
- package/dist/src/cohort-topic/peer-codec.d.ts +18 -0
- package/dist/src/cohort-topic/peer-codec.d.ts.map +1 -0
- package/dist/src/cohort-topic/peer-codec.js +26 -0
- package/dist/src/cohort-topic/peer-codec.js.map +1 -0
- package/dist/src/cohort-topic/peer-sig.d.ts +52 -0
- package/dist/src/cohort-topic/peer-sig.d.ts.map +1 -0
- package/dist/src/cohort-topic/peer-sig.js +83 -0
- package/dist/src/cohort-topic/peer-sig.js.map +1 -0
- package/dist/src/cohort-topic/protocols.d.ts +49 -0
- package/dist/src/cohort-topic/protocols.d.ts.map +1 -0
- package/dist/src/cohort-topic/protocols.js +58 -0
- package/dist/src/cohort-topic/protocols.js.map +1 -0
- package/dist/src/cohort-topic/reactivity-membership-gate.d.ts +49 -0
- package/dist/src/cohort-topic/reactivity-membership-gate.d.ts.map +1 -0
- package/dist/src/cohort-topic/reactivity-membership-gate.js +42 -0
- package/dist/src/cohort-topic/reactivity-membership-gate.js.map +1 -0
- package/dist/src/cohort-topic/size-estimator.d.ts +16 -0
- package/dist/src/cohort-topic/size-estimator.d.ts.map +1 -0
- package/dist/src/cohort-topic/size-estimator.js +16 -0
- package/dist/src/cohort-topic/size-estimator.js.map +1 -0
- package/dist/src/cohort-topic/stream-util.d.ts +19 -0
- package/dist/src/cohort-topic/stream-util.d.ts.map +1 -0
- package/dist/src/cohort-topic/stream-util.js +76 -0
- package/dist/src/cohort-topic/stream-util.js.map +1 -0
- package/dist/src/cohort-topic/threshold-crypto.d.ts +94 -0
- package/dist/src/cohort-topic/threshold-crypto.d.ts.map +1 -0
- package/dist/src/cohort-topic/threshold-crypto.js +178 -0
- package/dist/src/cohort-topic/threshold-crypto.js.map +1 -0
- package/dist/src/cohort-topic/topic-router.d.ts +41 -0
- package/dist/src/cohort-topic/topic-router.d.ts.map +1 -0
- package/dist/src/cohort-topic/topic-router.js +63 -0
- package/dist/src/cohort-topic/topic-router.js.map +1 -0
- package/dist/src/dispute/cascade.d.ts +179 -0
- package/dist/src/dispute/cascade.d.ts.map +1 -0
- package/dist/src/dispute/cascade.js +315 -0
- package/dist/src/dispute/cascade.js.map +1 -0
- package/dist/src/dispute/client.d.ts +2 -1
- package/dist/src/dispute/client.d.ts.map +1 -1
- package/dist/src/dispute/client.js +12 -3
- package/dist/src/dispute/client.js.map +1 -1
- package/dist/src/dispute/dispute-service.d.ts +41 -1
- package/dist/src/dispute/dispute-service.d.ts.map +1 -1
- package/dist/src/dispute/dispute-service.js +147 -21
- package/dist/src/dispute/dispute-service.js.map +1 -1
- package/dist/src/dispute/index.d.ts +2 -0
- package/dist/src/dispute/index.d.ts.map +1 -1
- package/dist/src/dispute/index.js +2 -0
- package/dist/src/dispute/index.js.map +1 -1
- package/dist/src/dispute/invalidation.d.ts +266 -0
- package/dist/src/dispute/invalidation.d.ts.map +1 -0
- package/dist/src/dispute/invalidation.js +405 -0
- package/dist/src/dispute/invalidation.js.map +1 -0
- package/dist/src/dispute/types.d.ts +14 -0
- package/dist/src/dispute/types.d.ts.map +1 -1
- package/dist/src/dispute/types.js.map +1 -1
- package/dist/src/index.d.ts +4 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/libp2p-key-network.d.ts +8 -1
- package/dist/src/libp2p-key-network.d.ts.map +1 -1
- package/dist/src/libp2p-key-network.js +67 -8
- package/dist/src/libp2p-key-network.js.map +1 -1
- package/dist/src/libp2p-node-base.d.ts +57 -3
- package/dist/src/libp2p-node-base.d.ts.map +1 -1
- package/dist/src/libp2p-node-base.js +523 -6
- package/dist/src/libp2p-node-base.js.map +1 -1
- package/dist/src/matchmaking/aggregate-counts.d.ts +67 -0
- package/dist/src/matchmaking/aggregate-counts.d.ts.map +1 -0
- package/dist/src/matchmaking/aggregate-counts.js +60 -0
- package/dist/src/matchmaking/aggregate-counts.js.map +1 -0
- package/dist/src/matchmaking/index.d.ts +20 -0
- package/dist/src/matchmaking/index.d.ts.map +1 -0
- package/dist/src/matchmaking/index.js +20 -0
- package/dist/src/matchmaking/index.js.map +1 -0
- package/dist/src/matchmaking/module.d.ts +181 -0
- package/dist/src/matchmaking/module.d.ts.map +1 -0
- package/dist/src/matchmaking/module.js +221 -0
- package/dist/src/matchmaking/module.js.map +1 -0
- package/dist/src/matchmaking/protocols.d.ts +37 -0
- package/dist/src/matchmaking/protocols.d.ts.map +1 -0
- package/dist/src/matchmaking/protocols.js +42 -0
- package/dist/src/matchmaking/protocols.js.map +1 -0
- package/dist/src/matchmaking/provider-manager.d.ts +52 -0
- package/dist/src/matchmaking/provider-manager.d.ts.map +1 -0
- package/dist/src/matchmaking/provider-manager.js +74 -0
- package/dist/src/matchmaking/provider-manager.js.map +1 -0
- package/dist/src/matchmaking/query-handler.d.ts +34 -0
- package/dist/src/matchmaking/query-handler.d.ts.map +1 -0
- package/dist/src/matchmaking/query-handler.js +62 -0
- package/dist/src/matchmaking/query-handler.js.map +1 -0
- package/dist/src/matchmaking/query-transport.d.ts +180 -0
- package/dist/src/matchmaking/query-transport.d.ts.map +1 -0
- package/dist/src/matchmaking/query-transport.js +315 -0
- package/dist/src/matchmaking/query-transport.js.map +1 -0
- package/dist/src/matchmaking/seeker-manager.d.ts +39 -0
- package/dist/src/matchmaking/seeker-manager.d.ts.map +1 -0
- package/dist/src/matchmaking/seeker-manager.js +49 -0
- package/dist/src/matchmaking/seeker-manager.js.map +1 -0
- package/dist/src/matchmaking/seeker-walk-client.d.ts +127 -0
- package/dist/src/matchmaking/seeker-walk-client.d.ts.map +1 -0
- package/dist/src/matchmaking/seeker-walk-client.js +189 -0
- package/dist/src/matchmaking/seeker-walk-client.js.map +1 -0
- package/dist/src/matchmaking/traffic-validation.d.ts +128 -0
- package/dist/src/matchmaking/traffic-validation.d.ts.map +1 -0
- package/dist/src/matchmaking/traffic-validation.js +105 -0
- package/dist/src/matchmaking/traffic-validation.js.map +1 -0
- package/dist/src/network/network-manager-service.d.ts +4 -2
- package/dist/src/network/network-manager-service.d.ts.map +1 -1
- package/dist/src/network/network-manager-service.js +9 -3
- package/dist/src/network/network-manager-service.js.map +1 -1
- package/dist/src/protocol-client.d.ts +25 -0
- package/dist/src/protocol-client.d.ts.map +1 -1
- package/dist/src/protocol-client.js +126 -4
- package/dist/src/protocol-client.js.map +1 -1
- package/dist/src/reactivity/forwarder-host.d.ts +198 -0
- package/dist/src/reactivity/forwarder-host.d.ts.map +1 -0
- package/dist/src/reactivity/forwarder-host.js +355 -0
- package/dist/src/reactivity/forwarder-host.js.map +1 -0
- package/dist/src/reactivity/index.d.ts +19 -0
- package/dist/src/reactivity/index.d.ts.map +1 -0
- package/dist/src/reactivity/index.js +19 -0
- package/dist/src/reactivity/index.js.map +1 -0
- package/dist/src/reactivity/notify-transport.d.ts +70 -0
- package/dist/src/reactivity/notify-transport.d.ts.map +1 -0
- package/dist/src/reactivity/notify-transport.js +111 -0
- package/dist/src/reactivity/notify-transport.js.map +1 -0
- package/dist/src/reactivity/origination-manager.d.ts +110 -0
- package/dist/src/reactivity/origination-manager.d.ts.map +1 -0
- package/dist/src/reactivity/origination-manager.js +129 -0
- package/dist/src/reactivity/origination-manager.js.map +1 -0
- package/dist/src/reactivity/protocols.d.ts +43 -0
- package/dist/src/reactivity/protocols.d.ts.map +1 -0
- package/dist/src/reactivity/protocols.js +50 -0
- package/dist/src/reactivity/protocols.js.map +1 -0
- package/dist/src/reactivity/push-state-gossip.d.ts +132 -0
- package/dist/src/reactivity/push-state-gossip.d.ts.map +1 -0
- package/dist/src/reactivity/push-state-gossip.js +231 -0
- package/dist/src/reactivity/push-state-gossip.js.map +1 -0
- package/dist/src/reactivity/recover-transport.d.ts +167 -0
- package/dist/src/reactivity/recover-transport.d.ts.map +1 -0
- package/dist/src/reactivity/recover-transport.js +308 -0
- package/dist/src/reactivity/recover-transport.js.map +1 -0
- package/dist/src/reactivity/rotation-rereg-scheduler.d.ts +142 -0
- package/dist/src/reactivity/rotation-rereg-scheduler.d.ts.map +1 -0
- package/dist/src/reactivity/rotation-rereg-scheduler.js +223 -0
- package/dist/src/reactivity/rotation-rereg-scheduler.js.map +1 -0
- package/dist/src/reactivity/subscriber-registry.d.ts +47 -0
- package/dist/src/reactivity/subscriber-registry.d.ts.map +1 -0
- package/dist/src/reactivity/subscriber-registry.js +87 -0
- package/dist/src/reactivity/subscriber-registry.js.map +1 -0
- package/dist/src/reactivity/subscription-manager.d.ts +221 -0
- package/dist/src/reactivity/subscription-manager.d.ts.map +1 -0
- package/dist/src/reactivity/subscription-manager.js +302 -0
- package/dist/src/reactivity/subscription-manager.js.map +1 -0
- package/dist/src/reactivity/topic-bytes.d.ts +32 -0
- package/dist/src/reactivity/topic-bytes.d.ts.map +1 -0
- package/dist/src/reactivity/topic-bytes.js +34 -0
- package/dist/src/reactivity/topic-bytes.js.map +1 -0
- package/dist/src/repo/client.d.ts.map +1 -1
- package/dist/src/repo/client.js +51 -19
- package/dist/src/repo/client.js.map +1 -1
- package/dist/src/repo/cluster-coordinator.d.ts +9 -0
- package/dist/src/repo/cluster-coordinator.d.ts.map +1 -1
- package/dist/src/repo/cluster-coordinator.js +65 -22
- package/dist/src/repo/cluster-coordinator.js.map +1 -1
- package/dist/src/repo/coordinator-repo.d.ts +20 -0
- package/dist/src/repo/coordinator-repo.d.ts.map +1 -1
- package/dist/src/repo/coordinator-repo.js +101 -16
- package/dist/src/repo/coordinator-repo.js.map +1 -1
- package/dist/src/repo/service.d.ts +46 -1
- package/dist/src/repo/service.d.ts.map +1 -1
- package/dist/src/repo/service.js +79 -45
- package/dist/src/repo/service.js.map +1 -1
- package/dist/src/rpc-deadline.d.ts +37 -0
- package/dist/src/rpc-deadline.d.ts.map +1 -0
- package/dist/src/rpc-deadline.js +31 -0
- package/dist/src/rpc-deadline.js.map +1 -0
- package/dist/src/storage/block-storage.d.ts +2 -0
- package/dist/src/storage/block-storage.d.ts.map +1 -1
- package/dist/src/storage/block-storage.js +95 -2
- package/dist/src/storage/block-storage.js.map +1 -1
- package/dist/src/storage/i-block-storage.d.ts +25 -0
- package/dist/src/storage/i-block-storage.d.ts.map +1 -1
- package/dist/src/storage/storage-repo.d.ts +53 -2
- package/dist/src/storage/storage-repo.d.ts.map +1 -1
- package/dist/src/storage/storage-repo.js +193 -9
- package/dist/src/storage/storage-repo.js.map +1 -1
- package/dist/src/sync/client.d.ts +4 -1
- package/dist/src/sync/client.d.ts.map +1 -1
- package/dist/src/sync/client.js +5 -2
- package/dist/src/sync/client.js.map +1 -1
- package/dist/src/testing/cohort-topic-mesh-harness.d.ts +219 -0
- package/dist/src/testing/cohort-topic-mesh-harness.d.ts.map +1 -0
- package/dist/src/testing/cohort-topic-mesh-harness.js +467 -0
- package/dist/src/testing/cohort-topic-mesh-harness.js.map +1 -0
- package/dist/src/testing/matchmaking-mesh-harness.d.ts +187 -0
- package/dist/src/testing/matchmaking-mesh-harness.d.ts.map +1 -0
- package/dist/src/testing/matchmaking-mesh-harness.js +358 -0
- package/dist/src/testing/matchmaking-mesh-harness.js.map +1 -0
- package/dist/src/testing/mesh-harness.d.ts.map +1 -1
- package/dist/src/testing/mesh-harness.js +23 -1
- package/dist/src/testing/mesh-harness.js.map +1 -1
- package/dist/src/testing/reactivity-mesh-harness.d.ts +298 -0
- package/dist/src/testing/reactivity-mesh-harness.d.ts.map +1 -0
- package/dist/src/testing/reactivity-mesh-harness.js +663 -0
- package/dist/src/testing/reactivity-mesh-harness.js.map +1 -0
- package/package.json +7 -4
- package/src/cluster/block-transfer-service.ts +133 -68
- package/src/cluster/client.ts +64 -45
- package/src/cluster/cluster-error.ts +64 -0
- package/src/cluster/cluster-repo.ts +405 -55
- package/src/cluster/commit-cert.ts +139 -0
- package/src/cluster/service.ts +116 -44
- package/src/cluster/spread-on-churn.ts +328 -285
- package/src/cohort-topic/bootstrap-evidence-builder.ts +122 -0
- package/src/cohort-topic/bootstrap-evidence-verifiers.ts +132 -0
- package/src/cohort-topic/bootstrap-parent-reference.ts +159 -0
- package/src/cohort-topic/change-bridge.ts +109 -0
- package/src/cohort-topic/cohort-gossip-driver.ts +144 -0
- package/src/cohort-topic/cohort-gossip-transport.ts +74 -0
- package/src/cohort-topic/fret-trust-anchor.ts +153 -0
- package/src/cohort-topic/host.ts +2175 -0
- package/src/cohort-topic/index.ts +13 -0
- package/src/cohort-topic/membership-publish-sink.ts +20 -0
- package/src/cohort-topic/membership-source.ts +68 -0
- package/src/cohort-topic/peer-codec.ts +31 -0
- package/src/cohort-topic/peer-sig.ts +86 -0
- package/src/cohort-topic/protocols.ts +71 -0
- package/src/cohort-topic/reactivity-membership-gate.ts +77 -0
- package/src/cohort-topic/size-estimator.ts +16 -0
- package/src/cohort-topic/stream-util.ts +87 -0
- package/src/cohort-topic/threshold-crypto.ts +239 -0
- package/src/cohort-topic/topic-router.ts +77 -0
- package/src/dispute/cascade.ts +517 -0
- package/src/dispute/client.ts +12 -2
- package/src/dispute/dispute-service.ts +171 -24
- package/src/dispute/index.ts +42 -0
- package/src/dispute/invalidation.ts +587 -0
- package/src/dispute/types.ts +14 -0
- package/src/index.ts +4 -0
- package/src/libp2p-key-network.ts +67 -9
- package/src/libp2p-node-base.ts +633 -14
- package/src/matchmaking/aggregate-counts.ts +104 -0
- package/src/matchmaking/index.ts +20 -0
- package/src/matchmaking/module.ts +363 -0
- package/src/matchmaking/protocols.ts +51 -0
- package/src/matchmaking/provider-manager.ts +95 -0
- package/src/matchmaking/query-handler.ts +88 -0
- package/src/matchmaking/query-transport.ts +483 -0
- package/src/matchmaking/seeker-manager.ts +64 -0
- package/src/matchmaking/seeker-walk-client.ts +293 -0
- package/src/matchmaking/traffic-validation.ts +195 -0
- package/src/network/network-manager-service.ts +9 -2
- package/src/protocol-client.ts +119 -5
- package/src/reactivity/forwarder-host.ts +438 -0
- package/src/reactivity/index.ts +19 -0
- package/src/reactivity/notify-transport.ts +144 -0
- package/src/reactivity/origination-manager.ts +192 -0
- package/src/reactivity/protocols.ts +61 -0
- package/src/reactivity/push-state-gossip.ts +291 -0
- package/src/reactivity/recover-transport.ts +408 -0
- package/src/reactivity/rotation-rereg-scheduler.ts +256 -0
- package/src/reactivity/subscriber-registry.ts +96 -0
- package/src/reactivity/subscription-manager.ts +450 -0
- package/src/reactivity/topic-bytes.ts +37 -0
- package/src/repo/client.ts +54 -19
- package/src/repo/cluster-coordinator.ts +66 -26
- package/src/repo/coordinator-repo.ts +99 -15
- package/src/repo/service.ts +90 -42
- package/src/rpc-deadline.ts +45 -0
- package/src/storage/block-storage.ts +106 -3
- package/src/storage/i-block-storage.ts +27 -0
- package/src/storage/storage-repo.ts +209 -13
- package/src/sync/client.ts +5 -2
- package/src/testing/cohort-topic-mesh-harness.ts +613 -0
- package/src/testing/matchmaking-mesh-harness.ts +475 -0
- package/src/testing/mesh-harness.ts +22 -2
- package/src/testing/reactivity-mesh-harness.ts +922 -0
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
import { peerIdFromString } from '@libp2p/peer-id';
|
|
2
|
+
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
|
|
3
|
+
import { applyTransform, hashString } from '@optimystic/db-core';
|
|
4
|
+
import { createLogger } from '../logger.js';
|
|
5
|
+
const log = createLogger('invalidation');
|
|
6
|
+
/**
|
|
7
|
+
* Accepted arbitration-vote wire-format version. The v3 signed payload binds each vote to BOTH the
|
|
8
|
+
* specific reversed transaction (`targetHash`, #2) and the legitimately-selected arbitrator set
|
|
9
|
+
* (`setHash`, #1); v1/v2 (un-set-bound) votes are rejected, never accepted-by-default.
|
|
10
|
+
*/
|
|
11
|
+
export const VOTE_VERSION = 'v3';
|
|
12
|
+
/**
|
|
13
|
+
* Binds a vote to its reversal target: `hashString(`${messageHash}|${invalidatedActionId}|${sortedBlockIds}`)`.
|
|
14
|
+
* `blockIds` are lexically sorted so the binding is independent of the order a member happens to list
|
|
15
|
+
* them, and {@link hashString} is the same db-core helper the compensating-state computation uses, so
|
|
16
|
+
* every member recomputes an identical `targetHash`.
|
|
17
|
+
*/
|
|
18
|
+
export async function computeTargetHash(messageHash, target) {
|
|
19
|
+
const sortedBlockIds = [...target.blockIds].sort();
|
|
20
|
+
return await hashString(`${messageHash}|${target.invalidatedActionId}|${sortedBlockIds.join(',')}`);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Digest of the legitimately-selected arbitrator set (#1) — `hashString(sortedArbitratorSet.join(','))`.
|
|
24
|
+
* Peer-ids are lexically sorted so the digest is independent of the order any party happens to list the
|
|
25
|
+
* set in, and every member (arbitrators signing votes, the challenger signing the set, the verifier)
|
|
26
|
+
* recomputes an identical `setHash`.
|
|
27
|
+
*/
|
|
28
|
+
export async function computeArbitratorSetHash(arbitratorSet) {
|
|
29
|
+
return await hashString([...arbitratorSet].sort().join(','));
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* The exact bytes an arbitrator signs for a v3 vote — `utf8(`v3:${disputeId}:${vote}:${computedHash}:${targetHash}:${setHash}`)`.
|
|
33
|
+
* Shared by the origination path ({@link makeVote in dispute-service}) and {@link verifyVoteSignature}
|
|
34
|
+
* so the signed and verified preimages can never drift.
|
|
35
|
+
*/
|
|
36
|
+
export function voteSigningPayload(disputeId, vote, computedHash, targetHash, setHash) {
|
|
37
|
+
return new TextEncoder().encode(`${VOTE_VERSION}:${disputeId}:${vote}:${computedHash}:${targetHash}:${setHash}`);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* The exact bytes the **challenger** signs to bind `(disputeId, target, arbitratorSet)` —
|
|
41
|
+
* `utf8(`v3set:${disputeId}:${targetHash}:${setHash}`)`. Verified against the challenger's embedded key
|
|
42
|
+
* ({@link DisputeResolutionProof.challengerPeerId}); shared with the origination path so it can never drift.
|
|
43
|
+
* The version marker is derived from {@link VOTE_VERSION} (currently `v3` → `v3set`) so a future format
|
|
44
|
+
* bump moves the vote and set preimages together — a proof is wholly one wire version, never a mix.
|
|
45
|
+
*/
|
|
46
|
+
export function arbitratorSetSigningPayload(disputeId, targetHash, setHash) {
|
|
47
|
+
return new TextEncoder().encode(`${VOTE_VERSION}set:${disputeId}:${targetHash}:${setHash}`);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Marks a `reverted` block whose as-if-`T_inv`-absent state is a *deletion* (T_inv created the
|
|
51
|
+
* block, so there is no prior content to restore). {@link applyInvalidation} now physically removes
|
|
52
|
+
* such blocks (a forward tombstone via {@link IBlockStorage.saveDeletion}); this sentinel is the
|
|
53
|
+
* `restoredContentHash` it records for the deleted block, telling read-dependents "the observed
|
|
54
|
+
* content no longer exists → invalidate" (a created block can never equal "absent"). Greppable so it
|
|
55
|
+
* is never mistaken for a real content hash.
|
|
56
|
+
*/
|
|
57
|
+
export const DELETED_BLOCK_RESTORE = 'deleted:block-creation-reverted';
|
|
58
|
+
/**
|
|
59
|
+
* Projects a db-p2p {@link DisputeResolution} onto the db-core {@link DisputeResolutionProof} —
|
|
60
|
+
* the independently-verifiable subset (outcome + signed votes + arbitrator-set binding) that an
|
|
61
|
+
* {@link InvalidationEntry} carries. `messageHash` is the original transaction's hash (from the
|
|
62
|
+
* challenge), the anchor the proof pins the reversal to; `binding` carries the legitimately-selected
|
|
63
|
+
* arbitrator set and the challenger's signature over it (#1).
|
|
64
|
+
*/
|
|
65
|
+
export function buildDisputeResolutionProof(resolution, messageHash, binding) {
|
|
66
|
+
return {
|
|
67
|
+
disputeId: resolution.disputeId,
|
|
68
|
+
messageHash,
|
|
69
|
+
outcome: resolution.outcome,
|
|
70
|
+
challengerPeerId: binding.challengerPeerId,
|
|
71
|
+
arbitratorSet: binding.arbitratorSet,
|
|
72
|
+
arbitratorSetSignature: binding.arbitratorSetSignature,
|
|
73
|
+
votes: resolution.votes.map(toVoteProof),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function toVoteProof(vote) {
|
|
77
|
+
return {
|
|
78
|
+
version: vote.version,
|
|
79
|
+
arbitratorPeerId: vote.arbitratorPeerId,
|
|
80
|
+
vote: vote.vote,
|
|
81
|
+
computedHash: vote.evidence.computedHash,
|
|
82
|
+
signature: vote.signature,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
// ─── Invalidation certificate verification ───
|
|
86
|
+
/**
|
|
87
|
+
* Verifies that a {@link DisputeResolutionProof} is a valid invalidation certificate — the reversal
|
|
88
|
+
* analogue of the commit certificate. A member accepts an invalidation **only** if this returns true.
|
|
89
|
+
* Defense-in-depth, strongest-available-layer-wins:
|
|
90
|
+
*
|
|
91
|
+
* **Target binding (#2).** `target` is the transaction actually being reverted; the verifier recomputes
|
|
92
|
+
* `targetHash` from `proof.messageHash` + `target` and checks each vote's signature over the v3 payload
|
|
93
|
+
* `v3:${disputeId}:${vote}:${computedHash}:${targetHash}:${setHash}`. Because the arbitrators signed the
|
|
94
|
+
* *real* transaction's `targetHash`, feeding any other target (a replay against an innocent transaction)
|
|
95
|
+
* makes every signature fail. A vote whose version is absent/unrecognized (legacy/v1/v2) is rejected
|
|
96
|
+
* before counting — never accepted-by-default.
|
|
97
|
+
*
|
|
98
|
+
* **Arbitrator-set binding (#1) — layer 1 (always).** The proof carries `arbitratorSet` (the K peer-ids
|
|
99
|
+
* the challenger selected) and `arbitratorSetSignature` (the challenger's signature over
|
|
100
|
+
* `(disputeId, target, arbitratorSet)`, verified against `challengerPeerId`'s embedded key). The verifier:
|
|
101
|
+
* - rejects a proof missing the set / challenger fields;
|
|
102
|
+
* - rejects a proof whose challenger signature does not validate over the recomputed `(targetHash, setHash)`
|
|
103
|
+
* — so tampering with the set (adding sybils) breaks the certificate;
|
|
104
|
+
* - counts only votes whose `arbitratorPeerId` ∈ `arbitratorSet` (a signature-valid vote from a peer
|
|
105
|
+
* outside the set is dropped), and whose vote payload also commits to the same `setHash`.
|
|
106
|
+
* This closes the third-party-relay / originator sybil vector and binds the originator. It does NOT by
|
|
107
|
+
* itself stop a *fully-malicious* challenger (who legitimately holds its own key and signs a sybil set it
|
|
108
|
+
* minted) — that needs layer 2 or 3.
|
|
109
|
+
*
|
|
110
|
+
* **Per-arbitrator dedup (#3).** Among the in-set votes, decisive verdicts are tallied at most once per
|
|
111
|
+
* `arbitratorPeerId`: a repeated identical decisive vote counts once; an arbitrator with conflicting
|
|
112
|
+
* decisive votes (equivocation) is dropped from both sides. `inconclusive` votes are non-decisive.
|
|
113
|
+
*
|
|
114
|
+
* **Recompute — layer 2 (best effort).** When `options.recomputeArbitratorSet` is supplied (the caller
|
|
115
|
+
* holds a topology view), the carried set is re-derived and judged. A `{feasible:true, legitimate:false}`
|
|
116
|
+
* verdict rejects the certificate even though layer 1 passed — closing the malicious-challenger vector.
|
|
117
|
+
* `{feasible:false}` (member can't reconstruct the historical topology) falls through to degradation.
|
|
118
|
+
*
|
|
119
|
+
* **Degradation (layer 3 / none-available).** With no recompute capability (or an infeasible recompute)
|
|
120
|
+
* and no trust anchor yet, a layer-1-valid certificate is **accepted and logged** as not-fully-anchored
|
|
121
|
+
* (and `options.onUnanchored` is invoked) — never a silent accept-by-default, and never a false reject
|
|
122
|
+
* that would break liveness for late-joiners. This is the interim posture until the cohort-topic
|
|
123
|
+
* membership-cert trust-anchor chain lands (`tickets/plan/cohort-topic-membership-cert-trust-anchoring.md`),
|
|
124
|
+
* at which point it is upgraded to a hard gate.
|
|
125
|
+
*/
|
|
126
|
+
export async function verifyInvalidationCertificate(proof, target, options = {}) {
|
|
127
|
+
if (proof.outcome !== 'challenger-wins') {
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
// Structural: a v3 certificate must carry the arbitrator-set binding. Absent → reject (never accept a
|
|
131
|
+
// pre-set-binding proof by default).
|
|
132
|
+
if (!proof.arbitratorSet?.length || !proof.challengerPeerId || !proof.arbitratorSetSignature) {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
const targetHash = await computeTargetHash(proof.messageHash, target);
|
|
136
|
+
const setHash = await computeArbitratorSetHash(proof.arbitratorSet);
|
|
137
|
+
// Layer 1a: challenger binds (disputeId, target, arbitratorSet). A tampered set breaks this signature.
|
|
138
|
+
if (!(await verifyChallengerSetSignature(proof, targetHash, setHash))) {
|
|
139
|
+
log('verify-reject-challenger-set-signature disputeId=%s challenger=%s', proof.disputeId, proof.challengerPeerId);
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
// Layer 1b: count only signature-valid, target+set-bound, in-set votes — deduped/equivocation-dropped.
|
|
143
|
+
const arbitratorSet = new Set(proof.arbitratorSet);
|
|
144
|
+
const decisiveByArbitrator = new Map();
|
|
145
|
+
for (const vote of proof.votes) {
|
|
146
|
+
if (!arbitratorSet.has(vote.arbitratorPeerId)) {
|
|
147
|
+
continue; // not a legitimately-selected arbitrator → never counted (#1)
|
|
148
|
+
}
|
|
149
|
+
if (!(await verifyVoteSignature(proof.disputeId, vote, targetHash, setHash))) {
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
if (vote.vote !== 'agree-with-challenger' && vote.vote !== 'agree-with-majority') {
|
|
153
|
+
continue; // 'inconclusive' — valid but not decisive
|
|
154
|
+
}
|
|
155
|
+
const prior = decisiveByArbitrator.get(vote.arbitratorPeerId);
|
|
156
|
+
if (prior === undefined) {
|
|
157
|
+
decisiveByArbitrator.set(vote.arbitratorPeerId, vote.vote);
|
|
158
|
+
}
|
|
159
|
+
else if (prior !== 'equivocated' && prior !== vote.vote) {
|
|
160
|
+
// Same arbitrator, conflicting decisive votes → drop entirely (do not let one peer be on both sides).
|
|
161
|
+
decisiveByArbitrator.set(vote.arbitratorPeerId, 'equivocated');
|
|
162
|
+
}
|
|
163
|
+
// prior === vote.vote (duplicate) or already 'equivocated': counted at most once, no change.
|
|
164
|
+
}
|
|
165
|
+
let challengerVotes = 0;
|
|
166
|
+
let majorityVotes = 0;
|
|
167
|
+
for (const decision of decisiveByArbitrator.values()) {
|
|
168
|
+
if (decision === 'agree-with-challenger') {
|
|
169
|
+
challengerVotes++;
|
|
170
|
+
}
|
|
171
|
+
else if (decision === 'agree-with-majority') {
|
|
172
|
+
majorityVotes++;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
const totalDecisive = challengerVotes + majorityVotes;
|
|
176
|
+
if (totalDecisive === 0) {
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
const superMajorityThreshold = Math.ceil(totalDecisive * 2 / 3);
|
|
180
|
+
if (challengerVotes < superMajorityThreshold) {
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
// Layer 2: re-derive the eligible set from the member's own topology when it can — closes a
|
|
184
|
+
// fully-malicious challenger that self-signed a sybil set that passed layer 1.
|
|
185
|
+
if (options.recomputeArbitratorSet) {
|
|
186
|
+
const verdict = await options.recomputeArbitratorSet({
|
|
187
|
+
disputeId: proof.disputeId,
|
|
188
|
+
messageHash: proof.messageHash,
|
|
189
|
+
invalidatedActionId: target.invalidatedActionId,
|
|
190
|
+
blockIds: target.blockIds,
|
|
191
|
+
arbitratorSet: proof.arbitratorSet,
|
|
192
|
+
});
|
|
193
|
+
if (verdict.feasible) {
|
|
194
|
+
if (!verdict.legitimate) {
|
|
195
|
+
log('verify-reject-recompute-mismatch disputeId=%s', proof.disputeId);
|
|
196
|
+
return false;
|
|
197
|
+
}
|
|
198
|
+
return true; // fully anchored to the recomputed topology
|
|
199
|
+
}
|
|
200
|
+
// infeasible → fall through to the documented degradation posture
|
|
201
|
+
return acceptUnanchored(proof, 'recompute-infeasible', options);
|
|
202
|
+
}
|
|
203
|
+
// Layer 3 / none-available: accept on layer 1 alone, but never silently — log + surface the residual.
|
|
204
|
+
return acceptUnanchored(proof, 'no-recompute-capability', options);
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Accept-and-log a layer-1-valid certificate that could not be fully anchored (no recompute capability
|
|
208
|
+
* or an infeasible recompute, and no trust anchor yet). Documented interim posture — never a silent
|
|
209
|
+
* accept. Returns true.
|
|
210
|
+
*/
|
|
211
|
+
function acceptUnanchored(proof, reason, options) {
|
|
212
|
+
log('verify-accept-unanchored disputeId=%s reason=%s setSize=%d', proof.disputeId, reason, proof.arbitratorSet.length);
|
|
213
|
+
try {
|
|
214
|
+
options.onUnanchored?.({ disputeId: proof.disputeId, arbitratorSet: proof.arbitratorSet, reason });
|
|
215
|
+
}
|
|
216
|
+
catch (err) {
|
|
217
|
+
log('verify-onUnanchored-error disputeId=%s error=%o', proof.disputeId, err);
|
|
218
|
+
}
|
|
219
|
+
return true;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Verify the challenger's signature binding `(disputeId, target, arbitratorSet)` against the embedded
|
|
223
|
+
* Ed25519 key in `proof.challengerPeerId`. Closes the third-party-relay sybil vector: a relay cannot
|
|
224
|
+
* swap the carried set without the challenger's key.
|
|
225
|
+
*/
|
|
226
|
+
async function verifyChallengerSetSignature(proof, targetHash, setHash) {
|
|
227
|
+
try {
|
|
228
|
+
const publicKey = peerIdFromString(proof.challengerPeerId).publicKey;
|
|
229
|
+
if (!publicKey) {
|
|
230
|
+
return false;
|
|
231
|
+
}
|
|
232
|
+
const payload = arbitratorSetSigningPayload(proof.disputeId, targetHash, setHash);
|
|
233
|
+
const sigBytes = uint8ArrayFromString(proof.arbitratorSetSignature, 'base64url');
|
|
234
|
+
return await publicKey.verify(payload, sigBytes);
|
|
235
|
+
}
|
|
236
|
+
catch (err) {
|
|
237
|
+
log('challenger-set-signature-verify-error challenger=%s error=%o', proof.challengerPeerId, err);
|
|
238
|
+
return false;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Verify one arbitration vote's Ed25519 signature against its arbitrator peer id's embedded key, over
|
|
243
|
+
* the **target- and set-bound v3 payload**. Rejects any vote that is not the v3 format before trusting
|
|
244
|
+
* it, so a legacy/unversioned (v1/v2) vote can never slip through.
|
|
245
|
+
*/
|
|
246
|
+
async function verifyVoteSignature(disputeId, vote, targetHash, setHash) {
|
|
247
|
+
// Runtime gate: `vote` arrives off the wire, so its `version` may not match the declared type.
|
|
248
|
+
if (vote.version !== VOTE_VERSION) {
|
|
249
|
+
return false;
|
|
250
|
+
}
|
|
251
|
+
try {
|
|
252
|
+
const publicKey = peerIdFromString(vote.arbitratorPeerId).publicKey;
|
|
253
|
+
if (!publicKey) {
|
|
254
|
+
return false;
|
|
255
|
+
}
|
|
256
|
+
const payload = voteSigningPayload(disputeId, vote.vote, vote.computedHash, targetHash, setHash);
|
|
257
|
+
const sigBytes = uint8ArrayFromString(vote.signature, 'base64url');
|
|
258
|
+
return await publicKey.verify(payload, sigBytes);
|
|
259
|
+
}
|
|
260
|
+
catch (err) {
|
|
261
|
+
log('vote-signature-verify-error arbitrator=%s error=%o', vote.arbitratorPeerId, err);
|
|
262
|
+
return false;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Reconstructs the compensating content for one block from stored revisions only (never by re-running
|
|
267
|
+
* the engine — so it does not depend on engine availability and stays deterministic across members).
|
|
268
|
+
*
|
|
269
|
+
* Base = the block's content at the highest stored revision strictly before `T_inv` (no such revision
|
|
270
|
+
* ⇒ `T_inv` created the block ⇒ a deletion). In the single-collection/no-cascade core, "surviving later
|
|
271
|
+
* actions" = every committed action after `T_inv` on this block, replayed verbatim on the rolled-back
|
|
272
|
+
* base. The cascade (see `cascade.ts`) layers true read-dependent re-evaluation on top of this blind
|
|
273
|
+
* replay — it reverts the genuine successors this primitive leaves as-is and logs.
|
|
274
|
+
*/
|
|
275
|
+
export async function computeRevertedBlock(blockStorage, invalidatedRev) {
|
|
276
|
+
const latest = await blockStorage.getLatest();
|
|
277
|
+
const fromRev = latest?.rev ?? invalidatedRev;
|
|
278
|
+
// Find the highest stored revision strictly before T_inv — the base to roll back to. A descending
|
|
279
|
+
// listRevisions(invalidatedRev - 1, 1) yields it first (same descending-scan pattern materializeBlock
|
|
280
|
+
// uses, so no new cost class). No such revision ⇒ T_inv CREATED this block ⇒ the as-if-absent state is
|
|
281
|
+
// a deletion — at ANY rev, without throwing (the previous `invalidatedRev <= 1` special-case folds into
|
|
282
|
+
// this: at rev <= 1 the probe is skipped and priorRev stays undefined). We intentionally do NOT replay
|
|
283
|
+
// surviving later actions onto an absent base: replaying an update on `undefined` stays `undefined`, and
|
|
284
|
+
// any later writer of a created-then-reverted block is itself a read-dependent the cascade (`cascade.ts`)
|
|
285
|
+
// re-evaluates and reverts.
|
|
286
|
+
let priorRev;
|
|
287
|
+
if (invalidatedRev > 1) {
|
|
288
|
+
for await (const ar of blockStorage.listRevisions(invalidatedRev - 1, 1)) {
|
|
289
|
+
priorRev = ar.rev;
|
|
290
|
+
break;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
if (priorRev === undefined) {
|
|
294
|
+
return { kind: 'delete', fromRev };
|
|
295
|
+
}
|
|
296
|
+
const base = await blockStorage.getBlock(priorRev);
|
|
297
|
+
if (!base) {
|
|
298
|
+
return { kind: 'delete', fromRev };
|
|
299
|
+
}
|
|
300
|
+
// Replay surviving later actions (committed strictly after T_inv) onto the rolled-back base.
|
|
301
|
+
// Guard on `fromRev > invalidatedRev`: listRevisions treats start > end as a *descending*
|
|
302
|
+
// range, so an unguarded listRevisions(invalidatedRev + 1, fromRev) when no later action
|
|
303
|
+
// exists would wrongly re-include T_inv's own revision.
|
|
304
|
+
let block = base.block;
|
|
305
|
+
let laterActions = 0;
|
|
306
|
+
if (fromRev > invalidatedRev) {
|
|
307
|
+
for await (const actionRev of blockStorage.listRevisions(invalidatedRev + 1, fromRev)) {
|
|
308
|
+
const transform = await blockStorage.getTransaction(actionRev.actionId);
|
|
309
|
+
if (!transform) {
|
|
310
|
+
continue;
|
|
311
|
+
}
|
|
312
|
+
block = applyTransform(block, transform);
|
|
313
|
+
laterActions++;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
if (!block) {
|
|
317
|
+
return { kind: 'delete', fromRev };
|
|
318
|
+
}
|
|
319
|
+
const restoredContentHash = await hashBlockContent(block);
|
|
320
|
+
return { kind: 'restore', block, restoredContentHash, fromRev, laterActions };
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Deterministic content hash for a materialized block — the single hashing convention shared by
|
|
324
|
+
* the compensating-state computation ({@link computeRevertedBlock}) and the cascade re-evaluator
|
|
325
|
+
* (`db-p2p/src/dispute/cascade.ts`). Both must agree byte-for-byte: the cascade decides whether a
|
|
326
|
+
* read-dependent still holds by comparing the hash of the content it *observed* against the
|
|
327
|
+
* `restoredContentHash` an invalidation recorded — so the two hashes have to be produced the same way.
|
|
328
|
+
*/
|
|
329
|
+
export async function hashBlockContent(block) {
|
|
330
|
+
return await hashString(stableStringify(block));
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Deterministically applies a single-collection invalidation: the durable reversal primitive every
|
|
334
|
+
* cluster member runs identically (it carries the `reverted` targets and proof, exactly as the
|
|
335
|
+
* consensus-apply path runs committed operations on every peer).
|
|
336
|
+
*
|
|
337
|
+
* Steps, in order:
|
|
338
|
+
* 1. **Dedup** — if the log already holds an invalidation for `(invalidatedActionId, disputeId)`,
|
|
339
|
+
* this is a re-receipt (rebroadcast / sync / retry): no-op, append nothing.
|
|
340
|
+
* 2. **Certificate** — reject (append nothing) unless `proof` is a valid challenger-wins certificate.
|
|
341
|
+
* 3. **Reverted revisions** — for each block, recompute the as-if-`T_inv`-absent content and write a
|
|
342
|
+
* new monotonic revision (a forward compensating transform; prior revisions are retained).
|
|
343
|
+
* 4. **Log entry** — append the {@link InvalidationEntry} carrying the proof and `reverted` targets,
|
|
344
|
+
* making `committed-invalidated` durable and recoverable on sync.
|
|
345
|
+
*/
|
|
346
|
+
export async function applyInvalidation(ctx, params) {
|
|
347
|
+
const { invalidatedActionId, invalidatedRev, blockIds, proof } = params;
|
|
348
|
+
// 1. Idempotent re-receipt — keyed on (invalidatedActionId, disputeId).
|
|
349
|
+
const existing = await ctx.log.findInvalidation(invalidatedActionId);
|
|
350
|
+
if (existing && existing.resolution.disputeId === proof.disputeId) {
|
|
351
|
+
log('apply-skip-duplicate actionId=%s disputeId=%s', invalidatedActionId, proof.disputeId);
|
|
352
|
+
return { applied: false, reason: 'already-applied', reverted: [...existing.reverted] };
|
|
353
|
+
}
|
|
354
|
+
// 2. Certificate verification — never trust a single peer's say-so. The proof's votes are bound to
|
|
355
|
+
// a specific target; verify against the target they were signed over. For a root invalidation
|
|
356
|
+
// that is this call's own target; a cascade child passes the root's target via `certificateTarget`
|
|
357
|
+
// (the child-target justification is the deterministic cascade, not the certificate). A mismatched
|
|
358
|
+
// target (a genuine proof replayed against an innocent transaction) fails every signature here, so
|
|
359
|
+
// no compensating revision or log entry is ever written for it.
|
|
360
|
+
const certificateTarget = params.certificateTarget ?? { invalidatedActionId, blockIds };
|
|
361
|
+
if (!(await verifyInvalidationCertificate(proof, certificateTarget))) {
|
|
362
|
+
log('apply-reject-certificate actionId=%s disputeId=%s outcome=%s', invalidatedActionId, proof.disputeId, proof.outcome);
|
|
363
|
+
return { applied: false, reason: 'invalid-certificate', reverted: [] };
|
|
364
|
+
}
|
|
365
|
+
// 3. Compute compensating content + the collection-global revision slot.
|
|
366
|
+
const computations = await Promise.all(blockIds.map(async (blockId) => {
|
|
367
|
+
const storage = ctx.createBlockStorage(blockId);
|
|
368
|
+
return { blockId, storage, computation: await computeRevertedBlock(storage, invalidatedRev) };
|
|
369
|
+
}));
|
|
370
|
+
const maxFromRev = computations.reduce((max, c) => Math.max(max, c.computation.fromRev), invalidatedRev);
|
|
371
|
+
const rev = params.rev ?? maxFromRev + 1;
|
|
372
|
+
const reverted = [];
|
|
373
|
+
for (const { blockId, storage, computation } of computations) {
|
|
374
|
+
// Deterministic compensating-revision actionId — identical on every member, so all converge on
|
|
375
|
+
// the same (rev, actionId) for both the restore and the tombstone path.
|
|
376
|
+
const revertActionId = await hashString(`inv:${invalidatedActionId}:${proof.disputeId}:${blockId}:${rev}`);
|
|
377
|
+
if (computation.kind === 'delete') {
|
|
378
|
+
// Block-creation reversal: physically remove the created block by writing a forward tombstone
|
|
379
|
+
// revision. The `restoredContentHash` is the DELETED_BLOCK_RESTORE sentinel — a deleted block
|
|
380
|
+
// has no content hash, and the sentinel tells dependents "observed content is gone → invalidate".
|
|
381
|
+
await storage.saveDeletion({ rev, actionId: revertActionId });
|
|
382
|
+
log('apply-delete-restore blockId=%s invalidatedRev=%d rev=%d', blockId, invalidatedRev, rev);
|
|
383
|
+
reverted.push({ blockId, fromRev: computation.fromRev, restoredContentHash: DELETED_BLOCK_RESTORE });
|
|
384
|
+
continue;
|
|
385
|
+
}
|
|
386
|
+
if (computation.laterActions > 0) {
|
|
387
|
+
// Surviving later actions were replayed verbatim; true read-dependents are out of scope here.
|
|
388
|
+
log('apply-replayed-later-actions blockId=%s count=%d', blockId, computation.laterActions);
|
|
389
|
+
}
|
|
390
|
+
await storage.saveReplica(computation.block, { rev, actionId: revertActionId });
|
|
391
|
+
reverted.push({ blockId, fromRev: computation.fromRev, restoredContentHash: computation.restoredContentHash });
|
|
392
|
+
}
|
|
393
|
+
// 4. Durable, append-only invalidation entry (the source of truth for committed-invalidated).
|
|
394
|
+
// `cascadeRoot` is set when this is a cascade step (a reverted read-dependent), undefined for a root.
|
|
395
|
+
await ctx.log.addInvalidation(invalidatedActionId, invalidatedRev, proof, reverted, rev, params.cascadeRoot, params.timestamp);
|
|
396
|
+
log('apply-complete actionId=%s disputeId=%s rev=%d blocks=%d', invalidatedActionId, proof.disputeId, rev, reverted.length);
|
|
397
|
+
return { applied: true, rev, reverted };
|
|
398
|
+
}
|
|
399
|
+
/** Deterministic, key-sorted JSON for content hashing — stable across members regardless of key order. */
|
|
400
|
+
function stableStringify(value) {
|
|
401
|
+
return JSON.stringify(value, (_key, v) => v && typeof v === 'object' && !Array.isArray(v)
|
|
402
|
+
? Object.keys(v).sort().reduce((o, k) => { o[k] = v[k]; return o; }, {})
|
|
403
|
+
: v);
|
|
404
|
+
}
|
|
405
|
+
//# sourceMappingURL=invalidation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invalidation.js","sourceRoot":"","sources":["../../../src/dispute/invalidation.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,9 +33,23 @@ export type DisputeChallenge = {
|
|
|
33
33
|
timestamp: number;
|
|
34
34
|
/** TTL for arbitration (default: 2 × transaction TTL) */
|
|
35
35
|
expiration: number;
|
|
36
|
+
/**
|
|
37
|
+
* The legitimately-selected arbitrator set (peer-id strings) the challenger computed for this dispute
|
|
38
|
+
* — the next K peers beyond the original cluster. Carried on the challenge so each arbitrator folds its
|
|
39
|
+
* digest (`setHash`) into the v3 vote it signs, binding the votes to the set (#1). Absent only on a
|
|
40
|
+
* pre-v3 challenger; such votes will not verify against a v3 proof. The originator independently carries
|
|
41
|
+
* the same set on {@link DisputeResolutionProof.arbitratorSet}.
|
|
42
|
+
*/
|
|
43
|
+
arbitratorSet?: string[];
|
|
36
44
|
};
|
|
37
45
|
/** An arbitrator's independent assessment */
|
|
38
46
|
export type ArbitrationVote = {
|
|
47
|
+
/**
|
|
48
|
+
* Wire-format version of the signed vote payload (target- and arbitrator-set-bound). Mirrors
|
|
49
|
+
* {@link ArbitrationVoteProof.version}; kept in lock-step so origination and the proof projection
|
|
50
|
+
* agree. Only `'v3'` is produced/accepted today.
|
|
51
|
+
*/
|
|
52
|
+
version: 'v3';
|
|
39
53
|
/** Dispute being voted on */
|
|
40
54
|
disputeId: string;
|
|
41
55
|
/** Peer ID of the arbitrator */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/dispute/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,oEAAoE;AACpE,MAAM,MAAM,kBAAkB,GAAG;IAChC,6CAA6C;IAC7C,YAAY,EAAE,MAAM,CAAC;IACrB,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,gBAAgB,EAAE;QACjB,CAAC,OAAO,EAAE,MAAM,GAAG;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,CAAC;KAC7D,CAAC;CACF,CAAC;AAEF,2DAA2D;AAC3D,MAAM,MAAM,gBAAgB,GAAG;IAC9B,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,mBAAmB,EAAE,MAAM,CAAC;IAC5B,yCAAyC;IACzC,cAAc,EAAE,aAAa,CAAC;IAC9B,gCAAgC;IAChC,gBAAgB,EAAE,MAAM,CAAC;IACzB,uCAAuC;IACvC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,yDAAyD;IACzD,UAAU,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/dispute/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dispute/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dispute/types.ts"],"names":[],"mappings":"AA0HA,MAAM,CAAC,MAAM,sBAAsB,GAAkB;IACpD,cAAc,EAAE,KAAK;IACrB,2BAA2B,EAAE,MAAM;IACnC,4BAA4B,EAAE,CAAC;IAC/B,oBAAoB,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;CACpC,CAAC"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export * from "./cluster/client.js";
|
|
2
2
|
export * from "./cluster/cluster-repo.js";
|
|
3
|
+
export * from "./cluster/commit-cert.js";
|
|
3
4
|
export * from "./cluster/service.js";
|
|
4
5
|
export * from "./cluster/rebalance-monitor.js";
|
|
5
6
|
export * from "./cluster/spread-on-churn.js";
|
|
@@ -32,6 +33,9 @@ export * from "./network/network-manager-service.js";
|
|
|
32
33
|
export * from "./network/get-network-manager.js";
|
|
33
34
|
export * from "./reputation/index.js";
|
|
34
35
|
export * from "./dispute/index.js";
|
|
36
|
+
export * from "./cohort-topic/index.js";
|
|
37
|
+
export * from "./matchmaking/index.js";
|
|
38
|
+
export * from "./reactivity/index.js";
|
|
35
39
|
export * from "./cluster/i-transaction-state-store.js";
|
|
36
40
|
export * from "./cluster/memory-transaction-state-store.js";
|
|
37
41
|
export * from "./cluster/persistent-transaction-state-store.js";
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AACpD,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yCAAyC,CAAC;AACxD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qCAAqC,CAAC;AACpD,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AACrD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wCAAwC,CAAC;AACvD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,iDAAiD,CAAC;AAChE,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AACpD,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yCAAyC,CAAC;AACxD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qCAAqC,CAAC;AACpD,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AACrD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wCAAwC,CAAC;AACvD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,iDAAiD,CAAC;AAChE,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export * from "./cluster/client.js";
|
|
2
2
|
export * from "./cluster/cluster-repo.js";
|
|
3
|
+
export * from "./cluster/commit-cert.js";
|
|
3
4
|
export * from "./cluster/service.js";
|
|
4
5
|
export * from "./cluster/rebalance-monitor.js";
|
|
5
6
|
export * from "./cluster/spread-on-churn.js";
|
|
@@ -32,6 +33,9 @@ export * from "./network/network-manager-service.js";
|
|
|
32
33
|
export * from "./network/get-network-manager.js";
|
|
33
34
|
export * from "./reputation/index.js";
|
|
34
35
|
export * from "./dispute/index.js";
|
|
36
|
+
export * from "./cohort-topic/index.js";
|
|
37
|
+
export * from "./matchmaking/index.js";
|
|
38
|
+
export * from "./reactivity/index.js";
|
|
35
39
|
export * from "./cluster/i-transaction-state-store.js";
|
|
36
40
|
export * from "./cluster/memory-transaction-state-store.js";
|
|
37
41
|
export * from "./cluster/persistent-transaction-state-store.js";
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AACpD,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yCAAyC,CAAC;AACxD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qCAAqC,CAAC;AACpD,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AACrD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wCAAwC,CAAC;AACvD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,iDAAiD,CAAC;AAChE,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AACpD,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yCAAyC,CAAC;AACxD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qCAAqC,CAAC;AACpD,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AACrD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wCAAwC,CAAC;AACvD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,iDAAiD,CAAC;AAChE,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC"}
|
|
@@ -95,12 +95,19 @@ export declare class Libp2pKeyPeerNetwork implements IKeyNetwork, IPeerNetwork {
|
|
|
95
95
|
shouldAllowSelfCoordination(): SelfCoordinationDecision;
|
|
96
96
|
recordCoordinator(key: Uint8Array, peerId: PeerId, ttlMs?: number): void;
|
|
97
97
|
private getCachedCoordinator;
|
|
98
|
-
connect(peerId: PeerId, protocol: string,
|
|
98
|
+
connect(peerId: PeerId, protocol: string, options?: AbortOptions): Promise<Stream>;
|
|
99
99
|
private getFret;
|
|
100
100
|
private getNeighborIdsForKey;
|
|
101
101
|
findCoordinator(key: Uint8Array, _options?: Partial<FindCoordinatorOptions>): Promise<PeerId>;
|
|
102
102
|
private getConnectedAddrsByPeer;
|
|
103
103
|
private parseMultiaddrs;
|
|
104
104
|
findCluster(key: Uint8Array): Promise<ClusterPeers>;
|
|
105
|
+
/**
|
|
106
|
+
* Look up the libp2p peerStore for known multiaddrs of the given peer ids.
|
|
107
|
+
* Returns a map from peer-id string to multiaddr strings — empty/missing
|
|
108
|
+
* when the peerStore has no entry. Errors are swallowed; we'd rather fail
|
|
109
|
+
* back to the defense-in-depth drop than throw out of findCluster.
|
|
110
|
+
*/
|
|
111
|
+
private getPeerStoreAddrsByPeer;
|
|
105
112
|
}
|
|
106
113
|
//# sourceMappingURL=libp2p-key-network.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"libp2p-key-network.d.ts","sourceRoot":"","sources":["../../src/libp2p-key-network.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"libp2p-key-network.d.ts","sourceRoot":"","sources":["../../src/libp2p-key-network.ts"],"names":[],"mappings":"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"}
|