From 9709df13c4023f08dc920949b6221c17fcd3389e Mon Sep 17 00:00:00 2001 From: Alfonso de la Rocha Date: Wed, 12 May 2021 10:55:47 +0200 Subject: [PATCH 1/2] added doc file in packages --- README.md | 62 +++++++++++++++++++++++++++++++++++ doc.go | 71 ++++++++++++++++++++++++++++++++++++++++ doc/sr-architecture.png | Bin 0 -> 20636 bytes ir/doc.go | 13 ++++---- protocol/doc.go | 6 ++++ vm/doc.go | 7 ++++ xr/doc.go | 8 +++++ 7 files changed, 161 insertions(+), 6 deletions(-) create mode 100644 README.md create mode 100644 doc.go create mode 100644 doc/sr-architecture.png create mode 100644 protocol/doc.go create mode 100644 vm/doc.go create mode 100644 xr/doc.go diff --git a/README.md b/README.md new file mode 100644 index 0000000..f471635 --- /dev/null +++ b/README.md @@ -0,0 +1,62 @@ +# go-smart-record +go-smart-record is the go implementation of Smart Records. Smart Records (SRs) provide +a *public blackboard for protocols*. + +- Detailed docs are available [here]() and throughout the code. + +## Overview +We currently don't have a standardized, shared, public +medium for: +- writing and reading +- by multiple participants +- talking multiple protocols +- scattered in multiple locations. + +Traditionally, DHTs have been used for this purpose. With Smart Record we generalize DHT's +key/value put/get as a separate protocol that can be leveraged by any other protocol +(including DHT protocols). +- UPDATE/GET interface of SRs are used to interact with records stored in a peer, +delegating the FIND operations of records to the DHT (or other available protocols), +decoupling the storage of records from transport protocols. +- Records become portable *data state machines*. They can be sent and updated using pubsub, +aggregated with other versions of the records even if a peer doesn't fully understand it, etc. + +> The layman description of smart records: *"they are DHT values which become publicly updatable JSON/IPLD documents by any peer*. + +SRs are a mixture between a CRDT and a smart contract. A record (for a key) is a replicated state machine holding generic data. +It supports reading, writing, merging and "smart services" (through smart tags included in the SR data model). + +## Model +- Each peer (identified by its public key) writes to a peer-specific documents. +- Peers can overwrite their own documents. +- Every document node has a TTL specified (and eventually paid for) by the writing peer. +- Users of SR can get the full record and process the information stored in the different user-spaces. + +## Architecture +The SR system has the following architecture: +- Syntactic representation [(xr)](./xr): Data model used by protocol and application developers +to interact with smart records. In their current implementation smart-records can +be transformed into the IPLD data model, and serialized/desearialized seamlessly for +transmission or any other purpose. +- Semantic representation [(ir)](./ir): Intemediate representation used by the SR VM. +Syntactic nodes are assembled into semantic nodes. In the assembly process, tags are parsed +and certain nodes may be transformed into smart nodes and trigger additional (i.e. "smart") +operations in the VM. + - The `BaseGrammar` currently supported by default for the semantic representation of SR can be found [here](./ir/base/base.go). +- VM [(vm)](./vm): The VM is responsible for storing and updating the SR stored in a peer. It exposes the SR interface to the "outside world" and triggers smart-tag operations when appropiate. The "outside world" use syntctic nodes to intercat with the VM interface that the VM assembles and stores in its datastore in its semantic form. +- Libp2p SR request/response protocol [(protocol)](./protocol) to interact with other peers SR. It includes a server implementation that instantiates a SR VM and exposes the SR interface to other peers in the network; and a client implementation that can be leveraged by applications and protocols to make requests to SR servers. + +![./doc/sr-architecture.png] + +## Use cases + +Some examples of things you can do with SR: +- Deploy new applications without upgrading the whole network. +- Design protocols that can interact with other protocols. +- Facilitate cryptographic protocols that require a "trusted" party + - Fair exchange +- Unlock application development on the DHT to the public + - Private group chat, custom routing, decentralized limit-order marketbook, etc. + - New app types: Interaction between trustless parties, using a public jury. + +If you want to see SR in action, several examples of SR are provided in [the example directory](./examples) diff --git a/doc.go b/doc.go new file mode 100644 index 0000000..4ab9f92 --- /dev/null +++ b/doc.go @@ -0,0 +1,71 @@ +/* +Package go-smart-record includes the go implementation of Smart Records. Smart Records (SRs) provide +a public blackboard for protocols. + +Overview + +We currently don't have a standardized, shared, public +medium for: + - writing and reading + - by multiple participants + - talking multiple protocols + - scattered in multiple locations. + +Traditionally, DHTs have been used for this purpose. With Smart Record we generalize DHT's +key/value put/get as a separate protocol that can be leveraged by any other protocol +(including DHT protocols). + - UPDATE/GET interface of SRs are used to interact with records stored in a peer, + delegating the FIND operations of records to the DHT (or other available protocols), + decoupling the storage of records from transport protocols. + - Records become portable *data state machines*. They can be sent and updated using pubsub, + aggregated with other versions of the records even if a peer doesn't fully understand it, etc. + + +SRs are a mixture between a CRDT and a smart contract. A record (for a key) is a replicated state machine holding generic data. +It supports reading, writing, merging and "smart services" (through smart tags included in the SR data model). + - The layman description of smart records: *"they are DHT values which become publicly updatable JSON/IPLD documents by any peer*. + +Model + +SRs work as follows: + - Each peer (identified by its public key) writes to a peer-specific documents. + - Peers can overwrite their own documents. + - Every document node has a TTL specified (and eventually paid for) by the writing peer. + - Users of SR can get the full record and process the information stored in the different user-spaces. + +Architecture + +The SR system has the following architecture: + - Syntactic representation (xr): Data model used by protocol and application developers + to interact with smart records. In their current implementation smart-records can + be transformed into the IPLD data model, and serialized/desearialized seamlessly for + transmission or any other purpose. + + - Semantic representation (ir): Intemediate representation used by the SR VM. + Syntactic nodes are assembled into semantic nodes. In the assembly process, tags are parsed + and certain nodes may be transformed into smart nodes and trigger additional (i.e. "smart") + operations in the VM. + + - VM (vm): The VM is responsible for storing and updating the SR stored in a peer. It exposes the + SR interface to the "outside world" and triggers smart-tag operations when appropiate. + The "outside world" use syntctic nodes to intercat with the VM interface that the VM assembles + and stores in its datastore in its semantic form. + + - Libp2p SR request/response protocol (protocol) to interact with other peers SR. + It includes a server implementation that instantiates a SR VM and exposes the SR interface + through the network to other peers, and a client implementation that can be leveraged by + applications and protocols to make requests to SR servers. + + +Use cases + +Some examples of things you can do with SR: + - Deploy new applications without upgrading the whole network. + - Design protocols that can interact with other protocols. + - Facilitate cryptographic protocols that require a "trusted" party + - Fair exchange + - Unlock application development on the DHT to the public + - Private group chat, custom routing, decentralized limit-order marketbook, etc. + - New app types: Interaction between trustless parties, using a public jury. +*/ +package main diff --git a/doc/sr-architecture.png b/doc/sr-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..048d94cfa06eecc6ceeb286558bc299b112c2d4b GIT binary patch literal 20636 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 p7B{E?&%iJZ)L$8u9EySP>Hkxqe0g`fX Syntactic IR --(assemble)--> Semantic IR + JSON --(unmarshal)--> IPLD --> Syntactic IR --(assemble)--> Semantic IR */ diff --git a/protocol/doc.go b/protocol/doc.go new file mode 100644 index 0000000..e4ff429 --- /dev/null +++ b/protocol/doc.go @@ -0,0 +1,6 @@ +// Package protocol implements a libp2p request-response protocol to interact with other peers SR. +// It includes a server implementation that instantiates a SR VM and exposes the SR interface +// to other peers in the network; +// and a client implementation that can be leveraged by applications +// and protocols to make requests to SR servers. +package protocol diff --git a/vm/doc.go b/vm/doc.go new file mode 100644 index 0000000..4e5dab7 --- /dev/null +++ b/vm/doc.go @@ -0,0 +1,7 @@ +/* +Package vm implements a SR VM responsible for storing and updating the SR stored in a peer. +The VM exposes the SR interface to the "outside world" and triggers smart-tag operations when appropiate. +The "outside world" use syntctic nodes to intercat with the VM interface that the VM assembles and stores in its datastore in its semantic form. +- +*/ +package vm diff --git a/xr/doc.go b/xr/doc.go new file mode 100644 index 0000000..8a3230e --- /dev/null +++ b/xr/doc.go @@ -0,0 +1,8 @@ +/* +Package xr implements the Syntactic Representation of smart records. +This is the data model used by protocol and application developers +to interact with smart records. In their current implementation smart-records can +be transformed into the IPLD data model, and be serialized/desearialized seamlessly for +transmission or any other purpose. +*/ +package xr From 69a53e4e711994909c5acfd50cc1c6c15bc5f15c Mon Sep 17 00:00:00 2001 From: Alfonso de la Rocha Date: Wed, 12 May 2021 11:01:12 +0200 Subject: [PATCH 2/2] added figure to README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f471635..68986bc 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ operations in the VM. - VM [(vm)](./vm): The VM is responsible for storing and updating the SR stored in a peer. It exposes the SR interface to the "outside world" and triggers smart-tag operations when appropiate. The "outside world" use syntctic nodes to intercat with the VM interface that the VM assembles and stores in its datastore in its semantic form. - Libp2p SR request/response protocol [(protocol)](./protocol) to interact with other peers SR. It includes a server implementation that instantiates a SR VM and exposes the SR interface to other peers in the network; and a client implementation that can be leveraged by applications and protocols to make requests to SR servers. -![./doc/sr-architecture.png] +![](./doc/sr-architecture.png) ## Use cases