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
2.7 KiB
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("user1","test") which are validated on the Bank of Corda node against those configured at node startup: User("user1", "test", permissions = setOf(startFlowPermission<IssuerFlow.IssuanceRequester>())) startNode("BankOfCorda", 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.