Commit graph

2780 commits

Author SHA1 Message Date
Sean Gilligan
0ccface14d PeerAddress: clean up toString, equals, hashCode - handle nulls properly
* Include `hostname` in equals() and hashcode()
* Fix NPE in toString() that occurs for (unsupported) I2P addresses (both addr and hostname are null)
* Better null-handling in equals()
* Add EqualsVerify test
* Add comments
2022-08-22 21:58:05 +02:00
Sean Gilligan
6bec092af2 LegacyAddress, SegwitAddress: normalize network type
Normalize/canonicalize network member of Address types.

LegacyAddress: map SIGNET, REGTEST to TESTNET
SegwitAddress: map SIGNET to TESTNET

Add tests to verify correct behavoir.
2022-08-17 22:50:07 +02:00
Andreas Schildbach
103250efcf Message: remove obsolete readObject() method
It had been used for Java Serialization.
2022-08-17 14:57:49 +02:00
Andreas Schildbach
83644530cd EncodedPrivateKey: migrate from NetworkParameters to Network 2022-08-17 09:34:04 +02:00
Andreas Schildbach
66b0cc8324 PrefixedChecksummedBytes: rename to EncodedPrivateKey and update class-level JavaDoc 2022-08-12 11:51:15 +02:00
Andreas Schildbach
64c619d2bf Wallet: add transaction ID to a precondition message 2022-08-12 01:05:58 +02:00
Andreas Schildbach
410b127176 DatabaseFullPrunedBlockStore: remove all database backed block stores
All of them are unmaintained and their tests are in the way of refactorings.
MySQL and Postgres had been disabled for a while, and one seems to care.
H2 is tested, but pulls a driver dependency into the test classpath.
2022-08-11 17:36:27 +02:00
Sean Gilligan
4e3bf65865 base/package-info.java: add the "deprecation exception" rule to package comment 2022-08-11 17:27:43 +02:00
Sean Gilligan
f59dc54ac8 Address: construct with and store Network, rather than NetworkParametesr
LegacyAddress, SegwitAddress: replace static factories that take NetworkParameters

* Add static factory methods that take `Network`
* Deprecate static factory methods that take `NetworkParameters`
* Add `Networks` support to `NetworkParameters.of(Network)`
* Update all usages to use the new methods
2022-08-11 02:40:33 +02:00
Andreas Schildbach
55d1919227 Address, LegacyAddress, SegwitAddress: migrate all usages of deprecated fromKey() to ECKey.toAddress() 2022-08-11 01:49:10 +02:00
Sean Gilligan
1daa7d5569 NetworkParameters: make id final
and initialize it from Network.id()
2022-08-10 22:16:56 +02:00
Sean Gilligan
d5e2319eb7 Network, BitcoinNetwork: partial alt-net support
Distinguish between `Network` and `BitcoinNetwork` in the code
(some of our implementation supports alt-networks better than others
 and this commit doesn't try to fix them all, just make it more clear
 what is going on. Some may never be made 'generic')
2022-08-10 22:14:17 +02:00
Sean Gilligan
9708b4cad9 MockAltNetworkParams, MockAltNetwork: new mocks for alternate network/address testing 2022-08-10 11:04:49 +02:00
Andreas Schildbach
1a5af67b73 BitcoinURI: strip some whitespace from end of lines 2022-08-10 10:45:13 +02:00
Sean Gilligan
d5d7fb0bcc BitcoinURI: migrate from NetworkParameters to Network
* New constructors and public methods that use Network
* Deprecate constructors and methods that use NetworkParameters
2022-08-10 10:38:45 +02:00
Sean Gilligan
9c30bab375 TransactionOutput: remove deprecated getAddressFrom* methods
Remove deprecated `getAddressFromP2PKHScript()` and `getAddressFromP2SH()` methods

They have been deprecated for more than one release.
2022-08-09 17:20:59 +02:00
Sean Gilligan
13aee43443 NetworkParameters: remove obsolete reference to acceptableAddress in JavaDoc
acceptableAddressCodes[] was removed in 2018.
2022-08-09 17:14:49 +02:00
Sean Gilligan
6a032bf001 ECKey: add toAddress() method, deprecate *Address.fromKey()
This (after deprecated methods are removed) eliminates all dependencies in
the address classes and is a step towards moving address to o.b.base.
2022-08-03 19:52:55 +02:00
Sean Gilligan
90582ac414 AbstractBitcoinNetParams: rename to BitcoinNetworkParams
The Abstract qualifier isn't necessary in the class name.
Also use "Network" instead of "Net" in the new name.
2022-08-03 19:05:40 +02:00
Sean Gilligan
51f1d69e87 Address: deprecate fromString, replace with AddressParser
This change migrates from using `NetworkParameters` to `Network` for specifying the network and
also decouples from static methods in `Address` with an interface/implementation approach.

Note that there are 3 use cases for address parsing:

1. Any network is allowed - AddressParser.parseAddressAnyNetwork(String)
2. Parse for a specified network - AddressParser.parseAddress(String, Network)
3. Parse for a previously-specified (context dependent) network - AddressParser.Strict.parseAddress(String)

In most use cases, an AddressParser instance can be accessed through the Wallet,
which already knows the Network type and in this context validation for network makes
sense. This is why `Wallet` is implementing `AddressParser.Strict`

BitcoinURI allocates its own DefaultAddressParser for now, as do some other tests
and examples that don't have access to a Wallet

In the future DefaultAddressParser may be replaced by something loaded
via the ServiceLoader mechanism or other dynamically configured mechanism.
2022-08-03 18:14:48 +02:00
Sean Gilligan
279b35b25f Network: add exceedsMaxMoney() and simplify various maxMoney checks 2022-08-03 18:09:36 +02:00
Sean Gilligan
696ba9f0d1 AbstractBitcoinNetworkParams: add of method, delegate to it in NetworkParameters
* Add `of(BitcoinNetwork)` `static` method in `AbstractBitcoinNetParams`
* In `NetworkParameters.of(Network)` delegate to `AbstractBitcoinNetParams` for type `BitcoinNetwork`
2022-08-03 01:09:11 +02:00
Sean Gilligan
28c2e2c7e3 Wallet: add network()
Perhaps in the future, we'll want a `network` private or protected member,
but for now that doesn't seem needed.

When we start using Network for address and transaction creation, this
will be used even more.
2022-08-02 12:00:47 +02:00
Sean Gilligan
a942ca0751 FakeTxBuilder: extract private method to generate random addresses 2022-08-02 10:35:02 +02:00
Andreas Schildbach
c56fab863b Context: introduce relaxProofOfWork property
This allows unit-tests to disable enforcement of proof of work, so that fake blocks
can be created and solved in short time.
2022-08-01 19:07:07 +02:00
Andreas Schildbach
03687a807e PeerGroup: create a context as a convenience for apps that mainly operate on a PeerGroup 2022-08-01 10:08:19 +02:00
Andreas Schildbach
9da6616d5a Wallet: remove the output shuffling override for unit-tests
Only one unit-test was dependent on it. That test has been changed to manually disable the shuffling.
2022-07-31 21:19:39 +02:00
Andreas Schildbach
d95e825112 KeyChainGroup: remove the reduced lookahead for unit-tests
It turns out the effect on unit-test runtime is negligible these days.
2022-07-31 17:15:37 +02:00
Sean Gilligan
295ce50782 TransactionBroadcast: add broadcastOnly(), broadcastAndAwaitRelay() deprecate broadcast() 2022-07-31 12:28:18 +02:00
Sean Gilligan
2bd3a8bcde TransactionBroadcast: use stream to simplify collecting sentFutures 2022-07-31 12:08:14 +02:00
Sean Gilligan
419dba9845 TransactionBroadcast: extract method dropPeerAfterBroadcastHandler(Peer)
Refactor the creation of this lambda to its own method.
2022-07-31 11:53:49 +02:00
Sean Gilligan
81fd758800 TransactionBroadcast: extract method broadcastOne(Peer)
* Move code to broadcast to one peer into broadcastOne(Peer) method
* Stop swallowing (but logging) exception thrown by peer.sendMessage(tx)
2022-07-31 11:37:31 +02:00
Sean Gilligan
e078421edd Context: re-add constructors that take params (as deprecated)
There are apps and libraries that are using these, we need to keep them as @Deprecated for
at least one release.
2022-07-30 14:13:40 +02:00
Andreas Schildbach
56419ded8e TransactionBroadcast: fix missing brace in JavaDoc 2022-07-30 13:35:10 +02:00
Sean Gilligan
32c58ad723 TransactionBroadcast: internally create/complete sentFuture
* Add a private member called `sentFuture` that completes when the broadcast
  is "sent" (written to buffer) to the broadcast peers
* Update the broadcast() method to track success/failure of the individual
  broadcast messages and update sentFuture when the individual messages complete.
  (This is done by using `thenComposeAsync`/`whenComplete`)
* Add comments and TODOs
2022-07-29 13:22:00 -07:00
Sean Gilligan
c89128c77b TransactionBroadcast: make 2 private members final 2022-07-29 10:28:21 +02:00
Sean Gilligan
5a1536df3b TransactionBroadcast: rename private future to seenFuture, add comments 2022-07-29 10:26:10 +02:00
Sean Gilligan
afe8086aec TransactionBroadcast: simplify lambda and extract chooseBroadastPeers()
* Simplifies the lambda in broadcast:
  ** shortens it by two lines of code
  ** makes `peers` effectively final
  ** doesn't mutate the list `peers` with `shuffle`
* chooseBroadastPeers() gets JavaDoc
* chooseBroadastPeers() is more testable
2022-07-28 22:33:14 +02:00
Sean Gilligan
3754fa8d99 TransactionBroadcast: convert EnoughAvailablePeers to lambda 2022-07-28 21:24:12 +02:00
Sean Gilligan
3786d70de6 CoinSelection: encapsulate fields
* Encapsulate `valueGathered` as `totalValue()`
* Encapsulate `gathered` as `outputs()`
* Deprecate public members
* Update clients to use accessors
2022-07-28 21:03:36 +02:00
Sean Gilligan
e52e4d0e72 CoinSelection: require a List of outputs, rather than a Collection
Rationale:

* The comment says that it is a "list"
* Immutable Lists are the collection that maps most easily/logically to and from Stream
* Lists are easier to enforce reproducibility (mainly for unit tests)
2022-07-28 20:59:32 +02:00
Sean Gilligan
c2b4472f5c WalletAppKit: give shutdownHook thread a name 2022-07-28 19:22:49 +02:00
Sean Gilligan
952751eee2 WalletAppKit: move shutdownHook into its own method 2022-07-28 19:18:01 +02:00
Sean Gilligan
368cdba42d Peer, TransactionBroadcast: use thenRunAsync() instead of addListener()
Use CompletableFuture.thenRunAsync() rather than rely on the converter
method ListenableCompletableFuture.addListener().
2022-07-28 13:22:38 +02:00
Sean Gilligan
bee8427761 WalletAppKit: simplify blocking startup
* Use `startAsync()` for the blocking case, too. Since we were already
  waiting on `downloadListner.await()`
* Make sure `installShutdownHook()` is called in both cases (bug fix)
* Add more comments
2022-07-28 01:07:07 +02:00
Sean Gilligan
ff674ea605 WalletAppKit: make sure downloadListener is never null
This simplifies the `if (blockingStartup)` and its `else` block. This change makes way
for further simplification.
2022-07-27 23:15:39 +02:00
Sean Gilligan
4bd79448ee WalletAppKit: remove unnecessary try/catch in startUp()
Remove the very long try/catch in startup that catches BlockStoreException
and rethrows it wrapped in an IOException.

The Guava service base class (`AbstractIdleService`) that we are extending
allows us to throw `Exception` so there is no reason to wrap the exception
and it can just be thrown directly.
2022-07-27 12:36:52 -07:00
Sean Gilligan
54cd676560 StreamUtils: new util class with .toUnmodifiableList(), and use it
This will also make it easier to find and upgrade these
methods when we upgrade to newer JDKs.
2022-07-27 19:49:32 +02:00
Sean Gilligan
225551593d Coin: improve JavaDoc
Also add explicit `throws ArithmeticException` on the
two BigDecimal conversion methods to match the `@throws`
in the JavaDoc.
2022-07-27 12:05:45 +02:00
Andreas Schildbach
e5558986d4 LinuxSecureRandom: don't automatically install RNG workaround any more
LinuxSecureRandom used to be installed on Android because very old Android versions had a bug
in the random number generator. We don't support those old versions any more, so the workaround
has become unnecessary. It is still possible to initialize it manually if desired.
2022-07-19 19:57:38 +02:00