aboutsummaryrefslogtreecommitdiffstats
path: root/src/transport/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/transport/mod.rs')
-rw-r--r--src/transport/mod.rs31
1 files changed, 26 insertions, 5 deletions
diff --git a/src/transport/mod.rs b/src/transport/mod.rs
index fcdf56e..2778ed7 100644
--- a/src/transport/mod.rs
+++ b/src/transport/mod.rs
@@ -734,9 +734,10 @@ pub(crate) struct SyncEnvelope {
/// to come (`swarm::hop`).
pub(crate) sent: crate::clock::UnixMillis,
/// Signatures of changes (`document::signatures`): of the changes the message
- /// carries, each writer's latest among them past a few hundred; of a delta, each
- /// writer's latest with changes in it (`Signatures::for_changes`, `for_delta`),
- /// `signatures::MAX_PER_MESSAGE` at most, as `signatures::pack` packs them.
+ /// carries, each writer's latest among them past a few hundred
+ /// (`Signatures::for_changes`), `signatures::MAX_PER_MESSAGE` at most, as
+ /// `signatures::pack` packs them. A delta's are a blob of their own
+ /// (`DeltaSpec::signatures`).
pub(crate) signatures: serde_bytes::ByteBuf,
}
@@ -815,6 +816,21 @@ pub(crate) struct DeltaSpec {
/// Sorted.
#[serde(with = "crate::transport::wire::codec::change_hashes")]
pub(crate) to: Vec<ChangeHash>,
+ /// The signatures vouching for its changes, where any do: a blob of their own
+ /// (`BlobId::Content`), from the node that offered it. Each node holding `to` serves
+ /// the same changes, but its own signatures.
+ pub(crate) signatures: Option<DeltaSignatures>,
+}
+
+/// A delta's signatures as a blob (`DeltaSpec::signatures`): each writer's latest with
+/// changes in it (`Signatures::for_delta`), as `signatures::pack` packs them,
+/// `signatures::MAX_PER_MESSAGE` at most.
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
+pub(crate) struct DeltaSignatures {
+ /// BLAKE3, as `BlobId::Content` names them.
+ #[serde(with = "crate::transport::wire::codec::bytes32")]
+ pub(crate) hash: [u8; 32],
+ pub(crate) size: u64,
}
impl DeltaSpec {
@@ -823,10 +839,15 @@ impl DeltaSpec {
from.dedup();
to.sort_unstable();
to.dedup();
- Self { from, to }
+ Self {
+ from,
+ to,
+ signatures: None,
+ }
}
- /// Names the spec as a blob: SHA-256 over both lists.
+ /// Names the spec as a blob: SHA-256 over both lists (its changes, the same from
+ /// every node holding them).
pub(crate) fn id(&self) -> [u8; 32] {
let mut hasher = Sha256::new();
hasher.update(b"continuum/delta/1");