3
0
mirror of https://github.com/Qortal/altcoinj.git synced 2025-01-31 15:22:16 +00:00
Commit Graph

1305 Commits

Author SHA1 Message Date
Mike Hearn
3185923d4a Add @Override annotations to PeerEventListener. 2013-07-05 10:54:20 +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
dd83d55df4 Add JavaDocs for TransactionConfidence.Listener.Reason 2013-07-05 10:54:19 +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
1296074e8f Add another Block c'tor. Resolves issue 424. 2013-07-04 12:12:52 +02:00
Mike Hearn
4265e9c692 Optimize imports in payment channels. 2013-07-03 15:18:20 +02:00
Matt Corallo
715e3596d2 Fix another deadlock when storing channel in wallet 2013-07-03 14:53:59 +02:00
Matt Corallo
8fd8683461 JavaDoc in StoredServerChannel + updateValueToMe s/public// 2013-07-03 14:53:54 +02:00
Matt Corallo
c36e725d7d Use Reentrant locks in a few more places, fix deadlocks(s) on close 2013-07-03 14:53:46 +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
Mike Hearn
93abc34e08 Narrow PeerGroup -> TransactionBroadcaster in the channels code. 2013-07-01 13:17:57 +02:00
Mike Hearn
ec51162ae4 Correct PaymentChannelServerListener class javadoc. 2013-07-01 13:13:29 +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
Matt Corallo
65202b8ab5 Add support for WalletExtensions to WalletAppKit. 2013-06-27 14:15:43 +02:00
Matt Corallo
880b413b24 Add a TransactionBroadcaster abstraction to PeerGroup. 2013-06-27 14:15:43 +02:00
Matt Corallo
7cd38bc77a Wallet: Enable autoSaveListener for 0-delay autosave. 2013-06-27 14:15:42 +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
0c00b24bbc Disable native secp256k1 so DCE can delete the relevant code entirely. 2013-06-24 17:48:58 +02:00
Mike Hearn
fbd767320c Delete the long since obsolete DiskBlockStore. 2013-06-20 15:10:47 +02:00
Mike Hearn
85cd4499f9 Delete NamedSemaphores. It's something that was introduced by Miron
and looks like a broken attempt to implement file locking. Neither
store that tried to use it is supporte anymore so don't bother replacing
with real file locks.
2013-06-19 15:43:18 +02:00
Mike Hearn
4d4768ba8c Fixup last commit 2013-06-19 15:34:05 +02:00
Mike Hearn
ad3bb53327 Allow TransactionInput.verify to take an output as a parameter. 2013-06-19 13:08:09 +02:00
Mike Hearn
f98088221e Make TransactionOutput.getMinNonDustValue() more documented and provide a simpler function for it. 2013-06-19 11:30:27 +02:00
Mike Hearn
215a131f8b Typo fix in ECKey 2013-06-19 11:30:27 +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
57c1ecbd01 Refactor some code in ECKey into ECKey.ECDSASignature, and introduce a new TransactionSignature class.
It extends ECDSASignature and adds support for holding and working with sighash flags. Make some code use it instead of raw byte handling.
2013-06-19 11:30:26 +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
Mike Hearn
5be443c2d3 Clear some minor static analysis warnings. 2013-06-18 16:33:56 +02:00
Mike Hearn
8b8bf50144 Version 0.10-SNAPSHOT 2013-06-18 16:33:06 +02:00
Mike Hearn
bfbc9c0cf6 Don't use my DNS seed. It's not running on secure hosting so I shut it down. 2013-06-17 16:11:20 +02:00
Mike Hearn
4494d34be0 Use correct private key header byte in reg test mode. 2013-06-17 15:43:57 +02:00
Mike Hearn
960bf2626b DumpedPrivateKey: Verify that the final byte is set to 1. Resolves issue 411. 2013-06-17 15:43:46 +02:00
Mike Hearn
332967f0bd PingService: allow usage of regtest mode, always include a fee in the bounce transaction, don't use from addresses anymore. 2013-06-17 14:57:02 +02:00
Mike Hearn
d8a0cc59c1 Re-order ECKey imports. 2013-06-17 14:28:48 +02:00
Matt Corallo
be88a05c93 Make TransactionOutput.getMinNonDustOutput exact. 2013-06-17 11:07:55 +02:00
Matt Corallo
d6fec93be3 Add canonical signature/pubkey methods to ECKey and tests therefor. 2013-06-17 11:07:55 +02:00
Matt Corallo
ec3708d159 Introduce SIGHASH_ANYONECANPAY_VALUE to replace 0x80 constants. 2013-06-17 10:59:25 +02:00
Matt Corallo
1e24dea569 Fix wallet extensions by adding setKeyCrypter and using auto-save. 2013-06-17 10:59:15 +02:00
Matt Corallo
e2e72a275d Fix deserialization of wallet transactions with a far-out locktime. 2013-06-17 10:59:06 +02:00
Matt Corallo
63be9b705b Make all addOutputs and addInputs return the newly added in/output. 2013-06-17 10:59:00 +02:00
Matt Corallo
5f1a9c246b Add Wallet.maybeCommitTx to not throw when tx is already in pending 2013-06-14 15:04:31 +02:00
Mike Hearn
74110a12d9 Note that a tx of exactly 1000 bytes may overpay. 2013-06-12 17:42:18 +02:00
Mike Hearn
c91e811fc7 Make SendRequest.completed back to being private. 2013-06-12 17:26:12 +02:00