Commit Graph

4992 Commits

Author SHA1 Message Date
Sean Gilligan
c8bf030824 build.gradle: update EasyMock to 5.2.0 2023-09-02 18:09:47 +02:00
Sean Gilligan
336a6a0c98 gradle.yml: update JDK to 20 in the build matrix 2023-09-02 17:44:23 +02:00
Sean Gilligan
184fe1c25a gradle.yml, graalvm.yml: update Gradle to 8.3 2023-09-02 17:41:55 +02:00
Sean Gilligan
2feff27339 build.gradle: update protobuf-gradle-plugin to 0.9.4 (if Gradle 7 or later) 2023-09-02 16:43:20 +02:00
Andreas Schildbach
21549306ad build.gradle: generate protobuf classes into the build directory 2023-09-02 16:31:26 +02:00
Sean Gilligan
4b2a5893ff Peer: improve use of generics for GetDataRequest
This gets rid of several warnings including two that had been suppressed.
2023-09-02 00:58:26 +02:00
Sean Gilligan
0033918f82 Transaction: reduce visibility of two methodsn
This is a minor breaking change to anything relying on the methods that
now have package visibility, but that should be very rare.
2023-09-01 19:02:07 +02:00
Sean Gilligan
5ff114b7b8 TxConfidenceTable: new method getConfidence(Transaction)
Use it in `Wallet`.
2023-09-01 18:59:07 +02:00
Sean Gilligan
dfcaa97b6e Wallet: use getConfidence(Transaction) not Transaction.getConfidence() 2023-09-01 18:55:08 +02:00
Sean Gilligan
d45cccc8d6 CoinSelector: new static method fromPredicate() to create CoinSelector
Use it in `ForwardingService`.
2023-09-01 18:38:14 +02:00
Sean Gilligan
21200c15cc ForwardingService: check existing forwardingCoinSelector() precondition
Check `parentTxId != null`.
2023-09-01 18:34:06 +02:00
Sean Gilligan
0bd5ed9b9b ForwardingService: make use of null-safe Objects.equals() 2023-09-01 18:31:31 +02:00
Sean Gilligan
111a8b8a37 ListMessage, InventoryMessage, GetDataMessage: make immutable (after deprecations removed)
Make `ListMessage` and its subclasses "almost" immutable. When the deprecated
`addItem()`, `removeItem()`, etc. methods are removed and the constructors are
changed to create an ummodifiable `List`, they will be immutable.
2023-09-01 18:24:58 +02:00
Sean Gilligan
9d78d2bd9e Wallet: add getConfidence(tx) method and use it in waitForConfirmations()
The other `getConfidence()` methods in `Transaction` eventually call the one that
takes a `TxConfidenceTable`, so we call that one directly.

Also prepares for not using `Transaction` to find the `TransactionConfidence`.
2023-09-01 18:15:52 +02:00
Sean Gilligan
19fcdcdd5b TestFeeLevel, WalletTest: use Wallet.waitForConfirmations() instead of Transaction.getConfidence().getDepthFuture() 2023-08-25 23:42:39 +02:00
Sean Gilligan
c4714f64f8 TransactionConfidence: store overriding txId, rather than transaction reference
This is a breaking change as `getOverridingTransaction()` has been removed with a replacement
of `getOverridingTxId()`.

Note that ProtoBuf serialization only stores the txId, so this change does not affect
serialization/deserialization.
2023-08-25 23:39:17 +02:00
Sean Gilligan
14eb9ebf00 TxConfidenceTable: reduce access to fields of WeakConfidenceReference inner class
* Remove unneeded public modifier from `hash` member and constructor
* Make `hash` member final
2023-08-25 23:34:06 +02:00
Sean Gilligan
9da2182415 ListenerRegistration: use streams and Optional in removeFromList() 2023-08-25 23:28:37 +02:00
Sean Gilligan
027037c8d5 TransactionFuture: make 2-arg getDepthFuture() private
Hopefully we can deprecate or make private the 1-arg variant soon.
2023-08-25 23:26:00 +02:00
Sean Gilligan
624df43ada DnsDiscovery: remove Linux gethostbyname bug workaround from 2015 2023-08-25 23:23:18 +02:00
Sean Gilligan
07ca73cce7 ByteArray: add defensive copy in bytes() getter 2023-08-25 23:17:04 +02:00
Sean Gilligan
49f7ddbc0f BlockImporter: support signet and regtest too
* Update usage for `args[1]` to "(mainnet|testnet|signet|regtest)"
* Use `BitcoinNetwork.fromString()` to parse `args[1]`
2023-08-25 23:14:04 +02:00
Sean Gilligan
b792354f55 BlockImporter: init chain with ternary operator 2023-08-25 23:09:48 +02:00
Sean Gilligan
7f5fc6f2b7 BlockImporter: remove unsupported "Disk" option from usage 2023-08-25 23:07:01 +02:00
Sean Gilligan
59ab13680d BlockFileLoader: make stream of ByteBuffer available
* Inner class `BlockFileIterator` now iterates `ByteBuffer`
* `stream()` method calls `MessageSerializer.makeBlock()`
* `streamBuffers()` method makes raw `ByteBuffer` blocks available
* Add integration test `streamEntireBitcoindBlockChainAsBuffers()`
2023-08-23 18:21:01 +02:00
Sean Gilligan
62e2e013c4 BlockFileLoaderBitcoindTest: add blockstore test, improve output 2023-08-23 18:12:51 +02:00
Sean Gilligan
dd8c4ed372 BlockFileLoaderBitcoindTest: new (ignored) integration test that reads bitcoind blocks
This is ignored because:

a) It requires bitcoind installation with a blockchain directory
b) It takes about 1 hour to run
2023-08-23 18:08:56 +02:00
Sean Gilligan
47129b91e5 BlockFileLoader: buffer reading of block files
For now, use 16MB of buffer. That's enough to hold 16 "full" 1MB blocks.
2023-08-23 18:03:18 +02:00
Sean Gilligan
c5cbff1e47 BlockFileLoader: fix end-of-file handling issue
When reads return fewer bytes than requested, it's either an end-of-file
or an error. For now, we'll treat it as end-of-file.
2023-08-23 17:58:35 +02:00
Sean Gilligan
2248513489 BlockFileLoader: effectively final sizeBytes, dataBytes
When reading blocks from the file stream use two effectively final
`byte[]` rather than reuse a single `byte[]`. This also makes the code
more readable by using more meaningful variable names.
2023-08-23 10:44:40 +02:00
Sean Gilligan
7776f7c907 BlockFileLoader: refactor to use single-file Block iterator internally
* Replace iterator that iterates all blocks in a file list with iterator
  that iterates all blocks in a single file
* Rewrite stream() to use flatMap() on a stream of blocks in a file (internally
  using BlockFileIterator)
* Rewrite iterator() to use stream()

This is a step towards a standalone capability to iterate/stream the blocks
in a single .dat file. It also is a step towards higher-performance
implementations that can use multiple threads.
2023-08-23 10:41:45 +02:00
Sean Gilligan
18126e368b BlockFileLoader: add stream() 2023-08-23 10:37:19 +02:00
Sean Gilligan
46b2704f79 BlockFileLoader: correct Iterable implementation
To be iterable, `iterator()` must be able to be called twice.

This is a breaking change, as users will no longer be able to use
`BlockFileLoader` directly as an `Iterator` and must call
`.iterator()` first. See the change in `BitcoindComparisonTool`.

Also adds tests.
2023-08-23 10:35:32 +02:00
Sean Gilligan
9d81529eaa TransactionConfidence: convert Factory to interface 2023-08-23 10:24:22 +02:00
Sean Gilligan
dd401ec04a TransactionConfidence: make Factory package private
Also mark as `@VisibleForTesting`.
2023-08-23 10:20:24 +02:00
Sean Gilligan
512a71d342 TransactionConfidence: make fields broadcastBy, listeners final 2023-08-23 10:13:46 +02:00
Sean Gilligan
f998802df7 TxConfidenceTable: extract private methods getConfidence() and newConfidence()
This makes the code more functional and more readable.
2023-08-23 10:10:25 +02:00
Sean Gilligan
0a4592f189 BloomFilter: make hashFuncs, nTweak, and nFlags final 2023-08-23 10:02:29 +02:00
Sean Gilligan
9bc0140910 Wallet: use Set interface (instead of HashSet) in internal declarations 2023-08-23 09:57:36 +02:00
Sean Gilligan
6de5c2b9a8 Wallet: declare CompletionException on methods that complete transactions
Adjust the signature of these methods to match the actual behavior
and the JavaDoc.

Note: `BadWalletEncryptionKeyException` is a subclass
of `CompletionException` which is unchecked.
2023-08-11 14:11:38 +02:00
Sean Gilligan
5d708b62d4 Wallet: document return value of adjustOutputDownwardsForFee() in JavaDoc 2023-08-10 19:39:57 +02:00
Sean Gilligan
cc88c3a9d4 Wallet: use functional style in method calcBloomOutPointsLocked() 2023-08-10 19:31:30 +02:00
Andreas Schildbach
05c625113f TestFeeLevel: use messageSize() not serialize().length 2023-08-10 19:26:53 +02:00
Andreas Schildbach
7c1209db51 Wallet: use messageSize() not serialize().length 2023-08-10 19:24:24 +02:00
Sean Gilligan
60a37657d5 TransactionOutput: use messageSize() not serialize().length 2023-08-10 19:20:28 +02:00
Andreas Schildbach
6b38774a38 PartialMerkleTree: rename method messageSize() from getMessageSize()
Keep the old method as deprecated.
2023-08-10 18:59:58 +02:00
Andreas Schildbach
e7b11c0713 TransactionWitness: rename method messageSize() from getMessageSize()
Keep the old method as deprecated.
2023-08-10 18:57:20 +02:00
Andreas Schildbach
c58232ef75 TransactionInput: rename method messageSize() from getMessageSize()
Keep the old method as deprecated.
2023-08-10 18:54:15 +02:00
Sean Gilligan
210eaf91b3 TransactionOutput: rename method messageSize() from getMessageSize()
Keep the old method as deprecated.
2023-08-10 18:49:25 +02:00
Andreas Schildbach
591ff3a027 TorUtils: new utility for Tor/Onion addresses
Move Tor/Onion related code there.

Also adds tests.
2023-08-10 18:11:47 +02:00