Commit Graph

3677 Commits

Author SHA1 Message Date
Andreas Schildbach
b68f81f3b4 PaymentSession: don't validate the network of transactions in payment message
It's up to the caller to not mix networks.
2023-04-01 21:17:30 +02:00
Andreas Schildbach
cd781286e6 Wallet, SendRequest: get NetworkParameters from the wallet, not from a transaction 2023-04-01 21:09:15 +02:00
Andreas Schildbach
776dbc68f9 TimeUtilsTest: make sure the mock clock isn't set when entering the tests 2023-04-01 21:04:10 +02:00
Andreas Schildbach
124ddca53a TransactionTest: don't create global transaction object for each test
It makes tests more self-contained, and only about a third of
the tests use the global transaction.
2023-04-01 19:57:20 +02:00
Andreas Schildbach
e347ceba66 TransactionOutput: fix braces gone wrong 2023-04-01 19:47:15 +02:00
Andreas Schildbach
1c04dd94e7 TransactionOutput: fix NullPointerException in toString() 2023-04-01 19:41:11 +02:00
Andreas Schildbach
8b663363ef Transaction: move isMature() to Wallet.isTransactionMature()
That method is only needed in `Wallet`, so it's good to have it there.
On top of that, Wallet will be able to provide `NetworkParameters`
for a long time.
2023-04-01 17:14:39 +02:00
Andreas Schildbach
a61761c5ab BlockChainTest: use TestNet3Params exclusively, except two tests
`difficultyTransitions()` uses `UnitTestParams` only.
`estimatedBlockTime()` uses `MainNetParams` only.
2023-04-01 14:58:00 +02:00
Andreas Schildbach
47ea55e1a6 BlockChainTest: rewrite assertions in coinbaseTransactionAvailability() to not use coinbaseTransaction
Actually, get rid of global `coinbaseTransaction` entirely.
2023-04-01 14:29:26 +02:00
Andreas Schildbach
97e23f77ad BlockChainTest: rewrite assertions in duplicates() to not use block
Actually, get rid of global `block` entirely.
2023-04-01 13:53:09 +02:00
Andreas Schildbach
ed46622bbf BlockChainTest: rename unitTestChain and unitTestStore from generic names
This should make it more transparent which chain and store is used
in tests.
2023-04-01 12:57:35 +02:00
Andreas Schildbach
7687d37fcb BlockChainTest: inline a local variable 2023-04-01 12:41:48 +02:00
Andreas Schildbach
f891db1bda BlockChainTest: inline method resetBlockStore()
It is only used once.
2023-04-01 12:39:09 +02:00
Andreas Schildbach
770fcb0f03 BlockChainTest: use MainNetParams only in the one test that need it 2023-04-01 12:01:50 +02:00
Andreas Schildbach
c4afd902da BlockChainTest: use TweakableTestNet3Params only in the one test that need it 2023-04-01 11:52:39 +02:00
Andreas Schildbach
7b8b8650bc BlockChainTest, ChainSplitTest, ECKeyTest: use assertFalse(condition) rather than assertTrue(!condition) 2023-04-01 11:40:31 +02:00
Andreas Schildbach
4fb4fe2380 BlockChainTest: flip expected value to the front for assertEquals() 2023-04-01 11:35:58 +02:00
Andreas Schildbach
a2abdfa136 TransactionTest: migrate remaining assertTrue()/assertFalse() from assertEquals() 2023-04-01 10:48:29 +02:00
Andreas Schildbach
efdef581ee Transaction: make network in toString() an optional parameter
If it isn't provided, standard output scripts cannot be converted to
addresses.
2023-04-01 10:27:43 +02:00
Andreas Schildbach
44b0ddeb59 Transaction: remove toHexString()
This makes a scary assumption on the format being used (segwit or not).
2023-04-01 10:25:15 +02:00
Sean Gilligan
772bccd5f8 MemoryBlockStore: construct with genesis block
It doesn't need an entire `NetworkParameters`.
2023-03-31 22:14:06 +02:00
Andreas Schildbach
0a5560dc4c Transaction: make allowWitness() static and let it decide on protocolVersion only
It doesn't need an entire `MessageSerializer`.
2023-03-31 22:07:15 +02:00
Andreas Schildbach
f4e7f03c0b Transaction: remove method calcLength()
It is not used any more.
2023-03-31 21:51:15 +02:00
Andreas Schildbach
880b4aff8e Transaction: use getMessageSize() to determine size in toString()
It's quicker, as for this class there is an optimization without
serializing the entire message.
2023-03-31 21:36:59 +02:00
Andreas Schildbach
f588b8e945 TransactionInput, TransactionOutput: make setParent() protected
Rather than using this method, we should prefer passing the parent
transaction via constructor.
2023-03-31 20:25:06 +02:00
Andreas Schildbach
81fb0c5acb Transaction, TransactionInput, TransactionOutPoint: add static constructors for the elements of a coinbase
This should reduce misuse of the standard constructors.
2023-03-31 19:28:11 +02:00
Sean Gilligan
820b671dbc StoredBlock: make deserializeCompact() use serializer
...not `params`.
2023-03-31 18:35:58 +02:00
Sean Gilligan
98d4df5fe5 BlockChainTest: reduce usage of UNITTEST
Use `TESTNET` or `BitcoinNetwork.TESTNET` for `Transaction`, `Address` and
`Wallet`.
2023-03-31 16:06:58 +02:00
Andreas Schildbach
a3f82d6bae TransactionInput: remove helper duplicateDetached()
It is only used from a test, and that test works just as well by
just copying the reference.
2023-03-31 15:58:23 +02:00
Andreas Schildbach
81adac9f1e Wallet: fix usage of wrong TransactionInput constructor 2023-03-31 14:21:57 +02:00
Sean Gilligan
cc901ee863 BlockStore: remove getParams() from the hierarchy
Nothing in bitcoinj is using this method and applications should not
be getting their `NetworkParameters` from their storage layer.
2023-03-31 09:57:29 +02:00
Sean Gilligan
99f6860ceb UTXOProvider: replace getParams() with network()
Since this only affects FullPrunedBlockStore, this change doesn't
need deprecation.
2023-03-31 09:54:59 +02:00
Andreas Schildbach
24e030ae74 Transaction, TransactionInput, TransactionOutput, PartialMerkleTree: use readLengthPrefixedBytes() where appropriate 2023-03-31 01:57:48 +02:00
Sean Gilligan
786a1e1953 Script: migrate to Network from NetworkParameters
Provide deprecated methods for compatibility.
2023-03-31 01:23:27 +02:00
Andreas Schildbach
eb531166ee TransactionOutput: remove params from constructors
To make this possible, a check for maximum value is removed.
2023-03-30 23:43:17 +02:00
Andreas Schildbach
5d466ea57c Peer: fix default of the minimum protocol version of remote peers
It should be `NetworkParameters.ProtocolVersion.MINIMUM` (currently 70000).
2023-03-30 23:41:06 +02:00
Andreas Schildbach
dd07d2cf62 NetworkParameters: fix protocol version for BIP37 bloom filters
According to BIP111, the protocol version must be greater than 70000.
Since we use "greater or equals", 70001 is the correct number.
2023-03-30 23:39:12 +02:00
Sean Gilligan
90fc2bfb5e BlockFileLoader, FullBlockTestGenerator: use readUint32()/writeInt32LE() rather than manually reversing bytes 2023-03-30 23:34:50 +02:00
Andreas Schildbach
f0b69a405f VersionMessage: require extended version handshake messages
Versions without the extended fields (e.g. user-agent, block height) are not
protocol compliant since version 106. Our minimum version is at 70000.
2023-03-30 23:29:55 +02:00
Andreas Schildbach
8aeb5d3b1c TransactionInput: remove params from constructors 2023-03-30 23:00:04 +02:00
Andreas Schildbach
f2376e3ba3 PartialMerkleTree: remove params from constructors 2023-03-30 22:39:05 +02:00
Sean Gilligan
16faad2a30 NetworkParameters: change packetMagic to an int
It's just a binary value and does not have signedness.

Methods for writing 32-bit integers via `ByteUtils.writeInt32BE(int, ...)` have been added.
2023-03-30 22:19:06 +02:00
Andreas Schildbach
8c6e584e02 AddressMessage: remove params and serializer from constructors in hierarchy 2023-03-30 19:01:25 +02:00
Sean Gilligan
8576602180 BlockFileLoader: convert to Network, deprecate constructors with NetworkParameters 2023-03-30 18:59:19 +02:00
Andreas Schildbach
3e8f7d93a7 DummySerializer: make capable of pretending specific protocol version
This is put to use for the "misuse of protocol version" for `PeerAddress`.
2023-03-30 18:17:16 +02:00
Andreas Schildbach
773a9aeb4e PeerAddress: remove params from constructor
To make this possible, a port has to be specified in all cases.
2023-03-30 18:03:18 +02:00
Andreas Schildbach
6472080ab3 Message: remove method unCache()
It's still implemented in `Block`, `Transaction`, `TransactionInput` and
`TransactionOutput`. But there is no need to have it in the superclass.
2023-03-30 18:00:34 +02:00
Andreas Schildbach
b9d37e024f Message: get rid of payload field
It's now passed into the `parse()` method, and passed along from there.
2023-03-30 17:58:22 +02:00
Andreas Schildbach
9c9548dc23 TransactionOutput: remove serializer from constructor 2023-03-30 15:09:44 +02:00
Andreas Schildbach
c1a32f6585 TransactionInput: remove serializer from constructor 2023-03-30 15:06:41 +02:00
Andreas Schildbach
8091384ff6 UnknownMessage: make field name immutable 2023-03-30 14:29:17 +02:00
Andreas Schildbach
455973557a Message: add a defensive null check to getParams() 2023-03-30 13:15:05 +02:00
Sean Gilligan
3bc82cd9f7 TransactionInput, TransactionOutput: make direct subclass of Message
Since only these 2 classes need to support the concept of a "parent", it
will be simpler to just add the code to handle that to both of them and
remove the `ChildMessage` altogether.
2023-03-30 11:33:29 +02:00
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