1,006 Matching Annotations
  1. Last 7 days
  2. Jun 2024
    1. It is often the case that Atoms need to wrap the functionality of existing python libraries, or that Atoms that represent abstract syntax trees need to be compiled down to bytecode.

      This alone would not be enough to be reproducible.

      One also needs to specify execution environment.

      E.g., version of Scheme to be used.

      The Nix/Guix way.

    2. Link Node "edge label" Link Node "from vertex" Node "to vertex"

      Link could contain Edges, right?

      Overall, seems it'll be useful for Link to not care about the specific Node type (ConteptNode) for example.

      As otherwise we'd need to make Link and others polymorphic.

      Perhaps polymorphism can be defined once for an abstract Atom type, which can hold Edge or a typed Node.

      E.g., Link Atom Concept Node "edge label" Link Atom Concept Node "from vertex" Atom Numebic Node 42

      Although, I guess a Type hierarchy can be used, defining that every type inherits Atom type. Akin how in Java every class inherits Object.

      Then it's possible to make Link expect Atoms.

    1. However, if an atom is added to B that does not exist in A, then it will be in atomspace B only. If later it is added to A, then two independent copies shall exist: one in B and one in A. Its not quite clear if this is the 'right' thing to do; but defacto, this is what happens

      Re-write refs to Atom X in B to point to the newly added same Atom X in A?

    1. When an AtomSpace inherits from multiple contributors, the contents of that AtomSpace is the set-union of the contributing spaces.
    2. The unique ID of a Node is it's string name

      I thought things are content-addressed. Having a string name is strange.

    3. One of the keys might hold the truthiness of this statement. Another key might hold its probability.

      Aren't these two about the same? Where true is 1.

      And say probability = 0.6 is a more fine-grained expression of truthiness.

      This unimportant nitpick aside, can you annotate say truthiness = true with probability = 0.6?

      (probability (truthiness (owns Jack computer) true) 0.6)

    1. ( Joe , 3 . 5 ) , # T h i s i s n o t v a l i d JSON !

      Umm, use an array? What are these ()?

      Arrays are heterogenous.

    2. this becomes a column-store

      It's a way to compact. Row-based approach can also be used.

      Although columnar is better.

    Annotators

    1. This start-over style of key rotation may well be one of the main reasons that PGP's web-of-trust failed [WOT]. Without a universally verifiable revocation mechanism, then any rotation (revocation and replacement) assertions either explicit or implicit are mutually independent of each other. This lack of universal cryptographic verifiability of a rotation fosters ambiguity at any point in time as to the actual valid mapping between the identifier and its controlling keypair(s). In other words, for a given identifier, any or all assertions made by some set of CAs may be potentially valid
    1. This enables an extremely beneficial property of TELs; that is, the verifiability of transaction events in the TEL persists in spite of changes to Key States in the sealing KEL. In other words, the verifiability of transaction events persists in spite of changes in the Key State
    1. An Authentication Service (AS) that enables group members to authenticate the credentials presented by other group members.

      This is weird. It's meant to be a p2p design, yet it relies on a CA to approve you. It's a single point of failure. May be corrupt.

    2. If a member finds that another member's credential has expired, they may issue a Remove that removes that member.

      That is strange. You need to periodically pop online to renew credentials or you're kicked out.

    1. The Delivery Service cannot guarantee that application messages won't be dropped within the same epoch. To address this, applications can configure the maximum_forward_distance parameter of the SenderRatchetConfiguration. The configuration can be set as the sender_ratchet_configuration parameter of the MlsGroupCreateConfig
    2. The Delivery Service cannot guarantee that application messages will arrive in order within the same epoch. To address this, applications can configure the out_of_order_tolerance parameter of the SenderRatchetConfiguration. The configuration can be set as the sender_ratchet_configuration parameter of the MlsGroupCreateConfig
    3. The Delivery Service cannot guarantee that application messages from one epoch are sent before the beginning of the next epoch. To address this, applications can configure their groups to keep the necessary key material around for past epochs by setting the max_past_epochs field in the MlsGroupCreateConfig to the desired number of epochs

      This is not reliable, no certain knowledge that any further messages won't come.

    1. Capabilities per server: Is a given server participating in the room allowed to...

      Servers should just relay messages.

    2. When a client sends a message, the message is delivered to its provider's server using some provider-internal mechanism. If the provider is not the hub, then the server forwards the message to the hub for delivery.
    1. refinement to this approach, which reduces the amount ofinformation exchanged and the size of the tables, is to have the DBMPsexchange only the oldest of the entries in the first table (oftimestamps of last modifications received from other DBMPs).

      Resembles delta-based state CRDTs optimization technique, where only latest vals are broadcast.

    2. (T1,D1)>(T2,D2) <=> (T1>T2) or (T1=T2 and D1>D2)

      Resembles tie-breaking based on origin ID, seen in systems that use other T (e.g., Lamport Clock).

    1. In [2], Berners-Lee and Connolly proposed Delta, an ap-proach in which the RDF-Graphs differences are calculatedon their serialized forms

      This resembles the way Git works, we have snapshots and deltas are calculated out of them.

      Ironically, that made Git use deltas more, not less.

  3. May 2024
    1. DAG-based consensus protocol are all the rage

      ^

    2. A Grassroots Architecture for the Digital Realm.

      ^

    3. virtual blockchains
    4. Given a set of n agents, at most f of which arefaulty and the rest are correct, a fault-resilient supermajority, or supermajorityfor short, is any fraction of agents greater than n+f2 . For example, if f = 0 thena simple majority is a supermajority, and if f < 13 then 23 is a supermajority
    1. The master key may also be used to sign other items such as the backup key

      Given her master key is compromised (and that is the case when she'd like to rotate) nothing stops the compromised to issue and sign a new backup key.

      Better: use pre-rotation of KERI.

    2. a master key (MSK) that serves as the user’s identity in cross-signing and signs their other cross-signing keys

      Is a point of failure / weakest link in this chain - compomise of one key is enough to compromise Alice's identity.

      Also, requires it to be replicated across her divecise, if she wishes to add new device from any device.

    1. In addition to connectivity, there are other Matrix-centric problems to be solved. In a world where each device is potentially running its own homeserver, we will need a new approach for handling user identities
    2. Since federation within a Matrix room is effectively full-mesh, you need to be able to exchange data with all servers that are participating in a given room directly
    1. from the perspective of the homeserver which created the event

      Homeservers create events, not users.

    2. All API endpoints within the specification are versioned individually. This means that /v3/sync (for example) can get deprecated in favour of /v4/sync without affecting /v3/profile at all. A server supporting /v4/sync would keep serving /v3/profile as it always has

      It's cool, I guess. But then leaves one wonder, are they compatible? How to tell? There should be a kind of manifest then that maps v4 to "playing well together" granular vs.

    3. For example, if /test were to be introduced in v1.1 and deprecated in v1.2, then it can be removed in v1.3.

      That's.. not intuitive for those familiar with semver.

      Like, bump it to 2.0 instead. It's a breaking change. Everybody will get it. What's the point of the second digit if it guarantees "maybe nothing will be broken" - tell it explicity, is it or is it not.

    4. vX.Y

      v bit makes it non-semver.

      Better: semver. It's widely known. You can leave Z in X.Y.Z as 0.

    5. Users may publish arbitrary key/value data associated with their account

      This is personal information one may wish to chose who gets access to.

    6. Usage of an IS is not required in order for a client application to be part of the Matrix ecosystem. However, without one clients will not be able to look up user IDs using 3PIDs

      Better: linke from 3rd party to Matrix.

      E.g., by adding on Twitter link to Matrix ID.

    7. Each state event updates the value of a given key.

      I hope it's a CRDT update.

    8. file transfers

      Better would be to include files as is. Use hash of it in an event. Download from whoever has it, the IPFS way. Only between friends

    9. Every event graph has a single root event with no parent

      Weird. That means one user must start a topic. Whereas a topic like "Obama" could be started by multiple folks, not knowing about each other, later on discovering and interconnecting their reasoning, if they so wish.

    10. Events exchanged in the context of a room are stored in a directed acyclic graph (DAG) called an “event graph”.

      Well, better call it "event DAG" then?

      Or, "event hash-DAG" / "Merkle-DAG".

    11. type values MUST be uniquely globally namespaced following Java’s package naming conventions, e.g. com.example.myapp.event

      We're in the Web. Better: URIs.

    12. In a mobile client, it might be acceptable to reuse the device if a login session expires, provided the user is the same

      Yeah, we wouldn't have this problem if agent's key been authorized.

    13. each device gets its own copy of the decryption keys

      Whoa! Sharing the one and only private key is.. sub-optimal.

    14. each of which would be its own device

      Better call them "agents". "An app is a device" sounds incorrect.

    15. signing the message in the context of the graph for integrity

      That's weird. User's not in chare of creating an event (as user-generated event is not a complete event in Matrix model, it lacks causal history).

      Relying for creation of an event on a server means you need to be online in order to use apps.

      Better: let user's device be enough, so user can create events offline, sync it later. Server is dumb - just relaying it to user's friends.

    16. Room data is replicated across all of the homeservers whose users are participating in a given room
    17. and shares data with the wider Matrix ecosystem by synchronising communication history with other homeservers and their clients

      That's a con. There's no need to sync globe-wide, creating a giant ledger. You have a set of peers that you want to share your stuff with (friends), leave it at that.

    18. Use of 3rd Party IDs (3PIDs) such as email addresses, phone numbers, Facebook accounts to authenticate, identify and discover users on Matrix

      Good stuff. I.e., associate existing accs.

    19. Managing user accounts (registration, login, logout)

      Better: always log in with a server, unless you choose to migrate.

    20. Extensible user profile management (avatars, display names, etc)

      Better: let peers have personal profiles of their friends.

      Like you do with your contacts on phone. You know their id (phon number), you give it a name, assign a pic. It's up to you.

    21. Extensible user management (inviting, joining, leaving, kicking, banning) mediated by a power-level based user privilege system

      Additionally: community-based management, ban polls.

      Alternative: per-user configuration of access. Let rooms be topics on which peers discuss. A friend can see what he's friends and foafs are saying.

    22. REST

      That's a standard - good for devs. Yet it's grotesque.

    23. JSON

      Meh. Verbose, bad types, needs parsing.

    24. The user should know precisely where their data is stored

      And be able to store it locally, on trusted devices, replicated.

    25. no single points of control over conversations or the network as a whole

      Ideally support p2p. Servers/brokers are optional.

    26. Sending and receiving extensible messages

      Better: text messages & structured stuff (data).

    27. across a global open network of federated servers and services

      Better: across devices (p2p) and (optionally) their servers.

    28. Eventually-consistent cryptographically secure synchronisation of room state

      That's good. Matrix Event Graph is cool.

    1. causal order does not refer to the actual ‘real’ causality of the messages
    2. Further, we conjecture that the only non-trivial Byzantine-tolerantCRDT design is a grow-only HashDAG as it is done in the Matrix Event Graph
    3. Fig. 2
    4. Equivocation and Omission remain as the only optionsfor an attack on CRDT layer
    5. the MEG builds up a Hash-based DAG (HashDAG) data structure
    1. MERKLE-CLOCKS
    2. ipfs-log24 is, to our knowledge, the first existinginstance of a Merkle-CRDT as described here

      ^

    3. This, in turn, requires either having knowledge of thecurrent replica-set or using an external source of truth (i.e. ablockchain), a system constraint that we did not have before

      Snapshot requires knowledge that everybody knows the snapshotted stuff.

      Given we have derived total order, we can snapshot and garbage collect ops that been received and seen by all.

      Given members are managed as ops - we know who members are at the point of total ordering.

    4. Operations are easy to define, asthey just need to be commutative, so that the resulting state willbe the same in every replica regardless of the order in whichthey have received the operations

      And non-commutative ops can be supported by adding derived total order.

    5. wecan sign the broadcast messages, thus leaving signatures outof the Merkle-DAG

      We lose trust in messages. They don't prove authenticity. So peers talk "off the record". And we can't trust anything said.

    6. Comparing version vectors betweenpayloads is an inclusion check without the need to perform aDAG-walking

      Version Vectors does not represent equivocations / forks.

      E.g., it conveys "Alice's 3rd" (is X remotely). Where Alice could have created equivocation, and locally Alice's 3rd event is Y.

    7. It is clear thatthis approach will bring some benefits

      Namely, less metadata.

      Perhaps it could be mitigated via metadata compaction on sync and snapshots to garbage-collect history.

    1. Figure 9.13. Delegated Establishment Event.

      Why there is no perms in the Delegating Event and are in Delegated Event? I'd expect it to be the other way around.

    2. Custodial Key Management
    3. Using seals, the delega-tor’s and delegate’s event streams are cross linked together
    4. applications may benefit from other delegative properties such as the ability to attenuatecontrol authority

      how so?

    5. A nested set of delegation levels may be used to form a dele-gation chain or a delegation tree
    6. In some critical interactions, however, the trade-off between convenience and security madeby reusing signing keys for multiple interaction events may not be acceptable. In this case, amore secure approach is to combine an interaction event with a rotation event by adding a pay-load data structure to the rotation event.
    7. To elaborate, a successful live exploit must compromise the unexposed next set of private keysfrom the public-keys declared in the latest rotation
    8. Figure 11.5. KERL for a Recovery Rotation Event.

      Rotation event as authorization of below events.

    9. N ≥ 2F + 1
    10. This case is prevented when the inter-section subset of any two agreement sets is large enough to include at least one honest witness

      Yup, that's why we have M > (n+f)/2

      Which for f = 1/3n, (3/3+1/3)/2 = (4/3)/2 = 2/3

    11. When sufficient agreement may occur on more than one version of an event then a valida-tor may not be able to determine which version is authoritative in order to either to hold the con-troller accountable or to reconcile that event with respect to other validators

      Crazy idea: rotate key after each interaction event.

      Thus an interaction is deemed valid only if the key's been rotated. Although what's the use if keys are non-extractable in a HSM. Their security = security of the pre-rotated key. I.e., given no hardware attack vectors, decive gets stolen - both approaches are compomised.

    12. but where the witnesses are not under its control such that the a validator or originalcontroller may nonetheless trust that there may be no more that F faulty witnesses

      I.e., witnesses may be unaffiliated, providing trust.

    13. The controller is responsible to promulgate a mutually consistent set of receipts, i.e. a suffi-cient agreement of size M ≥ M C .

      Why? Witnesses can gossip with each other acks about events they learned from the controller.

      As mentioned further.

    14. Without a threshold a validator may choose to hold a controller ac-countable upon any evidence of duplicity which may make the service fragile in the presence ofany degree of such faulty behavior
    15. Suppose instead that N = 3F + 1 , then a correctagreement is guaranteed as before but the agreement will have 2F + 1 nodes (quorum size) anddespite some F of those 2F + 1nodes becoming unresponsive, the remaining F + 1 honest andresponsive nodes will be able to propagate that correct safe agreement to the next round

      The reason behind N=3F+1, is that F nodes may behave duplicitly. So we need ((N-F) / 2) + 1 to have it safe.

    16. But there is no guarantee that the nodes in agreement (quorum) will knowthey came to agreement in a subsequent round because as many as F of the nodes in agreementin a given round may subsequently become unresponsive in the next round

      But we have f+1 for agreemend, so it will be live.

    17. This may be called a multi-controller or collec-
    18. An escrow cache of unverified out-of-order event provides an opportunity for malicious at-tackers to send forged event that may fill up the cache as a type of denial of service attack. Forthis reason escrow caches are typically FIFO (first-in-first-out) where older events are flushed tomake room for newer events.

      This may misfire, when there's a ton of valid events to sync, whose amount is greater than the cache limit.

      May happen when adding a new witness, requiring to sync the entire history. (do we need to provide it the entire history though? only the last not-yet-verified events are of interest for the controller to be signed by the witness)

    19. UTP

      UDP?

    20. Event escrow isan optional implementation specific configurable capability of controllers and witnesses imple-mentations
    21. Each time the controller connects to awitness to send new events and collect the new event receipts, it also sends the receipts it has re-ceived so far from other witnesses
    22. When network bandwidth is less constrained then a gossip proto-col might provide full dissemination with lower latency than a round robin protocol
    23. When a rotation amends the witnesses it includes the new tally, the setof pruned (removed) witnesses and the set of newly grafted (added) witnesses. This is shownbelow.
    24. where K ≤ L

      And K > L / 2, I guess. Otherwise two blocks can be authZ in a fork.

    25. The specific details of this recovery are explained later (see Section 11.6). In gener-al, the witnessing policy is that the first seen version of an event always wins, that is, the firstverified version is witnessed (signed, stored, acknowledged and maybe disseminated) and allother versions are discarded

      Seems to harm convergence

    26. the message payload inside an IP packet includes aunique identifier provided by the identity system that is exclusive to the sender of the packet

      Including identifier in message, coupled with key-pair->identifier mapping is meant to give authenticity - that message came from the identifier.

      Problem 1: keypair will be eventually revoked, how to convey authenticity of messages before revokation and not after?

      Solution 1.1: Issue event with logical revokation time. I.e., revocation is issued on Fri, but meant to take place logically on Thu.

      Then, messages received on Fri and forward, signed by that key-pair, will be deemed not authentic.

      Solution 1.2: Use multiple signatures to prove authenticity.

      Then, even if one gets revoked - authenticity holds.

      Con: metadata overhead, need for keypair agents to be connected, higher delay - meh.

      Is there value to include identifier, given recepient still needs to resolve mapping keypair->identifier and keypair can be binded to one identifier only.

      Yes, identifier hints how to resolve it.

    27. Also more recently theTrusted Computing Group (TCG) uses the term “implicit identity” and “embedded certificateauthority” to describe the process whereby device identifiers are automatically generated by theassociated computing device [143]
  4. idp2p.github.io idp2p.github.io
    1. An identity is also a topic to subscribe to (i.e. the ledger is based on subscription)

      ID as pubsub topic.

    1. In contrast, a relay is an entity that passes along encrypted messages without understanding or decrypting them. It's focused on network routing only.

      Mediator is a "smart" relay, in that it knows the adressee and can relay with that in mind.

      Relay, on the other hand, does not know the destination, it works deterministicly. Iff that relay would always route messages to Bob, then Alice doesn't need to tell anything specific to the relay.

    2. Two Dimensions
    1. Again, the discloser can retain the ‘Admit’ message as non-repudiable digital proof that the disclosee has admitted the disclosure of the ACDC

      What stops disclosee to not send the "Admit"? Thus being repudiable to "I haven't received the promised and agreed upon info".

    1. Events in the TEL are sealed (anchored) in a Key Event Log (KEL) using seals.

      Every TEL event gets anchored?

    2. r can provide an API where transaction events or their seal references and their KEL seal references can be looked up by the SAID of the ACDC associated with the transaction event

      I guess lookup is meant to be specified, and not ad-hoc. So software can do it without human (programmer) guidance.

    3. NOT

      This serves to convey different semantics than the above fields. I'd expect it to be in a different field.

    4. When an Edge block does not include a SAID, d field, then the node, n field must appear as the first field in the block.

      Strange. All we need is d. Introducing n makes it not uniform. I'd expect there to be d solely, replaced at run-time with it's content.

    5. Notable is the fact that no top-level type fields exist in an ACDC. This is because the Schema, s, field itself is the type field for the ACDC and its parts
    6. where each Edge block is a leaf of a branch

      Rather, "where each Edge block is a leaf or a branch".

    7. Without the entropy provided the UUID, u, field, an adversary may be able to reconstruct the block contents merely from the SAID of the block and the Schema of the block using a rainbow or dictionary attack on the set of field values allowed by the Schema

      I.e., knowing a schema makes it possible to derive content from its hash.

    1. blockchains are too expensive, too complex, too hard to scale, and too slow-moving in their governance
    2. Open identity systems should stay agnostic to all silos and blockchains

      I.e., identity system should be ledger-agnostic.

    3. consensus network called KERI
    1. Any selective disclosure is potentially ineffective unless per-formed within the confines of a contractually protected disclosure that imposes an incentive onthe disclosee (verifier) to protect that disclosure (counter-incentive against the exploitation ofthat discloser).
    1. This makes the DID functionally equivalent to a did:key value, and visually similar, except that a peer DID will have the numeric algorithm as a prefix, before the multibase encoded, multicodec-encoded public key

      Then why have it?

  5. matrix-org.github.io matrix-org.github.io
    1. In order to do this, a form of network-wide election takes place, where the node with the numerically highest ed25519 public key will win

      Eh, that doesn't seem fair. What stops one generating keypairs until he gets a decently high one, cheating his chances?

    1. Even though the Pinecone address space is considered to be global in scope, it is important to note that there is no true “single” Pinecone network. It is possible for multiple disjoint and disconnected Pinecone network segments to exist
    1. In some cases, source addresses could be sealed/encrypted, although this is not implemented today
    1. but limiting the conference to 7 or 8 participants given all the duplication of the sent video required. In Element Call Beta 2, end-to-end encryption was enabled; easy, given it’s just a set of 1:1 calls.

      I imagine having to transmit stuff to every peer would not work well for low-bandwidth devices.

      Also, complete connectivity graph is a LOT of connections.

      Additionally, given one channel fails - recipient doesn't see content, while others do. (they could have broadcasted it, hey!)

      Also, won't scale for streaming.

    2. instead it’s more of a QoSed incremental sync
    3. So if the network roundtrip time to your server is even 100ms, and Sliding Sync is operating infinitely quickly, you’re still going to end up showing a placeholders for a few frames

      What stops loading context around the window?

      Better off, start from windows position and sync everytihng from that priority.

      I.e., prioritize what gets replicated by how user's acting.

    4. Faster Joins (lazy-loading room state when your server joins a room)
    5. The European Union’s Digital Markets Act (DMA) is a huge step in that direction - regulation that mandates that if the large centralised messaging providers are to operate in the EU, they must interoperate
    6. 111,873,374 matrix IDs on the public network, spanning 17,289,201 rooms, spread over 64,256 servers
    1. However, certain algo-rithms executed on the MEG do not scale well with thenumber of parent events, i.e., they can become very re-source intensive, especially when old parts of the MEGare referenced as parents [8]. In practice, the maximumnumber of parent events therefore has to be restrictedto a finite value d.
    1. The protocol flow is therefore modified as follows

      Looks complex. Requires online SI OP. Sub-optimal UX.

    1. 푏 the first demonstration of 푞 being Byzantine

      ^

    2. the blocklace stores notonly valid blocks but also blocks that constitute a proof thattheir creator is Byzantine

      Only the first equivocation evidence is needed to be included, right? Subsequent equivocations can be buffered.

    3. Thus only the valid subset of theblocks will be considered as state by the replicated abstrac-tion (the CRDT).

      Note: here valid seems to refer to both well-formed and valid.

      Detection of this malformedness is possible as funciton(block). Thus a correct node will not accept such block's ops and won't make more atop.

      Additional check is required to ensure that nodes do that^.

      Nodes that do not comply are byzantine as well, and their ops can be "not observed" as well.

    4. Thus the harm a Byzantine agent may cause is limited to afinite prefix of the computation

      If it's a permission-less system, an agent may spawn more nodes to act Byzantine. So I guess the strategy of "accept equivocation in order to spread the knowledge of Byzantine agents" is suitable for permissioned systems only.

    5. On the contrary, sets ofrandomly generated numbers or sets of signed-hashes (inthe case of a blocklace) do not allow such a compact repre-sentation

      Nothing stops to derive versions for events, as their virtual chain length. But Version Vectors are not BFT.

    6. Virtual chain axiom
    1. Conclusions

      Use content-based ids.

      Yet node may equivocate. Equivocations are not detectable, as no virtual chain is proposed to have.

      Further, how to limit harm of equivocations was not mentioned.

    2. For example, in WOOT [ 33]and YATA [ 32 ], an insertion operation must referencethe IDs of the predecessor and successor elements, andthe algorithms depend on the predecessor appearingbefore the successor in the sequence. The order ofthese elements is not apparent from the IDs alone, sothe algorithm must inspect the CRDT state to checkthat the predecessor and successor references are valid

      Yeah, again, have causality in DAG. Or better, don't use this kind of causality. Referring to heads and having op like "insert at position X" will be enough to restore the context - what's befere, what's after.

    3. but Byzantine nodes maynot set this metadata correctly

      Strange. If we do have causality as refering to "heads" by content-address - that's not a problem. Won't happen.

      I.e., have causality at the DAG level, not in payloads.

    4. The 3f + 1 assumption meansthese protocols cannot be deployed in open peer-to-peersystems, since they would be vulnerable to Sybil attacks [ 15].

      I.e., 3f+1 is not suitable for open peer-to-peer systems.

    5. blockchains [ 5 ]

      refs to Hashgraph

    6. If authentication of updates is desired, i.e. if it is importantto know which node generated which update, then updatescan additionally be cryptographically signed. However, thisis not necessary for achieving Strong Eventual Consistency
    7. When updates are generatedconcurrently and then merged, the next update containsmultiple predecessors

      Given many updates are merged at the same time pointers are = many. But given we merge right away having learned an update - we always merge two updates - hence two pointers.

    8. Consequently, if updateu2 depends on update u1, it could happen that somenodes deliver u1 before u2 and hence process bothupdates correctly, but other nodes may try to deliveru2 and fail because they have not yet delivered u1. Thissituation also leads to divergence.

      I.e., linking by non-content-based id is not BFT.

    9. Say a Byzantine node generates twodifferent updates u1 and u2 that create two differentitems with the same ID. If a node has already deliveredu1 and then subsequently delivers u2, the update u2will be rejected, but a node that has not previously de-livered u1 may accept u2. Since one node accepted u2and the other rejected it, those nodes fail to converge,even if we have eventual delivery

      I.e., giving nodes IDs that are not content-based is not BFT strategy.

    10. Unfortunately, version vectors are not safe in the presenceof Byzantine nodes, as shown in Figure 1. This is because aByzantine node may generate several distinct updates withthe same sequence number, and send them to different nodes(this failure mode is known as equivocation). Subsequently,when correct nodes p and q exchange version vectors, theymay believe that they have delivered the same set of updatesbecause their version vectors are identical, even though theyhave in fact delivered different updates.

      Version vectors are not BFT

    11. This algorithm has the downside thatmany updates may be sent to nodes that have already re-ceived them from another node, wasting network bandwidth

      I.e., relying on stale knowledge of what others know in order to sync them may result in many "knew that already" cases.

    12. In some cases, a causal de-livery algorithm additionally ensures that when one updatehas a dependency on an earlier update, the earlier update isdelivered before the later update on all replicas
    13. The network is not necessarily com-plete, i.e. it is not required for every node to be able to com-municate with every other node
    14. they must either exer-cise centralised control over which nodes are allowed to jointhe network

      Not necessarily. PoS can be used to invite, sharing with invited member the invitee's stake. Thus it does not affect consensus.

      As stake determines weight on consensus.

      And as stake may determine how often peers choose to sync to that node. Thus limiting harm done on the communication level by low-stake Sybils.

    1. Smart Merge is built on a customized adaptation of Myer's diff algorithm and Google's diff-match-patch

      The Git's way. Snapshots as the source of truth, derive deltas to merge.

  6. Apr 2024
    1. received_orders

      Begs for gossip-about-gossip.

    2. Once a recipient has received one copy of a message, they MUST ignore subsequent copies that arrive, such that resends are idempotent

      Strange. I'd thought that hash-based equility check would be enough to give idempotence on receival. "I've seen it already, noop".

    3. When Alice and Bob are both bidding in an auction protocol, each of them marks their first bid with sender_order: 1, their second bid with sender_order: 2, and so forth.

      If we were to use causal broadcast / Cordial Dissemination - they would not arrive out-of-order.

      Cordial Dissemination would require gossip-about-gossip though.

    4. sender_order

      A way to construct self-parent chain in thread's context.

    1. We suggest that the messaging standards all erred by treating public-key encryption and digital signatures as if they were fully independent operations

      I'd expect that

    2. When B receives A's signed & encrypted message, B can't know how many hands it has passed through, even if B trusts A to be careful.

      Craft a new pub key and disclose it only to Alice?

    3. But in reality, when Charlie gets Alice's message via Bob, Charlie very likely will assume that Alice sent it to him directly

      Sign&Encrypt is not meant to be user-facing.

      Devs should take care of not having ambiguity of the recipient if it's needed.

    4. In this case, Alice will be blamed conclusively for Bob's exposure of their company's secrets.

      Again a wrong assumption. Alice signed the "sales plan". Yet we know nothing of whether she sent it to anybody, thus she can't be blamed for it popping somewhere.

    5. Here, Bob has misled Charlie to believe that ``Alice loves Charlie.''

      Charlie here takes on wrong assumption that "I love you" is meant for him. Whereas what Alice expressed with her message is ambiguous, a simple attestation that she loves something.

    1. forces the sender to talk “on the record”

      Signature is "on the record".

    2. centralized servers and certificate authorities perpetuate a power and UX imbalance between servers and clients that doesn’t fit with peer-oriented DIDComm Messaging
    3. web security is provided at the transport level (TLS); it is not an independent attribute of the messages themselves

      I.e., in web, parties that reside on the ends of an encrypted channel authorize each other. Whereas data that's passed between them does not have this authorization built in.

      Taking a reverse approach, akin to having locks on data and not a channel, we can have authorization on data and not the channel.

    1. The Broadcast Channel API allows basic communication between browsing contexts (that is, windows, tabs, frames, or iframes) and workers on the same origin.

      Broacdast Channel API works on the same origin.

    1. withtokens provided by their IdP.
    2. The new device needs to receive the secret s withoutleaking it to any third party
    3. Finally, EL PASSO supports multi-device scenarios. It en-ables users to easily register new devices (e.g., laptop, phone,tablet) and supports easy identity recovery in case of the theftof one device. It natively supports 2FA: An RP may requestand assess that users connect from two different devices inorder to sign on their services (multi-device support).
    4. intra-RP linkability

      Perhaps user's ID for that RP can be a hash of userID + RPID.

    1. Commonly, this is accomplished through a pub-licly available list of credential statuses (either listing the revokedor valid credentials).

      Claims about one's identity (authorized devices), could be maintained by the quorum of these devices. Or by a quorum of one's devices and his friends.

    2. Trust anchors affirm the provenance of identitiesand public attributes (DIDDocs)

      DID is an id + a way to resolve associated to ID info (DIDDoc). Seems strange to couple the two. I'd like to have one ID and plenty of methods to resolve info behind it. A kind of MultiDID.

    3. Alternatively, a simple public key canserve as an identifier, eliminating the DID/DIDDoc abstraction2

      This would require having private key portable. Which is not secure.

    1. If one user marks a word as bold and another user marks the same word as non-bold, thereis no final state that preserves both users’ intentions and also ensures convergence

      Having "bold" mean some semantics, e.g., important.

      Then they merge. Alice does not consider it important, Bob does -> render both. E.g., Bob's "importance" expressed as bold, Alices "not important" as grayed text.

    2. If the context has changed

      E.g.,

      "Ny is a great city."

      Alice removes "great".

      Bob wonts to replace it with "gorgeous", by removing "reat" and adding "orgeous".

      Having merged:

      "Ny is a orgeous city."

      Begs for semantic intent preservation, such as "reword great to gorgeous".

    3. Rather than seeing document history as a linear sequence of versions,we could see it as a multitude of projected views on top of a database of granular changes

      That would be nice.

      As well as preserving where ops come from.

      Screams to have gossip-about-gossip. I'm surprised people do not discover it.

    4. Another approach is to maintain all operations for a particular document version in anordered log, and to append new operations at the end when they are generated. To mergetwo document versions with logs 𝐿1 and 𝐿2 respectively, we scan over the operations in𝐿1, ignoring any operations that already exist in 𝐿2; any operations that do not exist in 𝐿2are applied to the 𝐿1 document and appended to 𝐿1 in the order they appear in 𝐿2.

      This much like Chronofold's subjective logs.

      Do the docs need to be shared in full? The only thing we need is delta ops.

    5. Peritext works bycapturing a document’s edit history as a log of operations

      How that works is not mentioned.

      I guess ops are collected into logs, per member, based on their IDs.

      A step short from having gossip-about-gossip.

    6. but since a given client never uses the same counter value twice, the combination ofcounter and nodeId is globally unique

      What stops him?

    7. Another area for future exploration is moving and duplicating text within a document. If twopeople concurrently cut-paste the same text to different places in a document, and then furthermodify the pasted text, what is the most sensible outcome?
    8. span can be deleted once causalstability [2] has ensured that there will be no more concurrent insertions into that span
    9. Fig. 4

      Uhh, I'd imagine "remove" would refer to "bold" annotation.

      Otherwise, there can be another "bold" with t < 20, that would be accidentally removed.

      Syntactic intent is not preserved.

    10. For example, a developer mightdecide that colored text marks should be allowed to overlap, with the overlap region rendering ablend of the colors

      That would be better for user to decide.

      I think a good default is to express semantics explicitly.

      I.e., for Bob to not automatically state his utterance as important just because it's atop of Alice's, that she considers important.

      If Bob tries to reword - ok. If Bob want to add - no.

    11. No

      Given Bold, Italic, Colored are syntactic representation of semantics that we do capture - they can overlap.

      Moreover, in Bob's user-defined mapping from semantics to syntax, Bob's "important" can be bold, while Alice's "important" can be italic.

    12. Conflicts occur not only with colors; even simple bold formatting operations canproduce conflicts

      Again, let them capture semantics.

      Say, "Alice considers "The fox jumped"" as important. Alice changes mind, only "The" is important. Bob considers "jumped" as important.

      Result: Alice considers "The" important. Bob considers "jumped" important.

    13. Consider assigning colored highlighting to some text

      Color is meant to convey some semantics. Like "accent", or "important". These semantics can coexist, just like italic and bold.

      So a solution may be to: 1. Let users express semantics of their annotations 2. Give user-customizable defaults of how they are to be rendered.

      Ensuring, that semantics's render is composable. I.e., it conveys originally asigned semantics.

    14. Furthermore, as with plain text CRDTs, this model only preserves low-level syntactic intent,and manual intervention will often be necessary to preserve semantic intent based on a humanunderstanding of the text

      Good remark of syntactic vs semantic intent preservation.

      Semantics are in the head of a person, that conveys them as syntactic ops. I.e., semantics get specified down to ops.

      Merging syntactically may not always preserve semantics. I.e., one wants to "make defs easier to read by converting them to CamelCase", another wants the same but via snake-case. Having merged them syntactically, we get Camel-Snake-Case-Hybrid, which does not preserve any semantic intent. The semantics intent here are not conflict-free in the first case, though.

      Make defs readable | | as CamelCase as Snake Case | | modify to CC modify to SC They diverged at this point, even before getting to syntactic changes.

      The best solution would be to solve original problem in a different way - let defs be user-specific. But that's blue sky thinking. Although done in Unison, we do have syntactic systems around.

      So staying in a syntactic land, the best we could do is to capture the original intent: "Make defs readable".

      Then we need a smart agent, human or an AI, specify it further.