* Updated all sample code to use new Vault Query service APIs. * Fix broken Unit test. * Added missing transaction boundary. * Fix broken ScheduledFlow test (caused by assertion on non-ordered collection) * Remove redundant negative test (as new Vault Query no longer returns iterators). * Whitespace formatting fixed following PR review from SA. * Force query to specify a PAGE SIZE equivalent to total states to be exited (RP review comment). * Use single (and fail fast) instead of first - when only expecting a single result. * Demonstrate paging and sorting; failfast on single expected result. * Enhancement: added Sorting by CommonStateAttribute (StateRef txnId and index) * Fix: incorrect total states count. * Fixed incorrect total states counting. * Remove redundant filter (UNCONSUMED). * Updated tutorial code and associated documentation (building transactions). * Updated all vaultAndUpdates to vault[Track|Query]By. * Temporary disable failing Vault Query tests (awaiting pagination PR fix). * Rebase from master to pick up pagination changes/fix. * Fixed criteria filter on track. * Cleanup redundant print output. * Refactor to extract common function for Vault Query paging and sorting. * Identified problem in SimmValuation demo failing test caused by query by single participant in participants list (not yet supported in VaultQuery criteria). * Minor fixes following rebase from master. * Minor updates following rebase. * Removed redundant import. * Fixed type casting error. * Minor fixes following rebase from master. * VQ Fix - applied in other PR. * Removed duplication after rebase and minor fix to failing smoke test.
Bank of Corda demo
Please see docs/build/html/running-the-demos.html
This program simulates the role of an asset issuing authority (eg. central bank for cash) by accepting requests from third parties to issue some quantity of an asset and transfer that ownership to the requester. The issuing authority accepts requests via the [IssuerFlow] flow, self-issues the asset and transfers ownership to the issue requester. Notarisation and signing form part of the flow.
The requesting party can be a CorDapp (running locally or remotely to the Bank of Corda node), a remote RPC client or a Web Client.
Prerequisites
You will need to have JDK 8 installed and available on your path.
Getting Started
- Launch the Bank of Corda node (and associated Notary) by running: [BankOfCordaDriver] --role ISSUER (to validate your Node is running you can try navigating to this sample link: http://localhost:10005/api/bank/date)
Each of the following commands will launch a separate Node called Big Corporation which will become the owner of some Cash following an issue request:
-
Run the Bank of Corda Client driver (to simulate a web issue requester) by running: [BankOfCordaDriver] --role ISSUE_CASH_WEB This demonstrates a remote application acting on behalf of the Big Corporation and communicating directly with the Bank of Corda node via HTTP to request issuance of some cash.
-
Run the Bank of Corda Client driver (to simulate an RPC issue requester) by running: [BankOfCordaDriver] --role ISSUE_CASH_RPC Similar to 3 above, but using RPC as the remote communications mechanism.
Developer notes
Testing of the Bank of Corda application is demonstrated at two levels:
- Unit testing the flow uses the [LedgerDSL] and [MockServices]. Please see [IssuerFlowTest] The IssuerFlow is one of several reusable flows defined in the finance package.
- Integration testing via RPC and HTTP uses the [Driver] DSL to launch standalone node instances
Security The RPC API requires a client to pass in user credentials: client.start("bankUser","test") which are validated on the Bank of Corda node against those configured at node startup: User("bankUser", "test", permissions = setOf(startFlowPermission<IssuerFlow.IssuanceRequester>())) startNode(BOC.name, rpcUsers = listOf(user))
Notary We are using a [SimpleNotaryService] in this example, but could easily switch to a [ValidatingNotaryService]
Integration with other Demos and Tools
The Bank of Corda issuer node concept has been integrated into the Explorer tool (simulation nodes) and Trader Demo.
Further Reading
Tutorials and developer docs for Cordapps and Corda are here.