orga
orga copied to clipboard
State machine engine
We got rid of it during #36
We will probably eventually need a more advanced convention for error types - we currently just use the one-size-fits-all `failure::Error`, but this might be hard when we need to match...
To provide atomic queries, it will probably be useful to keep snapshots of recent states (say, for all blocks from the last minute). Then we can resolve queries against a...
We will be storing read/write keys in sets and doing intersection/union operations on them often. Since `std::collections::HashSet` uses a random hash function per-instance by default to prevent DoS attacks, that...
The current `Store` trait uses `&[u8]` and `Vec` for keys and values in `get`/`put`/`delete`. There are a few optimizations we can make based on ways we use these keys: -...
A possible optimization for our set operations are to use Bloom filters - we can probabilistically detect intersections in a way where the common case of 0 intersections is much...
There are many simple invariants for stores, e.g. `put('foo', 'bar'); read('foo') == 'bar';`.
Many state machine tests probably apply to all state machines we write (e.g. a simple determinism check by using repeated input).