Commit graph

3761 commits

Author SHA1 Message Date
Andreas Schildbach
fe749281c6 build.gradle: update Hamcrest to 2.2 2021-12-14 15:57:01 +01:00
Andreas Schildbach
acecf4fc25 build.gradle: update EqualsVerifier to 3.7.2 2021-12-14 15:53:39 +01:00
Andreas Schildbach
88d05aca61 build.gradle: update H2 database to 1.3.176 2021-12-14 15:49:41 +01:00
Andreas Schildbach
c271a145aa build.gradle: update Jackson to 2.13.0 2021-12-14 15:37:14 +01:00
Andreas Schildbach
450052a50d build.gradle: update EasyMock to 4.3 2021-12-14 15:29:07 +01:00
Andreas Schildbach
c6157a7573 build.gradle: update BouncyCastle to 1.70 2021-12-14 11:50:49 +01:00
Andreas Schildbach
d036581344 build.gradle: update JUnit to 4.13.2 2021-12-14 11:45:39 +01:00
Andreas Schildbach
04378aa638 TransactionOutput: fix not resolving P2TR addresses in toString() 2021-11-22 12:16:15 +01:00
Andreas Schildbach
3caad70759 BIP32Test: new test vectors for hardened derivation with leading zeros 2021-11-18 09:35:59 +01:00
Andreas Schildbach
4ea8546cd3 Script: take into account the various witness length fields in getNumberOfBytesRequiredToSpend()
This (hopefully entirely) fixes the slight fee underspending for spends from P2WPKH.
2021-11-17 09:01:03 +01:00
Andreas Schildbach
26cc0db3e2 Wallet, Transaction: use Guava IntMath.divide() for the round-up divisions
The previous trick was confusing.
2021-11-17 08:51:21 +01:00
Marko Lazaric
964adb1e63 Script: add opcode name to disabled opcode exception message 2021-11-17 01:28:57 +01:00
Andreas Schildbach
cc64779e28 AUTHORS: update from git 2021-11-03 09:20:32 +01:00
Andreas Schildbach
3d5e9d6b70 org.bitcoin.production.checkpoints.txt: Refresh bundled checkpoints. 2021-10-24 21:02:09 +02:00
Andreas Schildbach
624284ea21 README.md: visually separate two command lines 2021-10-22 14:54:43 +02:00
Andreas Schildbach
0b5d40e49f Remove references to a specific testnet faucet. 2021-10-22 09:08:21 +02:00
Andreas Schildbach
fd70fe2a0e 0.17-SNAPSHOT 2021-10-10 12:09:32 +02:00
Andreas Schildbach
4b243a615a Script, SegwitAddress: detect taproot scripts and decode them into addresses 2021-10-09 16:57:09 +02:00
Andreas Schildbach
559f6a2711 ScriptTest: add P2WPKH and P2WSH testcases to getToAddress() 2021-10-06 20:27:49 +02:00
Andreas Schildbach
05dfddc98c make sure to use position(int), flip() and rewind() only from Buffer rather than MappedByteBuffer
Without these casts, on some JDKs it links against overloaded methods in MappedByteBuffer and Andoid doesn't have them.
2021-10-06 18:49:36 +02:00
Andreas Schildbach
e1aca6db53 build.gradle: add publishing section so that the publishToMavenLocal task can be used 2021-10-06 00:20:33 +02:00
Andreas Schildbach
78f44e68c4 build.gradle: update OkHttp to 3.14.9 2021-10-05 17:22:47 +02:00
Andreas Schildbach
89f851cf75 build.gradle: update protobuf-javalite to 3.18.0 2021-10-05 17:20:29 +02:00
Andreas Schildbach
183986c980 Bech32, SegwitAddress: Implement Bech32m format for v1+ witness addresses. 2021-09-29 23:40:57 +02:00
Andreas Schildbach
4dc4cf743d ECKey: Move compressPoint()/decompressPoint() helpers to LazyECPoint.compress()/decompress().
Deprecate the old methods.
2021-09-29 22:58:05 +02:00
Andreas Schildbach
98bc701c2b ECKey: Inline getPointWithCompression() helper. 2021-09-29 22:58:05 +02:00
Andreas Schildbach
484275678d WalletTool: Implement two coin selection options for sending, --select-addr and --select-output. 2021-09-29 22:46:59 +02:00
Andreas Schildbach
d3505b8949 WalletTool: When specifying ALL as a value of an output, use the correct BalanceType suitable for the value of --allow-unconfirmed. 2021-09-29 22:46:59 +02:00
Andreas Schildbach
5b785f8c9c README.md: update API requirement to Java 8 or Android 6 2021-09-29 21:38:48 +02:00
Andreas Schildbach
d0f6e0afca build.gradle: Update Guava to 31.0.1-android. 2021-09-29 19:13:39 +02:00
Andreas Schildbach
e9b42eae6d build.gradle: produce Java 8 bytecode for the core module
It will still only use the Java 7 API.
2021-09-28 16:38:31 +02:00
Andreas Schildbach
d6851edb2f build.gradle: Update OkHttp to 3.12.13. 2021-09-25 23:36:34 +02:00
Andreas Schildbach
2882d63616 build.gradle: Update BouncyCastle to 1.69. 2021-09-25 23:23:12 +02:00
Andreas Schildbach
47660f6418 build.gradle: migrate from protobuf-java to protobuf-javalite
This commit contains rather hard to review diffs to the protobuf test datasets in .txt format.
To aid the review, this Python script can be used to convert the data from the old to the new
format:

```
import sys

file = open(sys.argv[1])
outfile = open(sys.argv[1] + ".lite", "w")
line = file.readline()
lines = []

def sortAndPrint(group, removeLastLB=False, removeFirstLB=False):
    group.sort()
    if removeFirstLB and group[0] == "\n":
        group.remove("\n")
    for i in range(len(group)):
        if i == len(group) - 1 and removeLastLB:
            group[i] = group[i].rstrip()
        print(group[i], end="", file=outfile)

def sign32neg(value):
    if 0x80000000 <= value <= 0xFFFFFFFF:
        value &= 0x7FFFFFFF
        value = int(value)
        value = ~value
        value ^= 0x7FFFFFFF
    return value

def processPath(path):
    parts = path.rstrip().split(":")
    number = int(parts[1].lstrip())
    if number >= 0x80000000:
        number = sign32neg(number)
    return parts[0] + ": " + str(number) + "\n"

groupcount = 0
while len(line) > 0:
    if line.startswith("type:"):
        if len(lines):
            sortAndPrint(lines, removeFirstLB=groupcount==0)
            groupcount += 1
        lines.clear()
        lines.append(line)
    elif line.find("deterministic_key {") != -1:
        structure = line
        innerlines = []
        line = file.readline()
        while not line.startswith('}'):
            if line.find("path") != -1:  # preserve order of paths
                pathlines = processPath(line)
                line = file.readline()
                if line.startswith('}'):
                    innerlines.append(pathlines)
                    continue
                while line.find("path") != -1:
                    pathlines += processPath(line)
                    line = file.readline()
                innerlines.append(pathlines)
                if line.startswith('}'):
                    continue
            if line.startswith("  sigsRequiredToSpend"):
                line = line.replace("sigsRequiredToSpend", "sigs_required_to_spend")
            innerlines.append(line)
            line = file.readline()
        innerlines.sort()
        for l in innerlines:
            structure += l
        structure += line.rstrip() + "\n"
        lines.append(structure)
    elif line.find("path") != -1:  # preserve order of paths
        accountpathlines = processPath(line)
        line = file.readline()
        while line.find("path") != -1:
            accountpathlines += processPath(line)
            line = file.readline()
        lines.append(accountpathlines)
        lines.append(line)
    else:
        lines.append(line)
    line = file.readline()
print(file=outfile)
sortAndPrint(lines, removeLastLB=True)
file.close()
outfile.close()
```
2021-09-25 11:00:42 +02:00
Andreas Schildbach
f859f571ca BasicKeyChain, DeterministicKeyChain, WalletTool: use only protobuf API that is available also on protobuf-lite
This is meant to aid migration to protobuf-lite.
2021-09-24 11:33:06 +02:00
Sean Gilligan
da5202c3b7 GitHub Actions: add special case for Gradle 4.10/JDK11/Ubuntu
This is the “closest” Github Actions config we can get to our
target Debian build (Debian Bullseye/JDK11/Debian Gradle 4.4).
2021-09-23 21:37:30 +02:00
Sean Gilligan
744480be89 GitHub Actions: in the build matrix, update JDK 16 to JDK 17 LTS 2021-09-23 21:29:56 +02:00
Sean Gilligan
839139f8fb walletfx: Initialize scene earlier in MainController 2021-09-23 09:25:36 -07:00
Sean Gilligan
0f8cc09073 walletfx: Improve calculation of estimatedKeyDerivationTime
* Make the static field `estimatedKeyDerivationTime` private
* Refactor the calculation to a private, side-effect free function
* Replace `estimatedKeyDerivationTimeMsec()` with `initEstimatedKeyDerivationTime()`
** Don’t return a value that wasn’t unused anyway
** Make better use of CompletableFuture API
* Platform.runLater wasn’t needed because no JavaFX functions are called
2021-09-23 17:55:19 +02:00
Sean Gilligan
36243ca24e walletfx: factor out WalletApplication::startWalletAppKit 2021-09-23 07:30:15 -07:00
Sean Gilligan
188a0a7e45 walletfx: replace MainController.instance with app.mainWindowController() 2021-09-23 01:04:05 -07:00
Sean Gilligan
85725a18a6 walletfx: WalletApplication to improve encapsulation
* Make all public fields private and wrap with accessors
* Make `WalletAppKit` (was confusingly named `bitcoin`) field a member not a static
* Rename `bitcoin` to `walletAppKit`
2021-09-23 09:57:18 +02:00
Sean Gilligan
515a558ec2 walletfx: Extract MainWindowController abstract base class
* Extract `MainWindowController` from `wallettemplate.MainController`
* WalletApplication: `wallettemplate.MainController` with `MainWindowController`
2021-09-22 12:16:45 -07:00
Sean Gilligan
d1aa5e3d36 walletfx: Extract WalletApplication from WalletTemplate
* Extract abstract class `WalletApplication` from `WalletTemplate`
* `WalletTemplate` implements `loadController()` with resource names
* `MainController`: Add `scene` member and `scene()` method
2021-09-22 11:36:04 -07:00
Sean Gilligan
d8b6733c9c walletfx: Create WalletTemplate implementing AppDelegate
* Introduce `AppDelegate` class for delegating JavaFX `Application`
* Move almost all of `Main` to `WalletTemplate`

Rationale:

* The “template” JavaFX Application main class (`Main`) is now about 30 lines of code
* `Main` class allows easy switching between TestNet and MainNet (in fact it could become a command-line argument) and other configuration changes (e.g. `preferredOutputScriptType`)
* Prepares the way for the next steps of refactoring
2021-09-22 09:21:25 -07:00
Sean Gilligan
a7161eed8e walletfx: Move wallettemplate.controls to org.bitcoinj.walletfx 2021-09-21 07:56:17 -07:00
Sean Gilligan
9292bf3c43 walletfx: Refactor overlay, reduce usage of instance static globals
* OverlayController: rename init method, add rootController to params
* OverlayableStackPaneController: update to use updated initOverlay() method, 
          also pass this.getClass() into GuiUtils.getResource()
* GuiUtils.getResource(): replace reference to MainController.class with clazz parameter
* Main: Reduce visibility to “package” of 3 static globals
* MainController: Reduce visibility of `instance` static to “package”, initialize
                  addressControl by calling 2 initialization methods
* 4 other controllers: Update for OverlayController changes
* ClickableBitcoinAddress: OverlayController changes, eliminate use of Main.APP_NAME

Rationale:

* Decrease coupling
* Eliminate cross-package use of `Main` and `MainController` static globals
* Prepare for further refactoring — moving wallettemplate.controls package
  to org.bitcoinj.walletfx.controls
2021-09-21 09:39:08 +02:00
sqrrm
d6195d584e Wallet: clone transaction before committing
Problem: A transaction received from the network is added to all wallets
that find it relevant. If two wallets find the same transaction relevant
the same Transaction instance is added to both wallets.

Spending the outputs from this transaction can cause consistiency
issues, in particular if the outputs are spent in the same transaction,
as shown in WalletTest.oneTxTwoWallets. There are probably more issues
with having the same Transaction instance handled by two different
wallets.

Fix: Clone the transaction before adding it to the wallet.
2021-09-20 23:01:31 +02:00
Sean Gilligan
7178cd3f4f Secp256k1Context: replace AccessControlException
AccessControlException is deprecated for removal in JDK 17.

its parent classes are:

`AccessControlException` <- `SecurityException` <- `RuntimeException`

It can be replaced with its parent `SecurityException` which is not deprecated and will behave almost identically in this one place where it is used.
2021-09-20 22:34:53 +02:00
Sean Gilligan
93f0bb7a54 walletfx: Extract OverlayableStackPaneController
* Extract abstract class OverlayableStackPaneController from MainController
* Rename OverlayWindowController to OverlayController (Window was misleading)

Rationale:

1. Overlay functionality is independent of MainContoller’s wallet functions
2. Increases reusability of classes in module
3. Prepares for further refactoring
2021-09-20 12:20:38 -07:00