diff --git a/docs/graphics/infographic.xml b/docs/graphics/infographic.xml index ec6c291b70..a2165cd16e 100644 --- a/docs/graphics/infographic.xml +++ b/docs/graphics/infographic.xml @@ -1 +1 @@ -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 \ No newline at end of file +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 \ No newline at end of file diff --git a/docs/graphics/middleware.png b/docs/graphics/middleware.png index 9e329b7581..eea0692f01 100644 Binary files a/docs/graphics/middleware.png and b/docs/graphics/middleware.png differ diff --git a/docs/graphics/permissioning.png b/docs/graphics/permission.png similarity index 100% rename from docs/graphics/permissioning.png rename to docs/graphics/permission.png diff --git a/docs/graphics/tx.png b/docs/graphics/tx.png index 1eb04035d5..7318c43a10 100644 Binary files a/docs/graphics/tx.png and b/docs/graphics/tx.png differ diff --git a/docs/quark/README.md b/docs/quark/README.md index ea2ce0bfee..bfdd7cc3d1 100644 --- a/docs/quark/README.md +++ b/docs/quark/README.md @@ -45,6 +45,7 @@ into various applications. ## Further reading +* [Quark overview](overview.md) * [Glossary of the terms](glossary.md) * [Standard modules](stdlib.md) * Guide to building a module diff --git a/docs/quark/overview.md b/docs/quark/overview.md new file mode 100644 index 0000000000..46a1c22960 --- /dev/null +++ b/docs/quark/overview.md @@ -0,0 +1,105 @@ +# Quark Overview + +The quark middleware design optimizes flexibility and security. The framework +is designed around a modular execution stack which allows applications to mix +and match modular elements as desired. Along side, all modules are permissioned +and sandboxed to reduce + +For more explanation please see the [standard +library](https://github.com/tendermint/basecoin/blob/infographic/docs/quark/stdlib.md) +and +[glossary](https://github.com/tendermint/basecoin/blob/infographic/docs/quark/glossary.md) +documentation. + +For a more interconnected schematics see these +[framework](https://github.com/tendermint/basecoin/blob/infographic/docs/graphics/overview-framework.png) +and +[security](https://github.com/tendermint/basecoin/blob/infographic/docs/graphics/overview-security.png) +overviews. + +## Framework Overview + +### Transaction (tx) + +Each tx passes through the middleware stack which can be defined uniquely by +each application. From the multiple layers of tx, each middleware may strip +off one level, like an onion. As so, the transaction must be constructed to +mirror the execution stack, and each middleware should allow embedding an +arbitrary tx for the next layer in the stack. + + + +### Execution Stack + +Middleware components allow for code reusability and integrability. A standard +set of middleware are provided and can be mix-and-matched with custom +middleware. Some of the [standard +library](https://github.com/tendermint/basecoin/blob/infographic/docs/quark/stdlib.md) +middlewares provided in this package include: + - Logging + - Recovery + - Signatures + - Chain + - Nonce + - Fees + - Roles + - Inter-Blockchain-Communication (IBC) + + As a part of stack execution the state space provided to each middleware is +isolated (see [Data Store](overview.md#data-store)). When executing the stack, +state-recovery points (checkpoints) can be assigned for stack execution of +`CheckTx` or `DeliverTx`. This means, that all state changes will be reverted +to the checkpoint state on failure when either being run as a part of `CheckTx` +or `DeliverTx`. Example usage of the checkpoints is when we may want to deduct +a fee even if the end business logic fails, under this situation we would add +the DeliverTx Checkpoint to after the fee middleware but before the business +logic. This diagram displays a typical process flow through an execution stack. + + + +### Dispatcher + +The dispatcher handler aims to allow for reusable business logic. As a +transaction is passed to the end handler, the dispatcher routes the logic to +the correct module. To use the dispatcher tool all transaction types must +first be registered with the dispatcher. Once registered the middleware stack +or any other handler can call the dispatcher to execute a transaction. +Similarity to the execution stack, when executing a transaction the dispatcher +isolates the state space available to the designated module (see [Data +Store](overview.md#data-store)). + + + +## Security Overview + +### Permission + +Each application is run in a sandbox to isolate security risks. When +interfacing between applications, if a one of those application is compromised +the entire network should still be secure. This is achieved through actor +permissioning whereby each chain, account, or application can provided a +designated permission for the transaction context to perform a specific action. + +Context is passed through the middleware and dispatcher, allowing one to add +permissions on this app-space, and check current permissions. + + + +### Data Store + +The entire merkle tree can access all data. When we call a module (or +middleware), we give them access to a subtree corresponding to their app. This +is achieved through the use of unique prefix assigned to each module. From the +module's perspective it is no different, the module need-not have regard for +the prefix as it is assigned outside of the modules scope. For example, if a +module named `foo` wanted to write to the store it could save records under the +key `bar` however the dispatcher would register that record in the persistent +state under `foo/bar`. Next time the `foo` app was called that record would be +accessible to it under the assigned key `bar`. This effectively makes app +prefixing invisible to each module while preventing each module from affecting +each other module. Under this model no two registered modules are permitted to +have the same namespace. + + + +