3
0
mirror of https://github.com/Qortal/altcoinj.git synced 2025-02-18 21:25:49 +00:00

255 Commits

Author SHA1 Message Date
Mike Hearn
630b36c5c8 Payment channels: tweaks to channel resume behaviour.
Don't create a new channel automatically when the client wants to resume but there's already an open connection using that contract. Instead, disconnect the other client. This fixes unintuitive behaviour that could occur if a TCP connection silently died and the server didn't notice.
2013-07-25 18:11:53 +02:00
Mike Hearn
4f92c24dea Payment channels: stop clients attempting to resume empty channels. 2013-07-25 15:26:10 +02:00
Matt Corallo
1e69d2b0dd Add emptyWallet option to SendRequest+tests and random typo fixes 2013-07-22 15:27:24 +02:00
Mike Hearn
dcf04f6cb6 Payment channels: inline a superfluous misnamed method on StoredServerChannel and rename getState to getOrCreateState. 2013-07-19 15:55:30 +02:00
Mike Hearn
4f9bc98e97 Payment channels: Re-order c'tor of StoredPaymentChannelClientStates.
This makes it consistent with the server side and put the listener last. It's easier to read this way when an anonymous inner class is used.
2013-07-19 15:55:30 +02:00
Mike Hearn
da0d6c37a2 Payment channels: some bugfixes to resume behaviour.
Don't deserialize channels as active. Deserialize keys as compressed, not uncompressed.
2013-07-19 15:55:29 +02:00
Mike Hearn
7d75e747e0 Payment channels: Fix a dumb bug that caused the negotiated channel size to be wrong. Add a test. 2013-07-17 21:41:08 +02:00
Matt Corallo
1d7f2eb00b Fix channel client state saving to save earlier (and be secure) 2013-07-16 14:59:21 +02:00
Mike Hearn
719a786db1 Eliminate support for parsing negative or too large amounts in Utils.toNanoCoins. Add tests for out of range URI amounts. Resolves issue 407. 2013-07-11 17:33:31 +02:00
Mike Hearn
d3eab06dba Make BitcoinURIParseException checked so you can't forget it, and catch/rethrow ArithmeticErrors when parsing the value field.
Add more nullity annotations.
2013-07-11 16:52:50 +02:00
Mike Hearn
99f32b16af Introduce UnreadableWalletException and make WalletProtobufSerializer throw it in all cases where there's a problem reading the wallet. Resolves issue 415. Resolves issue 416. 2013-07-11 16:04:00 +02:00
Mike Hearn
d2232ed4aa Fix hdw unit tests after I broke them. 2013-07-11 14:19:48 +02:00
Matt Corallo
4b4405b7bc Check for double-spend of contract by force-adding it to wallet 2013-07-11 14:15:48 +02:00
Mike Hearn
86bd974958 Move HD wallets code into plain crypto package. 2013-07-11 13:45:12 +02:00
Mike Hearn
000d81d54f Rename ExtendedHierarchicKey to DeterministicKey. Add annotations and rewrite a bit of code to satisfy static analysis. 2013-07-11 13:41:46 +02:00
Mike Hearn
0385ab34e5 Add copyrights, remove dead code, and fix some minor static analysis warnings.
Also remove a unit test that was just testing bouncy castle.
2013-07-11 11:59:31 +02:00
matija.mazi@gmail.com
c3fd83e511 Add support classes for hierarchical deterministic wallets (BIP 32)
Code from Matija Mazi. HD wallets allow you to derive keys from a single
root key, giving various useful features:

- Make a backup once and it's good forever (for your keys only of course)
- You can break off parts of the tree and give it to other people,
  they can then generate new keys to send you money without any
  involvement by you (better privacy+security for watching wallets)
- You can delegate sub-trees to other people as a form of access control.
2013-07-11 11:40:33 +02:00
Mike Hearn
5219a42df9 Wallet: refactor saving code into a separate class that uses a Java scheduled executor rather than the messy and likely buggy custom threading code. Synchronously save the wallet on way more codepaths, now we only do write coalescing for new best block notifications. 2013-07-10 16:46:56 +02:00
Matt Corallo
b51485ca23 Peer Bloom filter generation -> new PeerFilterProvider interface 2013-07-10 15:59:51 +02:00
Matt Corallo
e6965d0217 Always accept time-locked txn we create, make refund tx source self 2013-07-10 15:53:59 +02:00
Mike Hearn
d92314dd18 Peer/Group: Clear some static analysis warnings related to the (buggy) optionality of the block chain and some threading issues. 2013-07-10 15:32:20 +02:00
Mike Hearn
8a74b3da2c Minor logging fixes. Resolves issue 423. 2013-07-09 14:57:20 +02:00
Mike Hearn
f473267da2 Exception handling: provide a global variable in Threading that receives all unhandled exceptions from all framework threads.
Replaces the now removed PeerEventListener.onException() callback.
2013-07-09 14:47:38 +02:00
Matt Corallo
09752848bb Announce transactions to wallet in order even from FilteredBlocks 2013-07-09 13:05:35 +02:00
Mike Hearn
2537ff47b5 Extend executor-specific event handlers to PeerGroup and Peer. Rename Threading.sameThread to Threading.SAME_THREAD 2013-07-05 10:54:21 +02:00
Mike Hearn
cdd1c5e38a Change onKeyAdded to be onKeysAdded that takes a list, and run it in the user thread. 2013-07-05 10:54:20 +02:00
Mike Hearn
0907a3852b Add a test to ensure that wallet listeners that throw exceptions don't prevent the others from running. 2013-07-05 10:54:20 +02:00
Mike Hearn
a28cb5c59a Don't mark transactions that have just been completed as pending, and then fix a stupid efficiency bug in AbstractBlockChain that was revealed by the change. 2013-07-05 10:54:19 +02:00
Mike Hearn
6b7d653614 Major rework of how confidence listeners are called:
* API change: TransactionConfidence.Listener now takes a reason enum describing the general class of change.
* Confidence listeners are now invoked in the user code thread as well, thus eliminating any chance of unexpected re-entrancy.
* The wallet batches up confidence changes and executes them all at the end of major operations, avoiding confusing intermediate transitions that could occur in the previous design.
* Much code has been simplified as a result and it's now harder to screw up.
2013-07-05 10:54:19 +02:00
Mike Hearn
5de80dfedf Introduce a user code thread which is used for running event listeners.
This ensures that when user provided event listeners are invoked, we're not holding any locks at that time and thus event listeners can do whatever they want with no risk of accidental inversions or deadlocks. A utility method is available to wait for all preceding events that were triggered to complete, which is useful for unit tests. Reimplement how balance futures work in order to avoid the wallet registering an event handler on itself, this means you cannot accidentally deadlock yourself by running getBalanceFuture().get() inside an event listener.

Future changes will modify how transaction confidence listeners are run to work the same way, and make other kinds of event listener run in the user code thread as well.

The user code mechanism is usable with any executor, opening up the possibility of automatically relaying event listeners into GUI threads for some kinds of apps.
2013-07-05 10:54:18 +02:00
Mike Hearn
b87879fd42 Rename the Locks class to Threading in preparation for more stuff. 2013-07-05 10:54:18 +02:00
Mike Hearn
4265e9c692 Optimize imports in payment channels. 2013-07-03 15:18:20 +02:00
Mike Hearn
2d84b3c27b Deasymock PaymentChannelStateTest 2013-07-03 14:49:43 +02:00
Mike Hearn
a5940282d0 Rewrite ChannelConnectionTest to avoid easyMock, duplication and busy wait loops. 2013-07-02 11:55:37 +02:00
Matt Corallo
4908c241f7 Implement server-side and client-side payment channel protocols.
This implements micropayment payment channels in several parts:
 * Adds PaymentChannel[Server|Client]State state machines which
   handle initialization of the payment channel, keep track of
   basic in-memory state, and check data received from the other
   side, based on Mike Hearn's initial implementation.
 * StoredPaymentChannel[Client|Server]States manage channel
   timeout+broadcasting of relevant transactions at that time,
   keeping track of state objects which allow for channel
   resume, and are saved/loaded as a WalletExtension.
 * Adds PaymentChannel[Client|Server] which manage a connection
   by getting new protobufs, generating protobufs for the other
   side, properly stepping the associated State object and
   ensuring the StoredStates object is properly used to save
   state in the wallet.
 * Adds PaymentChannel[ClientConnection|ServerListener] which
   create TCP sockets to each other and use
   PaymentChannel[Client|Server] objects to create/use payment
   channels.

The algorithm implemented is the one described at
https://en.bitcoin.it/wiki/Contracts#Example_7:_Rapidly-adjusted_.28micro.29payments_to_a_pre-determined_party
with a slight tweak to use looser SIGHASH flags so that the
Wallet.completeTx code can work its magic by adding more inputs if
it saves on fees.

Thanks to Mike Hearn for the initial state machine implementations
and all his contracts work and Jeremy Spilman for suggesting the
protocol modification that works with non-standard nLockTime
Transactions.
2013-06-27 14:15:49 +02:00
Matt Corallo
3d74934b6f Add a length-prefixed protobuf connection server/client.
This forms the base for payment channel network connections, with
a simple single-threaded server which accepts new connections, a
simple single-threaded client which makes a single connection to a
server, and a ProtobufParser which handles data generated by a
connection, splits them into Protobufs and provides a reasonable
interface to users who wish to create/accept protobuf-based
connections.
2013-06-27 14:15:44 +02:00
Mike Hearn
c4572696b1 Some fixes to wallet serialization:
1) Switch the outpoint index field to be uint32 and fix isCoinBase() to consider the unsigned versions only. Resolves issue 420.
2) Regenerate the protobuf and fix an out of date definition in WalletProtobufSerializer that it exposed.
2013-06-27 14:01:02 +02:00
Mike Hearn
7f68923529 KeyCrypterScryptTest: Clear static analysis warnings and port to junit 4. 2013-06-24 17:52:09 +02:00
Mike Hearn
fbd767320c Delete the long since obsolete DiskBlockStore. 2013-06-20 15:10:47 +02:00
Mike Hearn
4d4768ba8c Fixup last commit 2013-06-19 15:34:05 +02:00
Mike Hearn
354446dd40 Add new helper methods to Transaction[Signature]
Add a method for signing a given input and use it.
Convert some code that was working with raw bytes to use TransactionSignature.
Rename Transaction.hashTransactionForSignature to just hashForSignature.
General API tweaks and cleanups.
2013-06-19 11:30:27 +02:00
Mike Hearn
2149fea7e6 TODO: KeyCrypterScryptTest sometimes fails because key crypto is still relying on padding bytes in some cases. 2013-06-18 17:35:35 +02:00
Matt Corallo
d6fec93be3 Add canonical signature/pubkey methods to ECKey and tests therefor. 2013-06-17 11:07:55 +02:00
Mike Hearn
c91e811fc7 Make SendRequest.completed back to being private. 2013-06-12 17:26:12 +02:00
Mike Hearn
87ab410a2f Make feePerKb apply to the first kilobyte as well. 2013-06-12 17:16:07 +02:00
Mike Hearn
c9f0ecae3d Delete 3 fee tests that weren't adding any coverage and Matt can't remember what they're for. 2013-06-12 16:21:02 +02:00
Mike Hearn
20049fb9f8 Use RegTestParams.get() 2013-06-12 11:11:59 +02:00
Mike Hearn
46914b12b7 Make completeTx once again return a bool (pending replacement with an exception), and update the fee field with the calculated fee. 2013-06-11 11:40:40 +02:00
Mike Hearn
afaebd062a Rename enforceDefaultClientFeeRelayRules to ensureMinRequiredFee which is shorter. 2013-06-10 16:02:38 +02:00
Mike Hearn
9a389c9475 Move enforceDefaultClientFeeRelayRules into SendRequest instead of being a parameter.
Make WalletTool enforce the rules instead of ignoring them (this was an oversight).
2013-06-10 15:51:34 +02:00