Commit Graph

137 Commits

Author SHA1 Message Date
Simon B 17d5898677 Forgotten testnet1 cherries (#475)
* Very quick peer banning endpoint, helps with #406
* Ping heights (#407)
* add height to ping/ping
* reformat output
* fix p2p test
* Fix orphan handling, not related to current head. Fixes #412
* Check before borrow, fixes #267
* Not finding an output commit in pos is an AlreadySpent
* Fix race condition, sending before conn is ready
* Explicit error for unknown pos of a forked block
* Remove config outdated tests. Fix #333
* Check ref and try before borrow, fix #400
* We do not want to sync with old peers anyway
* Hide cargo compiler warning for unused NoopAdapter and unused test code. Add TODOs
2017-12-13 21:52:21 +00:00
AntiochP bffd955c26 Revert "introduce cpu_pool to read_msg (#477)" (#478)
This reverts commit 45b9962109.
2017-12-13 16:30:59 -05:00
AntiochP 45b9962109 introduce cpu_pool to read_msg (#477)
* introduce cpu_pool to read_msg

* cleanup and less unwrap() in handler

* expose cpu_pool as part of net_adapter (reuse across all peer connections and handlers)

* fix DummyAdaptor for test usage

* add new() to DummyAdapter for convenience
2017-12-13 15:05:25 -05:00
AntiochP 8e6f54779e not sure how this ever worked... (#465) 2017-12-11 12:54:26 -05:00
Simon B a4729b51ac Issue 458 too verbose slog lines initial sync (#459)
* Alleviate slog-async channel overflow by shortening while clarifying some log lines.

* add debug logging to GetBlock handling

* make another log line less rendudantly chatty
2017-12-11 09:51:52 -05:00
Simon B 8b81a2f806 Seed debug outputs cleanup (#460)
* DRY up

* iterate 66% less

* clarify debug! outputs

* less verbose peer queuing

Rationale: debug outputs that happen _a lot_ is nice if they're short and distinct, making them easier to pattern match / willfully ignore while reading through logs

* update comment to mention last weeks' added usecases

* .push() less
2017-12-11 09:38:46 -05:00
AntiochP 001fd3789c specify serde_json as "=1.0.7" to pin the version (#451) 2017-12-09 11:59:54 -05:00
AntiochP 0a87c0ced1 body_sync every 5s, but request 10*most_work_peers blocks at a time (#448)
header_sync every 10s
2017-12-08 17:12:10 +00:00
AntiochP a4e0b5c56a base threshold for sync on difficulty of past 5 blocks (#433)
* base threshold for sync on difficulty of past 5 blocks

* cleanup threshold calc filter_map + fold
2017-12-07 21:11:44 -05:00
AntiochP 10030a224a more aggressive peering (#445) (#446)
* [WIP] aggressive peer connections (and logging)

* get peer list from each connected peer when low on peers

* cleanup the try_read() calls and log consistent warning messages
(will clean these up later)

* cleanup error logging (log at debug level)
2017-12-07 20:24:03 -05:00
AntiochP 0b9ca727d3 add logging in monitor_peers for healthy/banned/defunct counts (#436) 2017-12-06 09:28:11 -05:00
AntiochP f5d24c5a9c Dry up how we check if a header is on the current chain (#431)
Uses the header_by_height index
2017-12-05 18:32:57 +00:00
AntiochP 179f74462a simplify sync process further - one thread for both body and header sync (#427) (#428)
* simplify sync process further - one thread, try_read on peer for robustness
* add most_work_peers() for convenience, add most_work_peers count to "monitoring peers" log msg
2017-12-05 11:42:25 -05:00
Ignotus Peverell 7b9351864a Banning of misbehaving peer, applied to bad blocks
Added support for peer banning on the p2p server. The peer status
is changed and the peer is disconnected. A banned peer won't be
able to reconnect as well.

Tracking of chain errors due to a block that's intrinsically bad
and banning of the peer that sent it. If we're syncing, resetting
the header chain to the same as the main chain to force
backtracking.
2017-12-05 02:14:55 +00:00
AntiochP cc9ec53390 sync_head port from testnet1 (#425)
* port simple_sync across from testnet1, sync head & improved fork handling
* introduce new sync_head for tracking header chain during sync
* add debug logging in body_sync for state of various heads
* update header_head during sync if header is now the one with most work, pass in sync and head contexts to pipe
* port across sync_head changes from master, put the 1s sleep back in...
* let sync run even if the full 512 headers are all known, give sync a chance to sync against a fork that forked a long time ago
* handle height jumping during a reorg
block validaton should not check for height+1 based on head
no assumptions should be made about height indices
* quick(er) check for previous block in process_block (we cannot check height against ctx head)
* make body_sync a _lot_ faster by finding the forked block more efficiently...
* fix monitoring peers log msg
* fix chain tests
* fix grin tests - we were using the wrong genesis hash (wrong chain type)
* apparently needs setting in both places...
* body -> header -> sync (#414)
* port over body -> header -> sync changes from testnet1
2017-12-04 19:16:57 +00:00
AntiochP 442ef3b255 port across "simple_sync" changes from testnet1 branch (#409)
* port across "simple_sync" changes from testnet1 branch
Cleanup direct refs to peer map or peer store
P2P server acts as a facade, handling the list of connected peers
and the storage of their information. Everything else goes through
the p2p server instead of having a peer map reference or going
straight to the store.
Fix p2p tests

* fix "monitoring peers" log msg (use connected_peers)
2017-11-30 10:27:50 -05:00
Yeastplume 77eac16702 Locator fix master (#381)
* fix chain_header_by_height error

* cherry-pick and clean up
2017-11-23 11:11:35 +00:00
AntiochP 25969424ff notify syncer on every block received (including orphans) (#379)
prefer random peers with more difficulty than us
do not keep asking for headers over and over
2017-11-23 00:16:36 -05:00
AntiochP c6b94dd2c4 generate locator heights all the way down to 0 by powers of 2 (#378) 2017-11-22 22:59:33 -05:00
Ignotus Peverell 861c54c13b More explicit panic when syn can't get a peer 2017-11-22 15:54:50 -05:00
AntiochP 7573f6a556 use read lock over write lock where possible (#363)
fix issue with sync starting twice
2017-11-21 22:28:31 -05:00
Ignotus Peverell c325c99b87 Error handling fixes sync
And error in the sync run loop would just exit it silently. Abort
with a panic instead.

Peer errors (like disconnect) on locator request was bubling up in
the loop. Just logging instead.
2017-11-21 15:19:17 -05:00
AntiochP 6352dfbac9 add total_diff to ping/pong msgs (#350)
* add total_diff to ping/pong msgs
debug log for total_diff on each ping/pong

* expose peer addr to the handle_payload fn
so we know where it came from

* fix p2p tests for ping

* default to 0 if we cannot read total_difficulty

* updating a connected peer in place

* actually update peer info diff

* fixup p2p tests
2017-11-21 09:24:29 -05:00
Yeastplume c019cc2fd0 miner timing resolution (#351) 2017-11-20 22:57:36 +00:00
AntiochP 00d82f2c04 compare genesis during peering handshake (#327)
* wip - send genesis in handshake
* error if genesis mismatch on handshake
* fix the tests
* preserve order of existing fields in hand/shake
2017-11-20 12:35:52 -05:00
Simon B e20975136e less chatty Testnet1 outputs (#316)
Fixes #281 by doing:

- "Starting validation pipeline for " -> "Processing "
- stdout logging default = Warning
- ERR -> INFO for "Transaction rejected: Already in pool" -- only for netadapter transaction_received, which (hopefully!) only gets tx from peers, and lots of those will be duplicates, that's good and not an error.

* Downgrade ERR even down to DEBUG.

Also let Transaction rejected show tx hash,
 so users can check if such a rejection is for the
 payment they expected, or just any random peer
 sending in some old and already known tx.
2017-11-19 20:45:32 -05:00
Andrew Bellenie 2d1ed9ba52 Fix for issue #318 (#323)
* Rename wallet 'receive' to 'listen'
* Handle use of previous 'receive' command gracefully and clarify docs
2017-11-19 01:55:26 -05:00
Ignotus Peverell caee282fcc Better logging in case of tree root setting error 2017-11-18 14:31:29 -05:00
Ignotus Peverell addaadf711 Better panic message in sync in case of no peers. 2017-11-18 13:54:44 -05:00
AntiochP 90012c86ac use a short timeout when opening the connection to possible peers (#300)
* use a short timeout when opening the connection to possible peers
lots of peers in the db are unavailable and we do not want to wait 60s for these

* also randomize peers so we don't always try and connect to peers with low ip addresses

* bump timeout up to 5s for peering
2017-11-17 20:13:49 -05:00
AntiochP 2a92eab675 Spawn connect_and_req calls (#296)
Avoids delays in connecting with long timeouts stalling the node.
2017-11-17 15:17:14 -05:00
Ignotus Peverell fec8858ead Ported acbe983 and 58d7dc7 from testnet1 branch 2017-11-16 18:17:56 -05:00
Ignotus Peverell 97d7a43ccf Default value for ChainType, when not in grin.toml 2017-11-15 17:30:48 -05:00
Ignotus Peverell 91fdaa8320 Genesis block for known chains, mine dev chains (#269)
Renamed mining parameter mode to chain type, with existing types
of CI testing, user testing, testnet1 or mainnet. The public
chains (testnet1 and mainnet) come with their fully pre-defined
genesis block.

Still need to set the nonce and cycle for testnet1 genesis.
2017-11-15 16:49:15 -05:00
AntiochP 6fb085a823 Fix bad case of trying to rewind to block at height 0 (#271)
* bad case of trying to rewind to block header height 0
* rewind_to_genesis appears to work
* do not assume genesis block at height 0 is empty, pass full block in to rewind, check for last output and kernel, use index 0 if block is empty
2017-11-15 15:37:40 -05:00
Yeastplume 89217a1fa5 Attempt to continue if duplicate coinbase commit is found (#266) 2017-11-14 18:58:39 -05:00
AntiochP c2a95637b3 more robust peer handling (#244)
* use HashMap internally for tracking connected peers (to avoid duplicates)
* reuse the handshake on the server so we can track our own nonce to avoid self connections correctly
* make sure we start up the clean_peers loop even in seedless mode
* logging in monitoring peers loop
* simplify monitoring for no seeds
* fixup and cleanup simulnet tests (real seeds in places)
* only start the sync if we have either seeds or peers that we know about, exit syncer safely if we have no connected peers
2017-11-14 13:57:16 -05:00
AntiochP c1656f7660 use the static secp instance everywhere (except the wallet) (#250) 2017-11-09 14:26:45 -05:00
Yeastplume a0c0d6f382 nonmenclature for mining graphs per second (#248) 2017-11-09 15:14:25 +00:00
AntiochP 17bf3c2702 default wallet receive to listen on 127.0.0.1 (#229)
* default wallet receive to listen on 127.0.0.1, optional flag on wallet command to listen on 0.0.0.0
* fix simulnet for new wallet port/interface config
2017-11-02 16:19:22 -04:00
AntiochP 8a42a692ce add new /v1/peers endpoints to the api (#225)
* add new /v1/peers endpoint to the api
* /peers/connected and /peers/all endpoints
2017-11-02 12:49:33 -04:00
Ignotus Peverell 8ded5e23cf Slight increase of retry on block download before give up 2017-11-01 22:52:10 -04:00
Ignotus Peverell e4ebb7c7cb Cleanup HTTP APIs, update ports to avoid gap, rustfmt
Moved the HTTP APIs away from the REST endpoint abstraction and
to simpler Hyper handlers. Re-established all routes as v1.
Changed wallet receiver port to 13415 to avoid a gap in port
numbers.

Finally, rustfmt seems to have ignored specific files arguments,
running on everything.
2017-10-31 19:42:56 -04:00
Yeastplume 05d22cb632 changing secp import to tag, and consolidating Cargo.toml import (#220) 2017-10-31 23:20:55 +00:00
AntiochP 8b324f7429 add retry logic to miner when hitting wallet coinbase API (#213)
* mount v2 router for flexibility, wallet checker now refreshes multiple outputs via single api call
* fix the api router
* wallet api handlers, miner uses wallet_client
* retry logic via tokio_retry, miner creates new coinbase output via wallet API (retries several times)
* move wallet client into wallet crateand rework the lock acquisition logic to use tokio_retry
2017-10-27 17:36:03 +00:00
Ignotus Peverell e2e24bc38e Transaction broadcast (#209)
* Add transaction broadcast to all known peers once they have been
accepted by our own transaction pool.
* Some debug log

Fixes #200
2017-10-25 21:06:24 +00:00
Yeastplume 9c0411ac5e Bind to services to all interfaces rather than loopback (#197)
* changing default ip
2017-10-23 16:34:43 +00:00
Ignotus Peverell 2d105deea7 rustfmt 2017-10-22 10:40:24 +00:00
Ignotus Peverell fd08c34474 Missing mut for test config 2017-10-22 09:44:27 +00:00
Ignotus Peverell 3237df70f6 Spurious mut, different lint level on CI 2017-10-22 09:14:18 +00:00