Gary Yu
23180d6f86
a checking of is_on_current_chain on body sync don't need a batch ( #1696 )
2018-10-09 20:37:06 +08:00
Antioch Peverell
770aca9a2d
check_known_mmr is the source of our deadlock - blitzing it for now ( #1691 )
2018-10-08 16:44:05 +01:00
Antioch Peverell
acf61db463
skip rangeproof and kernel signature verification unless we are doing a "full" chain validation ( #1678 )
2018-10-07 13:39:40 +01:00
Ignotus Peverell
7f2e2158c8
Reduce the scope of the chain new block lock ( #1666 )
...
When processing a new block, attemps to make the scope of the
corresponding `txhashet` lock as small as possible. The idea is
to avoid bad interactions with orphan locks or block post
processing (i.e. adapter events, etc)
2018-10-05 12:17:58 -07:00
Antioch Peverell
bcf41438dc
Simplify chain, remove head. ( #1657 )
...
* Go back to db for head and header_head
* Use batch consistently for db access
* Pass active txhashset and batch in the ctx
* Only update head in db if total work increases
* Only updated header_head if total work (on header chain) increases
2018-10-05 08:29:33 +01:00
Antioch Peverell
4d70968e70
More robust block pruning ( #1637 )
...
* more robust block deletion
* rustfmt
2018-10-02 16:17:15 +01:00
Antioch Peverell
0635945740
cleanup verifier_cache (add it to block ctx) ( #1638 )
...
rename process_block_no_orphans -> process_block_single
2018-10-02 16:13:02 +01:00
Antioch Peverell
6d67cbdecb
perf: update sync_head once per batch of headers ( #1629 )
...
perf: update sync_head once per batch of headers
2018-10-02 11:13:26 +08:00
Antioch Peverell
f15bfbd35b
lock chain.head() for less time (scope it in a block) ( #1625 )
...
* lock the chain.head for less tieme (scope it in a block)
* actually scope it to that block...
2018-10-01 22:12:56 +01:00
Antioch Peverell
4d2cbe6596
fix: init_sync_head was not behaving as expected ( #1624 )
...
Fix #1612
2018-10-01 23:03:06 +08:00
Gary Yu
d8ca684260
fix: in case of all known, update header_head and sync_head ( #1619 )
...
* fix: in case of all known for Headers received, update sync_head to the last header
* refactor: push this logic down into pipe
2018-10-01 21:58:50 +08:00
Gary Yu
6ad54b9840
fix: mutex dead lock between difficulty_iter and txhashset_write ( #1617 )
...
fix #1611
2018-10-01 11:51:15 +08:00
Antioch Peverell
73ddd1d01d
no need to pass sync_head around in ctx ( #1608 )
2018-09-29 16:19:19 +01:00
Antioch Peverell
985bced99d
remove duplicate dir creation code ( #1603 )
2018-09-29 09:50:32 +01:00
Antioch Peverell
fd8c03679a
use sync_head consistently in sync_block_headers ( #1604 )
...
* use sync_head consistently in sync_block_headers
* rustfmt
2018-09-29 08:47:50 +01:00
Antioch Peverell
2cad812b29
use an lru_cache for the block_hashes_cache ( #1602 )
2018-09-28 17:27:31 +01:00
Yeastplume
e64f4fbcd1
Rust Cuckatoo for verifier and test-miner ( #1558 )
...
* cuck placeholder
* rustfmt
* cuckatoo, early days
* rustfmt
* data structures are in place, siphash key creation is consistent with @tromp
* solver in place, (not yet working)
* cuckatoo test solver working with test nonce
* rustfmt
* update solver to remove adjacency list removals
* verifier functioning
* rustfmt
* Proper error handing in Cuckatoo module, couple of tests
* modify cuckoo/cuckatoo solvers and verifiers to function identically, in advance of trait refactoring
* rustfmt
* refactor PoW context into trait, default to using cuckoo context
* rustfmt
* create macros for integer casting/unwraps
* don't instantiate structs when just verifying, add test validation vector for cuckatoo 29
* rustfmt
* don't init cuckoo structs if just validating
* test fix
* ensure BH hashing for POW is only done within miner/validators
2018-09-28 11:53:14 +01:00
Antioch Peverell
5a83989cf6
explicitly handle the header when processing blocks ( #1600 )
2018-09-27 15:12:08 +01:00
Antioch Peverell
4b0fdc2499
rework to only pass a single block_context to pipeline ( #1599 )
2018-09-27 11:44:50 +01:00
Antioch Peverell
56f84cc2f4
pass batch to process_block and process_block_header ( #1594 )
...
* use a batch consistently when processing blocks and headers
* rustfmt
2018-09-27 09:35:25 +01:00
Antioch Peverell
acec59e249
introduce rewindable_kernel_view (readonly but rewindable kernel MMR view) ( #1587 )
...
* introduce rewindable_kernel_view
cleanup header in extension
* cleanup and docs/comments
* txhashset does not need to be mutable here
* pull validate_kernel_history out into fn
2018-09-26 09:59:00 +01:00
Antioch Peverell
11f2d7b6d4
UTXOView (readonly, minimal, output only txhashset extension) ( #1584 )
...
* make the utxo view explicit
* introduce utxo_view (readonly, minimal txhashset extension)
* rustfmt
* cleanup
* cleanup
* rustfmt
* cleanup build warnings, comments etc.
* rustfmt
* utxo_view even more readonly now
* cleanup
* refactor pmmr, split out readonly_pmmr and backend
* rustfmt
2018-09-25 11:01:19 +01:00
Antioch Peverell
e72d8b58e4
[WIP] txpool (tx validation) using block sums for full validation ( #1567 )
...
tx validation (txpool) rework/simplify
2018-09-24 09:24:10 +01:00
Antioch Peverell
f042f67fcd
Reintroduce block sums, verify full kernel sums per block ( #1559 )
...
* block_sums and full kernel sum verification
* rustfmt
* add docs/comments
* docs
* rustfmt
* comment on fact total_kernel_sum is redundant now
* make sure we setup block_sums correctly on a fork
* rustfmt
* replace those asserts with errors
* rustfmt
2018-09-20 09:19:32 +01:00
Gary Yu
e1c8dc5a3a
fix: reset sync_head to header_head on initial transition to HeaderSync ( #1531 )
...
* fix for bug #1524 , reset sync_head to header_head on initial transition to HeaderSync.
* using @antiochp fix solution in #1539
2018-09-20 07:29:24 +08:00
Antioch Peverell
80bb1cb262
Cleanup new output commits ( #1556 )
...
No need for new_output_commits (batch handles this now)
2018-09-19 11:59:17 -07:00
Ignotus Peverell
9cc7aed713
Dual proof of work, first step ( #1534 )
...
* Move Proof and Difficulty types to pow module. Difficulty scaling calculation.
* Diffculty scaling and size shift for 2nd PoW
* Backport e7eb26ee
* Test compilation fixes
* Scaling only need to go one way, as @tromp pointed out
2018-09-18 15:12:57 -07:00
Quentin Le Sceller
345a6cb53e
Update rand crate to 0.5 ( #1542 )
...
* Update rand crate to 0.5
* Rustfmt
* Misplaced import
2018-09-18 09:39:45 +01:00
Gary Yu
a0deb18e77
Update version of some crates ( #1536 )
...
Update version of some crates
2018-09-17 10:47:48 +08:00
Gary Yu
26244ef9dd
Optimizations for txhashset rewind ( #1528 )
2018-09-14 16:51:36 -07:00
Antioch Peverell
dca0d52dcd
Cleanup transaction with offset ( #1514 )
...
* cleanup build::transaction_with_offset
* rustfmt
2018-09-12 12:17:36 +01:00
Antioch Peverell
07eefc4d6b
cache get_shift() and get_leaf_shift() in prune_list ( #1495 )
...
* cache shift and leaf_shift values in prune_list for fast lookup later
* rustfmt
* fixup core tests
2018-09-12 08:19:05 +01:00
Antioch Peverell
77c2408c4e
Prevent duplicate output commitments ( #1500 )
...
* apply_output checks for duplicate commitment
not just a matching hash
* rustfmt
2018-09-11 19:36:00 +01:00
Ignotus Peverell
ecf20602d5
Hard fork tryout: better PoW encapsulation in block header ( #1478 )
...
* Improve encapsulation with ProofOfWork struct
* Add dual pow scaling factor, fix test
* Fix pre_pow serialization, chain tests
* Adjust header serialized size calc
* Hard fork handling, version-based serialization
2018-09-10 15:36:57 -07:00
Gary Yu
e760ea2ce2
a little bit speed-up for full node syncing ( #1463 )
...
* simplified: track the head and orphans instead of every single block hash that sync requests
* change 1st block timeout from 1s to 5s
2018-09-10 12:32:20 -07:00
Antioch Peverell
dbe53f63c8
disable chain compaction on archive nodes ( #1498 )
...
* disable chain compaction when in archive mode
* rustfmt
2018-09-10 15:59:42 +01:00
Antioch Peverell
77765796ab
improve "check known" steps during process_block() ( #1475 )
...
* document what we do during pipe::apply_block()
* rustfmt
* wip
* rustfmt
* wip
* additional check_known_store and check_known_mmr checks in process_block
* rustfmt
* cleanup coinbase maturity check in process_block
* consolidate the "check in store" logic
add TODOs around the 50 block OldBlock logic
* rustfmt
* cleanup
2018-09-05 10:51:29 +01:00
John Tromp
c359c8aaf2
one day coinbase maturity ( #1457 )
...
* one day coinbase maturity
* make one day maturity a soft fork
2018-09-04 10:59:55 +01:00
Antioch Peverell
b06b112afb
document/comment pipe::process_block() ( #1472 )
...
* document what we do during pipe::apply_block()
* rustfmt
2018-09-03 16:55:09 +01:00
Quentin Le Sceller
544a296f77
Fix typos and unused imports ( #1466 )
...
* Fix typos and unused imports
2018-09-03 13:09:28 +02:00
Antioch Peverell
eae0ab6b2a
take write lock on txhashet earlier when processing blocks ( #1456 )
...
* take write lock on txhashet earlier when processing blocks
* no txhashset lock in process_block_header
2018-09-03 11:09:53 +01:00
Gary Yu
f971e8de77
infinite loops in check_orphans, if block in orphans has a forked parent ( #1452 )
...
* fix: if block in orphans queue has a forked parent, cause infinite loop in check_orphans()
* process all orphans at a given height before go to next height
2018-09-01 15:09:38 -04:00
Antioch Peverell
939d391e0e
cache rangeproof and kernel signature verification results ( #1419 )
...
* wip - cache rangeproof verification
* rustfmt
* rustfmt
* rename to ok_verifier
* rustfmt
* wire in caching verifier in more places
skip rangeproof and kernel signature verification during deserialization
* rustfmt
* actually cache verification results via ok verifier
* rustfmt
* cleanup
* pass a cache around, not a verifier
* rustfmt
* cleanup trait shenanigans
* rustfmt
* core tests passing
* rustfmt
* rustfmt
* tests passing
* rustfmt
* verifier cache now takes vecs of data in and out
* rustfmt
* logging + rustfmt
* add docs and comments
2018-08-30 15:44:34 +01:00
Antioch Peverell
a6bd81fdb3
Cleanup generics (where not needed) ( #1429 )
...
BlockChain does not need to be generic
2018-08-27 17:22:48 -04:00
Antioch Peverell
7dfca6077c
Refactor compact block body ( #1394 )
...
* introduce CompactBlockBody
* rustfmt
* implement From<Block> for CompactBlock
* rustfmt
* remove debug logging
* wip
* rustfmt
2018-08-22 20:19:37 +01:00
Antioch Peverell
7ca4d45bf5
Cleanup build warnings ( #1391 )
...
* cleanup some unused vars etc.
* rustfmt
2018-08-20 21:56:32 +01:00
Antioch Peverell
bb7bc2c4f2
Refactor rewind single header ( #1390 )
...
* refactor txhashset to only take a single header
no need to pass in current head_header each time
* rustfmt
* fix bug introduced in rewind with LMDB
* rustfmt
* add some comments
2018-08-20 20:34:12 +01:00
Yeastplume
8440aad7ea
Retrieve header by output commit ( #1388 )
...
* Add get_header_for_output function to chain
* add api call to retrieve associated header for a given output
* rustfmt
2018-08-20 19:02:44 +01:00
Antioch Peverell
82a467ac3c
Fix txpool race condition ( #1385 )
...
* fix txpool race condition
* rustfmt
* fixup pool tests
* rustfmt
* rebase against master, pool tests passing
2018-08-20 14:48:05 +01:00
hashmap
f7161a9afb
Improve API handlers ( #1364 )
...
* Return different status codes depending on result, not just BAD_REQUEST, fixes #1247
* Reduce number of unwraps
* Refactoring
2018-08-17 13:04:02 -04:00