Commit Graph

1303 Commits

Author SHA1 Message Date
Mike Hearn
a051afe224 Payment channels: default server should not attempt to destroy the [TCP] connection after sending a CLOSE, let the client do that.
This resolves some complicated state management issues in some kinds of client (like on Android).  It's also just generally a part of the work to divorce the notion of settling a channel from closing underlying protocol connections.
2013-10-10 14:23:57 +02:00
Mike Hearn
4b48dbfda9 Payment channels: plumb through the actual amount of value sent on a channel, as it can sometimes be different to how much was requested. 2013-10-09 18:15:04 +02:00
Mike Hearn
6625c9a2cb Use earliest key time minus a week for setting fast catchup time and selecting a checkpoint.
This handles clock drift both in the block headers and possibly wrong times in the users clock (broken timezone, etc).

Resolves issue 460.
2013-10-08 11:49:53 +02:00
Mike Hearn
6c8a8aa691 Threading: resolve a race in the unit tests: if the user thread wasn't initialised, don't crash trying to test if we're on it. 2013-10-08 11:47:06 +02:00
Mike Hearn
8beb26c421 ScriptTest: more helpful errors. 2013-10-07 18:09:47 +02:00
Mike Hearn
1f7dd9495e Script: clone tx before performing correctlySpends check. This prevents thread safety issues and corrupted transactions if validation fails. 2013-10-07 18:09:38 +02:00
Mike Hearn
9953bbe5cb TransactionOutput: tighter checks on values when constructing (don't allow negative values, etc). 2013-10-07 17:58:29 +02:00
Mike Hearn
b09c4cbe09 TransactionInput: better toString 2013-10-07 17:57:33 +02:00
Mike Hearn
d0be53f0a1 HD wallets: Fix method names that refer to SHA256 instead of SHA512.
Resolves issue 449.
2013-10-06 17:19:18 +02:00
Mike Hearn
683c6170d5 EncryptedPrivateKey: Fix doc typo and remove redundant imports. 2013-10-06 17:13:54 +02:00
Mike Hearn
60ba7120db WalletAppKit: Allow setting of the user agent. 2013-10-06 17:12:40 +02:00
Mike Hearn
6342af0913 Payment channels: protocol tweak - when the client sends a CLOSE, the server sends a CLOSE back that contains the final negotiated contract, so it can be inserted into the wallet without needing to wait for a network broadcast (this is useful if the client does not have internet connectivity at that point). 2013-10-04 17:10:42 +02:00
Mike Hearn
b9aa1e4d1e Payment channels: minor comment change and simplification. 2013-10-02 14:22:54 +02:00
Mike Hearn
14dae15150 ECKey: don't crash when signing non-ASCII text 2013-10-02 10:39:58 +02:00
Mike Hearn
e6250e575f ScriptBuilder: Add a varargs utility 2013-10-02 10:39:58 +02:00
Mike Hearn
bbe3441128 Fix a bad comment in TransactionSignature. 2013-10-02 10:39:57 +02:00
Mike Hearn
02416c97fa Payment channels: bug fixes and improved close behaviour.
The client now has a new CLOSED state, which is entered once a CLOSE has been sent and the close transaction (final contract) has been broadcast onto the P2P network and entered the wallet. Once received, the hash of the close tx is stored in the wallet - the tx is itself already in the wallets spent pool because it connects to the output of the multisig tx. After seeing three confirmations of the close TX the state is deleted from the client wallet for good.

 Together these changes resolve a bug/design issue in which if a channel was opened, then closed, then another channel was opened but not closed, then a third attempt to connect to the server was made, the client would try to resume the first closed channel. That would fail because the server already deleted its state object and result in new channels being created even though the second could have been resumed. By tracking the fact that the channel was closed, it can be skipped when considering what channel to resume.
2013-09-30 14:35:25 +02:00
Mike Hearn
38dadf4667 TransactionConfidence: use the new/standard event registration scheme to allow control of threading. 2013-09-30 14:35:25 +02:00
Mike Hearn
88abe3faa3 PeerGroup: fix usage of _ as identifier. 2013-09-30 14:35:24 +02:00
Mike Hearn
ee206537d7 FullPrunedBlockChain: add a runScripts property, defaulting to true. Resolves issue 463. 2013-09-30 14:11:33 +02:00
Mike Hearn
e3bcb49c4c Better use of annotations in Block 2013-09-30 14:11:12 +02:00
Mike Hearn
e4a5c6bbc9 FullPrunedBlockChain: move a utility function for adding a signed input to Transaction. 2013-09-30 11:25:47 +02:00
Mike Hearn
e0b50c374e FullPrunedBlockChain: fix a spelling error 2013-09-30 10:55:28 +02:00
Mike Hearn
f0b258b40d Wallet: add a bit more logging to make output during chain splits less confusing. 2013-09-23 17:03:18 +02:00
Mike Hearn
059b896062 Wallet: another re-org fix. 2013-09-23 16:53:36 +02:00
Mike Hearn
60688752c9 Delete BoundedOverheadBlockStore.
Although it served us well for a while, it was never actually bounded overhead. Some of its code lives on in SPVBlockStore, which replaces it.
2013-09-23 15:33:37 +02:00
Mike Hearn
e67b3e540e Remove usage of some deprecated stuff. 2013-09-23 15:33:36 +02:00
Mike Hearn
51c10a3857 Upgrade SLF4J 2013-09-23 15:33:34 +02:00
Mike Hearn
a59e9d4073 Wallet template: use Aqua style on MacOS.
The indeterminate progress bar is a bit buggy in this version but the rest looks correct (for Mountain Lion).
2013-09-22 15:01:40 +02:00
Mike Hearn
6fa719df2a Wallet template: some improvements to crash handling. 2013-09-22 15:01:10 +02:00
Mike Hearn
896142504c Wallet template: nicer message if the app is already running. 2013-09-21 22:08:17 +02:00
Mike Hearn
c587f2c442 WalletAppKit: we need a stupid hack to make checkpointing and payment channels work together.
Apparently this simple utility class might start to need unit tests now!

To resolve the hack, we need to resolve some circularity in construction: to add the payment channels wallet extensions requires the peerGroup and wallet object to be constructed, but to construct the peerGroup requires the chain+store and to checkpoint a fresh store requires the wallet. Catch 22! We resolve by loading a temp wallet and then throwing it away, which is inefficient for a large wallet that's being replayed but normally shouldn't matter.

Once the payment channels stuff is more mature and tested, we might want to just fold it into the core wallet format.
2013-09-21 21:03:36 +02:00
Mike Hearn
324f603cbe Upgrade to protobuf 2.5 2013-09-21 20:08:43 +02:00
Mike Hearn
c861ecdf2a WalletAppKit: Fix stupid ordering bug I introduced that affects apps that use payment channels.
In future, this stuff should probably be enabled in the wallet by default.
2013-09-21 19:53:52 +02:00
Mike Hearn
1f52b75ad9 Move AllowUnconfirmedCoinSelector out into wallet package. 2013-09-20 17:38:41 +02:00
Mike Hearn
628aba15f8 Add some unit tests for default coin selector that are more fine grained than what the WalletTest code provides. 2013-09-20 17:36:01 +02:00
Mike Hearn
2b4595c4f0 Wallet: Split DefaultCoinSelector out into a top level class in the wallet package. 2013-09-20 16:50:25 +02:00
Mike Hearn
c366c5fa44 Wallet: Split CoinSelection out into a top level interface in the wallet package. 2013-09-20 16:47:42 +02:00
Mike Hearn
c4405d3ee7 Wallet: Split CoinSelector out into a top level interface in the wallet package. 2013-09-20 16:45:31 +02:00
Mike Hearn
efb6349a50 Wallet template: the appkit enables autosaving automatically, so it's unnecessary to repeat that. 2013-09-20 15:32:40 +02:00
Mike Hearn
7455135d3d Wallet: use a single hashmap to track all transactions, then use it in receive to re-canonicalize the transactions.
Long story short, I'm a shitty programmer it seems. The Wallet will at some point be modified to track just bags of outputs derived from Transaction objects, and Transactions/Blocks will become immutable. At that point there won't be any confusion between mutable data associated with the deserialised objects.

Resolves issue 453.
2013-09-20 15:24:03 +02:00
Mike Hearn
ffb7c57d7f Make HDKeyDerivation.createMasterPrivKeyFromBytes public. Resolves issue 452. 2013-09-18 14:38:37 +02:00
Mike Hearn
90942041e7 Move TestUtils and TestWithWallet into the core package so they can be used by third party code in their unit tests. 2013-09-18 12:21:07 +02:00
Mike Hearn
baeaa64201 Payment channels: more informative exception message if you forget to add the client wallet extension. 2013-09-18 12:20:50 +02:00
Mike Hearn
85554f511f Take wallettemplate out of the top level POM. Resolves issue 451. 2013-09-17 17:44:20 +02:00
Mike Hearn
9bc91ec2e5 Payment channels: Don't swallow ValueOutOfRangeException during initiate.
It indicates an empty wallet and should be propagated to the channel open future or the client user, so they know they have insufficient money.
2013-09-17 16:31:56 +02:00
Mike Hearn
d4786acb14 Move MockTransactionBroadcaster into utils so third party code can use it in its own tests. 2013-09-17 12:37:58 +02:00
Mike Hearn
8d839ae5ad Support creating spends without all the private keys.
Dummy signatures are inserted instead. Also, simplify Transaction.toString().
2013-09-16 15:54:32 +02:00
Mike Hearn
81d76a76c3 Payment channels: more logging. 2013-09-16 11:39:38 +02:00
Mike Hearn
26f2d13581 Template app: move alert window controller to the right package. 2013-09-16 11:38:43 +02:00