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.
* 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.
Clarify exceptions thrown from loading a key store as a general cleanup. Also tightens the
exceptions caught when loading key stores from AbstractNode, so in case of an unexpected error
we don't silently drop the exception.
This eliminates JIT java compilation and the consequent need for
tools.jar (which doesn't get shipped in DemoBench). It also makes
development more pleasant by avoiding weird IDE integration issues
that came from having java-in-resources.
* Test SELECT WHERE IN composite key using requery 1.2.0
Upgraded Vault Service code to use Requery 1.2.0 SELECT .. WHERE IN
Updated generated schema code with Requery 1.2.0
Upgrade to Requery 1.2.1
Upgrade to Requery 1.2.1 - converted to use update DSL with composite key
Removed redundant JDBC SQL test cases.
Minor updates following PR review comments from RP.
* Streamline companion object initialisation.
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.
RBS report problems with multiple nodes being able to find each other in the identity service. This extends the name
lookup test case to try three nodes, to check all of the stored values, and to use random keys rather than static.
Add trace log of identity registrations to aid with tracking state.
The shell is embedded in the node and offers the ability to monitor
and control the node via the launching terminal.
Still to do:
* Switch to a fork of CRaSH that we can maintain ourselves, and merge in Marek's SSH patch so we can enable SSH access.
* Add persistent command history that survives restarts.
* Tab completion for the 'flow' and 'run' commands.
* Remove the 'jul' command and replace it with a command that lets you see and tail the log4j logs instead.
* Fix or remove the other crash commands that have bitrotted since 2015.
* CORDA-305: Refactor CordaRPCClient into :client:rpc module
* CORDA-305: Remove the Kotlin test framework from the artifacts.
* CORDA-305: Migrate serialisation whitelist into node-api module.
* CORDA-305: Clean up unused RPC observables.
* CORDA-305: Add :client:rpc module to documentation tasks.
* CORDA-305: Include :finance into :client:rpc for its serialisable classes.
* CORDA-305: Move test classes into the correct directory.
* CORDA-305: Migrate :finance dependency from :client:rpc into DemoBench.
* CORDA-305: Update wording of TODO about handling Observables.
* Non-ssl artemis acceptor for RPC connection. (#271)
* New non-ssl acceptor in artemis server for RPC connection.
* Rename artemisAddress with messagingAddress
Rename artemisAddress with messagingAddress so that the node configuration file properties match
the code variable names.
Rename artemisPort to messagingPort in Gradle configuration to match node configuration naming.
* Add rpcPort configuration option for Gradle
* Update docs to reflect changes to RPC port configuration
* Renumber ports in example CorDapp to match numbering used elsewhere
* Restructure upgrade guide
* added config file checks on corda startup to make the upgrade path a bit smoother.
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
* CORDA-265: Implement "ALL" permission for RPC users. Users with this permission in node.conf can use any flow.
* CORDA-265: Ensure that we always close the RPC proxy object after each test.
* CORDA-265: Refactor construction of dummy RPC client into an abstract base class.
* CORDA-265: Document RPC "ALL" permission.
* BFT notary prototype: add a non-validating service.
Each replica now validates the transaction timestamp and returns an individual signature to the BFT client. The client then returns a list of signatures back to the notary service flow.
The validating variant is still incomplete - it requires the ability to suspend flows on arbitrary function calls.
Make notary flow return a collection of signatures to support the BFT notary. For a single-node or RAFT notary it would just contain a single signature.
* Make the network registration process more verbose
* removed gradle task for building standalone jar for the certificate signing request utility
* Added a flag "--initial-registration" to the corda jar to start the registration
* 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
* Add support for contract upgrades
* Add interface for the upgraded contract to implement, which provides functionality for upgrading legacy states.
* Add shared upgrade command and verification code for it.
* Add DummyContractV2 to illustrate what an upgraded contract looks like.
* Add new functions to vault service to support upgrading state objects.
* Add contract upgrade flow
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>
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.
InMemoryNetworkMapCacheTest was not actually asserting that an expected exception was thrown, which
meant when earlier changes to the service changed the operation it wasn't caught. The service now
overwrites previous node if a new matching node is added, and this updates the test to follow that
design.
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>
Remove TransferRecipient from StateMachineManagerTests to get rid one of the approximately 6 different ways
in which we refer to endpoints, as part of work to simplify this data model.
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.
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
Fix handling of node shutdown so protocols don't blow up when they encounter the messaging layer already shutdown. Protocols will also stop resuming once shutdown has commenced.
InMemoryNetworkMapCache.getNodeByPublicKey() previously returned null if multiple nodes matched
a given public key (for example if the same node is registered more than once with different
names). This is incorrect behaviour, as there is a match.
# Conflicts:
# core/src/main/kotlin/com/r3corda/core/contracts/Structures.kt
# node/src/test/kotlin/com/r3corda/node/services/NodeSchedulerServiceTest.kt
Fixed failing CommercialPaper test
(caused by re-use of same database transaction context for vault across two different transaction participants)
Allow AdvertisedServices to have their own identity and keys. Also, rationalise legalIdentity onto the local node's NodeInfo which is available on ServiceHub
Fixup after rebase
Remove legal identity that was on storage service. Now access via myInfo.legalIdentity and key via keyManagement lookup.
Enforce singleton notary per node for now
Tidy up based upon Rick's suggestions
Handle PR comments
clean up imports
Fix typo
Fixup rename
Capitalise comment
Eliminate unused variable warning
Make changes based upon PR comments
Cleanup whitespace changes
Split up storage initialisation so that there is less code copying in MockNode
Add header comment to DBCheckpointStorage class
Respond to PR comments
Resolve PR comments
Rename iterator on checkpoints
Fix typo
Fixup checkpoints in DB logic after Shams's PR
Delete duplicated code
some minor changes, including gitignore rule changes. The largest change
is replacing the current fresh key for each transaction with a single
static identity in preparation for aimproved and more fleshed out key
sharing infrastructure.
Use synchronized wrapper over set.
Drop discard message to trace level logging.
Fix code layout
Use lazy trace extension method
Track message id's to deduplicate replays. Widen the auto-acknowledgement window of Artemis back to the default.
Use synchronized wrapper over set.
Include tx message unique id in checkpointed data.
Add test for checkpointed resend
Fix bug in not getting UUID off message.
Tidy formatting
Add explanation comments to test asserts
Put unique id even on Client messages.
Tidy formatting
Add some unit tests of the late init behaviour.
Fix merge error
Change statemachine logic to use an in-memory only flag on checkpoints to track their materialisation during startup.
Add annotations for test method
Fix possible race condition on storing checkpoint objects
Correctly create checkpoint
Use then helper function
Cleanup imports
This moves a lot of the test support code into its own package which is only imported for tests,
so it's not shipped as a part of core Corda. The node currently depends on this support code to
compile, although future work could try to separate this out. This change highlights that parts
of production code is dependent on test elements (i.e. dummy keys), and makes it harder for
such accidental crosses to occur later.
An integration test category is also added as part of this work, to contribute towards COR-345.
Add new protocol which manages the entire process of taking a signed transaction ready
for notarisation, through notarisation and onto recording it both locally and informing
remote nodes.
This protocol also optionally can include the ClientToServiceCommand which triggered a transaction
being created, to give the remote nodes context on why a change occurred (i.e. "You are being sent
£100")
Fixup after rebase and fix issue with checking previous deployment of bridges
Correct comments on ArtemisMessagingClient constructor
Fixup rates fix demo
Get rid of when statements
Make NetworkMapCache send modify as well as add//remove events. Make inboxes for nodes persistent.
Suppress warnings
Fix message acknowledgement so that it actually consumes messages properly.
Change queueName to SimpleString to stop lots of wasted conversions
Get rid of spurious import
Tidy up and add comments
Update to include comments on PR
Remove unnecessary import
Try providing a helper interface to encourage enforcing LinearState rules
Fixup after rebase
Change to using Clauses for verifying LinearState standard properties
Fix whitespace change
Tidy up ClauseVerifier after PR comments
Change from SecureHash to a TradeIdentifier class
Change TradeIdentifier to UniqueIdentifier
Add observable for transactions being stored, so the UI can show transactions as they're received, rather than being
limited to the summarised version available from the wallet service.
- Fix thread safety issues in ArtemisMessagingClient. The Artemis API isn't thread safe, but that isn't well documented and it will happily invoke callbacks in parallel.
- Add discussion of how we tackle threading currently in the codebase and make a few other improvements.
- Add a shutdown hook so we stop properly when the user presses ctrl-c
First working Exposed-assisted persistent wallet
Cleaned up Exposed-based persistent wallet
Cleaned up warnings
Fixed up some generic types
Improved comments
Fix up TODO comment
Hikari and config integration
Fix existing tests
Clean up after looking at PR
Clean up commented out lines
Fix initialisation of IRS demo leaving database open
Fix up after rebase
Review feedback. Main change is lazy wallet iteration.
Rebased and incorporated config changes.
Use standardised config loading. Make wallet cash test use persistent wallet.
Added test to ensure wallet retains state in database across instance creation.
Tidy up whitespace and fix bug in test.
Changes include:
- LedgerTransaction is now much more central: it represents a fully resolved and looked-up tx, with the inputs available.
- TransactionGroup and TransactionForVerification are gone. There is a temporary TransactionForContract class for backwards
compatibility but it will also be gone soon.
- ResolveTransactionsProtocol is simplified, and now commits a tx to the database as soon as it's determined to be valid.
- ServiceHub is now passed in more consistently to verification code, so we can use more services in future more easily e.g. a sandboxing service.
- A variety of APIs have been tweaked or documented better.
This change reduces the testing confusion that can occur when cash is issued by one of the parties in a transaction rather than e.g. a neutral third party like a central bank.
Break down what is referred to as "topic" of a message into its component parts. This splits the
general topic from the session ID, so it's clear where a session ID is provided, and whether any
given topic string includes a session ID or not.
Move FiberRequest out to a top level class, both because it is expanding as functionality is added,
and to enable alternative state machine implementations to share it.
Unhandled messages in the in memory messaging network can disrupt runNetwork(), as they
result in getNextQueue() returning null, irrespective of whether there is further work
which could be done. This modifies the flow to loop through the remaining transfers on
the queue before giving up, rather than stopping after the first.
- Move code out of ambiguously named TestUtils files (there were three). Sometimes it's simpler to just put these things into the contract source files directly.
- Remove JavaTestHelpers objects (there were three), in favour of just giving the top level kotlin file class better names.
- Misc other small tweaks and cleanups.
As the timestamping authority is now always the notary service, contracts should
no longer be using name-based lookup of the timestamping authority (as this will
generally be wrong). This introduces a new "timestamp" property on a transaction,
and updates most contracts to refer to it.
In some cases (IRS, CommercialPaper) there are transactions with no input states
to derive notary from, that use timestamps. In these cases a notary is specified
in the command.
- Rename NodeWalletService to InMemoryWalletService and move into the core module where it's available for unit testing.
- Make a new NodeWalletService that just inherits from InMemoryWalletService and doesn't customise it at all, for now.
- Take the cash specific functionality out of Wallet and into an extension property in the Cash contract (this compiles as CashKt.getCashBalance(wallet) for java users).
- Return the generated states in the fillWalletWithTestCash function.