3
0
mirror of https://github.com/Qortal/altcoinj.git synced 2025-01-31 23:32:16 +00:00
Commit Graph

682 Commits

Author SHA1 Message Date
Mike Hearn
9201cba0cc Wallet: try deleting the temp file in the finally block and print a warning if it succeeded.
Resolves issue 362.
2013-03-30 17:35:57 +00:00
Mike Hearn
301db707b1 Wallet: misc comment updates 2013-03-30 17:35:07 +00:00
Mike Hearn
49d26ad773 WalletProtobufSerializer: Add a couple of NPE checks 2013-03-30 17:34:30 +00:00
Mike Hearn
7307308915 WalletProtobufSerializer: Clear txMap after reading.
Resolves issue 380.
2013-03-30 17:23:34 +00:00
Mike Hearn
616b4a5a7d PeerGroup: make selectDownloadPeer non static so users can override it and control selection behaviour. 2013-03-29 18:26:40 +00:00
Mike Hearn
9e870f40bf DnsDiscovery: Rewrite to use better abstractions and remove some arbitrary magic numbers.
Resolves issue 346.
2013-03-29 18:18:45 +00:00
Mike Hearn
08dbb21a39 H2 store: Set a 60 second locking timeout to avoid failures when processing large/complex operations.
Resolves issue 348.
2013-03-29 18:00:46 +00:00
Mike Hearn
a78b53c5aa AbstractBlockChain: Fix median timestamp calculation.
Resolves issue 370.
2013-03-29 17:56:28 +00:00
Mike Hearn
3d6691c82a Switch to using DNS for testnet discovery, as LFnet has gone away.
Put DNS seeds into NetworkParams.
Deprecate IrcDiscovery and remove the unit tests for it.
Update examples and tools to use DNS for everything.
Resolves issue 299.
2013-03-29 17:39:24 +00:00
Mike Hearn
41ce887652 Fix TCPNetworkConnection.connectTo() which broke during a previous re-factor. It's not often used so it wasn't noticed. 2013-03-29 17:34:23 +00:00
Mike Hearn
89d45b638f WalletTest: Remove temp code that snuck in to the tests accidentally. 2013-03-29 17:21:38 +00:00
Mike Hearn
89079fd8d4 WalletTest: Heterogeneous is hard to spel corectly :) Also it's probably unfamiliar to non native speakers. Replace it with the simpler word "mixed". 2013-03-29 17:07:22 +00:00
Mike Hearn
4273dacc00 Check that the private key decrypted correctly in ECKey.sign(). Resolves issue 359. 2013-03-29 17:05:39 +00:00
Mike Hearn
7b8eab19ff Use a bit of Guava for unsigned longs. Resolves issue 367. 2013-03-29 16:41:28 +00:00
Mike Hearn
4f1c7f4816 Throw BlockStoreException not NullPointerException when chain head cannot be found in SPVBlockStore. Resolves issue 374. 2013-03-27 17:57:00 +01:00
Mike Hearn
3c6f435fde More changes/simplifications to PeerGroup locking. 2013-03-27 17:44:51 +01:00
Mike Hearn
61c8c07468 Make wallet description private. Resolves issue 368. 2013-03-27 11:57:29 +01:00
Mike Hearn
8e0c72597c Add JSR305 annotations. Bump Guava version. Resolves issue 347. 2013-03-21 17:19:36 +01:00
Mike Hearn
df257e8589 Don't dump entire block to log when a split happens. 2013-03-21 16:42:34 +01:00
Mike Hearn
56285da06c Lots of bug fixes to double spend handling.
Fix some corruptions that could occur during a Finney attack. Resolves issue 182.
2013-03-21 16:14:16 +01:00
Mike Hearn
76e539e8e7 Simplify the handling of double spends somewhat. 2013-03-21 15:25:52 +01:00
Mike Hearn
608810cfc1 Improvements to tx handling in the wallet.
Attach inputs of pending transactions when relevant transactions appear in the chain. Resolves issue 345.
Check transactions for being double spends independent of whether they send/receive us money. Resolves a potential security issue.
2013-03-21 14:24:59 +01:00
Mike Hearn
e449c77026 Don't rely on padding checks to tell us if the decryption was correct.
Fix a few minor javadoc issues. Resolves issue 356.
2013-03-19 17:30:08 +01:00
Mike Hearn
89d30142c3 Fix some labels in the wallet encryption tests. 2013-03-19 17:29:26 +01:00
Mike Hearn
b7eab44990 Remove a couple of checkNotLocked asserts that didn't get deleted last time. 2013-03-19 15:40:31 +01:00
Mike Hearn
7696835f86 Fix over-eager locking in PeerGroup and ensure the resulting code doesn't race, resolving a lock inversion. Also, take into account the possibility of a block being mined before it's fully propagated and add some discussion.
Resolves issue 353.
2013-03-19 15:21:24 +01:00
Mike Hearn
0548e983ed Fix a race condition in the memory pool code. Update issue 353. 2013-03-19 14:55:12 +01:00
Mike Hearn
8b437eaf95 Fix a thread safety issue. Update issue 353. 2013-03-19 14:54:00 +01:00
Mike Hearn
e5265a5342 Add more comments explaining Bloom filtering to avoid confusion. 2013-03-18 23:24:59 +01:00
Mike Hearn
57b4774985 Clean up another listener invocation a bit. 2013-03-18 23:24:59 +01:00
Mike Hearn
c988212441 Remove a redundant null check in checkAESKey() 2013-03-18 18:27:13 +01:00
Mike Hearn
dc433761dd Print whether a key is encrypted or not in ECKey.toString() 2013-03-18 18:27:13 +01:00
Mike Hearn
33499aab78 JavaDoc fix to KeyCrypter. 2013-03-18 18:27:13 +01:00
Mike Hearn
7799024c5c Don't dump the salt bytes in toString() and change how it's printed. 2013-03-18 18:27:13 +01:00
Mike Hearn
732c5e631e Make it easier for people to override just the tx eligibility behavior in DefaultCoinSelector by using a protected method. 2013-03-18 18:27:13 +01:00
Mike Hearn
aaa2ec4c5a Add some convenience methods for encrypted wallets. Minor style fixes. 2013-03-18 18:27:13 +01:00
Mike Hearn
5d0518dafd Merge encrypted wallets functionality by Jim Burton. 2013-03-18 18:27:12 +01:00
Mike Hearn
17efb4d6b7 Add more logging and fix a bug in the dependency resolution process that occurred when using ping/pongs instead of notfound. It could result in hung dependency resolution and interfered with block downloads. 2013-03-18 17:33:54 +01:00
Mike Hearn
32353bdc2e Bit more logging in TCPNetworkConnection 2013-03-18 17:33:16 +01:00
Mike Hearn
311e0549b9 Delete unneeded pong logging. Resolves issue 352. 2013-03-18 10:44:16 +01:00
Mike Hearn
1ed2459522 More minor issues found by IntelliJ static analysis. 2013-03-15 17:19:28 +01:00
Mike Hearn
3a899767b4 Clear some minor cosmetic issues found by IntelliJ static analysis. 2013-03-15 17:14:07 +01:00
Mike Hearn
c2e96be58b Remove obsolete code that handled migration from java serialized wallets. 2013-03-15 17:12:52 +01:00
Mike Hearn
3db55946df Fix another stupid bug in the pinging code that could cause crashes. 2013-03-15 16:03:02 +01:00
Mike Hearn
e140662ea2 Fix a regression in saving wallets on Windows. 2013-03-13 12:23:12 +01:00
Mike Hearn
9bc9a4b262 For now, throw on cycles. Also remove checkNotLocked(), as it isn't actually the right thing to do. 2013-03-11 16:07:33 +01:00
Mike Hearn
c351df567e PeerGroup: Remove a now-useless synchronized block and mark a few more fields final. 2013-03-11 15:48:46 +01:00
Mike Hearn
a6d0c9169b Clear a few more misc IntelliJ inspection alerts. 2013-03-11 15:06:27 +01:00
Mike Hearn
fb9bfb960e Fix a bug that would cause ping nonces to always be set to zero, thus screwing up perceived ping times. 2013-03-11 15:02:16 +01:00
Mike Hearn
4d01e107fa No-op: auto-simplify a few constructs 2013-03-11 14:58:47 +01:00
Mike Hearn
ac8a5008fe Add JCIP thread annotations jar and use @GuardedBy in Peer.
Unlock Peer almost completely and make it fully thread safe with minimal use of locking.
Introduce a new convention that volatile variables have a v prefix.
2013-03-11 14:51:15 +01:00
Mike Hearn
45ce6fe9df Bit more debugging code in TestWithNetworkConnections 2013-03-11 14:30:10 +01:00
Mike Hearn
c21f182d78 Move refreshing of the bloom filter out of the PeerGroup and into the Peer, where it belongs. 2013-03-11 12:39:46 +01:00
Mike Hearn
bffc85fa24 Move message processing out of the handler class and into the top-level Peer class. 2013-03-11 12:25:10 +01:00
Mike Hearn
b2ab3e1c43 Delete EventListenerInvoker, it is no longer needed. 2013-03-11 12:21:42 +01:00
Mike Hearn
971c9c5999 Remove more usages of EventListenerInvoker in PeerGroup and fix a TODO. 2013-03-11 12:21:01 +01:00
Mike Hearn
081663f857 Remove event listener in PeerGroup.removeWallet() to avoid a memory leak.
Resolves issue 344.
2013-03-11 12:10:41 +01:00
Mike Hearn
807447ca1a Unlock Peer event listeners. 2013-03-07 18:43:23 +01:00
Mike Hearn
2333c44657 Add a comment. 2013-03-07 18:43:15 +01:00
Mike Hearn
c8c1e68152 Unlock TransactionConfidence event listeners, make sure MemoryPool is not locked when a tx is marked broadcast by a peer to avoid inversions via listeners.
Unfortunately this introduces some new FindBugs warnings because it doesn't understand the inside-out locking pattern used here, despite that it's correct.
Update issue 233.
2013-03-07 17:38:13 +01:00
Mike Hearn
0534231de9 Run wallet event listeners unlocked. Resolves another inversion.
Update issue 223.
2013-03-07 17:08:15 +01:00
Mike Hearn
0c30050a97 Delete the cycle test, we can trust that Guava works. 2013-03-07 17:08:15 +01:00
Mike Hearn
f0aff6484e Narrow the locking in Peer.processInv() to avoid invoking memoryPool.seen() with the Peer lock held.
This resolves an inversion that can occur if a transaction confidence listener is run due to being marked as broadcast.
Update issue 233.
2013-03-07 17:08:07 +01:00
Mike Hearn
2fb3667c42 Add a 1-liner Locks.checkNotLocked method to make it clearer than writing checkState(!lock.isLocked()); 2013-03-07 16:18:53 +01:00
Mike Hearn
0221b71418 Convert block chain to use a cycle detecting lock. 2013-03-07 15:57:50 +01:00
Mike Hearn
9d87997736 Some more tweaks to the Locks class. 2013-03-07 15:36:07 +01:00
Mike Hearn
9de6dca8c1 Move cycle detecting lock creation out into a new Locks class, rather than stuff it into Utils.
Convert PeerGroup and Peer to also use cycle detecting locks, and add a unit test to Wallet to check that cycle detection works.
 Change default policy to warn. Now warnings are being triggered, the followup commits will fix them.
2013-03-07 13:58:04 +01:00
Mike Hearn
94670f3df0 Make Peer.memoryPool final and introduce a new c'tor for it. 2013-03-06 16:08:52 +01:00
Mike Hearn
83308c6ee1 Clear another FindBugs warning in SPVBlockStore.
The analysis doesn't seem to be good enough to detect that some of these cases are safe.
2013-03-06 15:52:39 +01:00
Mike Hearn
b780c6f191 Silence a FindBugs warning in Utils.
This isn't a real bug as unit tests aren't multi-threaded, but the analysis can't know that.
2013-03-06 15:51:45 +01:00
Mike Hearn
5a16a3d3fe Silence a couple of FindBugs warnings. 2013-03-06 15:51:17 +01:00
Mike Hearn
1ba2c9d5de Use a cycle detecting lock in Wallet and convert its event listeners array to a COW list.
This does not currently detect or break any cycles, even though some are known.
2013-03-06 15:10:52 +01:00
Mike Hearn
23aa1a9105 Tweak DefaultCoinSelector.isSelectable to take a Transaction as a parameter.
Resolves issue 322.
2013-03-06 14:47:30 +01:00
Mike Hearn
f7fa0cda72 Make the use of cycle detecting locks optional at compile time. 2013-03-06 13:51:27 +01:00
Mike Hearn
de653cc42d Mark BoundedOverheadBlockStore as deprecated. 2013-03-06 13:47:09 +01:00
Mike Hearn
53fcef761e BitCoin -> Bitcoin 2013-03-06 13:12:27 +01:00
Mike Hearn
e57068451d Split some selection logic into a static method of DefaultCoinSelector. Resolves issue 322. 2013-03-06 12:13:34 +01:00
Mike Hearn
27a49655fb Update language level in the POM.
Updates issue 334.
2013-03-06 11:59:53 +01:00
Mike Hearn
96cd35f139 Add a convenience method to CheckpointManager and example of how to use in PingService. 2013-03-05 14:48:28 +01:00
Mike Hearn
7f17766b47 Minor javadoc improvement. 2013-03-05 14:48:28 +01:00
Mike Hearn
0419887407 Add a CheckpointManager class and a BuildCheckpoints tool that saves a set of checkpoints to disk. By default there is one every difficulty transition period (two weeks), which means a relatively small amount of RAM needed to hold them all. There are only 111 checkpoints so far and old ones can be thinned out if needed. 2013-03-05 14:48:28 +01:00
Mike Hearn
b4c835c0cf Quieten a noisy debug line when downloading the block chain. 2013-03-05 14:48:28 +01:00
Mike Hearn
68907880cb Refactor compact serialization out of SPVBlockStore and into StoredBlock. 2013-03-05 14:48:28 +01:00
Mike Hearn
18a14c6668 Indent fix 2013-03-05 14:48:28 +01:00
Mike Hearn
61410adbaa Fix BOBS bug introduced by my optimizations. 2013-03-05 14:48:28 +01:00
Mike Hearn
fb56237de8 Fix a couple of unit tests and resolve Matts comment. 2013-03-05 14:48:28 +01:00
Mike Hearn
50323391e5 Misc optimizations, the profiles look much better now. 2013-03-05 14:48:28 +01:00
Mike Hearn
54354c16b6 Add SPVBlockStore, a new higher performance replacement for BOBS that uses a fixed-size mmapped ring buffer, with caching on top to cover up for slow Dalvik mapped byte buffer operations. 2013-03-05 14:48:28 +01:00
Mike Hearn
9d6a3cc1e9 Upgrade Guava and make a simple accessor for building cycle-detecting locks. 2013-03-05 14:48:28 +01:00
Mike Hearn
d309863560 Save the last seen chain height as well as hash in the wallet. 2013-03-04 18:52:09 +01:00
Mike Hearn
d626b19a55 Change default ping time to 2sec 2013-03-04 18:44:36 +01:00
Mike Hearn
0608b3a383 Fix a bug that could cause pinging a remote node as fast as it will respond. 2013-03-04 18:28:26 +01:00
Mike Hearn
9a0950e578 Check for null InetAddress in PeerAddress c'tor. 2013-03-04 15:55:44 +01:00
Mike Hearn
1175fe9588 Change the parameter of BlockChainListener.notifyNewBestBlock to be StoredBlock instead of Block, so listeners can get height/work information as well. The Wallet doesn't need this but other listeners may do. 2013-03-04 15:55:39 +01:00
Mike Hearn
00071d3cfc Add a couple of convenience features: peerGroup.addAddress(InetAddress) and an AbstractBlockChainListener class. 2013-03-04 15:55:35 +01:00
Mike Hearn
43b1ae1a29 Remove redundant and buggy expression in the check for whether to send a bloom filter. 2013-03-02 11:52:46 +01:00
Mike Hearn
6799dcc348 Refuse to create transactions larger than the max standard size. 2013-03-01 19:48:45 +01:00
Mike Hearn
1c8ee2b116 Upgrade to the latest Netty. Resolves issue 321. 2013-03-01 16:44:27 +01:00
Mike Hearn
018dcd345c Fix a couple of ordering issues with the unit tests. 2013-03-01 16:23:07 +01:00
Mike Hearn
34f3d8b088 Minor comment fix in Block.java 2013-03-01 14:30:28 +01:00
Mike Hearn
301299cff9 Don't print difficulty transition times when it's less than 50 msec. 2013-03-01 14:30:23 +01:00
Mike Hearn
2e895e4e09 Optimization when downloading blocks (should be rare these days), don't format log messages that requires an expensive hash->string conversion if the debug channel is not enabled. 2013-03-01 14:30:17 +01:00
Mike Hearn
049baad8c6 Avoid trying to resolve dependencies of newly solved orphan blocks when we are still downloading headers. 2013-03-01 14:30:11 +01:00
Mike Hearn
fbc14c1040 Make NetworkParameters singleton and (mostly) immutable.
Resolves issue 51.
2013-02-28 19:39:05 +01:00
Mike Hearn
559df0b3f8 Trivial cleanup 2013-02-28 19:27:13 +01:00
Mike Hearn
55898d3ee3 Fix a redundant null comparison, clears one more findbugs warning. 2013-02-28 18:38:28 +01:00
Mike Hearn
93d8a8da1f Update findbugs.xml to suppress useless warnings. 2013-02-28 18:38:16 +01:00
Mike Hearn
f9a57db818 Fix crash in toString() for an unparsed block header object. 2013-02-28 18:06:58 +01:00
Mike Hearn
ec1504f9dc Remove another java7-ism. 2013-02-28 17:52:32 +01:00
Mike Hearn
29cea2e6f0 Fix a java7-ism 2013-02-27 16:55:11 +01:00
Mike Hearn
e14e7a228c Fix bug that could cause huge slowdowns during initial header sync: peers were not checking if they were still download peers after receiving header messages. 2013-02-27 13:45:50 +01:00
Mike Hearn
a700b97f75 Delete the Derby block store. It isn't that useful now we have full verification based on H2. 2013-02-25 21:43:43 +01:00
Mike Hearn
6b684a6dc6 Resolve more FindBugs warnings. These changes are all no-ops. 2013-02-22 12:05:29 +01:00
Mike Hearn
3ae65f7a2f Don't invoke onCoinsSent for cases when the balance doesn't change, just onWalletChanged directly.
Also implement equals/hashCodes for SaveRequest.
Resolves a couple of FindBugs warnings.
2013-02-22 12:05:14 +01:00
Mike Hearn
1a5f74a148 Add/fix hashCodes/equals() implementations in some cases. Clears more FindBugs warnings. 2013-02-21 15:42:14 +01:00
Mike Hearn
440619f1c5 Test the ability to choose your own change address. This clears a FindBugs warning about the field never being written. 2013-02-21 15:41:47 +01:00
Mike Hearn
8540f879bd Fix a bug in Peer error logging, found by FindBugs. 2013-02-21 15:41:33 +01:00
Mike Hearn
3680c7f52f Restrict scope of NPE check for Bouncy Castle bug. 2013-02-21 14:42:04 +01:00
Mike Hearn
85c9950d9e Clear all possible NPE findbugs warnings, and fix some getter/setter synchronization mismatches. 2013-02-21 14:29:26 +01:00
Mike Hearn
002539f2b8 Treat client protocol versions higher than the version we prefer equally so we don't zap peers that upgrade early when unimportant (for us) protocol changes roll out. 2013-02-21 12:27:52 +01:00
Mike Hearn
32cc7b4880 Catch NullPointerException from bouncy castle signature verification. This can be triggered by a specially crafted signature. Thanks to Sergio Damian Lerner for finding this. 2013-02-19 22:33:15 +01:00
Mike Hearn
4b4eb7b623 Clear some more FindBugs warnings, including a real bugfix to the bloom filter calculations. 2013-02-19 17:44:41 +01:00
Mike Hearn
883bf03007 Clear some FindBugs warnings. 2013-02-19 17:05:23 +01:00
Mike Hearn
5a3515bef0 Refactor the code that sets filters a bit, and send a mempool query after wallet contents change in case of a key import. 2013-02-19 16:11:22 +01:00
Mike Hearn
3c606516be Query the memory pool of nodes that support Bloom filtering. 2013-02-19 16:11:22 +01:00
Mike Hearn
f4033076e8 Don't build/send Bloom filters when there are no keys in any wallets.
Resolves issue 324.
2013-02-19 16:11:22 +01:00
Mike Hearn
72d6f23e92 Version 0.8-SNAPSHOT 2013-02-19 16:11:22 +01:00
Mike Hearn
0c1d308b5b Refactor version constants a bit.
Resolves issue 206.
2013-02-18 15:57:05 +01:00
Mike Hearn
d4cfad59cf Fix a bug where pending transactions with spent outputs would be considered unspent, triggering consistency assertions.
Resolves issue 313.
2013-02-15 16:47:11 +01:00
Mike Hearn
d310c289ab Clarify another JavaDoc. 2013-02-15 16:47:11 +01:00
Mike Hearn
7ccd81c462 Update TODO list at top of wallet class. 2013-02-15 16:47:11 +01:00
Mike Hearn
e99e4bd63c Consider age of outputs when creating spends. 2013-02-15 16:47:11 +01:00
Mike Hearn
757334da80 Change getBalance to use the default coin selector instead of its own logic for calculating the available and estimated balances. 2013-02-15 16:47:11 +01:00
Mike Hearn
29727113a5 Support ID based construction of unit test network params. Fixes an issue in the serializer tests. 2013-02-15 16:47:11 +01:00
Mike Hearn
068db43569 Add a setter for the coin selector. 2013-02-15 16:47:10 +01:00
Mike Hearn
4273820eac Allow spending of unconfirmed change when it's been seen by the network.
Resolves issue 40.
2013-02-15 16:47:10 +01:00
Mike Hearn
fd45fa0f17 Refactor coin selection out into a separate object and reimplement the existing policy. 2013-02-15 16:47:10 +01:00
Mike Hearn
988641a5f7 Label transactions with their source (network, wallet, other, etc).
This will be used to allow spending of unconfirmed change.
2013-02-15 16:47:10 +01:00
Mike Hearn
4bcb550796 Make Peer.downloadData() atomic rather than locked under the Peer lock.
Resolves issue 310.
2013-02-15 15:48:53 +01:00
Mike Hearn
38ec23299c Protect lastPingTimes under its own lock instead of the peer lock.
Update issue 310.
2013-02-15 15:42:37 +01:00
Mike Hearn
536bbfb231 Make Peer.getAddress() not hold the Peer lock.
Update issue 310.
2013-02-15 15:11:01 +01:00
Mike Hearn
067b7814e8 Use atomics for peers announced version and tracked chain height rather than locks.
Updates issue 310.
2013-02-14 19:31:24 +01:00
Mike Hearn
8dc9c9f27a Fix a bug in Transaction.toString().
Resolves issue 309.
2013-02-14 19:21:17 +01:00
Mike Hearn
1b4fa96691 Make the last TransactionInput c'tor public, it can be used to build coinbase transactions. Updates issue 312. 2013-02-14 15:35:11 +01:00
Mike Hearn
9b1edf00bd Clarify the getDifficultyTarget() javadoc. 2013-02-11 20:31:14 +01:00
Mike Hearn
90662e9238 Support compressed pubkeys in the dumpprivkey format encoder/decoder.
Resolves issue 308.
2013-02-11 12:18:16 +01:00
Mike Hearn
1c8ddaad36 Delete long-dead code related to the previous protocol version that didn't use checksumming until post-handshake. 2013-02-09 12:35:58 +01:00
Mike Hearn
fa57883a98 Delete an unused line in AbstractBlockChain 2013-02-07 10:52:44 +01:00
Mike Hearn
92e1f09a72 Some improvements to class level JavaDocs. 2013-02-05 17:27:26 +01:00
Mike Hearn
0d0039cbdb Minor reformattings on Base58.java 2013-02-05 16:15:07 +01:00
Mike Hearn
5ce607f1ae Add a minimum version to Peer and use it to exclude peers so old they don't support pong messages. 2013-02-05 15:14:58 +01:00
Mike Hearn
6ac8eb54cb Re-arrange the actions in PeerGroup.broadcastTransaction()
This fixes a bug where Netty complains about blocking an IO thread due to the await call on send and resolves a potential race condition.
2013-02-05 12:00:33 +01:00
Mike Hearn
8c488a1687 Delete a dead method from WalletProtobufSerializer. 2013-02-05 12:00:33 +01:00
Mike Hearn
37cb4205b3 Minor cleanups to unit tests: remove redundant params from some test helper methods. 2013-02-05 12:00:32 +01:00
Mike Hearn
a62825bd8f Make the NetworkParameters.testNet() point to testNet3 and rename oldTestNet->testNet2(). Resolves issue 285. 2013-01-30 17:56:57 +01:00
Mike Hearn
7108751d3c Set IRC discovery so timeout. Resolves issue 269. 2013-01-29 16:20:50 +01:00
Mike Hearn
590d47f273 Add Wallets to all peers not just the download peer. Resolves issue 297.
Also fix the unit test that was meant to catch this error so it didn't accidentally probe the download peer case. And prevent adding of wallets multiple times (which caught another error in the unit tests).
2013-01-29 16:17:46 +01:00
Mike Hearn
112fe818d5 More Peer logging improvements. 2013-01-29 16:16:42 +01:00
Mike Hearn
4bdb0fd5ce Restart chain download after download peer changes. Resolves issue 287.
The way we handle changing download peers isn't ideal and can cause some thrashing/wasted bandwidth at startup - it has lots of room for improvement.
2013-01-29 15:25:32 +01:00
Mike Hearn
20cab64943 Change some log levels in Peer. 2013-01-29 15:24:30 +01:00
Mike Hearn
1738f60e1e Refactorings of the current filtered block tracking code. 2013-01-28 19:27:35 +01:00
Mike Hearn
1d6a8c908c Fix off by one error in SIGHASH_SINGLE code. Resolves issue 292. 2013-01-28 16:32:32 +01:00
Mike Hearn
dece35e95c Fix typo in name of FilteredBlockAndPartialMerkleTreeTests 2013-01-28 16:32:32 +01:00
Mike Hearn
35d6084bbf Refactor some of the wallet/peer interaction. Analyze dependencies of relevant pending transactions.
The Peer object now asks each connected Wallet if it cares about a transaction. If it does, then receivePending() is not called immediately, but rather after downloading of dependencies and with those dependencies. If any dependencies are time locked, a new wallet property controls whether they are discarded or not.
2013-01-28 16:32:31 +01:00
Mike Hearn
bfcf67ee5a Allow NotFoundMessage to be constructed with a list of InventoryItems. 2013-01-28 16:32:31 +01:00
Mike Hearn
8b9ddd2caf Link Peer and Wallet directly instead of using an event listener.
This paves the way for tighter coupling in future, needed for various features.
2013-01-28 16:32:31 +01:00
Mike Hearn
e9babb2772 Use ping messages to work around the lack of notfound messages on old nodes.
For now optimistically assume Gavin merges the notfound patch into bitcoin-qt, version wise.
2013-01-28 16:32:31 +01:00
Mike Hearn
b7b52c3fc9 Add support for recursively downloading mempool dependencies of a given mempool transaction.
This isn't currently used anywhere, but can be used as the first step of doing some basic risk analysis of unconfirmed transactions.
2013-01-28 16:32:31 +01:00
Mike Hearn
43e1d084cb Add Matts copyright notice to TestWithPeerGroup 2013-01-28 16:20:43 +01:00
Matt Corallo
cea95b809d Refresh filter every 25000 blocks to avoid a ballooning fp rate. 2013-01-27 03:41:11 -05:00
Matt Corallo
5f070e9861 Improve privacy: use const tweak + try for const filter parameters 2013-01-27 03:41:11 -05:00
Matt Corallo
1ea4cb457d Add the new nFlags BloomFilter fields to control auto-updating. 2013-01-27 03:41:10 -05:00
Matt Corallo
3906aa62d9 Add test cases for PMT/FilteredBlock including network download. 2013-01-27 03:40:31 -05:00
Matt Corallo
9577bd644e Ask peers for filtered blocks when appropriate and handle them. 2013-01-27 03:40:31 -05:00
Matt Corallo
db8afbdadf Add an AbstractBlockChain.add(FilteredBlock...) 2013-01-27 03:40:31 -05:00
Matt Corallo
289c3d19f0 Add a Wallet.notifyTransactionIsInBlock(Sha256Hash txHash...) 2013-01-27 03:40:31 -05:00
Matt Corallo
661ad3cb04 Add PartialMerkleTree and FilteredBlock classes 2013-01-27 03:40:31 -05:00
Matt Corallo
a5f9c3381b Add relayTxesBeforeFilter flag to VersionMessage, PROTOCOL_VERSION
This adds a relayTxesBeforeFilter flag to VersionMessage, bringing
it in line with PROTOCOL_VERSION 70001, and bumps the
PROTOCOL_VERSION accordingly.
2013-01-27 03:40:31 -05:00
Matt Corallo
a0c25aed28 Make bloom filter false positive rate configurable. 2013-01-27 03:40:31 -05:00
Matt Corallo
7c03eefefd Send peers a bloom filter from our wallet(s). 2013-01-27 03:40:31 -05:00
Matt Corallo
394d0b788d Add Wallet.getBloomFilter and a test-case for it. 2013-01-27 03:40:30 -05:00
Matt Corallo
e263229b62 Add BloomFilter class/messages and a test-case. 2013-01-27 02:32:36 -05:00
Matt Corallo
c751e1f179 Add Utils.checkBitLE/setBitLE to interact with bit sets. 2013-01-27 02:32:36 -05:00
Matt Corallo
3805e8956b Remove useless conditional (old version of 95b5e0d894 was merged) 2013-01-27 02:32:36 -05:00
Matt Corallo
38d01e14a6 Fix #292 by &'ing sigHashType to treat it as unsigned. 2013-01-27 02:32:36 -05:00
Mike Hearn
3211fe59f3 Fix s/connectionTimeoutMillis/connectTimeoutMillis/ in a javadoc. Resolves issue 284. 2013-01-23 17:22:09 +01:00
Mike Hearn
40c13eb3f3 Fix send futures in FakeChannelSink to unbreak a unit test that deadlocks after a previous change. 2013-01-23 17:17:00 +01:00
Mike Hearn
d919ede7a8 Specify time zone in block chain unit test. Resolves issue 291. 2013-01-23 17:12:53 +01:00
Mike Hearn
19b032e2e4 Simplify TCPNetworkConnection a bit and print the version message data when the peer sends it to us, not when we get a VerAck back from our own version announcement. 2013-01-20 23:47:56 +01:00
Mike Hearn
caa92985e1 When broadcasting a spend, wait for the tx message to actually hit the wire before proceeding.
This resolves an issue where wallet-tool would shut down before the message was actually sent.
2013-01-20 23:47:32 +01:00
Mike Hearn
6504296b79 Avoid confusing bugs by switching NetworkParameters.testNet() to be testnet3 not testnet2. 2013-01-16 18:15:46 +01:00
Mike Hearn
22f8034de8 Minor JavaDoc updates. 2013-01-16 17:55:46 +01:00
Mike Hearn
75e467dfc4 Make TestUtils.roundTripTransaction public. 2013-01-16 17:55:36 +01:00
Mike Hearn
ee715a5f59 Add some convenience getters to a couple of classes. 2013-01-16 17:55:36 +01:00
Mike Hearn
a39dfddead Silence a newly noisy MemoryPool debug log, as we now expect to receive un-announced transactions in several cases (dep download, Bloom filtering) 2013-01-16 13:20:55 +01:00
Mike Hearn
8923af5785 Fix typo that prevented connection timeouts from being set properly. 2013-01-15 14:17:15 +01:00
Mike Hearn
4254e276fb Clean up Peer.java a bit - remove the custom future implementation and use Guava futures instead. 2013-01-14 22:30:32 +01:00
Mike Hearn
e4e4e45a47 Allow re-signing of transactions and re-sign after adjusting the sequence number. 2013-01-12 14:47:43 +01:00
Mike Hearn
916e33254f Resolve some race conditions.
It was possible that during saving of a wallet a network thread would update the confidence metrics due to broadcast announcements. This change makes TransactionConfidence use a COW list so the broadcast peer set can be iterated over safely. Resolves issue 277.
2013-01-12 14:27:49 +01:00
Mike Hearn
9a65d4cab8 Move ping timer cancellation to after channel close during PeerGroup shutdown.
Check if the service is running before trying to re-ping a peer.
Attempts to solve a shutdown race. Updates issue 275.
2013-01-12 14:27:49 +01:00
Mike Hearn
89c611d86b Always use getLockTime in isFinal. 2013-01-12 14:27:49 +01:00
Mike Hearn
a6f1233b4e Delete some 0.5 -> 0.6 migration code from WalletTool. 2013-01-12 14:27:49 +01:00
Mike Hearn
b5b43f3a15 Better support for lock timed transactions.
Lock times are now included in various toString dumps.
Transactions can estimate their lock time when the time is specified as a block number.
Add support to WalletTool for creating timelocked transactions.
2013-01-12 14:26:59 +01:00
Mike Hearn
48cdc1d9e7 improve findbugs exclusions 2013-01-12 14:26:59 +01:00
Mike Hearn
9da08d2036 Try all returned IP addresses in IRC discovery and use the given timeout.
Resolves issue 268. Resolves issue 269.
2013-01-12 14:26:59 +01:00
Mike Hearn
682033aef6 Actually use the provided IRC server name in IrcDiscovery. Resolves issue 266. 2013-01-11 21:58:45 +01:00
Mike Hearn
43e8752ef8 Make PeerGroup.addAddress adjust the number of requested connections. 2013-01-10 14:12:50 +01:00
Mike Hearn
dd9e0d5d0d Fix my previous buggy commit that changed Utils.bitcoinValueToFriendlyString 2013-01-10 13:26:19 +01:00
Mike Hearn
d268270d7b Use compressed pubkeys by default. Resolves issue 111. 2013-01-09 23:45:24 +01:00
Mike Hearn
0bdfa7b635 Better formatting in Utils.bitcoinValueToFriendlyString 2013-01-09 23:45:23 +01:00
Mike Hearn
f2a6e41c82 Don't abuse BigIntegers in WalletTool/Utils when parsing hex pubkeys. 2013-01-08 17:33:19 +01:00
Mike Hearn
ee5f881c51 Run TransactionConfidence listeners with the confidence object unlocked when markBroadcastBy is called. Resolves issue 270. 2013-01-07 11:13:33 +01:00
Mike Hearn
ae6b2fbd4d Improvements to the ECKey class:
- Implement ECDSA key recovery.
- Use it to implement sign/verifymessage functionality that's compatible with Bitcoin-Qt.
- Redesign the signing APIs a bit.
2013-01-06 22:07:55 +01:00
Mike Hearn
7fc325900c Clarify some parameter names in Sha256Hash and add a utility method. 2013-01-06 21:57:09 +01:00
Mike Hearn
7e8ed913ec Use ChannelGroups for shutdowns. This cleans up the code and makes the PeerGroup shutdown futures work correctly. 2013-01-04 18:29:47 +01:00
Mike Hearn
972c19a95f Use canonical path to the wallet destination file. Resolves issue 265. 2013-01-04 17:54:17 +01:00
Mike Hearn
12a652bd1e Close the temporary FileInputStream created in Sha256Hash.hashFileContents. Updates issue 265. 2013-01-04 17:38:05 +01:00
Matt Corallo
44865a3c50 Fix NullPointerException if using chain == null in PeerGroup 2013-01-04 17:33:12 +01:00
Matt Corallo
0208b426f5 Add a few more tests to FullBlockTestGenerator.
...including one which (somewhat) tests the optimally encoded size
stuff.
2012-12-31 15:56:06 +01:00
Matt Corallo
810b03dd0a Give Blocks/Transactions an idea of their optimally-encoded size.
In the case of Blocks/Transactions which are encoded using VarInts
which are not optimally encoded, we need to compare MAX_BLOCK_SIZE
with the optimally encoded size, not the actually encoded size.
2012-12-31 15:54:19 +01:00
Matt Corallo
009939f9be Give VarInt a concept of originally serialized size.
VarInts have multiple encodings, and during parsing we need to know
the size of the actually encoded form, not the size of the optimal
encoding.
2012-12-31 15:53:11 +01:00
Matt Corallo
95b5e0d894 Make FullPrunedBlockStore/Chain upgrade-friendly.
This does several things to support the ability to upgrade from a
BlockChain to a FullPrunedBlockChain backed by the same
FullPrunedBlockStore:
 * Add two methods to FullPrunedBlockStore to allow it to keep
   track of two chain heads - one verified, one normal.
 * Change preSetChainHead in AbstractBlockChain to doSetChainHead so
   that FullPrunedBlockChain and BlockChain can set only the
   appropriate chain head
 * Add FullPrunedBlockStore.getOnceUndoableStoredBlock.
   This allows a BlockChain to request only StoredBlocks which
   were, at one point, associated with a StoredUndoableBlock,
   effectively splitting FullPrunedBlockStore into two independent
   BlockStores (one FullPruned, one normal).
 * Add/use AbstractBlockChain.getStoredBlockInCurrentScope which
   relies on the above additions to FullPrunedBlockStore to properly
   utilize one FullPrunedBlockStore as two separate block stores
   depending on the BlockChain instance used.
   Note that this is not used everywhere in AbstractBlockChain as,
   barring something being insanely broken, the prev block of a
   block in current scope will be in current scope.
2012-12-27 16:34:27 +00:00
Mike Hearn
4e0f5d8903 FindBugs: make random an object field rather than a disposable temporary. 2012-12-26 18:57:03 +00:00
Mike Hearn
bf3a8dc085 Clear a minor FindBugs warning. 2012-12-26 18:55:17 +00:00
Mike Hearn
671a5aec18 Add a TransactionInput.verify() method that checks signatures and use it from the basicSpending test to ensure we generate valid signatures/scripts. 2012-12-26 18:14:39 +00:00
Mike Hearn
2f0d4cdbd8 Update Script javadoc. 2012-12-26 18:01:48 +00:00
Mike Hearn
273548c863 Take ping time into account when performing peer selection. 2012-12-25 01:23:28 +00:00
Mike Hearn
3197be51ea Minor simplifications. 2012-12-25 01:23:16 +00:00
Mike Hearn
ea3fca970c Incorporate protocol version into download peer selection logic. 2012-12-25 00:28:49 +00:00
Mike Hearn
ac61578e8a Use a COW list in Peer instead of protecting pendingPings under the peer lock. 2012-12-24 23:57:28 +00:00
Mike Hearn
22ff79dd8a Re-evaluate download peer when a new peer connects. Add unit tests for selecting the best peer. 2012-12-24 23:48:48 +00:00
Mike Hearn
ffc953abc8 Don't hold the Peer lock whilst invoking a ping callback. 2012-12-24 23:47:14 +00:00
Mike Hearn
eb7c4be136 Fix lock inversion. 2012-12-24 23:33:13 +00:00
Mike Hearn
8e91459dcc Fix a bug that could cause failure to reach the requested number of peers if peer connections failed immediately due to unroutable addresses. 2012-12-24 22:33:04 +00:00
Mike Hearn
07011be796 Introduce a PeerGroup method for calculating the most common chain height.
Use it to make peer selection a little smarter.
Render pending peers and peers that are reporting un-common chain heights in PeerMonitor.
2012-12-24 22:32:16 +00:00
Mike Hearn
2a55c58460 Make PeerGroup startup blocking in the unit tests. 2012-12-24 21:27:49 +00:00
Mike Hearn
7d7e76a3b0 Deduplicate peers retrieved from peer discovery. Resolves issue 260. 2012-12-24 17:51:40 +00:00
Mike Hearn
75c007fab3 Fix unit tests. 2012-12-24 16:35:52 +00:00
Mike Hearn
a54e2e96eb Fix a bug in difficulty calculation logic that is revealed by testnet3. It should not impact the main net. Resolves issue 262. Rethrow block verification errors with a message containing the block. 2012-12-24 16:12:13 +00:00
Mike Hearn
9639b45ad8 BitCoin -> Bitcoin 2012-12-24 16:11:11 +00:00
Mike Hearn
93893e10ad Make PeerGroup use the Guava services framework. Makes start/stop optionally non-blocking. Resolves issue 258. 2012-12-21 23:03:15 +01:00
Mike Hearn
826aafd3e0 Make H2 non required. 2012-12-16 13:38:46 +01:00
Mike Hearn
eacda0bdfc Decouple the wallet from the block chain by introducing a BlockChainListener interface, and making the Wallet implement it. Resolves issue 94. 2012-12-14 17:04:30 +01:00
Mike Hearn
5abd546eb2 Update the AbstractBlockChain javadoc. 2012-12-14 16:33:37 +01:00
Mike Hearn
f6a498c241 Remove the redundant Wallet.isTransactionRelevant(..., includeDoubleSpending) parameter, as it was always set to true. 2012-12-14 16:24:24 +01:00
Mike Hearn
ca629e330f Duplicate a transaction before sending to wallets beyond the first. Resolves issue 257. 2012-12-14 15:24:22 +01:00
Mike Hearn
1710be5b06 Fix typo in PeerGroup c'tor javadoc. Spotted by Matt. 2012-12-12 22:23:55 +01:00
Mike Hearn
590fd82fdc Fix a regression introduced by the block height accessor changes that prevented DownloadListener from triggering. Fix more inconsistent locking issues. 2012-12-11 00:22:25 +01:00
Mike Hearn
372a23fbfe Fix more inconsistent synchronization bugs. 2012-12-11 00:08:46 +01:00
Mike Hearn
93fd045488 Lock the ping time accessors correctly. 2012-12-10 23:50:21 +01:00