corda/docs/build/html/where-to-start.html

325 lines
14 KiB
HTML
Raw Normal View History

2016-11-11 11:52:29 +00:00
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Where to start &mdash; R3 Corda latest documentation</title>
<link rel="stylesheet" href="_static/css/custom.css" type="text/css" />
<link rel="top" title="R3 Corda latest documentation" href="index.html"/>
<link rel="next" title="Writing a contract" href="tutorial-contract.html"/>
2016-11-23 12:50:02 +00:00
<link rel="prev" title="Creating a Cordapp" href="creating-a-cordapp.html"/>
2016-11-11 11:52:29 +00:00
<script src="_static/js/modernizr.min.js"></script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search">
<a href="index.html" class="icon icon-home"> R3 Corda
</a>
<div class="version">
latest
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
<br>
<a href="api/index.html">API reference</a>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
2016-11-23 12:50:02 +00:00
<p class="caption"><span class="caption-text">Getting started</span></p>
2016-11-11 11:52:29 +00:00
<ul>
<li class="toctree-l1"><a class="reference internal" href="inthebox.html">What&#8217;s included?</a></li>
<li class="toctree-l1"><a class="reference internal" href="getting-set-up.html">Getting set up</a></li>
2016-11-23 12:50:02 +00:00
<li class="toctree-l1"><a class="reference internal" href="running-the-demos.html">Running the demos</a></li>
</ul>
<p class="caption"><span class="caption-text">Key concepts</span></p>
<ul>
2016-11-11 11:52:29 +00:00
<li class="toctree-l1"><a class="reference internal" href="data-model.html">Data model</a></li>
<li class="toctree-l1"><a class="reference internal" href="transaction-data-types.html">Data types</a></li>
<li class="toctree-l1"><a class="reference internal" href="merkle-trees.html">Transaction Tear-offs</a></li>
<li class="toctree-l1"><a class="reference internal" href="consensus.html">Consensus model</a></li>
2016-11-23 12:50:02 +00:00
</ul>
<p class="caption"><span class="caption-text">The Corda node</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="clientrpc.html">Client RPC</a></li>
2016-11-11 11:52:29 +00:00
<li class="toctree-l1"><a class="reference internal" href="messaging.html">Networking and messaging</a></li>
<li class="toctree-l1"><a class="reference internal" href="persistence.html">Persistence</a></li>
<li class="toctree-l1"><a class="reference internal" href="node-administration.html">Node administration</a></li>
<li class="toctree-l1"><a class="reference internal" href="corda-configuration-files.html">The Corda Configuration File</a></li>
2016-11-25 12:10:21 +00:00
<li class="toctree-l1"><a class="reference internal" href="corda-plugins.html">The Corda Plugin Framework</a></li>
2016-11-23 12:50:02 +00:00
<li class="toctree-l1"><a class="reference internal" href="node-services.html">A Brief Introduction To The Node Services</a></li>
</ul>
<p class="caption"><span class="caption-text">CorDapps</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="creating-a-cordapp.html">Creating a Cordapp</a></li>
<li class="toctree-l1"><a class="reference internal" href="creating-a-cordapp.html#gradle-plugins-for-cordapps">Gradle Plugins for Cordapps</a></li>
2016-11-11 11:52:29 +00:00
</ul>
<p class="caption"><span class="caption-text">Tutorials</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">Where to start</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#the-trader-demo">The trader demo</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="tutorial-contract.html">Writing a contract</a></li>
<li class="toctree-l1"><a class="reference internal" href="tutorial-contract-clauses.html">Writing a contract using clauses</a></li>
<li class="toctree-l1"><a class="reference internal" href="tutorial-test-dsl.html">Writing a contract test</a></li>
2016-11-18 12:57:39 +00:00
<li class="toctree-l1"><a class="reference internal" href="tutorial-clientrpc-api.html">Client RPC API Tutorial</a></li>
2016-11-25 12:10:21 +00:00
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Writing flows</a></li>
<li class="toctree-l1"><a class="reference internal" href="flow-testing.html">Writing flow tests</a></li>
2016-11-11 11:52:29 +00:00
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
<li class="toctree-l1"><a class="reference internal" href="tutorial-attachments.html">Using attachments</a></li>
<li class="toctree-l1"><a class="reference internal" href="event-scheduling.html">Event scheduling</a></li>
</ul>
2016-11-23 12:50:02 +00:00
<p class="caption"><span class="caption-text">Other</span></p>
2016-11-11 11:52:29 +00:00
<ul>
2016-11-23 12:50:02 +00:00
<li class="toctree-l1"><a class="reference internal" href="network-simulator.html">Network Simulator</a></li>
<li class="toctree-l1"><a class="reference internal" href="node-explorer.html">Node Explorer</a></li>
<li class="toctree-l1"><a class="reference internal" href="initial-margin-agreement.html">Initial Margin Agreements</a></li>
2016-11-11 11:52:29 +00:00
</ul>
2016-11-23 12:50:02 +00:00
<p class="caption"><span class="caption-text">Component library</span></p>
2016-11-11 11:52:29 +00:00
<ul>
2016-11-23 12:50:02 +00:00
<li class="toctree-l1"><a class="reference internal" href="contract-catalogue.html">Contract catalogue</a></li>
<li class="toctree-l1"><a class="reference internal" href="contract-irs.html">Interest Rate Swaps</a></li>
2016-11-11 11:52:29 +00:00
</ul>
<p class="caption"><span class="caption-text">Appendix</span></p>
<ul>
2016-11-18 12:57:39 +00:00
<li class="toctree-l1"><a class="reference internal" href="loadtesting.html">Load testing</a></li>
2016-11-11 11:52:29 +00:00
<li class="toctree-l1"><a class="reference internal" href="secure-coding-guidelines.html">Secure coding guidelines</a></li>
<li class="toctree-l1"><a class="reference internal" href="release-process.html">Release process</a></li>
<li class="toctree-l1"><a class="reference internal" href="release-process.html#steps-to-cut-a-release">Steps to cut a release</a></li>
<li class="toctree-l1"><a class="reference internal" href="release-notes.html">Release notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="codestyle.html">Code style guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="building-the-docs.html">Building the documentation</a></li>
</ul>
2016-11-23 12:50:02 +00:00
<p class="caption"><span class="caption-text">Glossary</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="glossary.html">Glossary</a></li>
</ul>
2016-11-11 11:52:29 +00:00
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">R3 Corda</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html">Docs</a> &raquo;</li>
<li>Where to start</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/where-to-start.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/codesets.js"></script><div class="section" id="where-to-start">
<h1>Where to start<a class="headerlink" href="#where-to-start" title="Permalink to this headline"></a></h1>
<p>So you want to start experimenting with Corda. Where do you begin? Although Corda is still very early and missing
large chunks of important functionality, this article will hopefully put you on the right place.</p>
<p>An experiment with Corda is started by picking a <em>scenario</em> and then turning it into a <em>demo</em>. It is important to
understand that at this stage in its life, Corda does not have a single unified server that loads everything
dynamically. Instead, Corda provides an object oriented API which is then used by a <em>driver</em> program, with one driver
per scenario. You can see the existing demo apps in action by <a class="reference internal" href="running-the-demos.html"><span class="doc">Running the demos</span></a>.</p>
<p>In future this design will change and there will be a single server that does everything. But for now, there isn&#8217;t.</p>
<p>A scenario contains:</p>
<ul class="simple">
<li>A set of participating nodes and their roles.</li>
<li>Some business process you wish to automate (typically simplified from the real thing).</li>
2016-11-23 12:50:02 +00:00
<li>The smart contracts and flows that will automate that process.</li>
2016-11-11 11:52:29 +00:00
</ul>
<p>It may also specify a REST/JSON API, but this is optional.</p>
<p>Here&#8217;s are two example scenarios included in the box:</p>
<ol class="arabic simple">
<li>Bank A wishes to buy some commercial paper in return for cash. Bank B wants to issue and sell some CP to Bank A.
This is probably the simplest scenario in Corda that still does something interesting. It&#8217;s like the buttered
bread of finance.</li>
<li>Bank A and Bank B want to enter into an interest rate swap and evolve it through its lifecycle.</li>
</ol>
<p>The process of implementing a scenario looks like this:</p>
<ol class="arabic simple">
<li>First of all, design your states and transaction types. Read about the <a class="reference internal" href="data-model.html"><span class="doc">Data model</span></a> if you aren&#8217;t sure what that
involves.</li>
<li>Now, create a new file in the finance/src/main directory. You can either any JVM language but we only provide examples
in Java and Kotlin. The file should define your state classes and your contract class, which will define the
allowable state transitions. You can learn how these are constructed by reading the &#8220;<a class="reference internal" href="tutorial-contract.html"><span class="doc">Writing a contract</span></a>&#8221; tutorial.</li>
<li>It isn&#8217;t enough to just define static data and logic that controls what&#8217;s allowed. You must also orchestrate the
2016-11-23 12:50:02 +00:00
business process. This is the job of the flow framework. You can learn how to author these by reading
2016-11-25 12:10:21 +00:00
&#8220;<a class="reference internal" href="flow-state-machines.html"><span class="doc">Writing flows</span></a>&#8221;.</li>
2016-11-23 12:50:02 +00:00
<li>Once you have created your states, transactions and flows, you need a way to demonstrate them (outside of the
2016-11-11 11:52:29 +00:00
unit tests, of course). This topic is covered below.</li>
</ol>
<div class="section" id="the-trader-demo">
<h2>The trader demo<a class="headerlink" href="#the-trader-demo" title="Permalink to this headline"></a></h2>
<p>Until Corda has a unified server that can dynamically load every aspect of an application (i.e. software implementing a scenario),
we have to do a bit of copy/paste wiring ourselves.</p>
<p>The trader demo is a good place to start understanding this, which can be found in src/main/kotlin/demos/TraderDemo.kt</p>
<p>The idea of a driver program is that it starts a node in one of several roles, according to a command line flag. The
driver may step through some pre-programmed scenario automatically or it may register an API to be exported via HTTP.
You would then have to drive the node externally for your demo.</p>
<p>The best way to create your own scenario is not to write a driver from scratch but to copy the existing trader or IRS
demo drivers and then customise them, as much of the code would end up being shared (like for command line parsing).</p>
<p>Things you will want to adjust:</p>
<ol class="arabic simple">
<li>The name of the grouping directory each node role will create its private directory under.</li>
2016-11-23 12:50:02 +00:00
<li>The demo flows that just wrap the real business process in some kind of fake trading logic.</li>
2016-11-11 11:52:29 +00:00
</ol>
<p>The IRS driver program registers REST APIs, but as this is seriously in flux right now and the APIs will change a lot,
we do not recommend you try this as part of your initial explorations unless you are feeling adventurous.</p>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="tutorial-contract.html" class="btn btn-neutral float-right" title="Writing a contract" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
2016-11-23 12:50:02 +00:00
<a href="creating-a-cordapp.html" class="btn btn-neutral" title="Creating a Cordapp" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
2016-11-11 11:52:29 +00:00
</div>
<hr/>
<div role="contentinfo">
<p>
&copy; Copyright 2016, Distributed Ledger Group, LLC.
</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'./',
VERSION:'latest',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/js/theme.js"></script>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.StickyNav.enable();
});
</script>
</body>
</html>