Commit Graph

4369 Commits

Author SHA1 Message Date
Sean Gilligan
f58d07a623 ForwardingService: start() returns receiving address 2023-03-26 18:10:09 +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
Sean Gilligan
b7cf58ba6d GuiUtils: replace Guava Throwables.getRootCause() with private helper method
Private helper walks up the chain and avoids loops.
2023-03-26 01:50:02 +01:00
Sean Gilligan
66d96ab29d WalletPasswordController: remove use of Guava Longs
Use ByteBuffer in private methods for long to byte[] conversion.
2023-03-26 01:47:03 +01:00
Sean Gilligan
8566819ff2 SendMoneyController: use CompletableFuture not Guava
This is the last remaining use of Guava futures in
WalletTemplate.
2023-03-26 01:35:34 +01:00
Andreas Schildbach
7302a24962 .gitlab-ci.yml: create job artifacts 2023-03-26 00:28:11 +01:00
Andreas Schildbach
1753bc4ea7 .gitlab-ci.yml: print build environment at end of log 2023-03-25 21:03:43 +01:00
Andreas Schildbach
26e5500ae8 .gitlab-ci.yml: append JDK to job names 2023-03-25 21:01:00 +01: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