Commit Graph

4289 Commits

Author SHA1 Message Date
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
46dcfc6bda TestWithNetworkConnections: ask Wallet for an Address right away
Previously, it was asking for a key and converted manually.
2023-03-08 17:29:51 +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
6eed19d449 PeerTest, TransactionBroadcastTest: clear the mock clock after some tests that use it 2023-03-07 16:08:40 +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
Sean Gilligan
86733a9414 build.gradle: update JavaFX to 17.0.6 2023-03-06 18:28:36 +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
Sean Gilligan
d5aeaacc44 modular-architecture.md: improve diagrams, show 4 releases
This updates the document to have 4 diagrams, one for each of the
following releases:

1. 0.16.x (current stable release)
2. 0.17 (according to current plans)
3. 0.18 (according to current plans)
4. 0.19 (this more of a proposal than a plan at this point)

The diagrams have also been enhanced to differentiate between packages
and modules (aka JARs) and to distinguish between "api" and "implementation"
dependencies.

Hopefully this makes things much more clear. We can make further changes
as our plans and implementations change.
2023-03-03 20:24:00 +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