* rewind to header as part of txhashset validation
otherwise we risk including a new block and the roots do not match
* fix bug in rm_log rewind (wants to be inclusive of provided index)
* put block marker in the index so we can rewind correctly
during validation of the new txhashset
* rustfmt
* added mining subview, changed main menu selection
* collecting difficulty stats from miner
* add diff calc view, separate server stats
* rustfmt
* block difficulty data output
* rustfmt
* ensure diff data is always shown
* don't write to stderr when tui running
* move FAQ.md to https://github.com/mimblewimble/docs/wiki/FAQ and unduplicate (Troubleshooting segment already present on its own wiki page)
* Update doc/style and move it into CONTRIBUTING.
* group up docs overview for more clarity
* link to previously unlinked content in the docs overview
* update + cleanup doc/build
* Update links to reflect troubleshooting is now only in the wiki
* More link fixes and spelling
* Remove doc/usage.md that I've faile to keep updated, and use a wiki page instead
* Last forgotten CONTRIBUTING.md fix
Fixes#783.
* 2^60 still fails on OSX, experimentally found safe max 2^55
* Handle negative values
I tried to use .abs(), unfortuantely fuzz test kills it with
`panicked at 'attempt to negate with overflow', /Users/travis/build/rust-lang/rust/src/libcore/num/mod.rs:1146:17`
Fuzz test demonstrated that the current implemenation panics on reading from the network when serialized tx. Contains for example huge number of input or outputs. It allows a mailicious sender
to kill the server.
* hash_with_index on non-leaf nodes
rework the Merkle proof to include the pos of each sibling in the path
* rustfmt
* cleanup
* cleanup
* use get_from_file in validate (children may have been "removed")
* rustfmt
* fixup store tests
* remove difficulty field from block_header (derive from total_difficulty)
* address feedback on PR and general cleanup
* rustfmt
* rework pow/difficulty validation in pipe::validate_header
now that we only have total_difficulty available
* cleanup various todos
* rustfmt
* rework DifficultyIterator to track header and prev_header state
* rustfmt caught some garbage syntax
* cleanup
* move from storing per block kernel_offset in the block header
to storing the total accumulated kernel offset on each block header
* rustfmt
* cleanup
* wip
* failing test for being too eager when pruning a sibling
* commit
* rustfmt
* [WIP] modified get_shift and get_leaf_shift to account for leaving "pruned but not compacted" leaves in place
Note: this currently breaks check_compact as nothing else is aware of the modified behavior
* rustfmt
* commit
* rustfmt
* basic prune/compact/shift working
* rustfmt
* commit
* rustfmt
* next_pruned_idx working (I think)
* commit
* horizon test uncovered some subtle issues - wip
* rustfmt
* cleanup
* rustfmt
* commit
* cleanup
* cleanup
* commit
* rustfmt
* contains -> binary_search
* rustfmt
* no need for height==0 special case
* wip - works for single compact, 2nd one breaks the mmr hashes
* commit
* rustfmt
* fixed it (needs a lot of cleanup)
we were not traversing all the way up to the peak if we pruned an entire tree
so rm_log and prune list were inconsistent
* multiple compact steps are working
data file not being copmacted currently (still to investigate)
* cleanup store tests
* cleanup
* cleanup up debug
* rustfmt
* take kernel offsets into account when summing kernels and outputs for full txhashset validation
validate chain state pre and post compaction
* rustfmt
* fix wallet refresh (we need block height to be refreshed on non-coinbase outputs)
otherwise we cannot spend them...
* rustfmt
* first explorations at attempting to integrate more user-friendly status screen/ui
* rustfmt
* adding some logo and color for visual interest
* formatting
* better integration with stdout, cleaner looking startup and shutdown
* rustfmt
* update to framework, and first collection of stats from server
* rustfmt
* commit of basic stat screen, think it's in a good enough state to share
* rustfmt
* fix to automated tests
* fix to automated tests
* grin.toml setting
* grin.toml setting
* grin.toml setting
* merge from upstream
* merge from upstream
* merging
* merging
* formatting
* adding more status screens, beginning to collect peer data
* rustfmt
* beginnings of peer info
* adding tui dir
* rustfmt
* missing table
* create title bar
* Split up UI elements into separate files, create trait for update
* Added basic mining view
Convenience option, set to true by default in grin.toml, to
fork a wallet listener thread by default. Should make it easier
for people to get started on testnet2.
People who want to configure a password for their wallet seed,
run multiple listeners, change default address should set this
to false and manually configure and start their wallet listener.
This might break some tooling. Hopefully not.
* first explorations at attempting to integrate more user-friendly status screen/ui
* rustfmt
* adding some logo and color for visual interest
* formatting
* better integration with stdout, cleaner looking startup and shutdown
* rustfmt
* update to framework, and first collection of stats from server
* rustfmt
* commit of basic stat screen, think it's in a good enough state to share
* rustfmt
* fix to automated tests
* fix to automated tests
* grin.toml setting
* grin.toml setting
* grin.toml setting
* Cleanup MMRs positional indexes. Get rid of the kernel position index.
Introduced a new block marker index that keeps, for each block, the
respective positions in the output and kernel MMRs. This is now sufficient
for rewind.
* Block marker compaction
* Implementation of compaction for the chain. Single entry point on the chain triggers compaction of all MMRs as well as the cleanup of the positional index and full blocks.
* API endpoint, additional tests and more fixes for compaction
* Also prune PMMR metadata, minor bug fix
* PMMR store tests fix
* adding file position index data accessable to the chain, and allowing for storage of such within db
* missing file
* restart files at last recorded position in stored file metadata
* just use tip to store last pmmr index information
* error handling
* test fix
* family_branch() to recursively call family() up the branch
todo
- we hit a peak, then we need to get to the root somehow
- actually get the hashes to build the proof
* wip
* some additional testing around merkle tree branches
* track left/right branch for each sibling as we build the merkle path up
* MerkleProof and basic (incomplete) verify fn
* I think a MerkleProof verifies correctly now
need to test on test case with multiple peaks
* basic pmmr merkle proof working
* MerkleProof now serializable/deserializable
* coinbase maturity via merkle proof basically working
* ser/deser merkle proof into hex in api and wallet.dat
* cleanup
* wip - temporarily saving merkle proofs to the commit index
* assert merkle proof in store matches the rewound version
there are cases where it does not...
* commit
* commit
* can successfully rewind the output PMMR and generate a Merkle proof
need to fix the tests up now
and cleanup the code
and add docs for functions etc.
* core tests passing
* fixup chain tests using merkle proofs
* pool tests working with merkle proofs
* api tests working with merkle proof
* fix the broken comapct block hashing behavior
made nonce for short_ids explicit to help with this
* cleanup and comment as necessary
* cleanup variety of TODOs