This issue is meant to be a todo of all the issues related to core functionality that needs to be implemented for the core algorithm to match the description in the whitepaper and also tasks that to not add any features and are sometimes pushed back but that increase the robustness and are required for a quality production ready product.
Steps
General
[x] What to do if a tx gets copied from an undecided or decided_valid block to the backlog? - #220 (unassigned)
[x] Set RethinkDB read mode to 'majority' to improve consistency - #158 (ryan)
[x] Validate transaction before writing it to the backlog #109 (closed, won't do)
[x] Set durability == hard for all writes #504
[x] Transfer tx validation must check to ensure all referenced outputs are in valid blocks - #526
[x] Ensure no same-asset transactions get put in the same block - #527 (ryan)
[x] Double spend shouldn't be included in a block - #592
[x] Rewriting transactions from invalid block may lead to DoubleSpends - #774
Voting
Skip/abort voting on a block if/when it is already decided: #190
[x] Handling the case of votes pointing to different blocks as the previous block: #165 (ryan), PR #565
Algorithmic/WP
[x] Transactions from invalid block should be put back in the backlog - #193 (ryan), PR #221
Querying
[x] All backend implementations of get_transactions_by_asset_id() should ignore invalid blocks: #332
[x] All backend implementations of get_transactions_by_metadata_id() should ignore invalid blocks: #792
[x] Queries to the bigchain table should ignore invalid blocks - issue #192 (ryan), PR #324
Mutability
The wire protocol firewall (#594) will prevent deletes & updates on the bigchain & votes tables. If a node deletes a transaction from the backlog table, then the client can just resend it, so such deletions don't have to be reverted. As for updates to the backlog table, those must be allowed, for example, to reassign stale transactions (PR #359).
[x] Voting as separate table: #368 (ryan)
Prevent deletes on the bigchain table - #197 (ryan), PR #330
Handle deletes on the backlog table - #196 (ryan), PR #337
Handle updates on the bigchain table - #195 (unassigned)
Prevent updates on the backlog table - #194 (unassigned)
What to do when a node creates another Genesis block? #444 (unassigned) (Moved to meta-issue #284)
[x] When validating a transaction, check to ensure it isn't a duplicate - #131 (ryan)
Multiprocessing
There were other issues listed here before but then we realized this isn't core consensus stuff.
[x] Transactions can be orphaned - #323 (unassigned)
[x] Handle stale transactions on the backlog table - #198 (ryan), PR #359
I'm going to close this "meta-issue" because there's only one remaining open issue within it ( #444 ); I will just move that issue into meta-issue #284
Abstract
Implement core functionality from whitepaper.
Goals
This issue is meant to be a todo of all the issues related to core functionality that needs to be implemented for the core algorithm to match the description in the whitepaper and also tasks that to not add any features and are sometimes pushed back but that increase the robustness and are required for a quality production ready product.
Steps
General
hard
for all writes #504Voting
Skip/abort voting on a block if/when it is already decided: #190Algorithmic/WP
Querying
get_transactions_by_asset_id()
should ignore invalid blocks: #332get_transactions_by_metadata_id()
should ignore invalid blocks: #792bigchain
table should ignore invalid blocks - issue #192 (ryan), PR #324Mutability
The wire protocol firewall (#594) will prevent deletes & updates on the
bigchain
&votes
tables. If a node deletes a transaction from thebacklog
table, then the client can just resend it, so such deletions don't have to be reverted. As for updates to thebacklog
table, those must be allowed, for example, to reassign stale transactions (PR #359).Prevent deletes on thebigchain
table - #197 (ryan), PR #330Handle deletes on thebacklog
table - #196 (ryan), PR #337Handle updates on thebigchain
table - #195 (unassigned)Prevent updates on thebacklog
table - #194 (unassigned)What to do when a node creates another Genesis block? #444 (unassigned)(Moved to meta-issue #284)Multiprocessing
There were other issues listed here before but then we realized this isn't core consensus stuff.
backlog
table - #198 (ryan), PR #359