Commit graph

2474 commits

Author SHA1 Message Date
Sean Gilligan
6ee4faddb4 ScriptBuilder: Improve JavaDoc for the various P2SH helpers. 2020-08-31 16:20:40 +02:00
Sean Gilligan
0324b95b3f ScriptBuilder: Minor cleanup.
* Remove unused import
* Make `chunks` final
2020-08-31 14:49:33 +02:00
Sean Gilligan
388ca037ef PrefixedChecksummedBytes hierarchy: Add Comparable interface to Address, remove from PrefixedChecksummedBytes.
Requires address subclasses to implement compareTo() and provide the compareAddressPartial() method for comparing the first two fields.

This changes the natural ordering of addresses, and removes the natural ordering entirely for other PrefixedChecksummedBytes subclasses.

This also fixes a compareTo() collision regarding P2SH and non-P2SH addresses with the same bytes[].
2020-08-25 10:50:21 +02:00
Sean Gilligan
71c0e627d8 Utils: Remove unused mock sleep support. 2020-08-25 10:02:39 +02:00
Andreas Schildbach
7c31dcbf99 Transaction, LocalTransactionSigner: Fix P2WPKH signing.
In commit bc46e8518d, those two occurences of scriptCode building have been missed.
2020-07-02 11:43:05 +02:00
Andreas Schildbach
ed845fd22b HDPath: Fix parsePath() not parsing private paths. 2020-06-30 16:17:37 +02:00
Andreas Schildbach
7a1ad0fac0 HDPath: Use Splitter in parsePath(). 2020-06-30 15:54:26 +02:00
Sean Gilligan
8b502dffa2 Coin: Improvements to three static method JavaDoc comments. 2020-06-28 11:54:43 +02:00
Andreas Schildbach
3df2e70653 Replace semi-deprecated Guava Sets.newHashSet() with Sets.newHashSet(). 2020-05-31 11:17:01 +02:00
Sean Gilligan
47d59cae89 Networks: Improve JavaDocs. 2020-05-28 12:25:50 +02:00
Sean Gilligan
7d83f23a84 Networks: Remove use of bounded wildcard in Networks.networks
The use of a bounded wildcard type in Networks.networks is
unnecessary and not a best practice.
2020-05-28 12:18:47 +02:00
Andreas Schildbach
dbc4cb1d4c Make all Loggers final. 2020-05-17 14:48:44 +02:00
Andreas Schildbach
f04401461b AbstractBitcoinNetParams: Move getBlockInflation() utility method from Block to here.
This also adds a test.
2020-05-17 14:44:38 +02:00
Andreas Schildbach
a981cdd0e9 NetworkParameters: Make reference to genesis block final. 2020-05-12 12:15:43 +02:00
Andreas Schildbach
3db1b651c9 AbstractBitcoinNetParams: Move assignment of interval and subsidyDecreaseBlockCount to here.
This also adds a test of isDifficultyTransitionPoint().
2020-05-12 12:11:37 +02:00
Andreas Schildbach
142efee42f AbstractBitcoinNetParams: Rename parameter of isRewardHalvingPoint() and isDifficultyTransitionPoint() to make unexpected API more obvious. 2020-05-12 11:43:39 +02:00
Bartosz Milczarek
f76e13c495 HDKeyDerivation: Fix incorrect HDPath for private key created by createMasterPrivateKey().
This also removes the static contructor variant with a path. Master private keys always have the same path.
2020-05-03 20:28:41 +02:00
Mike Mancini
f48a8e1eff PostgresFullPrunedBlockStore: Enquote 'index' column name to make it compatible with CockroachDB. 2020-04-16 17:33:01 +02:00
Andreas Schildbach
80cd521cc3 PeerGroup: Increase precision of download speed calculation by a bit. 2020-04-08 18:24:01 +02:00
Andreas Schildbach
1bfd5a5b60 Wallet: Demote log level of script cannot be parsed in markKeysAsUsed(). 2020-03-13 21:17:11 +01:00
Andreas Schildbach
67034e68aa Transaction: Fix missing newline in toString(). 2020-03-13 21:11:20 +01:00
Andreas Schildbach
8018cb2786 Transaction: In toString() print outputs of coinbase. 2020-03-13 21:10:40 +01:00
Andreas Schildbach
0b7bdff6de Script: Make a ScriptException message more elaborate. 2020-03-13 18:40:05 +01:00
John L. Jegutanis
c6a096678d Transaction: Make zero inputs/outputs transactions parsable.
Switch to the bitcoin core reference segwit parsing algorithm because
some no-segwit transactions with no inputs are incorrectly parsed as
segwit.

This change is to be 100% compatible with the reference implementation
and to be compatible with the PSBT implementation.
2020-03-13 09:44:41 +01:00
Craig Raw
bc46e8518d Transaction: Use VarInt not opcode for script length in hashForWitnessSignature(). 2020-03-08 22:43:56 +01:00
Andreas Schildbach
049c2f177d PeerGroup: Add a method for gracefully dropping all connected peers. 2020-03-08 00:20:01 +01:00
Andreas Schildbach
b86f3e70ae PeerGroup: Only drop peers after broadcast if the transaction has no broadcast confirmations.
Otherwise, peers might be continuously dropped when transactions are re-sent.
2020-03-08 00:20:01 +01:00
Andreas Schildbach
a4f241ef29 TransactionBroadcast: Don't complete the broadcast future early in the single peer case.
If you want to rely on the future it's better to drop peers after broadcast.
2020-03-08 00:20:01 +01:00
Andreas Schildbach
a867a80b76 TransactionBroadcast: Add a short delay before broadcast peers are dropped. 2020-03-08 00:19:07 +01:00
Andreas Schildbach
3bab49d4b1 PeerGroup: Introduce a priority for connecting and being picked as a download peer. 2020-03-05 10:24:33 +01:00
Andreas Schildbach
70559a3140 DnsDiscovery: Implement service bit filtering. 2020-03-05 01:14:06 +01:00
Andreas Schildbach
7d9f109ee1 Peer: Deprecate a redundant constructor. 2020-03-04 17:34:11 +01:00
Andreas Schildbach
57f53f038c Peer: Prevent connecting to remote peers if required services are not supported. 2020-03-04 17:34:11 +01:00
Andreas Schildbach
c967fda4d6 HttpDiscovery: Improve logging in getPeers(). 2020-03-04 15:53:45 +01:00
Andreas Schildbach
e8adb94a95 VersionMessage: In toString(), print services in textual form too. 2020-03-04 15:18:53 +01:00
Andreas Schildbach
b4bd43d428 VersionMessage: Move toStringServices() from Peer to here. 2020-03-04 15:14:03 +01:00
Andreas Schildbach
16fda8ffcb TestNet3Params: Add testnet.httpseed.bitcoin.schildbach.de HTTP seed. 2020-03-04 14:47:04 +01:00
Andreas Schildbach
06bd0a841e PeerDiscovery: Change getPeers() return type from array to list.
This gets rid of a lot of array/list conversions.
2020-03-04 12:35:02 +01:00
Andreas Schildbach
a165fb1834 MultiplexingDiscovery: Allow serially queried seeds, too. 2020-03-04 11:49:11 +01:00
Andreas Schildbach
4e41a51657 MultiplexingDiscovery: Make shuffling of queried peers optional. 2020-03-04 11:26:07 +01:00
Andreas Schildbach
65c1b8ca25 DefaultCoinSelector: Require only one broadcast confirmation when spending our own change.
This will improve the user experience when connected to only one peer (e.g. a trusted peer).
2020-02-28 15:59:37 +01:00
Andreas Schildbach
fb2d983b54 PeerGroup, TransactionBroadcast: Drop any peer a transaction has been broadcast to.
These peers will not send us back useful broadcast confirmations.
2020-02-28 15:59:37 +01:00
Andreas Schildbach
afb376fc07 MessageWriteTarget: Return a future from writeBytes() that completes when all bytes have been written to the OS network buffer. 2020-02-28 15:59:37 +01:00
Andreas Schildbach
0a085fde6d Peer: If a bloom filter is set on a peer that doesn't support filtering, disconnect. 2020-02-27 23:32:50 +01:00
Andreas Schildbach
95e08ef86c PeerGroup: Require SegWit protocol and service when selecting a download peer.
Those nodes are extremely common now.
2020-02-27 23:32:50 +01:00
Andreas Schildbach
8d983649d3 PeerGroup: Don't immediately select a download peer in startBlockChainDownload(). Wait for enough peers to be connected. 2020-02-27 23:13:26 +01:00
John L. Jegutanis
1991d8a882 MessageSerializer: Move protocolVersion from Message to here.
This change moves protocolVersion from Message to MessageSerializer.
The main reason is to support parsing transactions as non-segwit.
This is impossible to do otherwise, as MessageSerializer#makeTransaction()
does not accept a protocolVersion parameter.
Additionally this change makes the MessageSerializer similar to the
Stream in Bitcoin Core, where the protocol version can be modified.
2020-02-16 18:03:10 +01:00
Andreas Schildbach
3cbb10334e BitcoinSerializer: Add equals() and hashCode(). 2020-02-16 17:37:44 +01:00
Andreas Schildbach
73583776a6 ChildMessage: Fix a missing @Nullable in constructor argument. 2020-02-16 17:13:09 +01:00
John L. Jegutanis
d734d8854a Utils: Introduce Utils.resetMocking() and use it from AbstractFullPrunedBlockChainTest.
It appears that the tests do not run in the same order or the static variables
are not reset between runs on all systems or Gradle versions.
So it happened that the test UtilsTest.testRollMockClock() was messing up
the time for the H2FullPrunedBlockChainTest (and the LevelDB one), failing tests.
2020-01-30 17:02:30 +01:00