Commit Graph

3724 Commits

Author SHA1 Message Date
Sean Gilligan
368d2f2c63 BlockFileLoader: don't use NetworkParameters internally
Save `packetMagic` and `serializer` instead.
2023-03-30 01:50:14 +02:00
Andreas Schildbach
57c9456ce8 TransactionOutPoint: remove params from constructors 2023-03-30 01:42:50 +02:00
Andreas Schildbach
42bf963d92 MessageTest: remove params from VarStrMessage
This time for real.
2023-03-30 01:32:02 +02:00
Andreas Schildbach
54d0c80e16 GetBlocksMessage, GetHeadersMessage: remove params from constructors
Because the serialized messages contain the protocol version – for whatever
reason, possibly unused – that value is now passed instead.
2023-03-30 01:25:19 +02:00
Sean Gilligan
4a62b0f53d Fix spelling of "freestanding" in comments 2023-03-30 01:22:29 +02:00
Andreas Schildbach
a3d8d24d6f MessageTest: remove params from VarStrMessage 2023-03-30 01:19:54 +02:00
Andreas Schildbach
ed84988111 MemoryPoolMessage: make it an EmptyMessage 2023-03-30 01:16:03 +02:00
Andreas Schildbach
d02853b1f0 TransactionOutPoint: make direct subclass of Message
It doesn't need a parent.
2023-03-30 01:04:41 +02:00
Andreas Schildbach
dabed6fa2d Transaction: make direct subclass of Message
It doesn't need a parent.
2023-03-30 01:02:49 +02:00
Andreas Schildbach
1a007c1182 PeerAddress: make direct subclass of Message
It doesn't need a parent.
2023-03-30 00:45:25 +02:00
Andreas Schildbach
32ee59f7bb BloomFilter: remove params from constructor 2023-03-30 00:31:02 +02:00
Sean Gilligan
21217e3c0b BockFileLoader: make field fileIt immutable 2023-03-30 00:26:02 +02:00
Sean Gilligan
2d054d4e49 Fix spelling of "human readable" in comments and message 2023-03-30 00:20:06 +02:00
Andreas Schildbach
795f64b43d Message: from within the hierarchy, construct child messages directly
There is no point in taking the `MessageSerializer` route.
2023-03-30 00:15:37 +02:00
Andreas Schildbach
b2c54e8bf4 FeeFilterMessage: remove params and serializer from constructor 2023-03-29 23:51:13 +02:00
Andreas Schildbach
5ea7d64ee4 RejectMessage: remove params from constructors 2023-03-29 23:48:13 +02:00
Andreas Schildbach
780e43d94d Ping, Pong: remove params from constructors 2023-03-29 23:41:13 +02:00
Andreas Schildbach
dd2213c7e1 ListMessage: remove params and serializer from constructors in hierarchy 2023-03-29 23:37:17 +02:00
Andreas Schildbach
7d74722eeb TransactionOutPoint: remove serializer from constructor 2023-03-29 23:21:01 +02:00
Andreas Schildbach
9a0c3d91e3 EmptyMessage: remove params and payload from constructors in hierarchy
Empty messages don't need any of these.
2023-03-29 17:57:41 +02:00
Andreas Schildbach
8a1a462128 ProtocolException, VerificationException: allow construction without message
This makes usage of `ProtocolException::new` easier.
2023-03-29 17:57:41 +02:00
Andreas Schildbach
bc035737d1 Message: inline all read helpers
They were only calling through anyways.
2023-03-29 16:57:08 +02:00
Andreas Schildbach
ce39967d83 Buffers: new utils class for common operations on P2P message ByteBuffer 2023-03-29 16:49:07 +02:00
Sean Gilligan
02f3fe64cc ECKeyTest: add tests for deriving addresses from ECKey via toAddress()
`createP2TRAddress()` is ignored for now because it's not yet supported.
2023-03-29 13:32:11 +02:00
Sean Gilligan
458e4c1e0b ListenableCompletionStage: deprecate addListener()
When people upgrade to 0.17 this deprecation will make it clear
that they need to switch from this method to `thenRunAsync()`.

Reminder: we did not deprecate `ListenableCompletionStage` or `ListenableCompletableFuture`
because they are still used in many places in the bitcoinj API, but this
method is not used anywhere in bitcoinj.
2023-03-29 00:00:08 +02:00
Andreas Schildbach
592f3c692d Services: wrapper for node services bitfield 2023-03-28 15:52:05 +02:00
Andreas Schildbach
3bd191843a peerseeds.proto: remove protobuf definition
This was forgotten when removing `HttpDiscovery` via
commit 7f41553576.
2023-03-28 10:50:49 +02:00
Andreas Schildbach
63b5e07726 PaymentSessionTest: fix context not initialized 2023-03-28 00:34:28 +02:00
Andreas Schildbach
46e562bb20 Prepare 0.17-SNAPSHOT 2023-03-28 00:27:46 +02:00
Andreas Schildbach
f3075c44b6 Tag 0.17-alpha1 2023-03-27 23:56:19 +02:00
Andreas Schildbach
c38ec69246 BriefLogFormatter: provide init(Level) to use a custom log level 2023-03-27 21:02:59 +02:00
Sean Gilligan
3b6bdbad02 WalletAppKit: add launch() methods, simplify examples 2023-03-27 20:59:58 +02:00
Sean Gilligan
41ed5a984b Wallet: deprecate public fields in SendResult, replace with accessors
* Deprecate public fields in `SendResult`
* Make available equivalent accessors
* Update all usages

This prepares the way for replacing `SendResult` with `TransactionBroadcast`
in the future.
2023-03-27 20:22:35 +02:00
Sean Gilligan
774fde99fb Wallet: move methods sendTransaction() and waitForConfirmation() from ForwardingService
`waitForConfirmation()` now has two variants for convenience.
2023-03-27 19:30:27 +02:00
Sean Gilligan
b24964d056 TransactionBroadcast: add awaitRelayed(), deprecate future()
* Add `awaitRelayed()` method that returns a CF that completes when relaying is confirmed.
* Deprecate `future()` and reimplement it using `awaitRelayed()`.
2023-03-27 18:38:15 +02:00
Andreas Schildbach
504b67c186 ByteUtils: check range of values supplied to write helpers for the Java Unsigned Integer API
These checks uncovered various uses of illegal values (now fixed).
They should help this won't happen in future.
2023-03-27 17:53:26 +02:00
Sean Gilligan
2aa764d403 VarInt: simplify encode() 2023-03-27 17:38:58 +02:00
Andreas Schildbach
3746516859 VarInt: use constants for possible sizes 2023-03-27 16:54:00 +02:00
Andreas Schildbach
140912b080 VarIntTest: add test for reading and writing 2023-03-27 16:49:21 +02:00
Andreas Schildbach
21fae58bc8 VarInt: implement toString() 2023-03-27 16:48:47 +02:00
Andreas Schildbach
301c8e4a76 VarInt: implement equals() and hashCode()
`originallyEncodedSize` is not considered on purpose, because it is only
relevant for serialization.
2023-03-27 16:26:16 +02:00
Andreas Schildbach
2faaf9febc VarInt: direct use of ByteBuffer for reading and writing 2023-03-27 16:00:37 +02:00
Sean Gilligan
b4abf7d794 VarInt: get rid of code duplication in deprecated constructor 2023-03-27 15:50:13 +02:00
Andreas Schildbach
b528fb5180 build.gradle: update SLF4J to 2.0.7
Starting with SLF4J 2.0.0, we can use the fluent logger API.
2023-03-27 15:25:02 +02:00
Sean Gilligan
2e3e6d4485 TransactionBroadcast: add awaitSent() method
This just returns the used internally (and therefore tested) `sentFuture`.
2023-03-27 12:28:27 +02:00
Sean Gilligan
bce7b11038 Script: downsize MAX_SCRIPT_ELEMENT_SIZE to int from long
* The value is 520
* Java collection sizes are `int`
* All usages are as `int`
2023-03-27 09:54:42 +02:00
Sean Gilligan
ee74f34dcc FullBlockTestGenerator: use writeInt64LE() for writing a 64-bit integer
Previously two `writeInt32LE()` and a right-shift on an `int` by 32 were used.
2023-03-27 09:48:01 +02:00
Sean Gilligan
37a06b150f Transaction: replace Guava Lists.reversed() with JDK equivalent 2023-03-27 09:38:38 +02:00
Andreas Schildbach
c5faecf3b6 SegwitAddress: flip arguments of new static constructor fromBech32()
Otherwise the deprecation cycle won't be of much use for consumers who pass `null` for `params`.
2023-03-27 09:23:04 +02:00
Andreas Schildbach
150c911750 LegacyAddress: flip arguments of new static constructor fromBase58()
Otherwise the deprecation cycle won't be of much use for consumers who pass `null` for `params`.
2023-03-27 09:17:37 +02:00
Andreas Schildbach
4bdb0f85e4 BitcoinURI: flip arguments of new constructor
Otherwise the deprecation cycle won't be of much use for consumers who pass `null` for `params`.
2023-03-27 09:14:11 +02:00
Sean Gilligan
884072c9e3 WalletAppKit: make Closeable 2023-03-26 19:40:28 +02:00
Andreas Schildbach
c10cf7ccbe Sha256Hash: direct use of ByteBuffer in hashCode()
A hash code is just an arbitrary number. It doesn't care about signedness and endianess.
2023-03-26 19:07:22 +02:00
Andreas Schildbach
d478eb2a55 Network: migrate legacyAddressHeader() and legacyP2SHHeader() from NetworkParameters 2023-03-26 18:59:51 +02:00
Andreas Schildbach
ba72884832 Transaction: add back a byte[]-based constructor as deprecated 2023-03-26 18:53:06 +02:00
Sean Gilligan
c05fefe8f8 MarriedKeyChain: simplify Builder.followingKeys()
* Add `followingKey()` method that takes a single key
* Deprecate unused `followingKeys(DeterministicKey, DeterministicKey...)`
* Replace usage of Guava's `Lists.asList()`
2023-03-26 18:49:32 +02:00
Sean Gilligan
3e1855b201 SendRequest: make field tx immutable 2023-03-26 18:03:56 +02:00
Andreas Schildbach
4bdb8d7836 CheckpointManager: fix wrong unit of time
This mistake was introduced in commit 838b12c046.
The original line before the `java.time` migration was:

`60 * 60 * 24 * 7; // one week in seconds`
2023-03-26 17:58:10 +02:00
Sean Gilligan
795da8f54b Wallet: replace Guava newArrayList() with singletonList() 2023-03-26 11:16:09 +02:00
Andreas Schildbach
b585f9f08e KeyChainGroupTest: reduce false positive rate for the bloom filters
This will hopefully reduce spurious test failures.
2023-03-25 13:29:20 +01:00
Andreas Schildbach
3bbbf40fa4 Message: add back deprecated method unsafeBitcoinSerialize() 2023-03-25 13:19:59 +01:00
Andreas Schildbach
c581dfb791 ByteUtils: rework JavaDoc of all writeInt*() helpers 2023-03-24 19:35:52 +01:00
Andreas Schildbach
47a5d73035 ByteUtils: rename all writeUInt*() helpers to writeInt*()
This creates overloads in some cases.
2023-03-24 19:34:06 +01:00
Sean Gilligan
f3c4b5fcf4 BloomFilter: use signed integer for the nonce (nTweak)
It's arbitrary data and we're not supposed to do math on it, so it's
safe to use a signed Java `int`.

Also use `new Random().nextInt()` to generate the nonce. We were
previously generating a random double, multiplying by `Long.MAX_VALUE`
and then truncating the low 32-bits of the long. Using `.nextInt()`
might actually generate MORE randomness since there will be no truncation.
2023-03-24 18:34:09 +01:00
Andreas Schildbach
b39ad1904d Message: remove check against max message size in checkReadLength()
Checking against the remaining bytes in the payload should be enough.
The payload can't be longer than max message size.
2023-03-24 16:15:21 +01:00
Andreas Schildbach
9b3b11fd0f Message: allow parse() to throw BufferUnderflowException
The exception is now handled by the one caller to `parse()`, rather than
by various helpers.
2023-03-24 16:08:17 +01:00
Sean Gilligan
08e8c0c022 BloomFilterTest: use hex representation for constant
This avoids the `L` and also shows more clearly the
bit-pattern being used.
2023-03-24 15:44:34 +01:00
Andreas Schildbach
48f4d143f3 FeeFilterMessage: disallow negative fee rate
Fee rates are signed "int64_t", according to BIP-133. The spec doesn't
mention, but it goes without saying that negative fee rates make no
sense.
2023-03-24 15:32:54 +01:00
Andreas Schildbach
31d98af8f6 TransactionOutput: disallow negative values
Negative values obviously make no sense, except for `-1` which is
used as a sentinel value when calculating `SIGHASH_SINGLE` signatures,
so unfortunately we have to allow that here.
2023-03-24 15:30:02 +01:00
Andreas Schildbach
5bb1e123b6 VersionMessage: serialize negative time values
Surprisingly, version messages serialize time as a `int64_t` (signed 64-bit integer).
2023-03-24 15:26:10 +01:00
Andreas Schildbach
7a0939f7e4 Ping: require a nonce value
Pings without nonce are not protocol compliant since version 60001.
Our minimum version is at 70000.
2023-03-24 13:16:34 +01:00
Sean Gilligan
42eb791d39 SeedPeers: use ByteBuffer directly for address conversion
IPv4 addresses in `int` form don't care about signedness, and we
won't do math on them.
2023-03-24 11:31:26 +01:00
Andreas Schildbach
94bdbc29a0 UTXO, TransactionOutputChanges: remove unused serialization code
This was left over when we removed `UTXOsMessage` in d07e75e2a8.
2023-03-24 10:49:32 +01:00
Andreas Schildbach
dadeb71cb3 VersionMessage: use skipBytes() to skip over a value we don't ware about 2023-03-23 18:47:39 +01:00
Andreas Schildbach
ed57fa08ed Message: make serializer field immutable
This requires two new pass-through constructors, but in return we
get rid of the setter.
2023-03-23 13:34:31 +01:00
Andreas Schildbach
b8f77abe62 SeedPeers: fix conversion of int representation of IPv4 addresses to InetAddress
Usage of `writeUint32LE()` is wrong on two counts:

* `InetAddress.getByAddress()` expects big-endian values, and the method
  above encodes as little-endian.
* Java int is signed, even if the Java hex literal appears unsigned. The
  above method expects unsigned values.

So we add the previously missing `writeInt32BE()` to ByteUtils and use it.
2023-03-23 00:28:37 +01:00
Andreas Schildbach
72370d0ff6 Sha256Hash: add reading from and writing to ByteBuffer
Includes a test.
2023-03-22 22:19:54 +01:00
Andreas Schildbach
30dec4ff7c Message: replace readBytes(1)[0] with readByte() 2023-03-22 21:39:05 +01:00
Andreas Schildbach
89198853d1 TransactionInput: check sequence bounds
It turns out a test is supplying an invalid fake value.
This is now fixed.
2023-03-22 20:32:31 +01:00
Andreas Schildbach
014939410e TransactionOutPoint: check index bounds
It turns out some tests are supplying an invalid fake value for
coinbase transaction. This is now fixed.
2023-03-22 20:23:56 +01:00
Andreas Schildbach
c577303aed TransactionTest: don't use a custom protocol version in a test
The current default will do fine.
2023-03-22 20:06:41 +01:00
Andreas Schildbach
a7bd460865 Message: make params field immutable 2023-03-22 18:46:11 +01:00
Andreas Schildbach
be12c389f3 Message: parse the original ByteBuffer, rather than a copy of it
This has the advantage of using the read position contained in
`ByteBuffer`, so we remove our `offset` and `cursor` fields.
2023-03-22 15:04:05 +01:00
Andreas Schildbach
32837798c1 Message: remove length and optimalEncodingMessageSize fields
This does away with a lot of updating the fields while parsing and
mutating the data.

`getMessageSize()` now returns the length of the data as
serialized by `bitcoinSerializeToStream()`, which can be different
from the length of an original payload.

The default implementation of `getMessageSize()` is not performant
enough for all usecases, to it is overridden in strategic subclasses
to calculate the size in a much more efficient way.
2023-03-22 14:31:26 +01:00
Andreas Schildbach
7fba2d8c6b Message: fold unsafeBitcoinSerialize() into bitcoinSerialize() 2023-03-22 02:21:21 +01:00
Andreas Schildbach
e882322505 Message: fold bitcoinSerialize() into bitcoinSerializeToStream() 2023-03-22 02:06:35 +01:00
Andreas Schildbach
01bf08159d FilteredBlock: simplify parse() a bit by using readBytes() 2023-03-21 23:35:57 +01:00
Sean Gilligan
52b2f63d70 VarIntTest: use JUnitParamsRunner
* Parameterize the existing tests
* Test more functionality
* Test more data variations
2023-03-21 23:15:34 +01:00
Andreas Schildbach
58500cfb46 VarInt: add reading from and writing into ByteBuffer 2023-03-21 23:04:35 +01:00
Andreas Schildbach
0da35c6a0c VarInt: migrate native constructors to static constructors
The old native constructors have been deprecated.
2023-03-21 23:02:41 +01:00
Andreas Schildbach
abdba75019 Block: simplify parse()-parseTransactions() interaction 2023-03-21 22:54:44 +01:00
Andreas Schildbach
9d9cadd59c Message: in constructors wrap payload bytes and offset into a ByteBuffer
This reduces arguments of constructors and does away with
a couple of constructor variants.
2023-03-21 17:55:32 +01:00
Andreas Schildbach
7303043f37 ByteUtils: rename read helpers that read from streams 2023-03-21 17:46:26 +01:00
Andreas Schildbach
d89718aaf6 ByteUtils: add reading from and writing to ByteBuffer
This gets rid of a lot of manual bit shuffling.
2023-03-21 17:32:05 +01:00
Andreas Schildbach
c372a87ea4 ByteUtils: properly document all read and write helpers 2023-03-21 17:18:51 +01:00
Andreas Schildbach
371025f604 ByteUtils: rename helpers that write to byte arrays or streams to write*()
Note the read helpers already follow the `read*()` pattern.
2023-03-21 17:10:17 +01:00
Andreas Schildbach
34d8948be9 Message: do away with retaining of original message payload
This removes all caching of original message payload and "retain mode" in message serializers.

There is some effect on tests. Asserts on the cache status have been removed, rendering some
tests almost pointless. Rather than removing them, comments have been added to explain the
history of these tests. An assert on a large binary blob of a block was dependent on retain mode, likely
due to non-optimal encoding. It had to be disabled.

Note: Some classes still cache individual values, like hashes.
2023-03-20 16:55:29 +01:00
Andreas Schildbach
f516c25524 HexFormat: small performance enhancement for formatHex() 2023-03-20 16:01:29 +01:00
Sean Gilligan
466444ebf7 Peer: calculate lastPing and averagePing when Pong is received
This eliminates the need for locking in the getters.

The fields are marked as volatile so that when written, they will be
flushed to "main memory".
2023-03-20 00:34:00 +01:00
Andreas Schildbach
aab3e32624 Message: remove length arguments from constructors of the hierarchy
There was never a case where `length` wasn't equal to `payload.length`,
which is supplied by the same constructors. This also does away with
a couple of constructor variants.
2023-03-19 23:58:06 +01:00
Andreas Schildbach
8faf61ae0c Peer: fix JavaDoc about number of buckets 2023-03-19 23:17:00 +01:00
Sean Gilligan
78cc85dc1e Peer: replace pingIntervals array with Deque 2023-03-19 22:57:01 +01:00
Sean Gilligan
98c3a14a54 Peer: reimplement getPingTime() and getLastPingTime() in a functional way 2023-03-19 22:51:15 +01:00
Andreas Schildbach
04c72ce003 Peer: migrate pingIntervals field to java.time API 2023-03-19 20:15:00 +01:00
Andreas Schildbach
dce930f487 Message: get rid of the readVarInt(offset) variant
None of the other helpers have this.
2023-03-19 19:09:17 +01:00
Andreas Schildbach
d222efd6de ParseByteCacheTest: rewrite arrayContains() helper
The previous implementation was based on hex strings and was prone
to raising a false positive when matching at an uneven hex position.

This also adds a test.
2023-03-19 18:23:58 +01:00
Andreas Schildbach
979490ad97 UnsafeByteArrayOutputStream: remove this performance optimisation
Migrate all usages of `UnsafeByteArrayOutputStream` to `ByteArrayOutputStream`.
2023-03-19 17:55:05 +01:00
Andreas Schildbach
e37b2ad78c Preconditions: replace Guava checkArgument() and checkState() for the entire codebase
This also fixes many precondition messages, and rewrites two cases
of `checkPositionIndex()` and `checkElementIndex()`.
2023-03-19 17:48:27 +01:00
Andreas Schildbach
12b78a6d9b ParseByteCacheTest: parse test data using parseHex()
Gets rid of Guava BaseEncoding.
2023-03-19 16:59:59 +01:00
Andreas Schildbach
91c706ca33 TransactionTest: make testOptimalEncodingMessageSize() a more meaningful 2023-03-19 16:44:01 +01:00
Andreas Schildbach
d3ba6c03ec Message: check that payload is retained in retain mode 2023-03-19 14:36:40 +01:00
Andreas Schildbach
43123396c0 ParseByteCacheTest: rename variable serializer from bs
The previous name was just too confusing in company with "bos"
and the like.
2023-03-19 11:19:32 +01:00
Sean Gilligan
0f216d328f Block, BitcoinNetwork, BitcoinNetworkParams, KeyChainGroupTest: use _000 in constants to improve readability 2023-03-18 21:00:18 +01:00
Andreas Schildbach
06e031a51e LockTime: make native constructors private 2023-03-18 20:33:38 +01:00
Andreas Schildbach
e11fa0686f Transaction: rename estimateUnlockTime() method from estimateLockTimeInstant() 2023-03-18 11:36:47 +01:00
Andreas Schildbach
178fc0ab8f Script: rename creationTime() method from getCreationTime() 2023-03-18 11:29:07 +01:00
Andreas Schildbach
b309308076 EncryptableItem: rename creationTime() method from getCreationTime() 2023-03-18 11:23:05 +01:00
Andreas Schildbach
45f87d8339 PeerGroup: rename fastCatchupTime() method from getFastCatchupTime() 2023-03-18 11:16:31 +01:00
Andreas Schildbach
c2cabead9a TransactionConfidence: rename lastBroadcastTime() method from getLastBroadcastTime() 2023-03-18 11:11:05 +01:00
Andreas Schildbach
7090c6a152 PaymentSession: rename time() method from getTime() 2023-03-18 11:06:17 +01:00
Andreas Schildbach
5ae145e6b4 PaymentSession: rename expires() method from getExpiresInstant() 2023-03-18 11:03:17 +01:00
Andreas Schildbach
f583cea035 Wallet: rename keyRotationTime() method from getKeyRotationTimeInstant() 2023-03-18 10:58:43 +01:00
Andreas Schildbach
a68f7f958c KeyChainGroup: rename earliestKeyCreationTime() method from getEarliestKeyCreationTimeInstant() 2023-03-18 10:54:42 +01:00
Andreas Schildbach
5db4e1eadd PeerFilterProvider: rename earliestKeyCreationTime() method from getEarliestKeyCreationTimeInstant() 2023-03-18 10:47:41 +01:00
Andreas Schildbach
ed716bc4ba KeyChain: rename earliestKeyCreationTime() method from getEarliestKeyCreationTimeInstant() 2023-03-18 10:43:59 +01:00
Andreas Schildbach
b644886545 PeerAddress: rename time() method from getTimeInstant() 2023-03-18 10:38:51 +01:00
Andreas Schildbach
c0072ccb01 Transaction: rename updateTime() method from getUpdateTimeInstant() 2023-03-18 10:35:27 +01:00
Andreas Schildbach
06f2367069 ExponentialBackoff: rename retryTime() method from getRetryInstant() 2023-03-18 10:31:54 +01:00
Andreas Schildbach
516acd51c6 Wallet: rename lastBlockSeenTime() method from getLastBlockSeenTimeInstant() 2023-03-18 10:27:12 +01:00
Andreas Schildbach
e6e4745e1a Block: rename time() method from getTimeInstant() 2023-03-18 10:22:26 +01:00
Andreas Schildbach
31123bea3d Preconditions: add generic check() that allows to supply a custom exception
Also adds tests.
2023-03-18 00:15:13 +01:00
Andreas Schildbach
80178c011c MonetaryFormat: use BigDecimal for converting satishos to number and decimals
This gets rid of Guava `LongMath`. It also adds comments to the individual
conversion steps.
2023-03-17 18:30:13 +01:00
Andreas Schildbach
9606900551 MonetaryFormat: rename variable and argument decimalShift from potentialDecimals
This also adds documentation about what this number means.
2023-03-17 15:40:06 +01:00
Andreas Schildbach
09d6973b46 MonetaryFormat: rename variable and argument maxVisibleDecimals from maxDecimals
This also adds documentation about what this number means.
2023-03-17 15:09:27 +01:00
Sean Gilligan
48746364fc MonetaryFormat: encapsulate decimal conversion in private satoshisToDecimal()
This is a reasonable standalone refactoring, and is
being made in preparation for migration away from a
dependency on Guava's LongMath.
2023-03-16 22:18:28 +01:00
Sean Gilligan
b73730a1af TimeLock: introduce HeightLock and TimeLock subtypes
This is to support pattern-matching in JDK 16 and later.
2023-03-16 21:59:05 +01:00
Andreas Schildbach
dca54e0621 Preconditions: replace Guava checkArgument() and checkState() in base with own implementation
This has the added benefit of exception messages only being evaluated on demand.
2023-03-16 21:42:46 +01:00
Sean Gilligan
9ab5653fcf Script: use LockTime.THRESHOLD instead of deprecated Transaction.LOCKTIME_THRESHOLD 2023-03-16 21:38:52 +01:00
Andreas Schildbach
9ec245c259 Objects: migrate entire codebase to requireNonNull() from Guava Precondition.checkNotNull()
This has the added benefit of exception messages being evaluated on demand.
2023-03-16 20:12:28 +01:00
Andreas Schildbach
36c82a3cfb SegwitAddressTest: replace Guava ToStringHelper with custom string building 2023-03-16 17:10:48 +01:00
Andreas Schildbach
202bb1f8fb LockTime: wrap lock time values
This improves readability and type safety.
2023-03-15 21:45:09 +01:00
Andreas Schildbach
3b7c35f4cb Script: minor spelling fix for "lock time" 2023-03-15 16:44:33 +01:00
Andreas Schildbach
5aa2c2e065 Block: wrap hashes with Sha256Hash in buildMerkleTree() 2023-03-15 02:25:11 +01:00
Andreas Schildbach
1e883a6423 ListMessage: move arrayLen field to local variable 2023-03-15 01:32:38 +01:00
Andreas Schildbach
35b7532e11 BlockChainTest: use DateTimeFormatter.ISO_INSTANT to parse an instant 2023-03-14 10:12:13 +01:00
Andreas Schildbach
0e871e9af4 Block: use Date.from() to convert from Instant 2023-03-14 09:55:25 +01:00
Andreas Schildbach
de9c39b35a TimeUtils: migrate currentTime() method to java.time API 2023-03-14 02:56:52 +01:00
Andreas Schildbach
1835370e04 VersionMessage: migrate time field to java.time API 2023-03-14 02:13:45 +01:00
Andreas Schildbach
7788f6cfaf TestNet3Params: migrate testnetDiffDate constant to java.time API 2023-03-14 02:07:10 +01:00
Andreas Schildbach
79477ff04a FakeTxBuilder: migrate createFakeBlock()' methods to java.time` API 2023-03-14 01:56:26 +01:00
Andreas Schildbach
168ff75bd1 TimeUtils: migrate dateTimeFormat() method to java.time API 2023-03-14 01:32:59 +01:00
Andreas Schildbach
9eef9094b5 BriefLogFormatter: migrate timestamp formatting to java.time API
This also changes the time zone of timestamps to UTC and adds a test.
2023-03-13 22:05:27 +01:00
Andreas Schildbach
65afcf076d Transaction: migrate estimateLockTime() method to java.time API 2023-03-13 22:00:47 +01:00
Andreas Schildbach
f7fffc6af2 BlockingClient, ConnectionHandler, NioClientManager, NioServer: properly import Logger 2023-03-13 17:56:16 +01:00
Andreas Schildbach
01821f2ba5 Transaction: add and extend comments for the predefined comparators 2023-03-11 12:14:13 +01:00
Andreas Schildbach
d25c77cf24 Peer, NioClient, BlockingClientManager: fix some JavaDoc errors 2023-03-10 22:52:43 +01:00
Andreas Schildbach
7e70541658 PeerGroup: migrate vConnectTimeout field to java.time API 2023-03-10 22:32:47 +01:00
Andreas Schildbach
034277fae0 Transaction: reimplement SORT_TX_BY_UPDATE_TIME and SORT_TX_BY_HEIGHT comparators in a functional way 2023-03-10 22:12:29 +01:00
Andreas Schildbach
95549b4754 Wallet: migrate updateTime field to java.time API 2023-03-10 17:21:53 +01:00
Andreas Schildbach
85cc162642 PeerGroup: migrate connection retry logic to java.time API 2023-03-10 17:19:25 +01:00
Andreas Schildbach
da8b9ce434 Wallet: migrate lastBlockSeenTime field to java.time API 2023-03-10 16:47:38 +01:00
Andreas Schildbach
be0b2b46b8 PaymentSession: migrate getters to java.time API 2023-03-10 16:43:09 +01:00
Andreas Schildbach
9081d0fd2d WalletTest: reduce false positive rate in marriedKeychainBloomFilter()
This will hopefully reduce spurious test failures.
2023-03-10 15:21:40 +01:00
Andreas Schildbach
63ed4275ac SPVBlockStoreTest: increase threshold for performanceTest() to 5 seconds
This will hopefully reduce spurious test failures.
2023-03-10 14:50:03 +01:00
Andreas Schildbach
c205c67127 KeyChainGroupTest: fix spurious test failure of bloomFilterForMarriedChains()
This was caused by expected bloom filter false positives.
2023-03-10 14:06:19 +01:00
Andreas Schildbach
fb2dad432b WalletTest: fix spurious test failure of witnessTransactionGetFeeTest()
This was caused by a shorter than expected signature encoding, which
can happen in rare cases.
2023-03-10 13:55:30 +01:00
Andreas Schildbach
1484ff595a DefaultRiskAnalysis: don't try to risk-analyze if wallet has not seen any blocks 2023-03-10 10:27:19 +01:00
Andreas Schildbach
54754e14e9 EncryptableItem, ECKey, DeterministicKey, DeterministicSeed: migrate creationTime field to java.time API 2023-03-10 09:28:27 +01:00
Sean Gilligan
3023947df8 ByteUtils: move to o.b.base.internal
We don't consider ByteUtils to be part of our external API.
2023-03-10 01:28:23 +01:00
Andreas Schildbach
92ee36848c DeterministicSeed: introduce static constructors meant for external consumers
* native constructors that were meant to be called by consumers now have static equivalents
* all native constructors are discouraged from being used by a JavaDoc comment
* one constructor that wasn't meant to be used by consumers is switched to private access
* tests and tools that resemble consumers are updated to use the new API

Note: although most native constructors are now deprecated, we're not using
annotations because we're still calling them.
2023-03-10 00:53:35 +01:00
Andreas Schildbach
2c28cadda5 MnemonicCode: in toMnemonic() throw unchecked rather than checked exception
When converting from entropy to mnemonic with `toMnemonic()`, a `MnemonicLengthException`
was thrown for entropies with invalid length. This is bad for two reasons:

- it is a checked exception, and the method will not be called with user input
- misleading exception name, the error is about the entropy length not the mnemonic

We now throw a `RuntimeException` instead. The resulting simplification of
calling code can be witnessed in `DeterministicSeed`.
2023-03-09 21:44:31 +01:00
Andreas Schildbach
566cd102b2 ScriptPatternTest: move p2shScriptHashFromKeys() from LegacyAddressTest 2023-03-09 20:51:26 +01:00
Andreas Schildbach
04d4443d08 LegacyAddressTest: separate test into p2shScriptHashFromKeys() and p2shAddressFromScriptHash() 2023-03-09 20:51:26 +01:00
Andreas Schildbach
a61da4fff6 Script: migrate creationTime field to java.time API 2023-03-09 15:09:07 +01:00
Andreas Schildbach
9ba34fc2ed DeterministicKeyChain: convert if-else in getEarliestKeyCreationTimeInstant() to terniary operator 2023-03-08 20:41:51 +01:00
Andreas Schildbach
2cd239eee0 KeyChainGroup: convert if-else in getEarliestChainsCreationTime() to terniary operator 2023-03-08 20:41:51 +01:00
Andreas Schildbach
18898f4fc5 Wallet, KeyChain, KeyChainGroup, PeerFilterProvider: migrate getEarliestKeyCreationTime() methods to java.time API 2023-03-08 20:41:46 +01:00
Sean Gilligan
c41128b4df AesKey: replace o.bouncycastle.c.p.KeyParameter
We were using KeyParameter as a wrapper for a byte[] containing an
AES Key and passing it around our API. This introduced an unnecessary
API dependency on Bouncy Castle. This PR adds an AesKey class
for the same purpose to replace it.

This is a breaking change, but one that should be easy to accommodate.
2023-03-08 18:13:21 +01:00
Andreas Schildbach
16c90d2891 TimeUtils: migrate mock clock to java.time API
* Migrate `setMockClock()` parameters to Instant
* Migrate `rollMockClock()` parameters to Duration
* Rename to `clearMockClock()` from `resetMocking()`
* Use `Clock` internally to provide the time
2023-03-08 16:20:48 +01:00
Sean Gilligan
7a1c71c319 CryptoUtils: add digestRipeMd160() method, use it to wrap BouncyCastle 2023-03-08 09:46:44 +01:00
Sean Gilligan
fff3b7e837 TransactionWitnessTest: remove unused BouncyCastle import 2023-03-08 09:40:03 +01:00
Sean Gilligan
579a7e986a CryptoUtils: move onionChecksum() from PeerAddress 2023-03-08 02:04:13 +01:00
Andreas Schildbach
d1e2e71bb5 TransactionConfidence: migrate lastBroadcastedAt field to java.time API 2023-03-07 00:41:55 +01:00
Andreas Schildbach
c8904a41bd AbstractBlockChain: migrate estimateBlockTime() method to java.time API 2023-03-07 00:06:35 +01:00
Andreas Schildbach
5a69df0a81 Wallet, KeyChainGroup: migrate keyRotationTime field to java.time API 2023-03-06 23:56:49 +01:00
Andreas Schildbach
558f6df127 DownloadProgressTracker: migrate progress() method to java.time API 2023-03-06 09:58:48 +01:00
Andreas Schildbach
310b93be4e Peer, PeerGroup: migrate fastCatchupTime field to java.time API 2023-03-06 09:50:07 +01:00
Andreas Schildbach
838b12c046 CheckpointManager: migrate checkpoints map to java.time API 2023-03-06 09:39:02 +01:00
Sean Gilligan
b1ede764a7 Wallet: fix JavaDoc error that was breaking JDK 11 build 2023-03-06 09:35:42 +01:00
Sean Gilligan
1853a63f69 DeterministicHierarchy, MnemonicCode: migrate BIPXX_STANDARDISATION_TIME to java.time API
Deprecate BIPXX_STANDARDISATION_TIME_SECS int constants. Replace with
BIPXX_STANDARDISATION_TIME Instant constants.
2023-03-06 01:24:22 +01:00
Sean Gilligan
8bdc35a32e Wallet: migrate fromWatchingKeyB58() and fromSpendingKeyB58() methods to java.time API 2023-03-06 00:44:34 +01:00
Andreas Schildbach
99bc95a93d WalletFiles: migrate delay field to java.time API 2023-03-05 22:05:39 +01:00
Andreas Schildbach
d3162a4403 SendRequest: migrate two invocations of deprecated NetworkParameters.fromAddress() method 2023-03-05 17:50:11 +01:00
Sean Gilligan
f2a7229676 MessageVerifyUtils: move to o.b.crypto.utils from o.b.utils
This class belongs in the crypto module.
2023-03-05 01:06:12 +01:00
Sean Gilligan
848d2d88bb StreamUtils: move to o.b.base.internal from o.b.base.utils 2023-03-05 01:02:20 +01:00
Sean Gilligan
8e35390b8a SegwitAddress: minor simplification in toBech32()
Calculate encoding using ternary operator and replace if statement.
2023-03-05 00:49:45 +01:00
Sean Gilligan
b83710a242 SegwitAddress: store witnessProgram as 8-bits/byte
Change the internal storage format from 5-bits/byte (Bech32 intermediate format)
to standard 8-bits/byte.

Remove now unneeded conversions and add conversion in toBech32().
2023-03-05 00:44:06 +01:00
Sean Gilligan
f8ac6b3405 SegwitAddress: store witnessVersion internally as a short
Separate witnessVersion from witnessProgram in private members.

Note that the witnessProgram is still stored in a 5-bit per byte encoding
as it was in the combined byte[]. A future PR will change it to 8-bit per
byte encoding.
2023-03-05 00:40:56 +01:00
Sean Gilligan
f9be0b2a3d Address: convert to interface
* Migrate protected members to subclasses
* Remove constructors
* Migrate hashCode and equals to subclasses
2023-03-05 00:38:55 +01:00
Sean Gilligan
6c84ffec85 ScriptBuilder: cast address to LegacyAddress before calling getHash()
In both of these cases we have already checked the ScriptType of the 
address and know that it is a LegacyAddress.
2023-03-04 10:08:44 +01:00
Sean Gilligan
4f66bfc462 MessageVerifyUtils: cast P2SH address to LegacyAddress
* Change the private compareP2SHScriptHashDerivedFromPubKey() method to
  take a LegacyAddress
* In caller cast address (after check for P2SH) to LegacyAddress
2023-03-04 09:58:50 +01:00
Sean Gilligan
9002edbe8f Base58: move tests to o.b.base
These should have been moved when the Base58 class was moved.
2023-03-03 22:45:48 +01:00
Andreas Schildbach
1c380de16d PeerAddress: migrate time field to java.time API 2023-03-03 20:06:34 +01:00
Andreas Schildbach
913f5ac8c6 PeerDiscovery: migrate getPeers() to java.time API 2023-03-03 00:10:35 +01:00
Andreas Schildbach
35c4fd9025 ExponentialBackoff: migrate to java.time API 2023-03-02 23:32:45 +01:00
Andreas Schildbach
b356f487e5 PeerGroup: migrate peerDiscoveryTimeout field to java.time API 2023-03-02 23:32:45 +01:00
Andreas Schildbach
d1aa4de677 Block: migrate time field to java.time API
The precision of Bitcoin time is only a second, so we need to
truncate any surplus precision to avoid rounding errors in the
PoW verification.
2023-03-02 23:32:45 +01:00
Sean Gilligan
50caafc8d5 ByteUtils: replace Guava comparator with arrayUnsignedComparator()
Replace Guava UnsignedBytes.lexicographicComparator() with
ByteUtils.arrayUnsignedComparator().
2023-03-02 23:00:07 +01:00
Sean Gilligan
17abffa04b Peer: deprecate ping() and replace with sendPing()
1. Returns Duration rather than long
2. Uses CompletableFuture rather than ListenableCompletableFuture

I've also changed the error-handling a little. Instead of throwing
a ProtocolException (RuntimeException) if PingPong isn't supported
the exception is set in the CompletableFuture. We don't have anything
catching this exception, so wrapping it in the CompletableFuture seems
like a safe move.
2023-03-02 18:50:16 +01:00
Sean Gilligan
916989a7cd ByteUtils: replace HEX (Guava BaseEncoding) with with own implementation
* Deprecate ByteUtils.HEX
* Migrate usages to new ByteUtils.formatHex() and ByteUtils.parseHex()
* Direct use of Guava BaseEncoding in tests that use some specific
  features of BaseEncoding that aren't provided by new methods.
2023-03-02 15:16:06 +01:00
Sean Gilligan
7ee4f334be Sha256Hash: replace Ints.fromBytes with ByteUtils.readUint32BE 2023-03-02 12:35:38 +01:00
Sean Gilligan
f71b085cd2 VarInt: replace Guava Ints.checkedCast with Math.toIntExact 2023-03-02 12:31:31 +01:00
Sean Gilligan
855b50cd63 Coin: replace LongMath.pow() with hardcode
There's no convenient Java built-in for exponentiation
of `long`. And the COIN_VALUE constant is unlikely to ever change.
So we're just going to define it with a `long` literal.

Fortunately Java 7 added the ability to use `_` to group digits.
2023-03-02 12:27:57 +01:00
Sean Gilligan
8325b0aee4 FutureUtils: add failedFuture method
As we're migrating from ListenableCompletableFuture to standard
CompletableFuture, we need a failedFuture() method that returns the
standard CompletableFuture object.

TransactionBroadcast already needed this method as it was returning
a ListenableCompletableFuture in one case where a standard
CompletableFuture would be preferred.

This method can be deprecated when we require Java 9.
2023-03-02 12:22:33 +01:00
Sean Gilligan
9e59b0fc79 Sha256Hash: replace Guava io.ByteStreams with Files.readAllBytes 2023-03-02 11:36:53 +01:00
Andreas Schildbach
a40f206e45 Peer: measure ping-pong time using java.time API 2023-03-01 23:55:44 +01:00
Andreas Schildbach
2eb7278d04 core, integration-test: migrate usage of Guava Stopwatch to java.time API 2023-03-01 13:21:30 +01:00
Sean Gilligan
64dbdd9fcd base, wallet: migrate Guava LongMath.checked{Add,Subtract,Multiply} to Math.{add,substract,multiply}Exact 2023-02-28 22:06:03 +01:00
Sean Gilligan
0e4bda3cd8 LegacyAddress: replace two core imports with paths in JavaDoc
This helps us keep better track of our progress
in migrating away from core.
2023-02-27 22:58:19 +01:00
Sean Gilligan
d86406ab2e TimeUtils: move (mock) time utils from o.b.core.Utils to new class 2023-02-27 19:32:50 +01:00
Sean Gilligan
6e77dcb433 PlatformUtils: move OS/runtime detection from o.b.core.Utils to new class 2023-02-27 18:34:20 +01:00
micheal swiggs-malmevik
0685bf70e4 BitcoinURI: remove redundant BitcoinNetwork cast 2023-02-27 16:56:13 +01:00
micheal swiggs-malmevik
cfc3b26a53 BitcoinURI: remove unused parameter addressToken from parseParameters() 2023-02-27 16:54:02 +01:00
micheal swiggs-malmevik
8e03aee87d DeterministicKey: remove unused parameter parent from ascertainParentFingerprint() 2023-02-27 16:38:06 +01:00
micheal swiggs-malmevik
6298651929 DeterministicKeyChain: remove unused parameter baseKey from initializeHierarchyUnencrypted() 2023-02-27 16:35:24 +01:00
micheal swiggs-malmevik
6e8435e129 Wallet: remove unused parameter originalInputs from calculateFee() 2023-02-27 16:21:46 +01:00
micheal swiggs-malmevik
135476f71b Wallet: remove unused parameter avail from checkBalanceFuturesLocked() 2023-02-27 16:21:08 +01:00
Sean Gilligan
a4e2583b4e FutureUtils: move to o.b.base.internal package 2023-02-27 12:52:36 +01:00
Sean Gilligan
ebe70e453a FutureUtils: migrate ListenableCompletableFuture to CompletableFuture 2023-02-27 12:43:02 +01:00
Sean Gilligan
1fa9bff490 ECKey, DeterministicKey: migrate API usages to Network from NetworkParameters 2023-02-27 11:45:05 +01:00
Andreas Schildbach
625adf55ea DeterministicKey: fix JavaDoc of deprecated serializePrivB58() 2023-02-27 11:40:33 +01:00
Sean Gilligan
232f194a36 DumpedPrivateKey: fix NPE in deprecated fromBase58() 2023-02-27 11:31:59 +01:00
Sean Gilligan
8ba45dd812 CrytoUtils: new internal utils, move sha256hash160() from Utils 2023-02-27 11:25:00 +01:00
Sean Gilligan
03782a4697 InternalUtils: move to o.b.base.internal package 2023-02-24 11:47:59 +01:00
Sean Gilligan
484b7185d4 VarInt: move to o.b.base package 2023-02-24 11:24:58 +01:00
Sean Gilligan
0d3c9780b0 SignatureDecodeException: move to o.b.crypto package 2023-02-24 11:21:11 +01:00
Sean Gilligan
0b865408e6 DRMWorkaround: remove workaround for AES-256 in older Java
Android and OpenJDK don't need this and I'm pretty sure that
Oracle JDK 9 and even recent builds of Oracle JDK don't need it either.
2023-02-24 10:55:45 +01:00
Sean Gilligan
1b0ac02eed ECKey, DumpedPrivateKey, EncodedPrivateKey: move to o.b.crypto package
Also move associated tests and test resources.
2023-02-24 10:49:35 +01:00
Sean Gilligan
74821e3517 DefaultAddressParser: move from o.b.core to base 2023-02-24 09:45:59 +01:00
Sean Gilligan
aaf83be6f8 LegacyAddressTest, SegwitAddressTest: convert to Network from NetworkParameters
Finish conversion from NetworkParameters to Network in the tests. This cleans up
the code, too.

There are still some references to NetworkParameters in LegacyAddressTest:

1. Tests of deprecated methods that can be removed when those methods are removed
2. Tests that need getP2SHHeader() which hasn't moved to Network yet.
2023-02-24 09:33:10 +01:00
Sean Gilligan
10af4cdae9 NetworkParameters: migrate getSegwitAddressHrp() to Network.segwitAddressHrp()
Deprecate the old method.
2023-02-22 11:44:30 +01:00
Andreas Schildbach
e27baa1012 DefaultRiskAnalysisTest: fix context not initialized 2023-02-19 12:24:45 +01:00
Andreas Schildbach
bb3fb79f06 Message: deprecate method getHash()
It's not implemented anyways and only used as a generalization of some subclass implementations.
2023-02-19 10:56:23 +01:00
Sean Gilligan
a62ec7921e SegwitAddressTest: add two tests for P2WPKH REGTEST 2023-02-18 00:40:31 +01:00
Sean Gilligan
0acfcb10ec PeerGroup: migrate constructors argument from NetworkParameters to Network
* Add 3 new constructors which take Network
* Deprecate (2 of 3) constructors that take NetworkParameters
* Mark 3-arg NetworkParameters constructor as @VisibleForTesting
2023-02-17 20:21:48 +01:00
micheal swiggs-malmevik
81ddf4f27e Script: remove deprecated method executeScript() 2023-02-17 20:11:40 +01:00
micheal swiggs-malmevik
54c85b2574 Script: remove a couple of deprecated pattern matchers
They had been moved to ScriptPattern.
2023-02-17 20:05:31 +01:00
Sean Gilligan
d354bc13ce Address, LegacyAddress, SegwitAddress, AddressParser: move to o.b.base
* Move related tests too
* Update imports in referencing classes
2023-02-16 22:50:02 +01:00
Sean Gilligan
49f17929ac DefaultAddessParser: implement parse*AnyNetwork() methods 2023-02-16 19:48:06 +01:00
Sean Gilligan
e6a4dd4718 Wallet, WalletFiles: improve error handling on save
Catch FileNotFound error earlier and provide more informative
exception when it happens.

I discovered this issue running the WalletTool with an invalid directory
path to the wallet file. Before this fix the error/exception message is:

    java.io.IOException: No such file or directory

After the fix it is:

    java.io.FileNotFoundException: /Users/sean/bitcoinj (wallet directory not found)
2023-02-16 11:48:49 +01:00