{"action":"created","issue":{"url":"https://api.github.com/repos/neo-project/neo/issues/426","repository_url":"https://api.github.com/repos/neo-project/neo","labels_url":"https://api.github.com/repos/neo-project/neo/issues/426/labels{/name}","comments_url":"https://api.github.com/repos/neo-project/neo/issues/426/comments","events_url":"https://api.github.com/repos/neo-project/neo/issues/426/events","html_url":"https://github.com/neo-project/neo/pull/426","id":373673087,"node_id":"MDExOlB1bGxSZXF1ZXN0MjI1NTQ3NDI0","number":426,"title":"Optimized Delegated Byzantine Fault Tolerance (ODBFT) - Part I: commit phase + regeneration strategy + minnor message p2p route optimizing","user":{"login":"vncoelho","id":17395762,"node_id":"MDQ6VXNlcjE3Mzk1NzYy","avatar_url":"https://avatars3.githubusercontent.com/u/17395762?v=4","gravatar_id":"","url":"https://api.github.com/users/vncoelho","html_url":"https://github.com/vncoelho","followers_url":"https://api.github.com/users/vncoelho/followers","following_url":"https://api.github.com/users/vncoelho/following{/other_user}","gists_url":"https://api.github.com/users/vncoelho/gists{/gist_id}","starred_url":"https://api.github.com/users/vncoelho/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vncoelho/subscriptions","organizations_url":"https://api.github.com/users/vncoelho/orgs","repos_url":"https://api.github.com/users/vncoelho/repos","events_url":"https://api.github.com/users/vncoelho/events{/privacy}","received_events_url":"https://api.github.com/users/vncoelho/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":37,"created_at":"2018-10-24T20:54:30Z","updated_at":"2018-11-21T19:38:18Z","closed_at":null,"author_association":"CONTRIBUTOR","pull_request":{"url":"https://api.github.com/repos/neo-project/neo/pulls/426","html_url":"https://github.com/neo-project/neo/pull/426","diff_url":"https://github.com/neo-project/neo/pull/426.diff","patch_url":"https://github.com/neo-project/neo/pull/426.patch"},"body":"Last update: 21th November \r\n# Optimized Delegated Byzantine Fault Tolerance (ODBFT)\r\n*  Part I:  commit phase + regeneration strategy + minnor message p2p route optimizing\r\n    * Finish the original commit phase with partial signatures;\r\n    * Propose a new regeneration strategy able to recover lost/failled nodes;\r\n    * Use the maximum amount of benefits from the current Payloads, extracting all information (communication is the most expensive part of the descentralized system). Thus, let's process the maximum we can locally and extract good conclusions.\r\n\r\nPart II, III and IV will be dealt in different Pull Requests.\r\n\r\n*  Part II: Novel network routing strategies, a trade-off between payloads and communication (Q4 2018 - Q1 2019)\r\n      * Implement novel efficient strategies for optimizing message routing.\r\n* Part III: Efficient prediction and optimization strategies for fine-tune the dBFT (Q2/Q3 2019)\r\n     * Fine-tune times and predict the cost of the next blocks in order to ensure accomplishment of desired block times.\r\n* Part IV: Metaheuristics an efficient selection of pending transactions (Q3 2019 - Q1/Q2 2020)\r\n     * Investigate the use of a Greedy Randomized Adaptive Search Procedure for `FillingContext`\r\n\r\n## Part I: **Highlights of the proposal** (which is a consolidation of previous knowledge discussed in other issues and PRs)\r\n\r\n* Complete signatures are only send after **commit phase**:\r\n    * At least, `M` partials signatures should be obtained before sending a complete signature of the `context.makeHeader`;\r\n    * Partials signatures are produced by signing the `PrepareRequest Payload`.  One peculiarity is that the Speaker/Primary signs the `PrepareRequest Payload_1` with an empty vector of his signature (as one could expected), while the `Backups` signs the complete `PrepareRequest Payload_Complete` that contains Speaker signature of the aforementioned `PrepareRequest Payload_1`;\r\n     * It should be noticed that, in essence, the Speaker/Primary partial signature could even be removed, but we are making use of this in order to speed up the P2P share of the `PrepareRequest Payload` since every `PrepareResponse` Payload is now containing the `PrepareRequest Payload`. Thus, any CN that receives the  `PrepareResponse Payload` (even without receiving the `PrepareRequest`) can validate both of them together if his local `PrepareRequest Payload` is still `null` (for this purpose, the partial signature is important for ensuring that a third-entity does not modify primary payload content);\r\n* When a node *Complete Signature* is sent (flag `CommitAgreement` is activated) we can lock Change View. The reasoning is that `M` nodes already showed their agreement with the proposed Block.\r\n     * When `M` partial signatures are achieved, a given node signed the complete header and relay to the network. \r\n     * This node can not anymore increase its view level (Change View);\r\n     * An event called `OnRegeneration` is called every time that a node asks for `ChangeView` , it contains a Payload with all Partial Signatures (`SignedPayloads`) plus the original `PrepareRequestPayload`. It calls a `MakeRegenaration` event that will be spread throughout the network. That node (that asked for `changeview`) will be able to verify the OnRegeneration and even reduce its View number if it sees that Commit phase was already been achieved in a lower view.\r\n\r\nPart I main contributors: @erikzhang, @igormcoelho, @shargon, @vncoelho, @wanglongfei88, @belane, @edwardz246003\r\n\r\n## Analogy of the proposal \r\n\r\nAn analogy of the proposal is the **indefatigable miners problem** (defined here):\r\n1. The speaker is a Geological Engineering (my hometown is pioneer in it and one of the cities of more diversity of minerals in the world) and he is searching for a place to dig for Kryptonite;\r\n1. He proposes a geographic location (coordinates to dig);\r\n1. The majority (M guys) agrees with the coordinates (with their partial signatures);\r\n1. Time for digging: they will now dig until they really find Kryptonite (no other place will be accepted to be dig until Kryptonite is found). Kryptonite is an infinite divisible crystal, thus, as soon as one finds he will share the kryptonite so that everyone will have a piece for finishing their contract 3.;\r\n1. If one of them dies, when it resurrects it will see its previous signed agreement (3.) and it will automatically start to dig again. The other minority will suffer the same, they will be fulfilled with hidden messages saying that they should also dig.\r\n\r\n"},"comment":{"url":"https://api.github.com/repos/neo-project/neo/issues/comments/440786003","html_url":"https://github.com/neo-project/neo/pull/426#issuecomment-440786003","issue_url":"https://api.github.com/repos/neo-project/neo/issues/426","id":440786003,"node_id":"MDEyOklzc3VlQ29tbWVudDQ0MDc4NjAwMw==","user":{"login":"vncoelho","id":17395762,"node_id":"MDQ6VXNlcjE3Mzk1NzYy","avatar_url":"https://avatars3.githubusercontent.com/u/17395762?v=4","gravatar_id":"","url":"https://api.github.com/users/vncoelho","html_url":"https://github.com/vncoelho","followers_url":"https://api.github.com/users/vncoelho/followers","following_url":"https://api.github.com/users/vncoelho/following{/other_user}","gists_url":"https://api.github.com/users/vncoelho/gists{/gist_id}","starred_url":"https://api.github.com/users/vncoelho/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vncoelho/subscriptions","organizations_url":"https://api.github.com/users/vncoelho/orgs","repos_url":"https://api.github.com/users/vncoelho/repos","events_url":"https://api.github.com/users/vncoelho/events{/privacy}","received_events_url":"https://api.github.com/users/vncoelho/received_events","type":"User","site_admin":false},"created_at":"2018-11-21T19:38:18Z","updated_at":"2018-11-21T19:38:18Z","author_association":"CONTRIBUTOR","body":"Preview-Release v2.1\r\nhttps://github.com/NeoResearch/neo-tests/raw/master/releases/neo-release-2.9.2-all-plugins-odbft-v2.1.zip\r\n\r\nIt seems that only few adjustments are missing now."}}
{"actor":{"display_login":"vncoelho"}}