Sean Gilligan
339e0d0450
KeyTimeCoinSelector: factor out method isKeyBeforeCutoff()
2023-09-12 18:12:56 +02:00
Sean Gilligan
0c7e1aec3b
KeyTimeCoinSelector: use Wallet.getConfidence(parent)
in isConfirmed()
...
Also make `Wallet.getConfidence(parent)` package-private.
2023-09-12 18:09:06 +02:00
Sean Gilligan
bbe7f088ca
KeyTimeCoinSelector: check for parent is non-null in isConfirmed()
2023-09-12 18:05:07 +02:00
Sean Gilligan
110da96911
Wallet: use getAbsoluteFile()
when checking if parent directory exists
...
This fixes a NPE when using wallet-tool to create a new wallet on a path
without directory, e.g. `wallet-tool create --wallet=test.wallet`.
2023-09-07 17:44:04 +02:00
Andreas Schildbach
929088cde8
Sha256Hash: add back accessor getReversedBytes()
as deprecated
2023-09-07 10:55:34 +02:00
Andreas Schildbach
2cdbc986a8
VersionMessage: add back helper toStringServices()
as deprecated
2023-09-07 10:53:06 +02:00
Andreas Schildbach
e2b1c81b60
TransactionOutput: add back a constructor as deprecated
2023-09-07 10:49:58 +02:00
Sean Gilligan
c8bf030824
build.gradle: update EasyMock to 5.2.0
2023-09-02 18:09:47 +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
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
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
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
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
Sean Gilligan
16ac8751bb
Block: add new constructors to reduce mutability
...
* New constructors and static factory methods
* Update code to use the new constructors
* Remove `public` from `@VisibleForTesting` setters where possible
2023-08-09 16:55:24 +02:00
Sean Gilligan
734993db68
TransactionWitness: use non-deprecated Script.program()
2023-08-09 16:50:48 +02:00
Sean Gilligan
90427cd7cd
WalletAppKit: use non-deprecated Wallet.autosaveToFile()
2023-08-09 16:48:02 +02:00
Sean Gilligan
87a8383aae
TransactionOutput: clarify isDust()
JavaDoc
2023-08-09 16:46:15 +02:00
Andreas Schildbach
041f394a8a
DnsDiscovery, BtcFixedFormat: fix some JavaDoc links
2023-08-09 16:45:03 +02:00
Andreas Schildbach
1e4b633161
Wallet, SPVBlockStore: fix misspelled "whether" in JavaDocs
2023-08-09 16:42:11 +02:00
Sean Gilligan
370c5d382c
Wallet: add more diagnostic info to InsufficientMoneyException
...
Add a new constructor that provides more information about available funds, total
outputs, and fee in addition to amount missing. Use it in `Wallet.calculatFee` to
provide more information when the exception occurs.
2023-08-09 11:19:42 +02:00
Sean Gilligan
2f9ce85e07
Wallet: add more diagnostic info to CouldNotAdjustDownwards
exception
...
Add `output.value` and calculated `nonDustValue` to the exceptions message
string. Provide those values to the constructor in `calculateFee`
Add a constructor to parent class that takes a message String.
2023-08-09 11:14:44 +02:00
Sean Gilligan
b2b8c0a4a3
Transaction: use _
to separate thousands in constants
2023-08-09 10:42:24 +02:00
Sean Gilligan
fa323f745e
TransactionOutput: simplify method isDust()
...
Replace `if` with boolean logic and revise related comment.
2023-08-09 10:32:27 +02:00
Andreas Schildbach
f907a6b86f
Block: convert an if into expression with ternary operator
2023-08-09 00:51:36 +02:00
Andreas Schildbach
4e91a274d9
Block: annotate and document the null
transactions case for main constructor
2023-08-09 00:47:52 +02:00
Sean Gilligan
098e268808
MainNetParams, TestNet3Params, SigNetParams, RegTestParams: migrate GENESIS_TIME
constants to Instant
2023-08-09 00:40:25 +02:00
Sean Gilligan
371b90b934
Block: use ArrayList
consistently for transactions
field
2023-08-08 22:30:07 +02:00
Sean Gilligan
ce3af91c85
Block: make field version
final
2023-08-08 22:09:47 +02:00
Sean Gilligan
1230c984d2
Peer: convert an if-else into expression with ternary operator
2023-08-08 21:51:42 +02:00
Sean Gilligan
e7bc376a8d
Peer: extract buildBlockLocator()
to private method
2023-08-08 21:46:49 +02:00
Sean Gilligan
690f5149c0
BlockLocator: functional-style hashCode()
calculation
...
Use mapToInt/reduce.
2023-08-08 21:40:48 +02:00
Sean Gilligan
7aeffc4de0
Wallet: extract private method estimateVirtualBytesForSigning(Script)
for estimating one script
2023-08-08 21:34:25 +02:00
Sean Gilligan
ff6ee607bc
Wallet: pass outputs to estimateVirtualBytesForSigning()
rather than the CoinSelector
2023-08-08 21:30:42 +02:00
Sean Gilligan
12a9ea1612
Wallet: functional-style estimateVirtualBytesForSigning()
2023-08-08 21:28:03 +02:00
Sean Gilligan
781bd56b55
Wallet: extract common code into private estimateFees()
method
2023-08-08 21:25:00 +02:00
Sean Gilligan
97cd7d44fb
Wallet: deprecate getParms()
and getNetworkParameters()
2023-08-08 21:16:56 +02:00
Sean Gilligan
352614280c
BlockLocator: deprecate add & no-args constructor
...
Deprecate `.add()` and no-args constructor in favor of providing complete
list of hashes at creation time.
Update all usages to use the alternative methods.
2023-08-08 21:01:37 +02:00
Sean Gilligan
9bbb6b39e3
Peer: fix and clarify comment about putting genesis hash into BlockLocator
2023-08-08 20:58:44 +02:00
Sean Gilligan
148a40b2ed
TransactionInput: don't use setParent()
in constructor
2023-08-08 19:55:50 +02:00
Sean Gilligan
7a558fb557
TransactionInput: use private constructor via this()
in constructor for unsigned input
2023-08-08 19:52:48 +02:00
Sean Gilligan
1ce554c901
TransactionInput: don't call super()
in constructor
...
`Object` is the superclass now.
2023-08-08 19:47:57 +02:00
Sean Gilligan
50d678d3e2
TransactionInput: make parent
field private
2023-08-08 19:38:54 +02:00
Andreas Schildbach
0a58d0a5c3
TransactionInput: convert an if-else into expression with ternary operator
2023-08-08 11:54:34 +02:00
Sean Gilligan
2b68d8da8e
ServicesTest: add missing package declaration
2023-08-08 11:45:21 +02:00
Andreas Schildbach
50c0f2eae9
VersionMessage: re-add service bit constants as deprecated
2023-08-01 15:13:05 +02:00
Sean Gilligan
b0b0b02683
Block: simplify initialization of genesisTxScriptPubKeyBytes
...
Use `ScriptBuilder` rather than static initializer and `ByteArrayOutputStream`.
2023-08-01 15:09:37 +02:00
Sean Gilligan
0b57bbc701
Wallet: fix two deprecated @link
in JavaDoc
2023-08-01 15:02:02 +02:00
Andreas Schildbach
3dbaaa23b0
build.gradle: update Guava to 32.1.2-android
2023-08-01 11:15:44 +02:00
Andreas Schildbach
c1307c1190
build.gradle: update Bouncy Castle to 1.76
2023-07-31 11:34:36 +02:00
Sean Gilligan
36dce3d9d5
wallet.proto, paymentrequest.proto: move generated files to dedicated packages
...
* Modify the `java_package` setting in our two `.proto` source files
* Move 2 existing generated-but-checked-in Protos.java files to
dedicated packages (i.e. packages without hand-coded "artisanal" files)
This is a step towards more compatibility with ProtoBuf tooling which
sometimes likes to delete the generated files and:
> can't distinguish between "old generated code" and "your artisan source files."
and more importantly it is a step towards fixing Gradle 8 caching issues.
2023-07-28 21:55:26 +02:00
Andreas Schildbach
a7446b65ae
Prepare 0.17-SNAPSHOT
2023-07-28 10:46:14 +02:00
Andreas Schildbach
ab91a94695
Tag 0.17-alpha2
2023-07-27 21:36:45 +02:00
Sean Gilligan
7efab37c6c
DnsDiscovery, MultiplexingDiscovery: use Network in constructors
2023-07-27 10:56:06 +02:00
Sean Gilligan
27cb2fc3cc
TestWithWallet, WalletTest, DefaultCoinSelectorTest: rename and import some network constants
...
This also removes some usage of deprecated methods.
2023-07-20 19:51:50 +02:00
Sean Gilligan
dead2c74ab
AddressParser: simpler address parsing by making it a @FunctionalInterface
...
We`re making `AddressParser` the `@FunctionalInterface` and a nested class
is used to define an `AddressParserProvider`
2023-07-18 23:54:59 +02:00
Sean Gilligan
39c34186cc
BlockChain: use Network in constructors
...
Constructors that take NetworkParameters are marked as @VisibleForTesting.
This is because of the special UNITTEST NetworkParameters that is required for
certain tests.
2023-07-18 23:10:36 +02:00
Andreas Schildbach
02fd2f036a
build.gradle: update equalsverifier to 3.15
2023-07-16 12:45:39 +02:00
Andreas Schildbach
98fcb0c840
build.gradle: update Jackson to 2.15.2
2023-07-16 12:37:30 +02:00
Sean Gilligan
1e1bf41f9d
build.gradle: update Bouncy Castle to 1.75
2023-07-14 11:41:01 +02:00
Andreas Schildbach
f6cebd33bd
build.gradle: update Guava to 32.1.1-android
2023-07-10 11:16:51 +02:00
Andreas Schildbach
c68cd2e616
TransactionOutput: fix regression with calculating getMinNonDustValue() for the multisig case
2023-07-05 16:10:07 -07:00
Sean Gilligan
8c3cf0acd5
Threading: use BlockingQueue
interface internally
...
This makes it clear that we're not using specific features
of the `LinkedBlockingQueue` implementation class.
2023-06-13 21:37:46 +02:00
Sean Gilligan
d05d44c8c3
Threading: use ExecutorService
for THREAD_POOL
...
Guava's `ListeningExecutorService` is no longer needed.
Update type of private executor in PaymentSession to match.
2023-06-13 21:33:55 +02:00
Andreas Schildbach
5c5b2969d7
Wallet: extract local variables tempParentFile
and destParentFile
in method saveToFile()
...
This is meant to make it a bit clearer why a NullPointerException would occur.
2023-06-13 09:04:00 +02:00
Andreas Schildbach
87a2892bca
Wallet: improve JavaDoc of method saveToFile()
2023-06-13 08:54:41 +02:00
Andreas Schildbach
097bb06cb0
Wallet: rename saveToFile()
method parameter temp
to tempFile
2023-06-13 08:48:40 +02:00
Sean Gilligan
6126821968
Bech32: add JavaDoc headers to public types that were missing them
2023-06-09 12:06:02 +02:00
Sean Gilligan
eec12bae44
Bech32: replace <p></p>
XHTML-style header with <p>
HTML5-style header
2023-06-09 12:06:02 +02:00
Sean Gilligan
828cf58ab1
package-info.java: update package JavaDoc
2023-06-09 12:05:58 +02:00
Sean Gilligan
3429737f81
AddressParser: add JavaDoc to interface Strict
2023-06-09 11:50:46 +02:00
Sean Gilligan
e76b28a8ca
MultiplexingDiscovery: fix empty seeds precondition for RegTest
...
`checkArgument` should not throw with an empty seeds list _if_ running on RegTest.
The test is disabled because it requires a RegTest node that is advanced
1 block (typically via `generateblocktoaddres`) during the course of the test.
2023-06-04 16:35:49 +02:00
Andreas Schildbach
0275dd3ffc
build.gradle: update Guava to 32.0.0-android
2023-06-01 10:42:59 +02:00
Sean Gilligan
5032664f5c
build.gradle: update BouncyCastle to 1.73
2023-06-01 10:38:00 +02:00
mitr15fan15v
a74932221c
InsufficientMoneyException: remove extra space in exception description
2023-05-23 11:09:27 +02:00
Sean Gilligan
192444f09a
ByteArray: immutable byte array wrapper
...
This is used for AesKey, and can be used for more.
2023-05-23 11:03:17 +02:00
Andreas Schildbach
4dea86a015
checkpoints.txt: refresh bundled checkpoints
2023-05-11 20:01:45 +02:00
Sean Gilligan
dce352f591
Wallet: properly handle unconnected request inputs in completeTx()
...
This adds a test for and fixes issue #2063 .
The changes do the following:
1. Build a preliminary list of candidate UTXOs.
2. Use the preliminary list to fix unconnected/valueless inputs before
calculating `valueNeeded`.
3. Create a new candidate list without the UTXOs that were already present
in inputs and use it as input for generating the `CoinSelection`.
Test changes:
1. Update existing test to show the improvement (i.e. no wasted fee).
2. Add a new test (based on PR #3055 ) that shows no duplicate inputs.
This work is based on changes by @michael-swiggs in PR #3055 .
2023-05-10 17:16:30 +02:00
Sean Gilligan
15a9086122
Wallet: use getInputSum()
in completeTx()
, separately warn about null
values
...
Note that this changes behavior slightly. We are now warning on inputs with null value
and skipping inputs with no value in the sum. Previously we were checking for non-null
getConnectedOutput(). I reviewed the code and whenever getConnectedOutput() is non-null,
getValue() should also be non-null. There might be cases where we have a value and
no connected output, but in those cases I think we should use the value.
2023-05-10 09:49:46 +02:00
Sean Gilligan
9f76385c9d
Wallet: use forEach()
to add inputs to req.tx
in completeTx()
2023-05-10 09:09:38 +02:00
Sean Gilligan
74b7b11681
Transaction: use Stream.reduce()
in getInputSum()
2023-05-09 23:09:28 +02:00
Sean Gilligan
27ff0823bb
Wallet: always enforce OP_RETURN
limit in completeTx()
...
Without this fix (and code cleanup) the `OP_RETURN` limit is not
enforced when `ensureMinRequiredFee` is false or `emptyWallet` is true.
Parameterize `twoOpReturnsPerTransactionTest()` to test all combinations
of `ensureMinRequiredFee` and `emptyWallet`.
2023-05-09 16:52:23 +02:00
Sean Gilligan
3a28163d50
Wallet: use List
interface where possible
...
Some local/private/protected declarations were using
`LinkedList` or `ArrayList` when they should be using
the generic `List`.
2023-05-08 19:41:25 +02:00
Sean Gilligan
7cb61b0399
Transaction: use stream in method getOutputSum()
2023-05-05 00:49:14 +02:00
Sean Gilligan
9de77cdd67
Wallet: replace mutated value with effectively final valueNeeded
in completeTx()
2023-05-04 19:05:53 +02:00
Sean Gilligan
8ce4dbaff7
Wallet, TransactionOutput: use TransactionOutput.serialize()
not bitcoinSerialize()
...
Fix the last two usages of this deprecated method.
2023-05-04 10:30:46 +02:00
Sean Gilligan
760e7dac83
Wallet: use ternary operator to reduce mutated local vars in calculateFee()
2023-05-04 10:27:26 +02:00
Andreas Schildbach
8fe1d84a59
SPVBlockStore: make method initNewStore()
take genesisBlock
...
This makes the method independent of `NetworkParameters`.
2023-05-03 23:05:04 +02:00
Sean Gilligan
f62259b780
BitcoinSerializer: store packetMagic
in instance field
2023-05-03 22:56:24 +02:00
Andreas Schildbach
369445d1e8
StoredBlock: make method deserializeCompact()
not use MessageSerializer
...
Its usecase is limited to fixed formats, currently binary checkpoints
and `.spv` block stores.
2023-05-03 22:52:58 +02:00
Sean Gilligan
8aace05d3a
BitcoinSerializer: remove methods equals()
and hashCode()
...
There is no reason to have these.
2023-05-03 18:06:35 +02:00
Sean Gilligan
db1172c210
DummySerializer: remove unused class
2023-05-01 19:49:22 +02:00
Sean Gilligan
a0df016841
Block: remove unused DummySerializer
2023-05-01 19:46:09 +02:00
Andreas Schildbach
4ab6e88560
UnitTestParams: don't solve()
the genesis block for unit tests
...
It won't really solve it anyway, because the difficulty check is
disabled.
2023-05-01 19:24:52 +02:00
Andreas Schildbach
9a747e6e96
WalletProtobufSerializer: migrate to Network
from NetworkParameters
2023-04-28 23:21:35 +02:00
Andreas Schildbach
4187f2328d
MarriedKeyChain: remove married key chains
...
The current implementation is based on plain P2SH. I assume as of
today one would prefer an implementation based on taproot or at least
segwit (P2WSH).
Note the `isFollowing` and `sigsRequiredToSpend` fields in the
`DeterministicKey` message of the wallet protobuf are preserved for
now, because they might come in handy for a future implementation and
in general it's hard to remove fields from protobufs.
Also removes the `marry` action from `WalletTool`.
2023-04-28 23:07:49 +02:00
Sean Gilligan
7e36ed0ea9
build.gradle: use archiveClassifier
if available
...
`classifier` was deprecated in Gradle 5.1 and removed in Gradle 8.x,
so use `archiveClassifier` on Gradle 5.0 or later.
2023-04-24 20:18:32 +02:00
Sean Gilligan
abbd7b5ac6
build.gradle: update protobuf-javalite to 3.22.3
2023-04-23 01:34:34 +02:00
Andreas Schildbach
2b6b28a6b0
BitcoinURI: restore ability to parse URIs from any network
...
This includes a test.
2023-04-20 18:59:27 +02:00
Andreas Schildbach
bf02dbfb96
WalletProtobufSerializer: remove network
from method readTransaction()
2023-04-20 00:03:53 +02:00
Andreas Schildbach
0676e5cbe9
WalletProtobufSerializer: remove network
from methods readConfidence()
and connectTransactionOutputs()
2023-04-19 23:38:56 +02:00
Andreas Schildbach
5db73f2d7a
BitcoinURI: migrate to static from native constructors
2023-04-19 23:08:40 +02:00
Andreas Schildbach
429dfedce9
BitcoinURI: rework exception handling for amount field
...
* The check against `maxMoney` is removed. There BIP21 spec does not restrict
the amount towards positive infinity. The new maximum is now dictated by
`Coin.parseCoin()`: `Long.MAX_VALUE` satoshis
* The check for negative amounts now throws `OptionalFieldValidationException`
directly, rather than re-throwing via `ArithmeticException`.
* Exception messages now use string concatenation like everywhere else.
* Tests around the new max amount are added/changed.
2023-04-19 23:04:39 +02:00
Andreas Schildbach
fe4bc813ef
KeyChainGroupStructure: deprecate accountPathFor()
variant that takes NetworkParameters
...
It seems this was forgotten earlier.
2023-04-19 23:00:28 +02:00
Andreas Schildbach
e7017bfc2f
KeyChainGroup: migrate to Network
from NetworkParameters
2023-04-19 22:58:52 +02:00
Andreas Schildbach
3e7761c81c
KeyChainGroupTest: remove usage of deprecated variants of method DeterministicKey.deserializeB58()
2023-04-19 18:57:46 +02:00
Andreas Schildbach
7b8b8d60a4
DeterministicKeyChain, MarriedKeyChain: migrate to Network
from NetworkParameters
2023-04-19 18:52:45 +02:00
Andreas Schildbach
f305954285
BasicKeyChain: migrate to Network
from NetworkParameters
2023-04-19 18:50:57 +02:00
Sean Gilligan
9291841f8d
Wallet: use Network
in static factory methods
...
* Adds new methods taking `Network` rather than `NetworkParameters`
* Deprecates all converted methods
* Updates tests, examples, and tools that use these calls
2023-04-18 12:47:09 +02:00
Sean Gilligan
3f3f9bb636
Transaction: use stream in hasWitnesses()
2023-04-17 17:06:45 +02:00
Sean Gilligan
ab08261ef2
Transaction: use foreach loop in readWitnesses()
2023-04-17 17:04:16 +02:00
Sean Gilligan
c64eb6c87e
Transaction: make inputs
/outputs
use List
interface
...
There is no need for the to be declared as `ArrayList`.
2023-04-17 16:58:44 +02:00
Andreas Schildbach
126ccbfd98
Message: restore deprecated method unsafeBitcoinSerialize()
...
Also adds a `deprecatedMembers()` test.
2023-04-17 12:08:11 +02:00
Andreas Schildbach
2ead9f7c57
BaseMessage: remove deprecated method getHash()
...
It was never fully implemented anyways.
2023-04-16 23:05:10 +02:00
Sean Gilligan
5eb67285db
Message: rename methods serialize()
and messageSize()
...
Provide deprecated implementations of `bitcoinSerialize()`
and `getMessageSize()`.
2023-04-16 18:49:32 +02:00
Andreas Schildbach
6ddf8d8cf5
RejectMessage: make immutable
2023-04-16 18:34:54 +02:00
Andreas Schildbach
b9a25641a3
FeeFilterMessage: make immutable
2023-04-16 17:42:54 +02:00
Andreas Schildbach
74678d6abc
VersionMessage: make a constant final
2023-04-16 10:47:01 +02:00
Andreas Schildbach
c3d20cb9b4
Ping, Pong: make immutable
2023-04-16 10:32:54 +02:00
Andreas Schildbach
1d58722630
Coin: add reading from and writing to ByteBuffer
...
* A static constructur `read()` that deserializes from a payload.
* A `write()` helper to write to a buffer.
* A `serialize()` helper to get the serialized bytes.
* A `BYTES` constant for the number of serialized bytes.
Includes a test.
2023-04-16 10:10:09 +02:00
Sean Gilligan
97b88fffdf
BaseMessage: make bitcoinSerializeToStream()
abstract
...
Rather than log an error at runtime, the compiler should fail with an error
when subclasses of `BaseMessage` don't implement `bitcoinSerializeToStream()`.
2023-04-16 08:54:34 +02:00
Sean Gilligan
792183dfef
FeeFilterMessageTest: add tests for FeeFilterMessage
2023-04-16 08:50:54 +02:00
Sean Gilligan
5cdbde165f
FeeFilterMessage: don't call super()
in bitcoinSerializeToStream()
2023-04-16 08:46:15 +02:00
Andreas Schildbach
917a1097c3
BaseMessage: remove method parse()
2023-04-16 08:32:55 +02:00
Andreas Schildbach
e6125b49a2
BaseMessage: remove field serializer
2023-04-16 08:32:55 +02:00
Andreas Schildbach
306ad03e6a
Transaction: move parse()
to static constructor read()
2023-04-16 08:32:55 +02:00
Andreas Schildbach
8a819c761c
Block: move parse()
to static constructor read()
2023-04-16 08:32:55 +02:00
Andreas Schildbach
3cf9e89893
FeeFilterMessage: move parse()
to static constructor read()
2023-04-16 08:32:55 +02:00
Andreas Schildbach
89d568de18
RejectMessage: move parse()
to static constructor read()
2023-04-16 08:29:45 +02:00
Andreas Schildbach
38ea113c2f
HeadersMessage: move parse()
to static constructor read()
2023-04-16 08:28:04 +02:00
Andreas Schildbach
92355b1c32
BloomFilter: move parse()
to static constructor read()
2023-04-16 08:26:02 +02:00
Andreas Schildbach
a155caa076
AddressV1Message, AddressV2Message: move parse()
to static constructor read()
2023-04-16 08:12:58 +02:00
Andreas Schildbach
a114c6ca0e
GetBlocksMessage, GetHeadersMessage: move parse()
to static constructor read()
2023-04-16 08:10:38 +02:00
Andreas Schildbach
eac2c1fee3
FilteredBlock: move parse()
to static constructor read()
2023-04-16 08:07:56 +02:00
Andreas Schildbach
70e652850e
GetDataMessage, InventoryMessage, NotFoundMessage: move parse()
to static constructor read()
2023-04-16 08:05:38 +02:00
Andreas Schildbach
e7ead0b3cb
VersionMessage: move parse()
to static constructor read()
2023-04-16 08:01:22 +02:00
Andreas Schildbach
14ba406298
Pong: move parse()
to static constructor read()
2023-04-16 07:58:28 +02:00
Andreas Schildbach
1f8ed23e24
Ping: move parse()
to static constructor read()
2023-04-16 07:56:18 +02:00
Andreas Schildbach
7d31021663
Transaction: remove the input and output re-reading
...
We needed this to correctly determine the message length, but that
requirement is gone.
2023-04-14 19:40:30 +02:00
Sean Gilligan
1fef4e2cdb
Message: extract interface, add BaseMessage
abstract class
2023-04-14 19:33:29 +02:00
Andreas Schildbach
78a76f76a5
BuffersTest: move the tests for extreme message lengths to here from MessageTest
...
It's much simpler to test the affected read helpers directly.
2023-04-14 19:26:49 +02:00
Andreas Schildbach
a22a446eb1
Buffers, Messages: in various parse()
methods, throw BufferUnderflowException
if read length doesn't fit an int
...
Previously, `ArithmeticException` was thrown which is unlikely to be handled by
consumers.
`BufferUnderflowException` is the correct exception to throw, under the assumption
that a giant length can't be followed by a collection of equally giant length.
2023-04-14 19:18:29 +02:00
Andreas Schildbach
ba8849ca13
VarInt: fix long values accepted as an int value
...
`-1` and `Integer.MIN_VALUE` (and all values inbetween) are in fact
very large VarInts that can only be expressed as a long. So their
test data have been moved from `VarIntTest.integerTestVectors` to
`longTestVectors`.
`intValue()` is changed to guard against such cases, and a helper
`fitsInt()` is introduced.
JavaDocs are added to `intValue()` and `longValue()` to clarify the
expected value ranges.
2023-04-14 19:10:15 +02:00
Sean Gilligan
5f5e7384a2
WalletAppKit: call awaitTerminated()
in close()
...
This adds basic unit tests.
2023-04-13 19:58:13 +02:00
Sean Gilligan
dc5dbc1db7
BitcoinNetwork: remove ID_UNITTESTNET
...
It is no longer used in the unit tests.
2023-04-13 16:49:32 +02:00
Sean Gilligan
134202c63f
BitcoinNetwork: improve JavaDoc
...
Make sure the string values are easily found in JavaDoc and in IDEs
that display JavaDoc.
2023-04-13 16:46:52 +02:00
Andreas Schildbach
6b7fe58955
ListMessage: fix number of inventory items read as long
2023-04-13 12:03:18 +02:00
Andreas Schildbach
838d14d027
PeerAddress: make immutable
...
* Static constructors `simple()` and `inet()` that replace the native constructors.
2023-04-13 00:21:36 +02:00
Andreas Schildbach
2c62951a31
PeerAddress: divorce from Message
...
It is never sent on its own, so it doesn't need to be a `Message`.
* Static constructor `read(protocolVariant)` replaces the native constructor that deserialized
from a payload.
* `write()` helper replaces `bitcoinSerializeToStream()`.
* `serialize()` and `getMessageSize()` helpers replace `bitcoinSerialize()`.
2023-04-13 00:19:40 +02:00
Andreas Schildbach
0401a0cde2
PartialMerkleTree: make immutable
2023-04-13 00:16:16 +02:00
Andreas Schildbach
cd75c6ab6b
PartialMerkleTree: divorce from Message
...
It is never sent on its own, so it doesn't need to be a `Message`.
* Static constructor `read()` replaces the native constructor that deserialized
from a payload.
* `write()` helper replaces `bitcoinSerializeToStream()`.
* `serialize()` and `getMessageSize()` helpers replace `bitcoinSerialize()`.
Includes a test.
2023-04-13 00:13:24 +02:00
Andreas Schildbach
cc5d735eb4
VersionMessage: for field receivingAddress
don't use PeerAddress
...
Rather, use `InetSocketAddress` and `Services`.
This makes `time` in `PeerAddress` a required field. It also drops
support for TORv2 addresses in `VersionMessage` (if that was ever
a thing).
2023-04-11 13:52:16 +02:00
Andreas Schildbach
7383a32e2a
VersionMessage: remove field fromAddr
...
The field is unused by the Bitcoin protocol. Bitcoin Core fills it up
with zeros. From now on, we'll do the same.
2023-04-11 13:44:16 +02:00
Andreas Schildbach
d4f8058164
Wallet: in signTransaction()
don't care about the witness being empty
...
It does not matter for the data being signed.
This removes `Script.createEmptyWitness()` as it's unnecessary as well.
2023-04-11 13:21:22 +02:00
Sean Gilligan
ce07733bbf
Wallet: constructor use Network
rather than NetworkParameters
...
With deprecation.
2023-04-11 13:02:11 +02:00
Sean Gilligan
f41336657d
LocalTransactionSigner: make key
local var effectively final
2023-04-11 12:47:01 +02:00
Sean Gilligan
4b9981015c
ProtocolVersion: move to top-level class from NetworkParameters
...
* Rename `getBitcoinProtocolVersion()` to `intValue()`
* Deprecate `NetworkParameters.getProtocolVersionNum()`. This eliminates
what seems to be an unnecessary level of indirection.
* Add tests.
This will also help eliminate a dependency on `NetworkParameters` in some places.
2023-04-10 01:35:20 +02:00
Andreas Schildbach
414bcf8b6c
MessageSerializer: remove variant makeTransaction(payload, hash)
2023-04-10 01:18:30 +02:00
Andreas Schildbach
1346504fb0
Transaction, TransactionInput, TransactionOutput: remove unCache()
2023-04-10 01:18:30 +02:00
Andreas Schildbach
b8d3c4a641
Transaction: remove fields cachedTxId
and cachedWTxId
...
Transaction IDs seem to be quick enough to calculate.
2023-04-10 01:18:30 +02:00
Sean Gilligan
c4439db699
FakeTxBuilder: use Network
not NetworkParameters
2023-04-09 10:33:15 +02:00
Sean Gilligan
c6ef0b69b1
Transaction: use Network
not NetworkParameters
in verify()
2023-04-09 10:27:21 +02:00
Andreas Schildbach
4e75444644
TransactionOutPointTest: add test deprecatedMembers()
...
The idea is any change in method signatures will be more visible in diffs.
2023-04-08 21:53:04 +02:00
Andreas Schildbach
9a34ab2a28
TransactionOutPoint: make field fromTx
immutable
2023-04-08 21:50:02 +02:00
Andreas Schildbach
a7d2e9ee18
TransactionOutPoint: make field connectedOutput
immutable
2023-04-08 21:34:14 +02:00
Andreas Schildbach
e89ccb9f2e
TransactionOutPoint: don't use accessors in equals()
and hashCode()
2023-04-08 21:31:50 +02:00
Andreas Schildbach
622989f62d
Transaction: introduce helper getOutput(outpoint)
to get an output by outpoint
2023-04-08 21:28:13 +02:00
Andreas Schildbach
e2107a0e6e
Script: make field creationTime
immutable
2023-04-08 21:17:30 +02:00