Change PartyAndCertificate to an aggregate class instead of a subclass of Party. This reduces the changes compared to M11, as well as avoiding risk of accidental serialization of a PartyAndCertificate (which may be very large) where a Party is expected.
Cleaned up initial nodes known to the identity service, in particular mock nodes now know about themselves; previously full nodes registered themselves but mock nodes did not.
* Construct standard flows using PartyAndCertificate, and add support for launching
flows that are constructed with PartyAndCertificate or just Party.
* Store PartyAndCertificate in network map service
* Expand identity service to store certificates along with all identities.
This removes the need to do manual registration using the PluginServiceHub. As a result CordaPluginRegistry.servicePlugins is no longer needed. For oracles and services there is a CorDappService annotation.
I've also fixed the InitiatingFlow annotation such that client flows can be customised (sub-typed) without it breaking the flow sessions.
* De-anonymise parties in AbstractStateReplacementFlow flows
* Convert transaction key negotiation to a subflow instead of utility functions
* Add serialization support for CertPath
* Restructure cash flows so that a counterparty flow can be added later
Remove mock identity service and merge it with the in memory identity service. The two services
provide extremely similar functionality, and having two different version for production/test
risks subtle implementation differences. On that note, this patch includes changes to a number
of tests which worked only with mock identity service.
Fixup after rebase
Restore original key property names
Fixup after rebase
Undo extra import that IntelliJ keeps erroneously adding.
Add comments and fix docs for transaction signing.
Fixes after rebase
More fixes after rebase
Address PR requests
Address PR requests
Switch to using AbstractParty as the standard identifier for parties in
states, so that full parties can be used during construction of
transactions and anonymised parties when the transaction is being added
to the ledger.
* Fix: Add missing @StartableByRPC to fix the Raft notary demo
* Make loadConfig take a Config object, for cordformation Node
* Unduplicate User.toMap
* Unduplicate WHITESPACE regex, choose possessive form
* Use slash to make a Path
* Remove Companion where redundant
* Remove unused code
* Initial commit for CollectSignaturesFlow, some tests and associated documentation via a new "Flow Library" section of the docsite.
* Refactored the TwoPartyDealFlow to use the CollectSignaturesFlow.
* Added the subclassed CollectsigsFlow to the trader demo, whitelisted it and added a flow initiator for the responder.
* Minor edits to progress tracker.
* Amended as per Rick's comments.
* Generalised this flow, so it now works if more than one signatures have been collected, initially.
* Minor edits to the IRS demo so it uses the CollectSignaturesFlow.
* For debugging purposes...
* Adding CollectsigsFlow support to SIMM Demo.
* Removing debug logging.
* Amended top level comment: transactions can only have one notary.
* Added TODOs as checkTransaction logic is absent.
* Addressed Mike's review comments.
* Minor edit to flow-library docs.
* Updated flow based on Mike's review comments.
* Added two usage examples and updated the tests.
* Made changes to accommodate new CollectSignaturesFlow approach.
* Made changes to SIMM demo to accommodate new CollectSignaturesFlow approach.
* Added abstract check proposal method to two party deal flow.
* Added missing TODOs.
* Addressed Sham's comments.
* Rebased to M11.
Move AbstractParty, AnonymousParty and Party into a new net.corda.core.identity package,
as they're not really cryptography tools, and in preparation for further code coming in
for identity.
Optimize imports on many files to clean up the resulting refactor.
This removes the need for the shareParentSessions parameter of FlowLogic.subFlow. It also has the flow's version number so FlowVersion is now no longer needed.
* Added queryBy(QueryCriteria) Vault API and Junit tests.
* Minor fix following rebase.
* Spit out Vault Query tests into separate source file.
* WIP
* Enable composition of QueryCriteria specifications.
Additional JUnit test cases to validate API.
* Added Deprecating annotations.
Added QueryCriteria for set of contractStateTypes
* Minor tweaks and additional JUnit test cases (chain of linear id)
* Added Java Junit tests and QueryCriteria builder support.
* Added API documentation (including coding snippets and examples).
* Added @JvmOverloads to QueryCriteria classes for easy of use from Java.
* Refactored QueryCriteria API to use composition via sealed data classes.
* Enable infix notation.
* Fixed typo.
* Clarified future work to enforce DB level permissioning.
* Moved PageSpec and Order from QueryCriteria to become parameters of Query itself.
* Moved PageSpec and Order from QueryCriteria to become parameters of Query itself.
* TokenType now specified as set of <Class> (was non extensible enum).
* Exposed new Vault Query API functions via RPC.
* Fixed compiler error in java test.
* Addressed a couple of minor PR review scomments from MH.
* Major updates following PR discussion and recommendations.
* All pagination and sorting arguments are optional (and constructed with sensible defaults).
Added Java helper functions for queryBy and trackBy interfaces.
Added Java trackBy unit tests.
Miscellaneous cleanup.
* Added Generic Index schema mapping and query support.
* Query criteria referencing Party now references a String (until Identity framework built out).
Added participants attribute to general query criteria.
* Fleshed our IndexCriteria including PR recommendation to define column aliases for index mappings.
* Removed all directly exposed API dependencies on requery.
* Updated documentation.
* Provide sensible defaults for all Query arguments.
Add RPC Java helpers and increase range of Vault Service helpers.
* Further improvements (upgrading notes) and updates to documentation.
* RST documentation updates.
* Updates to address RP latest set of review comments.
* Updates to address MH latest set of review comments.
* Updated to highlight use of VaultIndexQueryCriteria to directly reference a JPA-annotated entity (versus the indirect, explicitly mapped attribute to GenericIndexSchema approach)
* Aesthetic updates requested by MH
* Reverted Indexing approach: removed all references to VaultIndexedQueryCriteria and GenericVaultIndexSchemaV1 scheme.
* Final clean-up and minor updates prior to merge.
* Fixed compiler warnings (except deprecation warnings)
* Reverted all changes to Vault Schemas (except simple illustrative VaultLinearState used in VaultQueryTests)
* Reverted all changes to Vault Schemas (except simple illustrative VaultLinearState used in VaultQueryTests)
* Commented out @Deprecated annotations (as a hedge against us releasing M12 with the work half-done)
* Renamed RPC JavaHelper functions as RPCDispatcher does not allow more than one method with same name.
This is an intermediary step to introducing X500Names in all Party instances, which adds:
* Party constructor which accepts X500Name and then converts it to string.
* startNode() function which takes in X500Name instead of String
* Numerous legal name fixes to use full distinguished names
Move functions for generating transactions into OnLedgerAsset from various locations in
the code (VaultService, AbstractConserveAmount, etc.) to unify the code paths and reduce
duplication.
Standaridise the identity names of Alice, Bob and Charlie, notary, map service, etc. in order
to ensure consistency across the code base and reduce number of places that have to be changed
to introduce proper X.500 names.
Move Alice, Bob & Charlie identities into the utilities package so they can be used in demos
* Make CompositeKey implement PublicKey
The initial implementation of composite keys as their own distinct class separate from PublicKey
means that the keys cannot be used on standard classes such as Certificate. This work is a beginning
to modifying CompositeKey to being a PublicKey implementation, although significant further work
is required to integrate this properly with the standard Java APIs, especially around verifying
signatures using the new key type.
* First stage of making CompositeKey implement PublicKey interface. Revert to using PublicKey everywhere we expect a key.
* Move algorithm and format into companion object (#432)
Move algorithm and format into companion object so that they can be referenced from other
classes (i.e. the upcoming signature class).
* Add simple invariants to construction of CompositeKey.
Builder emits CompositeKeys in simplified normalised form. Forbid keys with single child node, force ordering on children and forbid duplicates on the same level. It's not full semantical normalisation.
* Make constructor of CompositeKey private, move NodeWeight inside the class.
Add utility function for Kryo deserialization to read list with length constraints.
Add tests for CashIssueFlow, CashPaymentFlow and CashExitFlow. While these were mostly covered by other tests
already, CashExistFlow was not, and any bugs would be harder to identify because they are mixed in with other
functionality (i.e. vault tests)
* Fixed bug whereby Cash Exit was not taking into account the issuer reference.
Added additional JUnit tests for coin selection by issuer.
Added some trace logging in AbstractConserveAmount.
* PR review: added additional state with 3rd issuer reference in test.
Add an AmountTransfer type to express the concept of asset flows.
Unify the currency amount creators and fix a few old style display conversions in teh explorer cash dialogs.
Modifications according to PR comments.
Change TransferAmount display string as it may not always be a payment.
Update docs
Fix broken IssuerFlowTest
Fix IssuerFlowTests after rebase.
Resolve conflicts after rebase.
Soft locking converted to use persistent store.
Added additional optional 'includeLockStates' parameter in VaultService states API call.
Added Vault softLocked states query API call.
Fixed commercial paper failing test.
Improved exception handling on soft locking UPDATE statement.
Using SELECT FOR UPDATE to ensure correct soft locking data visibility.
Db query operations moved out of mutex code (as locking managed by underlying DB)
Adjusted logging severity levels.
Adjusted logging severity levels.
GenerateSpending now performing fine grained query for unconsumed states by joining with contract_cash_states table.
Using H2 proprietary cummulative counting feature (using sessioni SET variables)
Refactored and simplified HibernateObserver constructor to enable usage in JUnit tests.
Event generator issues larger random amounts (10,000..1,000,000) to those than are spent (0..10,000)
Adjusted Issue (5:1) and Exit (10:1) generation frequency vs spending.
Minor fixes: added optional lockid into select for spending criteria, set notary, additional trace logging.
Generate Cash Schema by default upon node start-up (as part of NodeSchemaService initialisation).
Explicitly close JDBC statements in finally() blocks.
Tightened HibernateObserver constructor.
Fix CommercialPaper test (was missing auto-generation of CONTRACT_CASH table)
Revert default JVM size back to 200Mb.
Revert default number of iterations in Explorer Node Simulation mode (back to 10000 with .5 sec sleep interval).
Remove redundant setter function.
Added TODO messages indicating Requery / H2 restrictions & caveats.
Consumed states lock updates now performed in general consumed state Update.
Updated/added Soft Locking documentation.
Addressed initial PR comments: use THREAD_LOCAL_KRYO, use AbstractParty, extract helper method, improve readability, address some doc typos
Addressed PR comment: removed lockId from WireTransaction.
Fixed soft locking UPDATE statements.
Improvements to VaultSoftLockManager for auto-registration of soft locks for flows with spendable states (as notifications from vault).
Other optimisations (IssuerFlow no longer explicitly reserve/release issued state) and improvements (soft lock release management of soft locks, docs update)
Performance update: now using Requery for UPDATE in release soft locking (non-composite key statement)
Removed redundant TODO messages (TODO: revisit Kryo bug when using THREAD_LOCAL_KYRO)
Minor fixes following rebase
Fixed failing JUnit following rebase
Addressed MH PR review items (1st pass)
Fix broken JUnit
Significant changes to RDBMS operations within coin selection and soft locking as requested by PR review.
(Removed SELECT FOR UPDATE; added RETRY upon coin selection; reverting partial soft locks)
Addressed a number of PR review requests added by MH (comments/spelling, lockID instantiation, HibernateObserver instantiation, cash schema white-listing usage)
Addressed latest PR review comments from RP.
Minor fixes following rebase from master.
Fixed final failing JUnit (issuer flow concurrent).
Updated TraderDemo to trigger concurrent issuance of cash.
Fixed compiler warning on lockId null check.
Fixed subtle bug in coin selection intermittently surfaced in IntegrationTestTutorial.
Fixed small memory leak.
Removed stray } in logger trace message.
Slight rewording of description of Soft Locking in docs.
Renamed NoStatesAvailableException to StatesNotAvailableException.
generateSpend is now Suspendable (calls sleep method on flow upon coin selection retry).
Added companion function to enable a Strand to sleep but without locking transactional context.
Improved logging, changed to StateNotAvailableException, using Flow sleep upon retry, tweaked SELECT criteria in coin selection, fixed bug when insufficient states selectable, generateSpend is now @suspendable
Improved handling and logging of flow results in Simulation Mode.
Fixed minor error in sleep when not an active flow.
Retry coin selection when unavailable states (as these may become available as new states).
Additional debug logging to highlight and identify H2 coin selection sporadic bug.
Inlined sleep method due to intermittent Quasar error.
Re-introduce selection clause that prevents selection and temporary locking of already locked states (by other flows).
Improved trace logging for coin selection (SQL row level info).
Correctly calling FlowStateMachineImpl sleep (now inlined and working correctly)
Fixed rebase error.
Remove redundant TODO message.
Convert NodeVaultService states to return Iterable (backed by Sequence) Vs the old way using a List. Worth noting this relieves memory pressure as the number of vault states grows.
* remove toList in ContractUpgradeFlowTest
* Initial prototyping with Requery as a persistence replacement for Exposed/Hibernate
Applied changes following PR review by RP
Updated timestamp naming (removed committedTimestamp) and StateStatus (removed AWAITING_CONSENSUS) after discussion with RP.
Removed FungibleState and LinearState schemas (and associated tests) - awaiting Requery uni-directional relationship fix.
Added Transaction propagation such that requery re-uses any existing transaction context.
Made requery default logging configurable (disabled by default)
Nullable fields are now truly nullable (in the Kotlin and DDL sense)
Fix for SimmValuation integration test.
Workarounds applied to resolve Requery issues when sharing Transactional context.
Addressed PR review comments from MH.
Further updates following re-review by RP/MH
Further updates following additional PR review comments by RP
Minor update following additional PR review comments by RP
Optimised makeUpdate state processing code.
Resolved conflicts after rebase.
Additional Unit tests and bug fix for correct spending of multiple contract state types within a single transaction.
Required interface change to states() API to take a setOf (ContractStateClassTypes)
Minor code clean-up.
Re-write NodeVaultService consumed state makeUpdate function using SQL.
* Resolve conflict after rebase from master
Split CashFlow into independent CashIssueFlow, CashExitFlow and CashPaymentFlow,
so that users can be given access to one but not the other(s).
Signed-off-by: Ross Nicoll <ross.nicoll@r3.com>
Add AnonymousParty superclass of Party in preparation for anonymising parties stored in
contract states.
Signed-off-by: Ross Nicoll <ross.nicoll@r3.com>
Remove dependency on name data that cash/obligation state objects will not have access to party details (such as name)
once privacy is correctly enforced.
Make FinalityFlow do more, and be used more consistently.
Add a new waitForLedgerCommit API that is intended to be used at the end of flows, or at any other point where a flow wants to wait for a transaction to finalise (but the finalisation flow is being done by someone else).
Update the docs a bit.
Change Party instances to be uniquely identified by the owning key, without taking into account name.
This requires that mock node key generation is reworked so that keys for services and the node itself
are distinct, otherwise the network map service cannot differentiate them.
Signed-off-by: Ross Nicoll <ross.nicoll@r3.com>
This deprecates the existing composition clauses and adds new better named versions,
as well as changing 'AnyOf' to require at least one matching subclase (better matching
the name of the clause).
The keys used to sign a command are tested for being a superset of the keys which own
the states, not for being an exact match (as the text previously suggested). This corrects
the message used if this requirement isn't met.
Signed-off-by: Ross Nicoll <ross.nicoll@r3.com>
* Update notary change flow to support encumbrances.
Move encumbrance pointer from ContractState to TransactionState.
* Refactor & add new encumbrance tests
Check that the SMM.add method is being called on the SMM thread and throw if not. Make ServiceHubInternal.startFlow() do a blocking call onto the server thread. Update unit tests.
This resolves an issue whereby the scheduler was starting flows outside of the server thread, which isn't intended.
Initial conversion of Explorer to use IssuerFlow (from BankOfCorda)
Initial conversion of TraderDemo to use IssuerFlow (from BankOfCorda)
Updated TraderDemo to use IssuerFlow (from BankOfCorda)
Fixed TraderDemo integration text (added new BankOfCorda node)
Updated Explorer with changes IssuerRequest params
Explorer now correctly displaying transaction id upon Issue.
Moved IssuerFlow into finance package so can be reused across multiple demos (TraderDemo) and applications (eg Explorer)
Refactored BankOfCorda demo to use Finance package and TestUtil constants
Updated TraderDemo to use IssuerFlow
Updated Explorer to use finance package IssuerFlow.
Advertised BankOfCorda as Issuer for usage by Explorer.
Explorer no longer depends on BankOfCorda demo since IssuerFlow promoted to Finance module
Added IssuerFlow to AbstractNode whitelist.
Explicit declarations of IssuerFlow no longer required.
Added plugin registration of IssuerFlow at bootstrap.
Revert whitelisting of IssuerFlow (plugin configured)
Refactored to use constant BOC definition.
Added gradle RPC security config.
Updated documentation
Fixed incorrect references.
Renamed Issuer banks.
Added new permission set (for Issuer nodes)
Added node nearestCity info
Added new Issuer Event Generator for Issuer nodes only
Associated currency with issuer using ServiceType naming structure.
Added argument flag (-S) to trigger event generator simulation node.
Fixed problem with issuers not resolving from network map.
Updated perms on Issuer rpc proxy nodes.
Fixed minor in cash generateExit identified by Explorer.
Changes applied in prep for AWG demo.
Added IntelliJ run-configurations for launching Explorer demo nodes (with and without simulation)
Updated documentation (and added additional gradle task to launch Explorer nodes in simulation mode).
Fix following rebase.
Addressed review items from PR.
Updated TraderDemo readme.
Updated TraderDemo gradle file to launch Bank of Corda node.
Updated JRE properties.
Updated IssuerModel to incorporate correct JFX Observable handling.
Fixed bug with Exit command not displaying any currency.
Added TODO's for revisiting correct Exception handling strategy.
Optimization for when issuing cash to self.
Minor updates following PR review.
Remove old refs to Royal Mint and Federal Reserve
Add unit tests of ScheduledFlow running on simulated network.
Just use existing DumyContract in test
DummyContract requires value equality so that assertEquals over states works as expected.
Remove blank line.
Add TODO on waitQuiescent.
Fix minor build error