Welcome to the CorDapp template. The CorDapp template is a stubbed-out CorDapp which you can use to bootstrap your own CorDapp projects.
This is the KOTLIN version of the CorDapp template. For the JAVA version click here.
NOTE: Previously, the cordapp-template repo included both Java and Kotlin versions. From M14, we have split them out into separate repositories.
You will need the following installed on your machine before you can start:
- JDK 8 installed and available on your path (Minimum version: 1.8_131).
- IntelliJ IDEA (Minimum version 2017.1)
- git
- Optional: h2 web console (download the "platform-independent zip")
For more detailed information, see the getting set up page on the Corda docsite.
To get started, clone this repository with:
git clone https://github.com/corda/cordapp-template-kotlin.git
And change directories to the newly cloned repo:
cd cordapp-template-kotlin
It is recommended to checkout a milestone release tag of Corda. To do this you must run:
git checkout release-M14
Warning: Snapshots are very unstable, it is recommended to use a milestone instead.
When building from the latest SNAPSHOT release you must also clone the master
branch of the corda repository and then run ./gradlew install
to build the dependencies required for this template.
Unix:
./gradlew deployNodes
Windows:
gradlew.bat deployNodes
Note: You'll need to re-run this build step after making any changes to the template for these to take effect on the node.
Once the build finishes, change directories to the folder where the newly built nodes are located:
cd build/nodes
The Gradle build script will have created a folder for each node. You'll
see three folders, one for each node and a runnodes
script. You can
run the nodes with:
Unix:
./runnodes
Windows:
runnodes.bat
You should now have three Corda nodes running on your machine serving the template.
When the nodes have booted up, you should see a message like the following in the node terminal windows:
Node for [X] started up and registered in x.xxx sec
The CorDapp defines a couple of HTTP API end-points and also serves some static web content. Initially, these return generic template responses.
The nodes can be found using the following port numbers, defined in
build.gradle
, as well as the node.conf
file for each node found
under build/nodes/partyX
:
PartyA: localhost:10007
PartyB: localhost:10010
As the nodes start up, they should tell you which host and port their embedded web server is running on. The API endpoints served are:
/api/template/templateGetEndpoint
And the static web content is served from:
/web/template
The ExampleClient.kt
file is a simple utility which uses the client
RPC library to connect to a node and log its transaction activity.
It will log any existing states and listen for any future states.
To run the client:
Via IntelliJ:
Select the 'Run Template RPC Client' run configuration which, by default, connects to PartyA (RPC port 10006). Click the Green Arrow to run the client.
Via the command line:
Run the following Gradle task from the root of the template:
./gradlew runTemplateClient
Note that the template RPC client won't output anything to the console as no state objects are contained in PartyA's vault.
The nodes can also be set up to communicate between separate machines on the same subnet.
After deploying the nodes, navigate to the build folder (build/ nodes
) and move some of the individual node folders to
separate machines on the same subnet (e.g. using a USB key). It is important
that no nodes - including the controller node - end up on more than one
machine. Each computer should also have a copy of runnodes
and
runnodes.bat
.
For example, you may end up with the following layout:
- Machine 1:
controller
,partya
,runnodes
,runnodes.bat
- Machine 2:
partyb
,partyc
,runnodes
,runnodes.bat
You must now edit the configuration file for each node, including the
controller. Open each node's config file ([nodeName]/node.conf
), and make
the following changes:
- Change the artemis address to the machine's ip address (e.g.
artemisAddress="10.18.0.166:10005"
) - Change the network map address to the ip address of the machine where the
controller node is running (e.g.
networkMapAddress="10.18.0.166:10002"
) (please note that the controller will not have a network map address)
Each machine should now run its nodes using runnodes
or runnodes.bat
files. Once they are up and running, the nodes should be able to communicate
among themselves in the same way as when they were running on the same machine.
Tutorials and developer docs for CorDapps and Corda are here.