- From: Melvin Carvalho <melvincarvalho@gmail.com>
- Date: Fri, 21 May 2021 13:34:52 +0200
- To: public-rww <public-rww@w3.org>
- Message-ID: <CAKaEYh+AxgabG1V_Xda_ek9mGjG88_0xdJt_y+ka1Phahhngrg@mail.gmail.com>
this is the outline of a strategy to track state changes in a temporal read-write web by no means the only strategy, but an aim to generalize some of the recent discussions 1. Data as a declarative state machine The data can be considered as a declarative state machine, offering state transitions Simple case is one document, but it's useful to have multiple documents over a set of quads (linked data) or directory tree (file system) It seems standard practice to track this data using a hash function. So the first step would be to hash the document or tree or knowledge base into a chain of hashes. Git or other VCS systems do this, similarly with single documents you could take a sha2, for example, and maintain a chain of hashes that way 2. Bootstrapping a timestamp server to witness hashes Robust global timestamp servers have existed for over a decade, popularized by the bitcoin project, often referred to as block chains, because data is tied to those timestamps in the form of 'blocks' of data. Users compete for space on those blocks based on an auction basis, as they are a finite resource, to make them spam resistant The chain of hashes described in (1) can be tracked on the blocks of the timestamp server, which tend to have a common transaction format. What is needed is hash1,hash2,hash3...hashn to be sequenced in time from a definitive start, or genesis. That genesis can become an identifier for the chain of linked data which we wish to securely witness. Block chains typically follow a transaction in time from spent -> unspent. The terminology is that of inputs and outputs. This can be thought of as source and destination. The transactions are identified as cryptographic hashes, with an array of outputs. In order for a timestamp server to track a chain of linked data, we need to construct a URI for the linked data hashes (hash1,2...n) and for the block chain transactions (tx1,2,...) with the first tx being a genesis identifier Gaps needed to fill: create URIs for hash1,2,...n. Create URIs for tx1,2...n 3. Two way links between state machines Two way links between those state machines ensure strong coupling between the two systems providing a bootstrap. So from the case of the linked data, you need a pointer to the transaction URI. And from the block chain you need a pointer to the hash URI. From a block chain there's a couple of ways to do this, one is the so-called OP_RETURN which allows you to embed data in at transaction. The other is known as 'tweaking' a public key on order to add a hash (hash1,2...n in the web chain) Linking from linked data to a transaction, once you have a URI can be done in a number of ways. But as linked data is designed to link to other URIs it's quite doable by putting it onto the data structure. Another technique, for example in VCS is to put a link in the commit message, as commit messages are part of the chained tree 4. Ensuring Temporal Integrity Once (1), (2), (3) are in place. Change can be made to the state machine, and new hashes generated. With the example of git we can commit hashes to a file system, or a centralized server such as github But, If we want to commit at web scale, we can do so as follows: Firstly generate a hash of the new state. Then move the transaction in the block chain along to point to this new state. The transaction itself has PKI based ownership rights which have a variety of ways to manage and transfer ownership including so-called "multi sig" ownership where any N of a given M actors need to agree on a transition Finally, point the web chain back to this new transaction once it is confirmed This will progress the web chain in time and mirror it on the underlying time stamp server The resulting system creates a temporal read write web state machine anchored to the strong assurances of an underlying timestamp server This is a sketch outline of something that could be turned into a prototype or MVP, and also illustrating the gaps in technology that we need, namely to create two URI schemes, to hash web state, and describe state transitions, for data and for agents Appreciate this is a sketch outline right now, feedback welcome!
Received on Friday, 21 May 2021 11:35:17 UTC