Commit Graph

122 Commits

Author SHA1 Message Date
c59603c26f Implement timestamping as a separate service that the two party (dvp) protocol calls out to via a simple client object.
Lots of big changes in this commit:
* Introduction of "network map" and "legally identifiable node" concepts to the networking abstraction.
* State machines framework now lets you send messages to multiple different destinations in the same protocol.
* Timestamping service that can run inside a node is now implemented and unit tested.
* Starting to benefit from the improvements in Quasar (the initialArgs concept can mostly be got rid of now, etc)
2016-01-12 12:14:45 +01:00
412212a860 Switch from JavaFlow to Quasar to provide fibers.
Quasar is a more modern, better maintained and more powerful framework. The main improvement is that this lets us avoid the ClassLoader tricks that JavaFlow was requiring, by using an agent. This introduces a requirement to mark methods that might be on a suspended stack as @Suspendable, but means that code interops cleanly. In Java 9 it is hoped that the marking requirement may even go away entirely.
2016-01-12 12:14:39 +01:00
018825d7d7 Minor: fix the JDK logging bug workaround 2016-01-07 16:20:44 +01:00
9e22cda15c Messaging interface now exposes the nodes own address. 2016-01-07 15:58:26 +01:00
5f8dec4ff9 Minor: add an "until" infix function that applies to Temporal's ... the primary purpose of this beyond a trivial bit of extra readability, is null safety. 2016-01-07 15:58:26 +01:00
2190fbf2ee Minor: reintroduce using Java serialisation for KeyPair as the JDK customises it and the Kryo serialisation is both bloated and (more problematically) non-deterministic! 2016-01-07 15:58:26 +01:00
0a9fffe8b7 Minor: remove unused import 2016-01-07 15:58:26 +01:00
0d0e75e6ff Commands must have at least one pubkey. 2016-01-07 15:58:26 +01:00
5aeab5c933 Minor: move a bit of code around, add some javadocs 2016-01-04 11:24:14 +01:00
cd7d01917f Kotlin 1.0.0-beta-4584 2015-12-24 17:21:10 +00:00
31fbf5e1eb Improve the transactions API a small amount with lazily deserialized access to the WireTransaction inside a SignedTransaction, and id/hash fields (again lazily calculated).
This required bringing back the ImmutableClassSerializer and registration of classes that need it, to ensure the constructors run.
2015-12-22 16:41:25 +00:00
3c23c4f53d Minor: move TransactionForVerification to be next to TransactionGroup and rename the file to be more descriptive. 2015-12-22 15:30:49 +00:00
049f0aa3b3 Rename PartialTransaction -> TransactionBuilder. The term "partial transaction" should be reserved to mean a transaction that is lacking some signatures as it's in the process of being built up by multiple parties. 2015-12-22 15:28:38 +00:00
bcc56859af Add a unit test to check before/after processing by the dummy timestamper.
Tweak the timestamping API a bit.
2015-12-22 15:03:11 +00:00
784452ac50 Reorganise how time is handled: timestamping authorities are now oracles who sign the entire transaction.
As a result, TimestampedWireTransaction is gone. Timestamp fields are gone. Timestamp commands contain before/after fields. The notion of time tolerance is now a part of the timestamping interface and timestamp data.

TODO:
- Unit tests to verify the notBefore/notAfter logic
- Documentation update
2015-12-18 19:14:33 +01:00
6144ccc2c7 Small cleanup of commands.
1. Rename Command -> CommandData, WireCommand -> Command, PartialTransaction.addArg -> addCommand
2. Add some helper functions to PartialTransaction to make creation of transactions simpler.
2015-12-18 12:38:26 +01:00
4cec5dac02 Minor: remove ambiguous c'tor in PartialTransaction and rename addItems -> withItems 2015-12-16 16:25:58 +01:00
ab9e026053 Minor: some small serialisation type safety improvements 2015-12-16 15:24:52 +01:00
5863d489bc Minor: misc comment/whitespace fixes. 2015-12-15 18:54:22 +01:00
06ee9db3f6 Minor: provide a random63BitValue() function and use it instead of the previously duplicated code. Update docs. 2015-12-15 13:16:13 +01:00
020a594a60 State machines: thread safety and a few more comments. 2015-12-15 13:01:57 +01:00
3c578550a9 State machines: don't leak references to completed state machines. Add an extension function for working with futures. 2015-12-14 21:41:57 +01:00
d43bbe8faa Trading: move session ID into the initial args to avoid possible confusion at the start. 2015-12-14 18:22:00 +01:00
f15e24e7be Messaging: Rename MessagingSystem to MessagingService for consistency with other interfaces. 2015-12-14 17:39:48 +01:00
3f19e68b3f Messaging: another minor simplification to the state machines framework. This is not the end! 2015-12-14 17:35:20 +01:00
9720d4e404 Messaging: more huge simplifications to the state machine framework.
The usage now looks straightforward enough to document and put into a tutorial.
2015-12-11 20:21:22 +01:00
89ba996a3c Two party trading: big changes to support and test serialisation, refactorings ... 2015-12-11 15:19:13 +01:00
65c5fa7502 Messaging: (mock) in memory network implementation improvements.
- Now supports simulated restart of nodes
- Messages sent to non-running nodes are queued for delivery
- Messages received by a node that don't match any topics are queued until handlers are registered

These improvements help us unit test various robustness features and ensure things work in truly concurrent context where there can be race conditions like receiving a message before the node had a chance to register the right handlers.
2015-12-11 15:19:13 +01:00
0ca47156bc Trading protocol work in progress 2015-12-11 15:19:13 +01:00
fed0ae5629 Add placeholder interfaces for various service submodules. 2015-12-11 15:17:44 +01:00
2df8153cda Minor: rename wallet -> cashStates in the Cash contract spending function. 2015-12-11 15:17:28 +01:00
f13b9b00e4 Minor: fix Arrays.asList serialisation by adding the extra serialisers lib as a dependency 2015-12-10 17:14:49 +01:00
4c87dc2981 First draft of a basic messaging module interface (VERY ROUGH). Ideally, is something that can have an e.g. Kafka backend, with a full P2P implementation later. 2015-12-10 15:08:11 +01:00
7881be07ed Delete a lot of Kryo/serialisation related boilerplate.
This is/was an attempt to be secure against malicious streams, but as Kryo is just a temporary bit of scaffolding and isn't intended to be actually used in any real product, it was just a waste of time and the registration requirement was getting increasingly awkward.
2015-12-10 15:03:34 +01:00
951912f8e7 Minor: rename Kryo.registerDataClass to Kryo.registerImmutableClass 2015-12-10 14:27:53 +01:00
67c810e315 Make Amount use 64 bit precision and overflow checked operations. 2015-12-08 14:58:16 +01:00
73cbd41a09 Misc fixes:
- Use the OpaqueBytes wrapper (a box for byte[]) inside TimestampedWireTransaction to avoid array comparison issues.
- Introduce a few utility functions to make OpaqueBytes less painful.
- Make StateAndRef serialisable
- Introduce the notion of an OwnedState which abstracts out the owner field.
2015-12-07 17:53:01 +01:00
a656e210c4 Merged in crowdfund-tweaks (pull request #7)
Crowdfunding contract: some cleanups and add some discussion at the top of the different possible models.
2015-12-04 12:34:03 +00:00
41f54b8555 Crowdfunding contract: some cleanups and add some discussion at the top of the different possible models. 2015-12-04 12:33:42 +00:00
ea4a6d8f06 Add logging utilities using slf4j 2015-12-03 18:24:26 +00:00
e5a36580da Visualiser: reorganise, make it easier to invoke, document it. 2015-12-03 12:00:49 +00:00
58c526c68b Visualiser: reorganise, make it easier to invoke, document it. 2015-12-03 11:54:49 +00:00
2193dced0a Minor: add docs for the cash DSL extensions 2015-12-03 11:07:25 +00:00
0e34779fce Merged in mod-crowdfund-close (pull request #5)
Updated close method
2015-12-03 10:20:18 +00:00
f98ebce58b Update copyrights 2015-12-02 18:53:16 +00:00
a95cd056ea Implement a simple transaction graph visualiser tool. 2015-12-02 09:50:45 +00:00
1c1736ff9f Minor: SecureHash.toString + SecureHash.prefixChars methods 2015-12-01 13:36:58 +00:00
91a9b08e7d Updated close method 2015-11-30 19:16:25 +00:00
1f68727f31 Cash: add an onlyParties parameter to the spend crafting method. This allows you to restrict the wallet to only cash issued by particular parties. 2015-11-30 17:58:58 +00:00
50c3956988 Rename 'institution' to 'party'.
ADP-39 #resolve
2015-11-30 16:51:20 +00:00