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