# OurWorld Blockchain This blockchain has been implemented for the Digital FreeZone Company OurWorld of Zanzibar. The blockchain has unique properties - run by trusted parties who have strong agreement with the OurWorld Digital Freezone - it can run very flexible smart contracts - the smart contracts can interact with multiple blockchains at once - every execution is logged for in a blockchain log system which can not be modified (WORM) - the result of actions are records being changed in a normal SQL relational database - certain fields of this database can be private - the consensus mechanism is very strong ```mermaid graph TB subgraph Validator1 CE1[Consensus Engine] EE1[Execution Engine] BE1[Build Engine] BL1[Blockchain Logger] subgraph Storage1 BD1[(Blockchain DB)] ZS1[Zero-Stor] ZDB1[(Zero-DB)] end end subgraph Validator2 CE2[Consensus Engine] EE2[Execution Engine] BE2[Build Engine] BL2[Blockchain Logger] subgraph Storage2 BD2[(Blockchain DB)] ZS2[Zero-Stor] ZDB2[(Zero-DB)] end end subgraph Validator3 CE3[Consensus Engine] EE3[Execution Engine] BE3[Build Engine] BL3[Blockchain Logger] subgraph Storage3 BD3[(Blockchain DB)] ZS3[Zero-Stor] ZDB3[(Zero-DB)] end end RPC[RPC Requests] --> CE1 RPC --> CE2 RPC --> CE3 CE1 <--> CE2 CE2 <--> CE3 CE3 <--> CE1 CE1 --> EE1 CE1 --> BE1 BE1 --> EE1 EE1 --> BD1 EE1 --> BL1 BL1 --> ZS1 ZS1 --> ZDB1 CE2 --> EE2 CE2 --> BE2 BE2 --> EE2 EE2 --> BD2 EE2 --> BL2 BL2 --> ZS2 ZS2 --> ZDB2 CE3 --> EE3 CE3 --> BE3 BE3 --> EE3 EE3 --> BD3 EE3 --> BL3 BL3 --> ZS3 ZS3 --> ZDB3 classDef validator1 fill:#f9f,stroke:#333,stroke-width:2px; classDef validator2 fill:#ff9,stroke:#333,stroke-width:2px; classDef validator3 fill:#9ff,stroke:#333,stroke-width:2px; classDef storage fill:#bbf,stroke:#333,stroke-width:2px; class Validator1 validator1; class Validator2 validator2; class Validator3 validator3; class Storage1,Storage2,Storage3 storage; ``` ### Initial Smart Contracts - [Generator Tokens](projectinca/generator_token.md) - [Minting Contract](projectinca/minting_contract.md) - [Oracle Contract](projectinca/oracle_contract.md) - [Code Contract](projectinca/code_contract.md) - [Bridging Contract](projectinca/bridging_contract.md) ### Implementation Details Implemented using consensus engine which has unique properties - super flexible execution is possible (flexible contracts as above) - each execution is logged and auditable afterwards - secure by consensus ring (which is a custom made blockchain based on Tendermint) - the data is stored in relational database (postgresql) - the consensus ring guarantees correct execution and consensus over the databases - each validator has 1 database - the validators can talk to multiple blockchains e.g. Stellar, ... ### the blockchain has following components - Validator - is a node which runs all the components as described below - Consensus_Engine - every RPC (remote procedure call) request goes over the engine - the engine make sure all RPC's are executed in order and reach all Validator - Blockchain_DB = Blockchain Database - a SQL Database - Blockchain_Logger = logger whichs records all changes, logs, ... and stores them on the Zero-Stor - Zero-Stor = is a key valye stor which stores everything in containers which are encoded, encrypted, compressed and dispersed to multiple Zero-DB's - Zero-Stor will check validity of the data and makes sure data can never be corrupted nor lost - the Zero-Stor is used in WORM mode which means Write One Time, read Many Times - Zero-DB = the storage engine behind which stores the info on the storage device - Build_Engine: - builds the code (if needed) to run by the Execution_Engine - will check the hashes and signatures to make sure the right code is run - Execution_Engine - there can be more than one and they can even be created in multiple languages - they will execute all the logic (the smart contracts) - only if all execution engines have the same result the the consensus engine will agree with the RPC request and the transaction is valid. ## Consensus Engine Is a proper proof of stake blockchain ```mermaid graph TB Start((Start)) --> Proposer Proposer -->|Create block| ProposeBlock[Propose Block] ProposeBlock --> Broadcast[Broadcast to Network] Broadcast --> Validators[Validators Receive] Validators --> ValidCheck{Valid Block?} ValidCheck -->|Yes| Prevote[Prevote] ValidCheck -->|No| NilPrevote[Nil Prevote] Prevote --> CollectPrevotes[Collect Prevotes] NilPrevote --> CollectPrevotes CollectPrevotes --> PrevoteCheck{2/3+ Prevotes?} PrevoteCheck -->|Yes| Precommit[Precommit] PrevoteCheck -->|No| NextRound[Next Round] Precommit --> CollectPrecommits[Collect Precommits] CollectPrecommits --> PrecommitCheck{2/3+ Precommits?} PrecommitCheck -->|Yes| Commit[Commit Block] PrecommitCheck -->|No| NextRound Commit --> Finalize[Finalize Block] Finalize --> End((End)) NextRound --> Start subgraph Consensus Engine Proposer ProposeBlock Broadcast Validators ValidCheck Prevote NilPrevote CollectPrevotes PrevoteCheck Precommit CollectPrecommits PrecommitCheck Commit Finalize end classDef process fill:#f9f,stroke:#333,stroke-width:2px; classDef decision fill:#ff9,stroke:#333,stroke-width:2px; class Proposer,ProposeBlock,Broadcast,Validators,Prevote,NilPrevote,CollectPrevotes,Precommit,CollectPrecommits,Commit,Finalize process; class ValidCheck,PrevoteCheck,PrecommitCheck decision; ```