Skip to content

Commit

Permalink
Initial import of gitbook docs
Browse files Browse the repository at this point in the history
  • Loading branch information
Brian Chamberlain committed Mar 16, 2020
1 parent c31341a commit ccbfbe7
Show file tree
Hide file tree
Showing 61 changed files with 1,285 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .gitbook.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
root: ./docs/

29 changes: 29 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Welcome

## Welcome to the Baseline Protocol Community

The Baseline Protocol initiative was [announced](https://consensys.net/blog/press-release/ey-and-consensys-announce-formation-of-baseline-protocol-initiative-to-make-ethereum-mainnet-safe-and-effective-for-enterprises/) on March 4, 2020 and launched as an [OASIS](https://oasis-open-projects.org/) open source project on \[ March X, 2020 \], supported by fourteen founding companies. More companies joined the effort shortly thereafter and continue to do so. \[Link to full list and roles.\]

The work of the community is maintained under a public domain license at
[**https://github.com/ethereum-oasis/baseline**](https://github.com/ethereum-oasis/baseline).

You will find in the Repo the code of a procurement demo called **Radish34**. And separately, there is a folder that will contain the specifications, reference code and other material constituting the **Baseline Protocol**, as the community derives it from the initial Radish34 proof of concept.

There are lots of opportunities to get informed, get involved, and **get value** out of defining requirements, developing reusable components, and ultimately deploying the Baseline Protocol in your own offerings.

**Go** [**here**](baseline-protocol/community/) **for details on how to get involved.**

## The Baseline Protocol

The Baseline Protocol is an approach to using the public [Mainnet](baseline-basics/glossary.md#mainnet) as a common frame of reference between systems, including traditional corporate systems of record, any kind of database, and even different blockchains or DLTs. It is particularly promising as a way to reduce capital expense and other overheads while increasing operational integrity when automating business processes across multiple companies.

The approach is designed to appeal to security and performance-minded technology officers.

You can find all the details on the Baseline Protocol [here](baseline-protocol/protocol.md).

## The Radish34 Demo

In 2019, three members of the Baseline Protocol community, EY, ConsenSys and Microsoft, got together to build a proof of concept showing how enterprises could safely and effectively use the public Ethereum network to conduct end-to-end supply chain operations without compromising corporate information security norms and practices. What the team learned from that effort led to the formation of the Baseline Protocol initiative.

You can find the details on Radish34 [here](radish34-demo/radish34-start.md).

File renamed without changes.
49 changes: 49 additions & 0 deletions docs/SUMMARY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# Table of contents

* [Welcome](README.md)

## Radish34 Demo

* [Radish34 Explained](radish34-demo/radish34.md)
* [Radish34 Interactive Demo](radish34-demo/demo.md)
* [Getting Started with Radish34](radish34-demo/radish34-start.md)
* [Radish34 Workflow](radish34-demo/radish34-workflow.md)
* [Modifying Radish34](radish34-demo/mods.md)
* [From POC to Protocol](radish34-demo/poc-to-protocol.md)

## Baseline Protocol

* [The Baseline Protocol](baseline-protocol/protocol.md)
* [Open Source Community](baseline-protocol/community/README.md)
* [Supporting Community Members](baseline-protocol/community/supporting-community-members.md)
* [Community Governance](baseline-protocol/community/community-governance.md)
* [Community Tools](baseline-protocol/community/community-tools.md)
* [Baseline Process](baseline-protocol/process.md)
* [Performance Stats and Specs](baseline-protocol/performance.md)
* [Standards](baseline-protocol/standards.md)
* [Driving Mainnet Evolution](baseline-protocol/mainnet.md)
* [Roadmap](baseline-protocol/roadmap.md)

## Components

* [Baseline Server](components/baseline-server/README.md)
* [Messenger](components/baseline-server/messenger.md)
* [Zero Knowledge Service](components/baseline-server/zero-knowledge-service.md)
* [APIs](components/baseline-server/apis.md)
* [On-Chain Functions](components/on-chain.md)

## Baselining Your Product <a id="baselining"></a>

* [How to 'Baseline' Your Product](baselining/your-product.md)
* [Supply Chain Management](baselining/scm.md)
* [ERP & CRM](baselining/erp-crm.md)
* [Core Banking](baselining/core-banking.md)
* [Enterprise Middleware](baselining/enterprise-middleware.md)

## Baseline Basics

* [Glossary](baseline-basics/glossary.md)
* [FAQ](baseline-basics/faq.md)
* [Key GitHub Folder Readme's](baseline-basics/key-github-folder-readmes.md)
* [Code Docs](baseline-basics/code-docs.md)

2 changes: 2 additions & 0 deletions docs/baseline-basics/code-docs.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Code Docs

16 changes: 16 additions & 0 deletions docs/baseline-basics/faq.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# FAQ

Here is the FAQ

## General Questions



## The Skeptical Voice

There is great utility in letting negative thoughts have a voice, so long as we don't leave them there. Here are a few "but that won't work" thoughts that we can address as a community to say, "but it would work if..."





42 changes: 42 additions & 0 deletions docs/baseline-basics/glossary.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Glossary

## Baseline Protocol

A set of components and procedures that allows separate systems of record to maintain record consistency and workflow integrity by using the public Ethereum Mainnet as a common frame of reference \(CFR\).

## **Mainnet**

The Mainnet is an always-on state machine that is maintained as a public good in such a way that it maximizes the resistance to an individual or group to gain control, lock out users from valid functions, or change history. The Mainnet is capitalized to emphasize its relationship to the Internet.

Used without capitalization to distinguish a public production network from public testnets. For example, the Ethereum mainnet vs. its testnets, such as Ropsten.

## Middleware

There are many forms of middleware. We use the term in the context of the Baseline Protocol in a particular way. Systems of record maintained by legally separate entities require a common frame of reference in order to run business process integration across them. Flow control, ensuring that two processes don't run inappropriately against the same shared state, terminating the back and forth of the [two generals problem](https://en.wikipedia.org/wiki/Two_Generals%27_Problem), non-repudiation, etc. In this context, the protocol is primarily about loose-coupling architecture in the transaction-processing middleware \(TPM\) area. It is not necessarily about schema translators, though a typical system would very likely run CRUD access between a baseline server and a system of record through translation services in a traditional Enterprise Service Bus \(ESB\). Unlike some RPC middleware, the Baseline Protocol is asynchronous, though it is certainly about passing parameters between functions running on two or more remote machines...and ensuring consistency between them.

## Atomic Compartmentalization

Even counterparties to the same business-to-business Workflow typically must not have access to -- or even awareness of -- processes that they are not directly involved in.

## Workflow

lorem ipsum

## Step

lorem ipsum

## Task

lorem ipsum

## Workgroup

lorem ipsum

## CodeBook =&gt; Package

During the Radish34 project, the notion of a shared "codebook" was often discussed. This is ...



2 changes: 2 additions & 0 deletions docs/baseline-basics/key-github-folder-readmes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Key GitHub Folder Readme's

61 changes: 61 additions & 0 deletions docs/baseline-protocol/community/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# Open Source Community

The Baseline Protocol initiative was [announced](https://consensys.net/blog/press-release/ey-and-consensys-announce-formation-of-baseline-protocol-initiative-to-make-ethereum-mainnet-safe-and-effective-for-enterprises/) on March 4, 2020 and launched as an [OASIS](https://oasis-open-projects.org/) open source project on \[ March X, 2020 \], supported by fourteen founding companies. The initiative is strongly aligned with the Mainnet Working Group, a joint effort of the [Enterprise Ethereum Alliance](https://entethalliance.org) and the [Ethereum Foundation](https://ethereum.org).

A 2019 project exploring ways to use the public Ethereum network in a procurement use case produced insights that led to the formation of the protocol initiative. The companies that conducted the project -- EY, ConsenSys, and Microsoft -- donated the work as a public domain contribution to the non-profit open standards organization, OASIS under [eCLA](https://www.oasis-open.org/resources/open-repositories/cla/). They were joined on March 4, 2020 by [AMD](https://www.amd.com/en/technologies/blockchain), [ChainLink](https://chain.link/), [Core Convergence](https://www.coreconvergence.us/), [Duke University](https://pratt.duke.edu/), [Envision Blockchain](https://envisionblockchain.com/), [MakerDAO](https://makerdao.com/en/), [Neocova](https://neocova.com/), [Splunk](https://www.splunk.com/), [Unibright](https://unibright.io/), [Provide](https://provide.services/), and [W3BCLOUD](https://www.w3bcloud.com/).



## Contributors Guide

**Baseline Protocol** is an open-source project that is actively seeking contributions from any willing participants. Here are some guidelines for people that would like to contribute to the project.

### Submitting an issue

To help us get a better understanding of the issue you've identified, follow the guidelines in one of our _Issue Templates_.

### Submitting a pull request

Follow these steps when submitting a pull request:

1. Fork the [`github.com/ethereum-oasis/baseline`](https://github.com/ethereu-oasis/baseline) repo into your GitHub account. Read more about forking a repo on Github [here](https://help.github.com/articles/fork-a-repo/).
2. Create a new branch, based on the `master` branch, with a name that concisely describes what you’re working on \(ex. `add-mysql`\).
3. Ensure that your changes do not cause any existing tests to fail.
4. Submit a pull request against the `master` branch.

## License

All code in this repo is released under the CC0 1.0 Universal public domain dedication. For the full license text, refer to `license.md`.





Contributors Guide

Communications

Governance

OASIS

eCLA and iCLA

CC0

Patents

Meetings

The WORK and how we get it done

Tools

How to get involved. Ways to get involved.

Leadership

Making community participation pay off for members



2 changes: 2 additions & 0 deletions docs/baseline-protocol/community/community-governance.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Community Governance

2 changes: 2 additions & 0 deletions docs/baseline-protocol/community/community-tools.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Community Tools

16 changes: 16 additions & 0 deletions docs/baseline-protocol/community/supporting-community-members.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Supporting Community Members

Link to OASIS resources and/or list here

## Founding Group on March 4, 2020

[AMD](https://www.amd.com/en/technologies/blockchain), EY, [ChainLink](https://chain.link/), [Core Convergence](https://www.coreconvergence.us/), ConsenSys, [Duke University](https://pratt.duke.edu/), [Envision Blockchain](https://envisionblockchain.com/), [MakerDAO](https://makerdao.com/en/), Microsoft, [Neocova](https://neocova.com/), [Splunk](https://www.splunk.com/), [Unibright](https://unibright.io/), [Provide](https://provide.services/), and [W3BCLOUD](https://www.w3bcloud.com/).

## Supporting Group on March 19, 2020







41 changes: 41 additions & 0 deletions docs/baseline-protocol/mainnet.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
---
description: >-
Describe the key things the baseline community needs to see improved,
supported, created in order to grow as a protocol, so that enterprises will
use the approach and get used to the Mainnet.
---

# Driving Mainnet Evolution

The Mainnet is a \[ insert copy from the upcoming Medium article \].

## Point to Point Messaging

The Radish34 demo uses Whisper, which comes with standard Geth nodes, to

## Zokrates Support or Replacement

While the baseline approach isn't solely about zero knowledge techniques, it uses them to ensure that all parties store the same data in their respective systems of record, execute business rules consistently, and enforce the correctness of Workflow Steps.

One aspect of this is Zokrates, a domain specific language \(DSL\) for taking logical functions and turning them into the "addition, subtraction, multiplication" math required by zero knowledge proofs. Zokrates is an open source project maintained by \[ \]. From the perspective of the enterprise, it has the disadvantage of being distributed under a \[ \] license, not Apache2 or MIT.

For enterprises to adopt a DSL like Zokrates as part of their core IT stack, it needs to be GA'd, the problem of the license must be dealt with -- there are a number of ways to handle this -- and the project must be well supported at a level that can give enterprises confidence.

## Eth2

The Baseline Protocol can provide utility for a variety of uses across industries today on the current \[ \] Ethereum. It avoids several of the key issues enterprises have with using "public" Ethereum.

## Gas Pump Service



## Barriers to Enterprise Adoption of Public Blockchain

\[List the 10-12 issues and talk about how the baseline protocol was created to avoid most of them and bring the rest within the risk profile of traditional Internet-capable IT systems.\]

{% file src="../.gitbook/assets/why-i-wont-use-the-mainnet-ten-problems-6.pdf" caption="Why CECIL the CISO Won\'t Use Public Blockchain" %}





2 changes: 2 additions & 0 deletions docs/baseline-protocol/performance.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Performance Stats and Specs

30 changes: 30 additions & 0 deletions docs/baseline-protocol/process.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Baseline Process

## Baselining Step-by-Step



#### Local System of Record

Parties store data in local systems of record \(mongo, oracle, sap,...could even be a private or public blockchain, etc\). A "baseline server" is given CRUD access to this, if the system of record itself is not already "baseline compliant/enabled" \(which we'd hope is typical in future\).

#### Setting up the Workgroup and Sending Messages to Counterparties

After setting up a Workgroup on-chain of verified counterparties for a specific Workflow \(which instantiates three on-chain contracts: verifier, orgRegistry, shield\), a Party's baseline server serializes a record to be "baselined" and optionally includes with it a codebook that will govern subsequent workflow steps that either change the state of the record or parameterize part or all of the record into a new function. The codebook could be written in any language, but today, Solidity is convenient. \(And it is important to note that the Radish34 demo does not use a "codebook" in this way, because the workflow it implements is governed by a custom Zokrates circuit labeled "MSA." More on that elsewhere.\)

The data and codebook are packaged and sent via a point-to-point secret messenger service to one or more selected counterparties, who are also equipped with a baseline-compliant system. They receive the package, deposit the data, store and run the code, digitally sign the output, and send that back to the initiating Party.

#### Processing for Consistency and Sending the Baseline Proof to the Mainnet

That initiating Party sends all counterparty-signed messages into a zero knowledge microservice inside the baseline server that uses either a basic "everyone did things the same" zero knowledge circuit or a more advanced, specific one that may, for example, enforce certain "correctness" conditions \(e.g., "I am a volume discount rate table, and I must have no gaps between levels"\). Note: zero knowledge enforcement of "correctness" is more expensive, but techniques being introduced by EY can reduce net expense by 5x or more. Also note that such enforcement is not strictly necessary in cases where counterparties are not worried about the shared code being faulty.\)

The zk service then sends a commitment \(the "baseline proof" of this workflow step\) in the form of a hash \(plus other material used for verification\) to the shield contract created during Workgroup setup. The shield contract makes a call to the verifier contract, and if the verifier contract returns "true" then the shield contract deposits the hash into the merkel trie contained inside itself.

#### What's the Use of Putting the Baseline Proof on the Mainnet?

The key to the utility of the baseline proof being on-chain is that the hash represents shared state \(and of course, tamper resistant shared state\), not just "proof of existence". It is a "state marker" that can, for example, represent the current volume of orders in a procurement agreement. Updates to the state \(e.g., when a new order raises the current volume\) can nullify the previous baseline proof. In this way, it can be used for subsequent calculations to prevent later workflow steps from double-counting, providing deliberately or accidentally erroneous inputs, or changing the business rules. Such actions would result in the subsequent workflow step failing to deposit its baseline proof on-chain, at which point the flow stops, parties are alerted, and corrections can be made. Also the hash can be used as the key in a key-value pair -- or the key in an off-chain value lookup procedure. We put that hash in a shield contract mainly to hide who is doing what to it...and we also get some nice features like merkel root grouping, ordering, etc.

#### A Word About Tokenization

Tokenization of assets, and the on-chain transfer of them, can then use the baseline proof as the payload in an ERC721, which can also be done under the shield contract, so that what the world sees is...essentially nothing: "someone sent something to someone...and the something was a nonsense set of characters that only the direct counterparties know is anything at all." Done on a cadence with "chaff" hashes thrown in, and analysis techniques wouldn't be able to get a signal they could use to learn much of anything about the Parties' business activities or relationships.

Loading

0 comments on commit ccbfbe7

Please sign in to comment.