mirror of
https://github.com/corda/corda.git
synced 2025-02-21 09:51:57 +00:00
Samples: make the IRS demo usable from the command line again
This commit is contained in:
parent
b3a70c7acb
commit
859542b2df
15
.idea/runConfigurations/IRS_Demo__Run_Date_Change.xml
generated
Normal file
15
.idea/runConfigurations/IRS_Demo__Run_Date_Change.xml
generated
Normal file
@ -0,0 +1,15 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="IRS Demo: Run Date Change" type="JetRunConfigurationType" factoryName="Kotlin" singleton="true">
|
||||
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
|
||||
<option name="MAIN_CLASS_NAME" value="net.corda.irs.IRSDemoKt" />
|
||||
<option name="VM_PARAMETERS" value="-ea -javaagent:lib/quasar.jar " />
|
||||
<option name="PROGRAM_PARAMETERS" value="--role Date 2018-01-01" />
|
||||
<option name="WORKING_DIRECTORY" value="" />
|
||||
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
|
||||
<option name="ALTERNATIVE_JRE_PATH" />
|
||||
<option name="PASS_PARENT_ENVS" value="true" />
|
||||
<module name="irs-demo_main" />
|
||||
<envs />
|
||||
<method />
|
||||
</configuration>
|
||||
</component>
|
15
.idea/runConfigurations/IRS_Demo__Run_Nodes.xml
generated
Normal file
15
.idea/runConfigurations/IRS_Demo__Run_Nodes.xml
generated
Normal file
@ -0,0 +1,15 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="IRS Demo: Run Nodes" type="JetRunConfigurationType" factoryName="Kotlin" singleton="true">
|
||||
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
|
||||
<option name="MAIN_CLASS_NAME" value="net.corda.irs.MainKt" />
|
||||
<option name="VM_PARAMETERS" value="-ea -javaagent:lib/quasar.jar " />
|
||||
<option name="PROGRAM_PARAMETERS" value="" />
|
||||
<option name="WORKING_DIRECTORY" value="" />
|
||||
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
|
||||
<option name="ALTERNATIVE_JRE_PATH" />
|
||||
<option name="PASS_PARENT_ENVS" value="true" />
|
||||
<module name="irs-demo_main" />
|
||||
<envs />
|
||||
<method />
|
||||
</configuration>
|
||||
</component>
|
15
.idea/runConfigurations/IRS_Demo__Run_Trade.xml
generated
Normal file
15
.idea/runConfigurations/IRS_Demo__Run_Trade.xml
generated
Normal file
@ -0,0 +1,15 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="IRS Demo: Run Trade" type="JetRunConfigurationType" factoryName="Kotlin" singleton="true">
|
||||
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
|
||||
<option name="MAIN_CLASS_NAME" value="net.corda.irs.IRSDemoKt" />
|
||||
<option name="VM_PARAMETERS" value="-ea -javaagent:lib/quasar.jar " />
|
||||
<option name="PROGRAM_PARAMETERS" value="--role Trade trade1" />
|
||||
<option name="WORKING_DIRECTORY" value="" />
|
||||
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
|
||||
<option name="ALTERNATIVE_JRE_PATH" />
|
||||
<option name="PASS_PARENT_ENVS" value="true" />
|
||||
<module name="irs-demo_main" />
|
||||
<envs />
|
||||
<method />
|
||||
</configuration>
|
||||
</component>
|
15
.idea/runConfigurations/IRS_Demo__Upload_Rates.xml
generated
Normal file
15
.idea/runConfigurations/IRS_Demo__Upload_Rates.xml
generated
Normal file
@ -0,0 +1,15 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="IRS Demo: Upload Rates" type="JetRunConfigurationType" factoryName="Kotlin" singleton="true">
|
||||
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
|
||||
<option name="MAIN_CLASS_NAME" value="net.corda.irs.IRSDemoKt" />
|
||||
<option name="VM_PARAMETERS" value="-ea -javaagent:lib/quasar.jar " />
|
||||
<option name="PROGRAM_PARAMETERS" value="--role UploadRates" />
|
||||
<option name="WORKING_DIRECTORY" value="" />
|
||||
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
|
||||
<option name="ALTERNATIVE_JRE_PATH" />
|
||||
<option name="PASS_PARENT_ENVS" value="true" />
|
||||
<module name="irs-demo_main" />
|
||||
<envs />
|
||||
<method />
|
||||
</configuration>
|
||||
</component>
|
@ -13,22 +13,22 @@ so far. We have:
|
||||
5. The SIMM valuation demo, a large demo which shows two nodes agreeing on a portfolio and valuing the initial margin
|
||||
using the Standard Initial Margin Model.
|
||||
|
||||
.. note:: The demos currently must be run from IntelliJ, this will change before M6.
|
||||
|
||||
.. note:: If any demos don't work please jump on our mailing list and let us know.
|
||||
|
||||
The demos can be run either from the command line, or from inside IntelliJ. Running from the command line is
|
||||
recommended if you are just wanting to see them run, using IntelliJ can be helpful if you want to debug or
|
||||
develop the demos themselves.
|
||||
|
||||
Trader demo
|
||||
-----------
|
||||
|
||||
This demo brings up three nodes: Bank A, Bank B and a notary/network map node that they both use. Bank A will
|
||||
be the buyer, and self-issues some cash in order to acquire the commercial paper from Bank B, the seller.
|
||||
|
||||
This can be run either from the command line (recommended for Mac/Linux/BSD users), or from inside IntelliJ.
|
||||
|
||||
To run from the command line:
|
||||
|
||||
1. Run ``./gradlew samples:trader-demo:deployNodes`` to create a set of configs and installs under ``samples/trader-demo/build/nodes``
|
||||
2. Run ``./samples/trader-demo/build/nodes/runnodes`` to open up three new terminal tabs/windows with the three nodes.
|
||||
2. Run ``./samples/trader-demo/build/nodes/runnodes`` (or ``runnodes.bat`` on Windows) to open up three new terminals with the three nodes.
|
||||
3. Run ``./gradlew samples:trader-demo:runBuyer`` to set up the buyer node with some self-issued cash. This step
|
||||
is not expected to print much.
|
||||
4. Run ``./gradlew samples:trader-demo:runSeller`` to trigger the transaction. You can see both sides of the
|
||||
@ -47,6 +47,24 @@ In the "Trader Demo: Run Nodes" windows you should see some log lines scroll pas
|
||||
IRS demo
|
||||
--------
|
||||
|
||||
This demo brings up three nodes: Bank A, Bank B and a node that runs a notary, a network map and an interest rates
|
||||
oracle together. The two banks agree on an interest rate swap, and then do regular fixings of the deal as the time
|
||||
on a simulated clock passes.
|
||||
|
||||
To run from the command line:
|
||||
|
||||
1. Run ``./gradlew samples:irs-demo:deployNodes samples:irs-demo:installDist`` to install configs and a command line tool under ``samples/irs-demo/build``.
|
||||
2. Change to the ``samples/irs-demo/build`` directory.
|
||||
3. Run ``./nodes/runnodes`` (or ``runnodes.bat`` on Windows) to open up three new terminals with the three nodes.
|
||||
4. Run ``./install/irs-demo/bin/irs-demo --role UploadRates`` (or use ``irs-demo.bat`` on Windows). You should see a
|
||||
message be printed to the first node (the notary/oracle/network map node) saying that it has accepted some new
|
||||
interest rates.
|
||||
5. Now run ``irs-demo`` as in step 4, but this time with ``--role Trade 1``. The number is a trade ID. You should
|
||||
see lots of activity as the nodes set up the deal, notarise it, get it signed by the oracle and so on.
|
||||
6. Now run ``irs-demo --role Date 2016-12-12`` to roll the simulated clock forward and see some fixings take place.
|
||||
|
||||
To run from IntelliJ:
|
||||
|
||||
1. Open the Corda project in IntelliJ and run the "Install" configuration
|
||||
2. Open the Corda samples project in IntelliJ and run the "IRS Demo: Run Nodes" configuration
|
||||
3. Run "IRS Demo: Run Upload Rates" to upload rates to the oracle.
|
||||
@ -56,11 +74,8 @@ IRS demo
|
||||
In the "IRS Demo: Run Nodes" window you'll see a lot of activity when you run the trade and when you run the date change.
|
||||
The date change rolls the clock forwards and causes the nodes to agree on the fixings over a period.
|
||||
|
||||
IRS web demo
|
||||
------------
|
||||
|
||||
There is also an IRS web demo installed. To use this follow steps 1-3 in the IRS demo and then navigate to
|
||||
http://localhost:10005/web/irsdemo and http://localhost:10005/web/irsdemo to see both node's view of the trades.
|
||||
There is also an web app as part of this demo. To use this set up the trades and then navigate to
|
||||
http://localhost:10005/web/irsdemo and http://localhost:10005/web/irsdemo to see both node's view of the ledger.
|
||||
|
||||
To use the demos click the "Create Deal" button, fill in the form, then click the "Submit" button. Now you will be
|
||||
able to use the time controls at the top left of the home page to run the fixings. Click any individual trade in the
|
||||
|
@ -75,6 +75,10 @@ class Node {
|
||||
config = config.withValue("useHTTPS", ConfigValueFactory.fromAnyRef(isHttps))
|
||||
}
|
||||
|
||||
void useTestClock() {
|
||||
config = config.withValue("useTestClock", ConfigValueFactory.fromAnyRef(true))
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the artemis port for this node.
|
||||
*
|
||||
|
@ -1,49 +1 @@
|
||||
# IRS Demo
|
||||
|
||||
TODO
|
||||
|
||||
## Prerequisites
|
||||
|
||||
You will need to have [JDK 8](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)
|
||||
installed and available on your path.
|
||||
|
||||
## Getting Started
|
||||
|
||||
First clone this repository and the Corda repository locally. Then open a terminal window in the Corda directory and run:
|
||||
|
||||
Unix:
|
||||
|
||||
./gradlew publishToMavenLocal
|
||||
|
||||
Windows:
|
||||
|
||||
gradle.bat publishToMavenLocal
|
||||
|
||||
This will publish a copy of Corda to your local Maven repository for your Cordapp to use. Next open a terminal window
|
||||
in your Cordapp directory (this one) and run:
|
||||
|
||||
Unix:
|
||||
|
||||
./gradlew deployNodes
|
||||
|
||||
Windows:
|
||||
|
||||
gradlew.bat deployNodes
|
||||
|
||||
This command will create several nodes in `build/nodes` that you can now run with:
|
||||
|
||||
Unix:
|
||||
|
||||
cd build/nodes
|
||||
./runnodes
|
||||
|
||||
Windows:
|
||||
|
||||
cd build/nodes
|
||||
ruunnodes.bat
|
||||
|
||||
This will now have nodes running on your machine running this Cordapp. You can now begin developing your Cordapp.
|
||||
|
||||
## Further Reading
|
||||
|
||||
Tutorials and developer docs for Cordapps and Corda are [here](https://docs.corda.r3cev.com).
|
@ -20,6 +20,7 @@ apply plugin: 'net.corda.plugins.quasar-utils'
|
||||
apply plugin: 'net.corda.plugins.publish-utils'
|
||||
apply plugin: 'net.corda.plugins.cordformation'
|
||||
apply plugin: 'maven-publish'
|
||||
apply plugin: 'application'
|
||||
|
||||
repositories {
|
||||
mavenLocal()
|
||||
@ -30,6 +31,8 @@ repositories {
|
||||
}
|
||||
}
|
||||
|
||||
mainClassName = 'net.corda.irs.IRSDemo'
|
||||
|
||||
sourceSets {
|
||||
main {
|
||||
resources {
|
||||
@ -77,33 +80,36 @@ dependencies {
|
||||
|
||||
task deployNodes(type: net.corda.plugins.Cordform, dependsOn: [':install']) {
|
||||
directory "./build/nodes"
|
||||
networkMap "Controller"
|
||||
networkMap "Notary"
|
||||
node {
|
||||
name "Controller"
|
||||
name "Notary"
|
||||
dirName "controller"
|
||||
nearestCity "London"
|
||||
advertisedServices = ["corda.notary.validating", "corda.interest_rates"]
|
||||
artemisPort 10002
|
||||
webPort 10003
|
||||
cordapps = []
|
||||
useTestClock()
|
||||
}
|
||||
node {
|
||||
name "NodeA"
|
||||
name "Bank A"
|
||||
dirName "nodea"
|
||||
nearestCity "London"
|
||||
advertisedServices = []
|
||||
artemisPort 10004
|
||||
webPort 10005
|
||||
cordapps = []
|
||||
useTestClock()
|
||||
}
|
||||
node {
|
||||
name "NodeB"
|
||||
name "Bank B"
|
||||
dirName "nodeb"
|
||||
nearestCity "New York"
|
||||
advertisedServices = []
|
||||
artemisPort 10006
|
||||
webPort 10007
|
||||
cordapps = []
|
||||
useTestClock()
|
||||
}
|
||||
}
|
||||
|
||||
@ -131,4 +137,4 @@ publishing {
|
||||
artifact javadocJar
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,64 +1,47 @@
|
||||
@file:JvmName("IRSDemo")
|
||||
package net.corda.irs
|
||||
|
||||
import com.google.common.net.HostAndPort
|
||||
import joptsimple.OptionParser
|
||||
import net.corda.core.utilities.loggerFor
|
||||
import net.corda.irs.api.IRSDemoClientApi
|
||||
import org.slf4j.Logger
|
||||
import kotlin.system.exitProcess
|
||||
|
||||
/**
|
||||
* This entry point allows for command line running of the trader demo functions on nodes started by Main.kt.
|
||||
*/
|
||||
enum class Role {
|
||||
UploadRates,
|
||||
Trade,
|
||||
Date
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
IRSDemo().main(args)
|
||||
}
|
||||
|
||||
// TODO: Decide on a better, non-intelliJ-specific, non-5 layer deep script way to invoke
|
||||
// demos before M6.
|
||||
private class IRSDemo {
|
||||
enum class Role {
|
||||
UploadRates,
|
||||
Trade,
|
||||
Date
|
||||
val parser = OptionParser()
|
||||
val roleArg = parser.accepts("role").withRequiredArg().ofType(Role::class.java).required()
|
||||
val valueArg = parser.nonOptions()
|
||||
val options = try {
|
||||
parser.parse(*args)
|
||||
} catch (e: Exception) {
|
||||
println(e.message)
|
||||
printHelp(parser)
|
||||
exitProcess(1)
|
||||
}
|
||||
|
||||
companion object {
|
||||
val logger: Logger = loggerFor<IRSDemo>()
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
val parser = OptionParser()
|
||||
|
||||
val roleArg = parser.accepts("role").withRequiredArg().ofType(Role::class.java).required()
|
||||
val valueArg = parser.nonOptions()
|
||||
val options = try {
|
||||
parser.parse(*args)
|
||||
} catch (e: Exception) {
|
||||
logger.error(e.message)
|
||||
printHelp(parser)
|
||||
exitProcess(1)
|
||||
}
|
||||
|
||||
// What happens next depends on the role. The buyer sits around waiting for a trade to start. The seller role
|
||||
// will contact the buyer and actually make something happen.
|
||||
val role = options.valueOf(roleArg)!!
|
||||
val value = options.valueOf(valueArg)
|
||||
when (role) {
|
||||
Role.UploadRates -> IRSDemoClientApi(HostAndPort.fromString("localhost:10003")).runUploadRates()
|
||||
Role.Trade -> IRSDemoClientApi(HostAndPort.fromString("localhost:10005")).runTrade(value)
|
||||
Role.Date -> IRSDemoClientApi(HostAndPort.fromString("localhost:10007")).runDateChange(value)
|
||||
}
|
||||
}
|
||||
|
||||
fun printHelp(parser: OptionParser) {
|
||||
println("""
|
||||
Usage: irs-demo --role [UploadRates|Trade|Date] [trade ID|yyy-mm-dd]
|
||||
Please refer to the documentation in docs/build/index.html for more info.
|
||||
|
||||
""".trimIndent())
|
||||
parser.printHelpOn(System.out)
|
||||
// What happens next depends on the role. The buyer sits around waiting for a trade to start. The seller role
|
||||
// will contact the buyer and actually make something happen.
|
||||
val role = options.valueOf(roleArg)!!
|
||||
val value = options.valueOf(valueArg)
|
||||
when (role) {
|
||||
Role.UploadRates -> IRSDemoClientApi(HostAndPort.fromString("localhost:10003")).runUploadRates()
|
||||
Role.Trade -> IRSDemoClientApi(HostAndPort.fromString("localhost:10005")).runTrade(value)
|
||||
Role.Date -> IRSDemoClientApi(HostAndPort.fromString("localhost:10007")).runDateChange(value)
|
||||
}
|
||||
}
|
||||
|
||||
fun printHelp(parser: OptionParser) {
|
||||
println("""
|
||||
Usage: irs-demo --role [UploadRates|Trade|Date] [trade ID|yyy-mm-dd]
|
||||
Please refer to the documentation in docs/build/index.html for more info.
|
||||
|
||||
""".trimIndent())
|
||||
parser.printHelpOn(System.out)
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user