Add new proposal process

And move replication and enclave proposals there to get a feel
for how it'd look.
This commit is contained in:
Greg Fitzgerald 2018-12-12 09:13:04 -07:00
parent 13d4e3f29f
commit c83538a60c
6 changed files with 33 additions and 78 deletions

View File

@ -30,7 +30,7 @@ Rust coding conventions
* For function and method names, use `<verb>_<subject>`. For unit tests, that verb should * For function and method names, use `<verb>_<subject>`. For unit tests, that verb should
always be `test` and for benchmarks the verb should always be `bench`. Avoid namespacing always be `test` and for benchmarks the verb should always be `bench`. Avoid namespacing
function names with some arbitrary word. Avoid abreviating words in function names. function names with some arbitrary word. Avoid abbreviating words in function names.
* As they say, "When in Rome, do as the Romans do." A good patch should acknowledge the coding * As they say, "When in Rome, do as the Romans do." A good patch should acknowledge the coding
conventions of the code that surrounds it, even in the case where that code has not yet been conventions of the code that surrounds it, even in the case where that code has not yet been
@ -43,31 +43,27 @@ Terminology
Inventing new terms is allowed, but should only be done when the term is widely used and Inventing new terms is allowed, but should only be done when the term is widely used and
understood. Avoid introducing new 3-letter terms, which can be confused with 3-letter acronyms. understood. Avoid introducing new 3-letter terms, which can be confused with 3-letter acronyms.
Some terms we currently use regularly in the codebase: [Terms currently in use](book/src/terminology.md)
* fullnode: n. A fully participating network node.
* hash: n. A SHA-256 Hash.
* keypair: n. A Ed25519 key-pair, containing a public and private key.
* pubkey: n. The public key of a Ed25519 key-pair.
* sigverify: v. To verify a Ed25519 digital signature.
Proposing architectural changes Proposing architectural changes
--- ---
Solana's architecture is described by a book generated from markdown files in the `src/` directory, Solana's architecture is described by a book generated from markdown files in
currently maintained by @garious. To change the architecture, you'll need to at least propose a change the `book/src/` directory, maintained by an *editor* (currently @garious). To
with an RFC document, and create an issue to track its implementation. Here's the full process: change the architecture, you'll need to at least propose a change the content
under the [Proposed
Changes](https://solana-labs.github.io/solana/proposals.html) chapter. Here's
the full process:
1. Propose to a change to the architecture by creating a PR that adds a markdown document called an RFC 1. Propose to a change to the architecture by creating a PR that adds a
(standing for "request for comments") to the directory `rfcs/`. Add at least the maintainer of the markdown document to the directory `book/src/` and references it from the
markdown book as a reviewer. [table of contents](book/src/SUMMARY.md). Add the editor and any relevant
2. The PR being merged indicates your proposed change was accepted and that the Solana maintainers *maintainers* to the PR review.
support your plan of attack. Next, create an issue to track its implementation and create a PR 2. The PR being merged indicates your proposed change was accepted and that the
that updates the RFC with a link to the issue. This link allows anyone to quickly check the editor and maintainers support your plan of attack.
implementation status of any RFC. 3. Submit PRs that implement the proposal. When the implementation reveals the
3. Submit PRs that implement the RFC. Be sure to reference the issue created above in your PR description. need for tweaks to the architecture, be sure to update the proposal and have
Feel free to update the RFC as the implementation reveals the need for tweaks to the architecture, that change reviewed by the same people as in step 1.
but if you do, be sure to add the maintainer of the markdown book as a reviewer to your PR. 4. Once the implementation is complete, the editor will then work to integrate
4. Once the implementation is complete, close the issue. Depending on the scope of the RFC, the maintainer the document into the book.
of markdown book may then create a separate ticket to integrate the RFC into the book.

View File

@ -19,6 +19,10 @@
- [Gossip Service](gossip.md) - [Gossip Service](gossip.md)
- [The Runtime](runtime.md) - [The Runtime](runtime.md)
- [Proposed Architectural Changes](proposals.md)
- [Ledger Replication](ledger-replication.md)
- [Secure Enclave](enclave.md)
## Appendix ## Appendix
- [Appendix](appendix.md) - [Appendix](appendix.md)

7
book/src/proposals.md Normal file
View File

@ -0,0 +1,7 @@
# Proposed Architectural Changes
The following architectural proposals have been accepted by the Solana team, but
are not yet fully implemented. The proposals may be implemented as described,
implemented differently as issues in the designs become evident, or not
implemented at all. If implemented, the descriptions will be moved from this
section to earlier chapters in a future version of this book.

View File

@ -152,11 +152,10 @@ The public key of the [account](#account) containing a [program](#program).
The public key of a [keypair](#keypair). The public key of a [keypair](#keypair).
#### replicator #### runtime
A type of [client](#client) that stores [ledger](#ledger) segments and The component of a [fullnode](#fullnode) responsible for [program](#program)
periodically submits storage proofs to the cluster; not a execution.
[fullnode](#fullnode).
#### secret key #### secret key
@ -225,11 +224,6 @@ for potential future use.
A fraction of a [block](#block); the smallest unit sent between A fraction of a [block](#block); the smallest unit sent between
[fullnodes](#fullnode). [fullnodes](#fullnode).
#### CBC block
Smallest encrypted chunk of ledger, an encrypted ledger segment would be made of
many CBC blocks; `ledger_segment_size / cbc_block_size` to be exact.
#### curio #### curio
A scarce, non-fungible member of a set of curios. A scarce, non-fungible member of a set of curios.
@ -239,16 +233,6 @@ A scarce, non-fungible member of a set of curios.
The time, i.e. number of [slots](#slot), for which a [leader The time, i.e. number of [slots](#slot), for which a [leader
schedule](#leader-schedule) is valid. schedule](#leader-schedule) is valid.
#### fake storage proof
A proof which has the same format as a storage proof, but the sha state is
actually from hashing a known ledger value which the storage client can reveal
and is also easily verifiable by the network on-chain.
#### ledger segment
A sequence of [blocks](#block).
#### light client #### light client
A type of [client](#client) that can verify it's pointing to a valid A type of [client](#client) that can verify it's pointing to a valid
@ -258,42 +242,6 @@ A type of [client](#client) that can verify it's pointing to a valid
Millions of [instructions](#instruction) per second. Millions of [instructions](#instruction) per second.
#### runtime
The component of a [fullnode](#fullnode) responsible for [program](#program)
execution.
#### storage proof
A set of SHA hash states which is constructed by sampling the encrypted version
of the stored [ledger segment](#ledger-segment) at certain offsets.
#### storage proof challenge
A [transaction](#transaction) from a [replicator](#replicator) that verifiably
proves that a [validator](#validator) [confirmed](#storage-proof-confirmation)
a [fake proof](#fake-storage-proof).
#### storage proof claim
A [transaction](#transaction) from a [validator](#validator) which is after the
timeout period given from the [storage proof
confirmation](#storage-proof-confirmation) and which no successful
[challenges](#storage-proof-challenge) have been observed which rewards the
parties of the [storage proofs](#storage-proof) and confirmations.
#### storage proof confirmation
A [transaction](#transaction) from a [validator](#validator) which indicates
the set of [real](#storage-proof) and [fake proofs](#fake-storage-proof)
submitted by a [replicator](#replicator). The transaction would contain a list
of proof hash values and a bit which says if this hash is valid or fake.
#### storage validation capacity
The number of keys and samples that a [validator](#validator) can verify each
storage epoch.
#### thin client #### thin client
A type of [client](#client) that trusts it is communicating with a valid A type of [client](#client) that trusts it is communicating with a valid