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

891 Commits

Author SHA1 Message Date
Mike Hearn
2ccfd3fd48 Make MemoryBlockStore store only a rolling window of the last 5000 blocks. Fixes BuildCheckpoints which was trying to store every block header and running out of heap space. 2013-09-15 20:24:52 +02:00
Mike Hearn
3ea3735d4f Allow overriding of the default USER_THREAD executor so all events can be dispatched to a selected thread easily. 2013-09-15 20:24:52 +02:00
Mike Hearn
82037f8f96 PeerGroup: correct logic for setting ver packet pre-filtering relay flag. 2013-09-10 11:42:51 +02:00
Mike Hearn
eaeab32400 Make RegTestParams use testnet addresses, to follow sipa's upstream change. 2013-09-10 10:27:16 +02:00
Mike Hearn
11ab82c91e Payment channels: fix unit test and add a log line. 2013-09-05 15:17:15 +02:00
Mike Hearn
24a5c05546 Payment channels: allow usage of unconfirmed coins for building a contract, as the risk is low (they're micropayments anyway). 2013-09-05 15:16:58 +02:00
Mike Hearn
bf228cce34 Wallet: comment for AllowUnconfirmedCoinSelector.get() 2013-09-05 15:10:50 +02:00
Mike Hearn
38119b9355 Payment channels: Better comments and logging. 2013-09-05 12:42:33 +02:00
Mike Hearn
273acbdccd Payment channels: Take out unnecessary {} from log messages. 2013-09-04 13:27:17 +02:00
Mike Hearn
1d454c03f3 Suppress annoying and useless warning. 2013-09-03 14:24:18 +02:00
Mike Hearn
e05abe150b Wallet: when "emptying" the wallet, only actually empty out the coins that would be considered selectable by the default coin selector.
By default that means unconfirmed coins won't be emptied, to avoid the empty tx becoming dependent on a tx that may never confirm.

 Resolves issue 438.
2013-08-15 12:31:54 +02:00
Matt Corallo
cf23e18f23 MessageWriteTarget->interface, writeBytes throws IOException 2013-08-13 17:13:58 +02:00
Matt Corallo
edd0a0907c Clarify PeerEventListener JavaDocs a bit 2013-08-13 17:13:29 +02:00
Matt Corallo
5ef59b9ae1 Unimplemented bitcoinSerializeToStream -> log error, not debug 2013-08-13 17:13:15 +02:00
Matt Corallo
1a5348c534 Implement ListMessage.equals() 2013-08-13 17:12:57 +02:00
Matt Corallo
7011d68165 Implement some (de)serialization (so we can roundtrip msgs in test)
Implements deserialization for getblocks/getheaders and supports
FilteredBlock entries in ListMessage (for getdata).
Implements serialization for FilteredBlock, HeadersMessage, and
PartialMerkleTree.
2013-08-13 17:12:32 +02:00
Matt Corallo
a724bcada5 Mark receivePending(List<Tx> dependencies) @Nullable 2013-08-13 17:11:34 +02:00
Matt Corallo
98787909da Fix typo 2013-08-13 17:11:19 +02:00
Matt Corallo
8448296f5f Abstract out SelectionKey processing and logic from NioServer. 2013-08-13 17:10:21 +02:00
Matt Corallo
9980903572 Make Protobuf{Server,Client} more generic. 2013-08-13 17:09:14 +02:00
Matt Corallo
146a6dd37e Add payment channel server native event handler wrappers 2013-08-13 15:06:18 +02:00
Matt Corallo
7074d52fbb Add test-case for manually-added transactions that appear in blocks 2013-08-13 15:05:04 +02:00
Mike Hearn
3857b0ae05 Sync script test files with bitcoin upstream. 2013-08-13 11:44:46 +02:00
Mike Hearn
08afe9044d Move verifier XML around. 2013-08-11 16:45:07 +02:00
Mike Hearn
6dd907614c Wallet: support for key rotation.
Key rotation allows you to specify a timestamp, and any money controlled by any keys created before that time will be automatically respent to keys created after it.
2013-08-11 16:33:36 +02:00
Mike Hearn
3ca2cd0345 PeerGroupTest: Fix a race. 2013-08-08 14:23:23 +02:00
Mike Hearn
19d4887253 Wallet: allow SendRequests to override the default coin selector. 2013-08-08 14:23:23 +02:00
Mike Hearn
33f48d3e22 PeerGroup/Wallet: give the wallet a reference to a transaction broadcaster, so it can make its own transactions and broadcast them outside the context of a user initiated spend.
Later, we can change the mechanism used to broadcast pending transactions so the wallet does that itself.
2013-08-08 14:23:23 +02:00
Mike Hearn
6b1c208f1e Wallet: Minor nullity annotation and param genericity tweaks. 2013-08-08 11:19:49 +02:00
Matt Corallo
ca15e611ca Fix manually-added transactions that make it into blocks. 2013-07-31 13:05:03 +02:00
Mike Hearn
c2cff6df41 Add a remark to the BloomFilter javadocs about when you would want to use full-match filters. 2013-07-30 16:05:04 +02:00
Matt Corallo
41d2a8c62d Fix block tests 2013-07-30 15:52:00 +02:00
Matt Corallo
a7ec6a1db3 Implement mempool-test support in BitcoindComparisonTool 2013-07-30 15:41:31 +02:00
Matt Corallo
60220aa62d InventoryItem.hashCode()
Conflicts:
	core/src/main/java/com/google/bitcoin/core/InventoryItem.java
2013-07-30 15:41:21 +02:00
Matt Corallo
d88d421de6 Make BloomFilter support match-all filters better 2013-07-30 15:40:47 +02:00
Mike Hearn
2808b062d7 Version 0.11-SNAPSHOT 2013-07-30 14:47:39 +02:00
Matt Corallo
df47993e3d Add some comments for stateless protocols. 2013-07-30 14:47:08 +02:00
Mike Hearn
8016ee8418 Wallet: explicitly note in the completeTx javadoc that it signs the added inputs. 2013-07-29 19:06:21 +02:00
Mike Hearn
bbac0abf9e Wallet: more @Nullable annotations and generalise the sendCoins argument to take any broadcaster. 2013-07-29 18:35:49 +02:00
Mike Hearn
f821207a80 WalletAppKit: add a new override-able method that lets you customise objects after they were created, but before chain download starts. 2013-07-29 17:18:48 +02:00
Mike Hearn
872967e96e WalletEventListener: Remove obsolete references to being called on Peer threads from the javadocs. 2013-07-29 17:18:21 +02:00
Mike Hearn
da2a321c23 Wallet: add a missing @Nullable annotation. 2013-07-29 17:17:58 +02:00
Mike Hearn
016837a593 Wallet: expose the calculateAllSpendCandidates method as public. 2013-07-29 13:27:49 +02:00
Mike Hearn
86f68c8ffa Transaction: add a bit more info to constant field javadocs. 2013-07-29 12:50:02 +02:00
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
cf4c469e6e TransactionInput: treat duplicate connection attempts as a success. 2013-07-25 15:30:49 +02:00
Mike Hearn
a5ed2d63d3 Payment channels: Relabel stored client channel toString a bit. 2013-07-25 15:29:47 +02:00
Mike Hearn
4aaac4f105 AbstractBlockChain: slight tweak to logging of filtered blocks to make it less confusing. 2013-07-25 15:26:26 +02:00
Mike Hearn
4f92c24dea Payment channels: stop clients attempting to resume empty channels. 2013-07-25 15:26:10 +02:00
Mike Hearn
70590dac16 Payment channels: add wallet printouts of the contents of the extensions. 2013-07-25 15:09:48 +02:00
Mike Hearn
d3842cc0f4 Wallet: Print Wallet extensions in toString() and make tx printouts optional. 2013-07-25 14:11:42 +02:00
Mike Hearn
89b6b54d24 Payment channels: better logging in client state. 2013-07-25 11:28:45 +02:00
Mike Hearn
9e78268813 Wallet: don't crash if receivePending is called twice with the same tx, even if the override flag is on. 2013-07-24 16:17:47 +02:00
Mike Hearn
51d717e93a Payment channels: Make the ProtobufParser timer daemon and labelled. 2013-07-24 14:58:33 +02:00
Mike Hearn
00bc4e30ee PeerGroup: add a todo about the pinging thread. 2013-07-24 14:53:34 +02:00
Mike Hearn
52b478a6f8 PeerGroup: Ignore an IllegalStateException from the ping timer that can be thrown occasionally during a shutdown race. 2013-07-24 14:52:08 +02:00
Mike Hearn
67f3605570 Transaction: format date based time locks correctly. 2013-07-24 14:45:42 +02:00
Mike Hearn
2a635317c3 WalletAppKit: Configure the peergroup with candidate peers before adding wallet extensions, as payment channel state can attempt to broadcast a transaction as soon as the state is loaded/instantiated. This ensures the number of min peers required for broadcast is correct at that point. 2013-07-24 13:56:12 +02:00
Mike Hearn
a1daaa73be PeerGroup: Don't allow attempts to broadcast to zero peers. 2013-07-24 13:55:20 +02:00
Mike Hearn
81a9e1e893 Peer: drop out of fast catchup mode when reaching the top of the chain.
This bug could cause problems if you sync a wallet containing no keys, and then a chain fork happens (you won't follow the fork).
2013-07-23 20:10:57 +02:00
Mike Hearn
2acbd55d47 NetworkParameters: Remove ID_PRODNET. Resolves issue 430. 2013-07-22 18:12:36 +02:00
Mike Hearn
adea4f9479 Wallet: log completed transactions completely. 2013-07-22 17:22:13 +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
87ad8f2e5b Add JNI peers for some listener classes. 2013-07-22 15:25:21 +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
516327289f Payment channels: Expose a client connection method that terminates the TCP connection but doesn't try to close the channel (ask the server to broadcast the contract). 2013-07-19 14:41:15 +02:00
Mike Hearn
a7dbe7cd03 Payment channels: Add more logging on the server resume path. 2013-07-19 12:04:15 +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
Mike Hearn
c04708dd1e Payment channels: Add detail to an error log message. 2013-07-17 21:40:52 +02:00
Mike Hearn
87897fbb37 Payment channels: Describe reason for connection closing in log message. 2013-07-17 21:40:17 +02:00
Matt Corallo
c5d267f0f9 PaymentChannelCloseException: Show reason in toString() 2013-07-16 17:25:25 +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
ff714fbd77 Add a PeerAddress.localhost() helper. 2013-07-15 18:22:57 +02:00
Matt Corallo
0fe56bf544 Let balance check fail later iff the server wants maxValue 2013-07-15 18:22:51 +02:00
Mike Hearn
00da963bbb Payment channels: use daemon threads so the VM can exit after the state objects are created. 2013-07-13 02:24:19 +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
bf585d8627 Transaction: note that a ScriptException is expected at this point. 2013-07-11 16:52:11 +02:00
Mike Hearn
2c26f8802b Add PeerGroup.clearListeners(). Resolves issue 426. 2013-07-11 16:34:57 +02:00
Mike Hearn
4e95ab3cfc Assert on lock.isHeldByCurrentThread() instead of isLocked() - the latter is not correct.
This didn't cause any actual bugs but just reduced the safety of making code changes.
2013-07-11 16:30:44 +02:00
Mike Hearn
e687e52230 Use the correct alert signing key for testnet. 2013-07-11 16:29:56 +02:00
Mike Hearn
6a39af30c4 Add AbstractBlockChain.removeWallet(). Resolves issue 419. 2013-07-11 16:11:33 +02:00
Mike Hearn
5c1063860a WalletAppKit: Improve javadoc a bit. 2013-07-11 16:07:14 +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
be89be6f43 PaymentChannelServerState: Fix typo in variable name. 2013-07-11 15:35:17 +02:00
Mike Hearn
d2232ed4aa Fix hdw unit tests after I broke them. 2013-07-11 14:19:48 +02:00
Matt Corallo
c98badcf1c Store states in protobufs instead of using Java Serialization.
Saves having to use reflection.
2013-07-11 14:16:40 +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
Matt Corallo
f0be874815 Add option to skip isRelevant checks in Wallet.receivePending 2013-07-11 14:14:24 +02:00
Mike Hearn
86bd974958 Move HD wallets code into plain crypto package. 2013-07-11 13:45:12 +02:00
Mike Hearn
be39c176db Add a TODO to merge DeterministicKey and ECKey together. 2013-07-11 13:43:35 +02:00
Mike Hearn
98219bdd1b More static analysis tweaks. 2013-07-11 13:42:42 +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
50dd5af0c8 Add more javadocs.
Delete the wallet integration code - it's good, but we won't ship it in 0.10 as it's not finished.
2013-07-11 13:10:07 +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
00f4c82342 WalletFiles: Make saving thread shut down after 5 seconds of doing nothing. 2013-07-10 18:14:10 +02:00
Mike Hearn
2b6022cd7c WalletFiles: log how long saving the wallet took. 2013-07-10 16:59:39 +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
acc2877329 Reject dust outputs with ensureMinRequiredFee (fixes #429) 2013-07-10 16:28:29 +02:00
Mike Hearn
48cee2e668 KeyCrypterScrypt: Fix some minor code style issues. 2013-07-10 16:27:01 +02:00
Mike Hearn
53dc5c2e6a Make Andreas happy. Resolves issue 423. 2013-07-10 16:23:05 +02:00
Matt Corallo
b51485ca23 Peer Bloom filter generation -> new PeerFilterProvider interface 2013-07-10 15:59:51 +02:00
Matt Corallo
2061d28e52 Use direct byte buffers instead of normal ones in niowrapper 2013-07-10 15:55:21 +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
Matt Corallo
1277df32d8 Fix a few minor typos. 2013-07-10 15:53:19 +02:00
Mike Hearn
2c44a4fad7 PeerGroup: Require Bloom-filtering capable peers by default. Resolves issue 421. 2013-07-10 15:52:09 +02:00
Mike Hearn
34d804ecca PeerGroup: fix naming of vPingTimer 2013-07-10 15:33:24 +02:00
Mike Hearn
5b78601b4a Wallet: make last seen block height default to zero not -1 2013-07-10 15:32:36 +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
4c0930a961 AbstractBlockChain: Correct minor logging issue 2013-07-10 14:42:47 +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
Mike Hearn
ea19d3164a TCPNetworkConnection: allow manually constructed one-offs to be given a Peer object. 2013-07-09 14:43:37 +02:00
Mike Hearn
e3e80c357d BitcoinSerializer: Remove some optimisations that date from the time when someone was trying to make bitcoinj into a super scalable multiplexor, and allow writing of arbitrary byte arrays that get checksummed and prefixed. 2013-07-09 14:43:12 +02:00
Mike Hearn
975dea6e16 VersionAck: Delete some whitespace 2013-07-09 14:42:28 +02:00
Matt Corallo
09752848bb Announce transactions to wallet in order even from FilteredBlocks 2013-07-09 13:05:35 +02:00
Mike Hearn
a05d69537d Remove JavaDocs from AbstractWalletEventListener so IDEs will automatically inherit them. 2013-07-08 13:24:32 +02:00
Mike Hearn
24b825252f Fix a bogus assert in Threading 2013-07-05 14:21:43 +02:00
Mike Hearn
8869e57fa0 AbstractBlockChain: add a bit more logging. 2013-07-05 13:49:43 +02:00
Mike Hearn
573e04491c Threading: fix the user thread to be daemon so programs can shut down properly again. 2013-07-05 12:23:28 +02:00
Mike Hearn
a8a8d3a044 AbstractBlockChain: Fix some nullity annotations and a few other misc things. 2013-07-05 11:56:27 +02:00
Mike Hearn
d316cf316f AbstractBlockChain: Replace mention of BOBS in class javadoc with SPVBlockChain. 2013-07-05 11:48:28 +02:00
Mike Hearn
aaa71c0811 Fix AbstractBlockChain.removeListener. Found by IntelliJ. 2013-07-05 11:47:42 +02:00
Mike Hearn
35a7f38d86 Make block chain listeners run in given executors and default to the user thread. 2013-07-05 10:54:21 +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
50b71979bb Fix removal of event listeners. Make PeerGroup also allow specification of arbitrary executors and run event listeners in those. 2013-07-05 10:54:21 +02:00
Mike Hearn
c552c0cbdd Move ListenerRegistration out into utils and make it generic. 2013-07-05 10:54:21 +02:00
Mike Hearn
f6d14db8e6 Wallet: allow choice of executor to run event listeners in, default to user thread. 2013-07-05 10:54:20 +02:00
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