Regen docsite

This commit is contained in:
Mike Hearn 2016-05-09 18:13:23 +02:00
parent 97cb8defd3
commit 7499f7cf1f
33 changed files with 696 additions and 415 deletions

View File

@ -1,4 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: b08dca817adc75e78b383039f097775b
config: 02da61908148262295ef57918c434b8d
tags: 645f666f9bcd5a90fca523b33c5a78b7

View File

@ -1,13 +1,13 @@
Data model
==========
Description
-----------
This article covers the data model: how *states*, *transactions* and *code contracts* interact with each other and
how they are represented in the code. It doesn't attempt to give detailed design rationales or information on future
design elements: please refer to the R3 wiki for background information.
Overview
--------
We begin with the idea of a global ledger. In our model, although the ledger is shared, it is not always the case that
transactions and ledger entries are globally visible. In cases where a set of transactions stays within a small subgroup of
users it should be possible to keep the relevant data purely within that group.
@ -19,16 +19,21 @@ consume/destroy, these are called **inputs**, and contains a set of new states t
**outputs**.
States contain arbitrary data, but they always contain at minimum a hash of the bytecode of a
**code contract**, which is a program expressed in some byte code that runs sandboxed inside a virtual machine. Code
contracts (or just "contracts" in the rest of this document) are globally shared pieces of business logic. Contracts
define a **verify function**, which is a pure function given the entire transaction as input.
**contract code** file, which is a program expressed in JVM byte code that runs sandboxed inside a Java virtual machine.
Contract code (or just "contracts" in the rest of this document) are globally shared pieces of business logic.
To be considered valid, the transaction must be **accepted** by the verify function of every contract pointed to by the
input and output states. Beyond inputs and outputs, transactions may also contain **commands**, small data packets that
Contracts define a **verify function**, which is a pure function given the entire transaction as input. To be considered
valid, the transaction must be **accepted** by the verify function of every contract pointed to by the
input and output states.
Beyond inputs and outputs, transactions may also contain **commands**, small data packets that
the platform does not interpret itself, but which can parameterise execution of the contracts. They can be thought of as
arguments to the verify function. Each command has a list of **public keys** associated with it. The platform ensures
that the transaction is signed by every key listed in the commands before the contracts start to execute. Public keys
may be random/identityless for privacy, or linked to a well known legal identity via a *public key infrastructure* (PKI).
that the transaction is signed by every key listed in the commands before the contracts start to execute. Thus, a verify
function can trust that all listed keys have signed the transaction but is responsible for verifying that any keys required
for the transaction to be valid from the verify function's perspective are included in the list. Public keys
may be random/identityless for privacy, or linked to a well known legal identity, for example via a
*public key infrastructure* (PKI).
Commands are always embedded inside a transaction. Sometimes, there's a larger piece of data that can be reused across
many different transactions. For this use case, we have **attachments**. Every transaction can refer to zero or more
@ -50,8 +55,8 @@ attachment if the fact it's creating is relatively static and may be referred to
As the same terminology often crops up in different distributed ledger designs, let's compare this to other
distributed ledger systems you may be familiar with. You can find more detailed design rationales for why the platform
differs from existing systems in `the R3 wiki <https://r3-cev.atlassian.net/wiki/>`_, but to summarise, the driving
factors are:
differs from existing systems in `the R3 wiki <https://r3-cev.atlassian.net/wiki/display/AWG/Platform+Stream%3A+Corda>`_,
but to summarise, the driving factors are:
* Improved contract flexibility vs Bitcoin
* Improved scalability vs Ethereum, as well as ability to keep parts of the transaction graph private (yet still uniquely addressable)
@ -114,3 +119,140 @@ Differences:
* Ethereum claims to be a platform not only for financial logic, but literally any kind of application at all. Our
platform considers non-financial applications to be out of scope.
Rationale for and tradeoffs in adopting a UTXO-style model
----------------------------------------------------------
As discussed above, Corda uses the so-called "UTXO set" model (unspent transaction output). In this model, the database
does not track accounts or balances. Instead all database entries are immutable. An entry is either spent or not spent
but it cannot be changed. In Bitcoin, spentness is implemented simply as deletion the inputs of an accepted transaction
are deleted and the outputs created.
This approach has some advantages and some disadvantages, which is why some platforms like Ethereum have tried
(or are trying) to abstract this choice away and support a more traditional account-like model. We have explicitly
chosen *not* to do this and our decision to adopt a UTXO-style model is a deliberate one. In the section below,
the rationale for this decision and its pros and cons of this choice are outlined.
Rationale
---------
Corda, in common with other blockchain-like platforms, is designed to bring parties to shared sets of data into
consensus as to the existence, content and allowable evolutions of those data sets. However, Corda is designed with the
explicit aim of avoiding, to the extent possible, the scalability and privacy implications that arise from those platforms'
decisions to adopt a global broadcast model.
Whilst the privacy implications of a global consensus model are easy to understand, the scalability implications are
perhaps more subtle, yet serious. In a consensus system, it is critical that all processors of a transaction reach
precisely the same conclusion as to its effects. In situations where two transactions may act on the same data set,
it means that the two transactions must be processed in the same *order* by all nodes. If this were not the case then it
would be possible to devise situations where nodes processed transactions in different orders and reached different
conclusions as to the state of the system. It is for this reason that systems like Ethereum effectively run
single-threaded, meaning the speed of the system is limited by the single-threaded performance of the slowest
machine on the network.
In Corda, we assume the data being processed represents financial agreements between identifiable parties and that these
institutions will adopt the system only if a significant number of such agreements can be managed by the platform.
As such, the system has to be able to support parallelisation of execution to the greatest extent possible,
whilst ensuring correct transaction ordering when two transactions seek to act on the same piece of shared state.
To achieve this, we must minimise the number of parties who need to receive and process copies of any given
transaction and we must minimise the extent to which two transactions seek to mutate (or supersede) any given piece
of shared state.
A key design decision, therefore, is what should be the most atomic unit of shared data in the system. This decision
also has profound privacy implications: the more coarsely defined the shared data units, the larger the set of
actors who will likely have a stake in its accuracy and who must process and observe any update to it.
This becomes most obvious when we consider two models for representing cash balances and payments.
A simple account model for cash would define a data structure that maintained a balance at a particular bank for each
"account holder". Every holder of a balance would need a copy of this structure and would thus need to process and
validate every payment transaction, learning about everybody else's payments and balances in the process.
All payments across that set of accounts would have to be single-threaded across the platform, limiting maximum
throughput.
A more sophisticated example might create a data structure per account holder.
But, even here, I would leak my account balance to anybody to whom I ever made
a payment and I could only ever make one payment at a time, for the same reasons above.
A UTXO model would define a data structure that represented an *instance* of a claim against the bank. An account
holder could hold *many* such instances, the aggregate of which would reveal their balance at that institution. However,
the account holder now only needs to reveal to their payee those instances consumed in making a payment to that payee.
This also means the payer could make several payments in parallel. A downside is that the model is harder to understand.
However, we consider the privacy and scalability advantages to overwhelm the modest additional cognitive load this places
on those attempting to learn the system.
In what follows, further advantages and disadvantages of this design decision are explored.
Pros
----
The UTXO model has these advantages:
* Immutable ledger entries gives the usual advantages that a more functional approach brings: it's easy to do analysis
on a static snapshot of the data and reason about the contents.
* Because there are no accounts, it's very easy to apply transactions in parallel even for high traffic legal entities
assuming sufficiently granular entries.
* Transaction ordering becomes trivial: it is impossible to mis-order transactions due to the reliance on hash functions
to identify previous states. There is no need for sequence numbers or other things that are hard to provide in a
fully distributed system.
* Conflict resolution boils down to the double spending problem, which places extremely minimal demands on consensus
algorithms (as the variable you're trying to reach consensus on is a set of booleans).
Cons
----
It also comes with some pretty serious complexities that in practice must be abstracted from developers:
* Representing numeric amounts using immutable entries is unnatural. For instance, if you receive $1000 and wish
to send someone $100, you have to consume the $1000 output and then create two more: a $100 for the recipient and
$900 back to yourself as change. The fact that this happens can leak private information to an observer.
* Because users do need to think in terms of balances and statements, you have to layer this on top of the
underlying ledger: you can't just read someone's balance out of the system. Hence, the "wallet" / position manager.
Experience from those who have developed wallets for Bitcoin and other systems is that they can be complex pieces of code,
although the bulk of wallets' complexity in public systems is handling the lack of finality (and key management).
* Whilst transactions can be applied in parallel, it is much harder to create them in parallel due to the need to
strictly enforce a total ordering.
With respect to parallel creation, if the user is single threaded this is fine, but in a more complex situation
where you might want to be preparing multiple transactions in flight this can prove a limitation in
the worst case where you have a single output that represents all your value, this forces you to serialise
the creation of every transaction. If transactions can be created and signed very fast that's not a concern.
If there's only a single user, that's not a concern.
Both cases are typically true in the Bitcoin world, so users don't suffer from this much. In the context of a
complex business with a large pool of shared funds, in which creation of transactions may be very slow due to the
need to get different humans to approve a tx using a signing device, this could quickly lead to frustrating
conflicts where someone approves a transaction and then discovers that it has become a double spend and
they must sign again. In the absolute worst case you could get a form of human livelock.
The tricky part about solving these problems is that the simplest way to express a payment request
("send me $1000 to public key X") inherently results in you receiving a single output, which then can
prove insufficiently granular to be convenient. In the Bitcoin space Mike Hearn and Gavin Andresen designed "BIP 70"
to solve this: it's a simple binary format for requesting a payment and specifying exactly how you'd like to get paid,
including things like the shape of the transaction. It may seem that it's an over complex approach: could you not
just immediately respend the big output back to yourself in order to split it? And yes, you could, until you hit
scenarios like "the machine requesting the payment doesn't have the keys needed to spend it",
which turn out to be very common. So it's really more effective for a recipient to be able to say to the
sender, "here's the kind of transaction I want you to send me". The :doc:`protocol framework <protocol-state-machines>`
may provide a vehicle to make such negotiations simpler.
A further challenge is privacy. Whilst our goal of not sending transactions to nodes that don't "need to know"
helps, to verify a transaction you still need to verify all its dependencies and that can result in you receiving
lots of transactions that involve random third parties. The problems start when you have received lots of separate
payments and been careful not to make them linkable to your identity, but then you need to combine them all in a
single transaction to make a payment.
Mike Hearn wrote an article about this problem and techniques to minimise it in
`this article <https://medium.com/@octskyward/merge-avoidance-7f95a386692f>`_ from 2013. This article
coined the term "merge avoidance", which has never been implemented in the Bitcoin space,
although not due to lack of practicality.
A piece of future work for the wallet implementation will be to implement automated "grooming" of the wallet
to "reshape" outputs to useful/standardised sizes, for example, and to send outputs of complex transactions
back to their issuers for reissuance to "sever" long privacy-breaching chains.
Finally, it should be noted that some of the issues described here are not really "cons" of
the UTXO model; they're just fundamental.
If you used many different anonymous accounts to preserve some privacy and then needed to
spend the contents of them all simultaneously, you'd hit the same problem, so it's not
something that can be trivially fixed with data model changes.

View File

@ -7,7 +7,7 @@
<a href="../index.html">core.protocols</a>&nbsp;/&nbsp;<a href="index.html">ProtocolStateMachine</a>&nbsp;/&nbsp;<a href=".">&lt;init&gt;</a><br/>
<br/>
<h1>&lt;init&gt;</h1>
<code><span class="identifier">ProtocolStateMachine</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolStateMachine$<init>(core.protocols.ProtocolLogic((core.protocols.ProtocolStateMachine.R)), )/logic">logic</span><span class="symbol">:</span>&nbsp;<a href="../-protocol-logic/index.html"><span class="identifier">ProtocolLogic</span></a><span class="symbol">&lt;</span><span class="identifier">R</span><span class="symbol">&gt;</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$<init>(core.protocols.ProtocolLogic((core.protocols.ProtocolStateMachine.R)), )/scheduler">scheduler</span><span class="symbol">:</span>&nbsp;<span class="identifier">&lt;ERROR CLASS&gt;</span><span class="symbol">)</span></code><br/>
<code><span class="identifier">ProtocolStateMachine</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolStateMachine$<init>(core.protocols.ProtocolLogic((core.protocols.ProtocolStateMachine.R)), , kotlin.String)/logic">logic</span><span class="symbol">:</span>&nbsp;<a href="../-protocol-logic/index.html"><span class="identifier">ProtocolLogic</span></a><span class="symbol">&lt;</span><span class="identifier">R</span><span class="symbol">&gt;</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$<init>(core.protocols.ProtocolLogic((core.protocols.ProtocolStateMachine.R)), , kotlin.String)/scheduler">scheduler</span><span class="symbol">:</span>&nbsp;<span class="identifier">&lt;ERROR CLASS&gt;</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$<init>(core.protocols.ProtocolLogic((core.protocols.ProtocolStateMachine.R)), , kotlin.String)/loggerName">loggerName</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">)</span></code><br/>
<p>A ProtocolStateMachine instance is a suspendable fiber that delegates all actual logic to a <a href="../-protocol-logic/index.html">ProtocolLogic</a> instance.
For any given flow there is only one PSM, even if that protocol invokes subprotocols.</p>
<p>These classes are created by the <a href="../../core.messaging/-state-machine-manager/index.html">StateMachineManager</a> when a new protocol is started at the topmost level. If

View File

@ -24,7 +24,7 @@ logic element gets to return the value that the entire state machine resolves to
<td>
<a href="-init-.html">&lt;init&gt;</a></td>
<td>
<code><span class="identifier">ProtocolStateMachine</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolStateMachine$<init>(core.protocols.ProtocolLogic((core.protocols.ProtocolStateMachine.R)), )/logic">logic</span><span class="symbol">:</span>&nbsp;<a href="../-protocol-logic/index.html"><span class="identifier">ProtocolLogic</span></a><span class="symbol">&lt;</span><span class="identifier">R</span><span class="symbol">&gt;</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$<init>(core.protocols.ProtocolLogic((core.protocols.ProtocolStateMachine.R)), )/scheduler">scheduler</span><span class="symbol">:</span>&nbsp;<span class="identifier">&lt;ERROR CLASS&gt;</span><span class="symbol">)</span></code><p>A ProtocolStateMachine instance is a suspendable fiber that delegates all actual logic to a <a href="../-protocol-logic/index.html">ProtocolLogic</a> instance.
<code><span class="identifier">ProtocolStateMachine</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolStateMachine$<init>(core.protocols.ProtocolLogic((core.protocols.ProtocolStateMachine.R)), , kotlin.String)/logic">logic</span><span class="symbol">:</span>&nbsp;<a href="../-protocol-logic/index.html"><span class="identifier">ProtocolLogic</span></a><span class="symbol">&lt;</span><span class="identifier">R</span><span class="symbol">&gt;</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$<init>(core.protocols.ProtocolLogic((core.protocols.ProtocolStateMachine.R)), , kotlin.String)/scheduler">scheduler</span><span class="symbol">:</span>&nbsp;<span class="identifier">&lt;ERROR CLASS&gt;</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$<init>(core.protocols.ProtocolLogic((core.protocols.ProtocolStateMachine.R)), , kotlin.String)/loggerName">loggerName</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">)</span></code><p>A ProtocolStateMachine instance is a suspendable fiber that delegates all actual logic to a <a href="../-protocol-logic/index.html">ProtocolLogic</a> instance.
For any given flow there is only one PSM, even if that protocol invokes subprotocols.</p>
</td>
</tr>
@ -37,7 +37,13 @@ For any given flow there is only one PSM, even if that protocol invokes subproto
<td>
<a href="logger.html">logger</a></td>
<td>
<code><span class="keyword">lateinit</span> <span class="keyword">var </span><span class="identifier">logger</span><span class="symbol">: </span><span class="identifier">&lt;ERROR CLASS&gt;</span></code></td>
<code><span class="keyword">val </span><span class="identifier">logger</span><span class="symbol">: </span><span class="identifier">&lt;ERROR CLASS&gt;</span></code></td>
</tr>
<tr>
<td>
<a href="logger-name.html">loggerName</a></td>
<td>
<code><span class="keyword">val </span><span class="identifier">loggerName</span><span class="symbol">: </span><span class="identifier">String</span></code></td>
</tr>
<tr>
<td>
@ -67,7 +73,7 @@ For any given flow there is only one PSM, even if that protocol invokes subproto
<td>
<a href="prepare-for-resume-with.html">prepareForResumeWith</a></td>
<td>
<code><span class="keyword">fun </span><span class="identifier">prepareForResumeWith</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolStateMachine$prepareForResumeWith(core.node.ServiceHub, kotlin.Any, , kotlin.Function2((core.messaging.StateMachineManager.FiberRequest, kotlin.ByteArray, kotlin.Unit)))/serviceHub">serviceHub</span><span class="symbol">:</span>&nbsp;<a href="../../core.node/-service-hub/index.html"><span class="identifier">ServiceHub</span></a><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$prepareForResumeWith(core.node.ServiceHub, kotlin.Any, , kotlin.Function2((core.messaging.StateMachineManager.FiberRequest, kotlin.ByteArray, kotlin.Unit)))/withObject">withObject</span><span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">?</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$prepareForResumeWith(core.node.ServiceHub, kotlin.Any, , kotlin.Function2((core.messaging.StateMachineManager.FiberRequest, kotlin.ByteArray, kotlin.Unit)))/logger">logger</span><span class="symbol">:</span>&nbsp;<span class="identifier">&lt;ERROR CLASS&gt;</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$prepareForResumeWith(core.node.ServiceHub, kotlin.Any, , kotlin.Function2((core.messaging.StateMachineManager.FiberRequest, kotlin.ByteArray, kotlin.Unit)))/suspendFunc">suspendFunc</span><span class="symbol">:</span>&nbsp;<span class="symbol">(</span><a href="../../core.messaging/-state-machine-manager/-fiber-request/index.html"><span class="identifier">FiberRequest</span></a><span class="symbol">,</span>&nbsp;<span class="identifier">ByteArray</span><span class="symbol">)</span>&nbsp;<span class="symbol">-&gt;</span>&nbsp;<span class="identifier">Unit</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code></td>
<code><span class="keyword">fun </span><span class="identifier">prepareForResumeWith</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolStateMachine$prepareForResumeWith(core.node.ServiceHub, kotlin.Any, kotlin.Function2((core.messaging.StateMachineManager.FiberRequest, kotlin.ByteArray, kotlin.Unit)))/serviceHub">serviceHub</span><span class="symbol">:</span>&nbsp;<a href="../../core.node/-service-hub/index.html"><span class="identifier">ServiceHub</span></a><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$prepareForResumeWith(core.node.ServiceHub, kotlin.Any, kotlin.Function2((core.messaging.StateMachineManager.FiberRequest, kotlin.ByteArray, kotlin.Unit)))/withObject">withObject</span><span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">?</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$prepareForResumeWith(core.node.ServiceHub, kotlin.Any, kotlin.Function2((core.messaging.StateMachineManager.FiberRequest, kotlin.ByteArray, kotlin.Unit)))/suspendFunc">suspendFunc</span><span class="symbol">:</span>&nbsp;<span class="symbol">(</span><a href="../../core.messaging/-state-machine-manager/-fiber-request/index.html"><span class="identifier">FiberRequest</span></a><span class="symbol">,</span>&nbsp;<span class="identifier">ByteArray</span><span class="symbol">)</span>&nbsp;<span class="symbol">-&gt;</span>&nbsp;<span class="identifier">Unit</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code></td>
</tr>
<tr>
<td>

View File

@ -0,0 +1,15 @@
<HTML>
<HEAD>
<title>ProtocolStateMachine.loggerName - </title>
<link rel="stylesheet" href="../../style.css">
</HEAD>
<BODY>
<a href="../index.html">core.protocols</a>&nbsp;/&nbsp;<a href="index.html">ProtocolStateMachine</a>&nbsp;/&nbsp;<a href=".">loggerName</a><br/>
<br/>
<h1>loggerName</h1>
<a name="core.protocols.ProtocolStateMachine$loggerName"></a>
<code><span class="keyword">val </span><span class="identifier">loggerName</span><span class="symbol">: </span><span class="identifier">String</span></code><br/>
<br/>
<br/>
</BODY>
</HTML>

View File

@ -8,7 +8,7 @@
<br/>
<h1>logger</h1>
<a name="core.protocols.ProtocolStateMachine$logger"></a>
<code><span class="keyword">lateinit</span> <span class="keyword">var </span><span class="identifier">logger</span><span class="symbol">: </span><span class="identifier">&lt;ERROR CLASS&gt;</span></code><br/>
<code><span class="keyword">val </span><span class="identifier">logger</span><span class="symbol">: </span><span class="identifier">&lt;ERROR CLASS&gt;</span></code><br/>
<br/>
<br/>
</BODY>

View File

@ -7,8 +7,8 @@
<a href="../index.html">core.protocols</a>&nbsp;/&nbsp;<a href="index.html">ProtocolStateMachine</a>&nbsp;/&nbsp;<a href=".">prepareForResumeWith</a><br/>
<br/>
<h1>prepareForResumeWith</h1>
<a name="core.protocols.ProtocolStateMachine$prepareForResumeWith(core.node.ServiceHub, kotlin.Any, , kotlin.Function2((core.messaging.StateMachineManager.FiberRequest, kotlin.ByteArray, kotlin.Unit)))"></a>
<code><span class="keyword">fun </span><span class="identifier">prepareForResumeWith</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolStateMachine$prepareForResumeWith(core.node.ServiceHub, kotlin.Any, , kotlin.Function2((core.messaging.StateMachineManager.FiberRequest, kotlin.ByteArray, kotlin.Unit)))/serviceHub">serviceHub</span><span class="symbol">:</span>&nbsp;<a href="../../core.node/-service-hub/index.html"><span class="identifier">ServiceHub</span></a><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$prepareForResumeWith(core.node.ServiceHub, kotlin.Any, , kotlin.Function2((core.messaging.StateMachineManager.FiberRequest, kotlin.ByteArray, kotlin.Unit)))/withObject">withObject</span><span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">?</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$prepareForResumeWith(core.node.ServiceHub, kotlin.Any, , kotlin.Function2((core.messaging.StateMachineManager.FiberRequest, kotlin.ByteArray, kotlin.Unit)))/logger">logger</span><span class="symbol">:</span>&nbsp;<span class="identifier">&lt;ERROR CLASS&gt;</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$prepareForResumeWith(core.node.ServiceHub, kotlin.Any, , kotlin.Function2((core.messaging.StateMachineManager.FiberRequest, kotlin.ByteArray, kotlin.Unit)))/suspendFunc">suspendFunc</span><span class="symbol">:</span>&nbsp;<span class="symbol">(</span><a href="../../core.messaging/-state-machine-manager/-fiber-request/index.html"><span class="identifier">FiberRequest</span></a><span class="symbol">,</span>&nbsp;<span class="identifier">ByteArray</span><span class="symbol">)</span>&nbsp;<span class="symbol">-&gt;</span>&nbsp;<span class="identifier">Unit</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code><br/>
<a name="core.protocols.ProtocolStateMachine$prepareForResumeWith(core.node.ServiceHub, kotlin.Any, kotlin.Function2((core.messaging.StateMachineManager.FiberRequest, kotlin.ByteArray, kotlin.Unit)))"></a>
<code><span class="keyword">fun </span><span class="identifier">prepareForResumeWith</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolStateMachine$prepareForResumeWith(core.node.ServiceHub, kotlin.Any, kotlin.Function2((core.messaging.StateMachineManager.FiberRequest, kotlin.ByteArray, kotlin.Unit)))/serviceHub">serviceHub</span><span class="symbol">:</span>&nbsp;<a href="../../core.node/-service-hub/index.html"><span class="identifier">ServiceHub</span></a><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$prepareForResumeWith(core.node.ServiceHub, kotlin.Any, kotlin.Function2((core.messaging.StateMachineManager.FiberRequest, kotlin.ByteArray, kotlin.Unit)))/withObject">withObject</span><span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">?</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$prepareForResumeWith(core.node.ServiceHub, kotlin.Any, kotlin.Function2((core.messaging.StateMachineManager.FiberRequest, kotlin.ByteArray, kotlin.Unit)))/suspendFunc">suspendFunc</span><span class="symbol">:</span>&nbsp;<span class="symbol">(</span><a href="../../core.messaging/-state-machine-manager/-fiber-request/index.html"><span class="identifier">FiberRequest</span></a><span class="symbol">,</span>&nbsp;<span class="identifier">ByteArray</span><span class="symbol">)</span>&nbsp;<span class="symbol">-&gt;</span>&nbsp;<span class="identifier">Unit</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code><br/>
<br/>
<br/>
</BODY>

View File

@ -116,8 +116,8 @@ progress.</p>
<td>
<a href="../../../core.protocols/-protocol-logic/receive.html">receive</a></td>
<td>
<code><span class="keyword">fun </span><span class="symbol">&lt;</span><span class="identifier">T</span>&nbsp;<span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">&gt;</span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long)/topic">topic</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long)/sessionIDForReceive">sessionIDForReceive</span><span class="symbol">:</span>&nbsp;<span class="identifier">Long</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span></code><br/>
<code><span class="keyword">fun </span><span class="symbol">&lt;</span><span class="identifier">T</span>&nbsp;<span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">&gt;</span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/topic">topic</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/sessionIDForReceive">sessionIDForReceive</span><span class="symbol">:</span>&nbsp;<span class="identifier">Long</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/clazz">clazz</span><span class="symbol">:</span>&nbsp;<a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span></code></td>
<code><span class="keyword">fun </span><span class="symbol">&lt;</span><span class="identifier">T</span>&nbsp;<span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">&gt;</span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/topic">topic</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/sessionIDForReceive">sessionIDForReceive</span><span class="symbol">:</span>&nbsp;<span class="identifier">Long</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/clazz">clazz</span><span class="symbol">:</span>&nbsp;<a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span></code><br/>
<code><span class="keyword">fun </span><span class="symbol">&lt;</span><span class="identifier">T</span>&nbsp;<span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">&gt;</span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long)/topic">topic</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long)/sessionIDForReceive">sessionIDForReceive</span><span class="symbol">:</span>&nbsp;<span class="identifier">Long</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span></code></td>
</tr>
<tr>
<td>

View File

@ -122,8 +122,8 @@ progress.</p>
<td>
<a href="../../core.protocols/-protocol-logic/receive.html">receive</a></td>
<td>
<code><span class="keyword">fun </span><span class="symbol">&lt;</span><span class="identifier">T</span>&nbsp;<span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">&gt;</span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long)/topic">topic</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long)/sessionIDForReceive">sessionIDForReceive</span><span class="symbol">:</span>&nbsp;<span class="identifier">Long</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span></code><br/>
<code><span class="keyword">fun </span><span class="symbol">&lt;</span><span class="identifier">T</span>&nbsp;<span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">&gt;</span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/topic">topic</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/sessionIDForReceive">sessionIDForReceive</span><span class="symbol">:</span>&nbsp;<span class="identifier">Long</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/clazz">clazz</span><span class="symbol">:</span>&nbsp;<a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span></code></td>
<code><span class="keyword">fun </span><span class="symbol">&lt;</span><span class="identifier">T</span>&nbsp;<span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">&gt;</span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/topic">topic</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/sessionIDForReceive">sessionIDForReceive</span><span class="symbol">:</span>&nbsp;<span class="identifier">Long</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/clazz">clazz</span><span class="symbol">:</span>&nbsp;<a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span></code><br/>
<code><span class="keyword">fun </span><span class="symbol">&lt;</span><span class="identifier">T</span>&nbsp;<span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">&gt;</span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long)/topic">topic</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long)/sessionIDForReceive">sessionIDForReceive</span><span class="symbol">:</span>&nbsp;<span class="identifier">Long</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span></code></td>
</tr>
<tr>
<td>

View File

@ -3437,10 +3437,11 @@
<link rel="stylesheet" href="style.css">
</HEAD>
<BODY>
<a href="docs/build/html/api/index"><a href="core.protocols/-protocol-state-machine/-init-.html"><span class="identifier">ProtocolStateMachine</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolStateMachine$<init>(core.protocols.ProtocolLogic((core.protocols.ProtocolStateMachine.R)), )/logic">logic</span><span class="symbol">:</span>&nbsp;<a href="core.protocols/-protocol-logic/index.html"><span class="identifier">ProtocolLogic</span></a><span class="symbol">&lt;</span><span class="identifier">R</span><span class="symbol">&gt;</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$<init>(core.protocols.ProtocolLogic((core.protocols.ProtocolStateMachine.R)), )/scheduler">scheduler</span><span class="symbol">:</span>&nbsp;<span class="identifier">&lt;ERROR CLASS&gt;</span><span class="symbol">)</span></a></a><br/>
<a href="docs/build/html/api/index"><a href="core.protocols/-protocol-state-machine/logger.html"><span class="keyword">lateinit</span> <span class="keyword">var </span><span class="identifier">logger</span><span class="symbol">: </span><span class="identifier">&lt;ERROR CLASS&gt;</span></a></a><br/>
<a href="docs/build/html/api/index"><a href="core.protocols/-protocol-state-machine/-init-.html"><span class="identifier">ProtocolStateMachine</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolStateMachine$<init>(core.protocols.ProtocolLogic((core.protocols.ProtocolStateMachine.R)), , kotlin.String)/logic">logic</span><span class="symbol">:</span>&nbsp;<a href="core.protocols/-protocol-logic/index.html"><span class="identifier">ProtocolLogic</span></a><span class="symbol">&lt;</span><span class="identifier">R</span><span class="symbol">&gt;</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$<init>(core.protocols.ProtocolLogic((core.protocols.ProtocolStateMachine.R)), , kotlin.String)/scheduler">scheduler</span><span class="symbol">:</span>&nbsp;<span class="identifier">&lt;ERROR CLASS&gt;</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$<init>(core.protocols.ProtocolLogic((core.protocols.ProtocolStateMachine.R)), , kotlin.String)/loggerName">loggerName</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">)</span></a></a><br/>
<a href="docs/build/html/api/index"><a href="core.protocols/-protocol-state-machine/logger.html"><span class="keyword">val </span><span class="identifier">logger</span><span class="symbol">: </span><span class="identifier">&lt;ERROR CLASS&gt;</span></a></a><br/>
<a href="docs/build/html/api/index"><a href="core.protocols/-protocol-state-machine/logger-name.html"><span class="keyword">val </span><span class="identifier">loggerName</span><span class="symbol">: </span><span class="identifier">String</span></a></a><br/>
<a href="docs/build/html/api/index"><a href="core.protocols/-protocol-state-machine/logic.html"><span class="keyword">val </span><span class="identifier">logic</span><span class="symbol">: </span><a href="core.protocols/-protocol-logic/index.html"><span class="identifier">ProtocolLogic</span></a><span class="symbol">&lt;</span><span class="identifier">R</span><span class="symbol">&gt;</span></a></a><br/>
<a href="docs/build/html/api/index"><a href="core.protocols/-protocol-state-machine/prepare-for-resume-with.html"><span class="keyword">fun </span><span class="identifier">prepareForResumeWith</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolStateMachine$prepareForResumeWith(core.node.ServiceHub, kotlin.Any, , kotlin.Function2((core.messaging.StateMachineManager.FiberRequest, kotlin.ByteArray, kotlin.Unit)))/serviceHub">serviceHub</span><span class="symbol">:</span>&nbsp;<a href="core.node/-service-hub/index.html"><span class="identifier">ServiceHub</span></a><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$prepareForResumeWith(core.node.ServiceHub, kotlin.Any, , kotlin.Function2((core.messaging.StateMachineManager.FiberRequest, kotlin.ByteArray, kotlin.Unit)))/withObject">withObject</span><span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">?</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$prepareForResumeWith(core.node.ServiceHub, kotlin.Any, , kotlin.Function2((core.messaging.StateMachineManager.FiberRequest, kotlin.ByteArray, kotlin.Unit)))/logger">logger</span><span class="symbol">:</span>&nbsp;<span class="identifier">&lt;ERROR CLASS&gt;</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$prepareForResumeWith(core.node.ServiceHub, kotlin.Any, , kotlin.Function2((core.messaging.StateMachineManager.FiberRequest, kotlin.ByteArray, kotlin.Unit)))/suspendFunc">suspendFunc</span><span class="symbol">:</span>&nbsp;<span class="symbol">(</span><a href="core.messaging/-state-machine-manager/-fiber-request/index.html"><span class="identifier">FiberRequest</span></a><span class="symbol">,</span>&nbsp;<span class="identifier">ByteArray</span><span class="symbol">)</span>&nbsp;<span class="symbol">-&gt;</span>&nbsp;<span class="identifier">Unit</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></a></a><br/>
<a href="docs/build/html/api/index"><a href="core.protocols/-protocol-state-machine/prepare-for-resume-with.html"><span class="keyword">fun </span><span class="identifier">prepareForResumeWith</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolStateMachine$prepareForResumeWith(core.node.ServiceHub, kotlin.Any, kotlin.Function2((core.messaging.StateMachineManager.FiberRequest, kotlin.ByteArray, kotlin.Unit)))/serviceHub">serviceHub</span><span class="symbol">:</span>&nbsp;<a href="core.node/-service-hub/index.html"><span class="identifier">ServiceHub</span></a><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$prepareForResumeWith(core.node.ServiceHub, kotlin.Any, kotlin.Function2((core.messaging.StateMachineManager.FiberRequest, kotlin.ByteArray, kotlin.Unit)))/withObject">withObject</span><span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">?</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$prepareForResumeWith(core.node.ServiceHub, kotlin.Any, kotlin.Function2((core.messaging.StateMachineManager.FiberRequest, kotlin.ByteArray, kotlin.Unit)))/suspendFunc">suspendFunc</span><span class="symbol">:</span>&nbsp;<span class="symbol">(</span><a href="core.messaging/-state-machine-manager/-fiber-request/index.html"><span class="identifier">FiberRequest</span></a><span class="symbol">,</span>&nbsp;<span class="identifier">ByteArray</span><span class="symbol">)</span>&nbsp;<span class="symbol">-&gt;</span>&nbsp;<span class="identifier">Unit</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></a></a><br/>
<a href="docs/build/html/api/index"><a href="core.protocols/-protocol-state-machine/receive.html"><span class="keyword">fun </span><span class="symbol">&lt;</span><span class="identifier">T</span>&nbsp;<span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">&gt;</span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolStateMachine$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolStateMachine.receive.T)))/topic">topic</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolStateMachine.receive.T)))/sessionIDForReceive">sessionIDForReceive</span><span class="symbol">:</span>&nbsp;<span class="identifier">Long</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolStateMachine.receive.T)))/recvType">recvType</span><span class="symbol">:</span>&nbsp;<a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span><span class="symbol">)</span><span class="symbol">: </span><a href="core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span></a></a><br/>
<a href="docs/build/html/api/index"><a href="core.protocols/-protocol-state-machine/result-future.html"><span class="keyword">val </span><span class="identifier">resultFuture</span><span class="symbol">: </span><span class="identifier">&lt;ERROR CLASS&gt;</span><span class="symbol">&lt;</span><span class="identifier">R</span><span class="symbol">&gt;</span></a></a><br/>
<a href="docs/build/html/api/index"><a href="core.protocols/-protocol-state-machine/run.html"><span class="keyword">fun </span><span class="identifier">run</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">R</span></a></a><br/>
@ -9067,10 +9068,11 @@
<link rel="stylesheet" href="style.css">
</HEAD>
<BODY>
<a href="docs/build/html/api/index"><a href="core.protocols/-protocol-state-machine/-init-.html"><span class="identifier">ProtocolStateMachine</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolStateMachine$<init>(core.protocols.ProtocolLogic((core.protocols.ProtocolStateMachine.R)), )/logic">logic</span><span class="symbol">:</span>&nbsp;<a href="core.protocols/-protocol-logic/index.html"><span class="identifier">ProtocolLogic</span></a><span class="symbol">&lt;</span><span class="identifier">R</span><span class="symbol">&gt;</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$<init>(core.protocols.ProtocolLogic((core.protocols.ProtocolStateMachine.R)), )/scheduler">scheduler</span><span class="symbol">:</span>&nbsp;<span class="identifier">&lt;ERROR CLASS&gt;</span><span class="symbol">)</span></a></a><br/>
<a href="docs/build/html/api/index"><a href="core.protocols/-protocol-state-machine/logger.html"><span class="keyword">lateinit</span> <span class="keyword">var </span><span class="identifier">logger</span><span class="symbol">: </span><span class="identifier">&lt;ERROR CLASS&gt;</span></a></a><br/>
<a href="docs/build/html/api/index"><a href="core.protocols/-protocol-state-machine/-init-.html"><span class="identifier">ProtocolStateMachine</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolStateMachine$<init>(core.protocols.ProtocolLogic((core.protocols.ProtocolStateMachine.R)), , kotlin.String)/logic">logic</span><span class="symbol">:</span>&nbsp;<a href="core.protocols/-protocol-logic/index.html"><span class="identifier">ProtocolLogic</span></a><span class="symbol">&lt;</span><span class="identifier">R</span><span class="symbol">&gt;</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$<init>(core.protocols.ProtocolLogic((core.protocols.ProtocolStateMachine.R)), , kotlin.String)/scheduler">scheduler</span><span class="symbol">:</span>&nbsp;<span class="identifier">&lt;ERROR CLASS&gt;</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$<init>(core.protocols.ProtocolLogic((core.protocols.ProtocolStateMachine.R)), , kotlin.String)/loggerName">loggerName</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">)</span></a></a><br/>
<a href="docs/build/html/api/index"><a href="core.protocols/-protocol-state-machine/logger.html"><span class="keyword">val </span><span class="identifier">logger</span><span class="symbol">: </span><span class="identifier">&lt;ERROR CLASS&gt;</span></a></a><br/>
<a href="docs/build/html/api/index"><a href="core.protocols/-protocol-state-machine/logger-name.html"><span class="keyword">val </span><span class="identifier">loggerName</span><span class="symbol">: </span><span class="identifier">String</span></a></a><br/>
<a href="docs/build/html/api/index"><a href="core.protocols/-protocol-state-machine/logic.html"><span class="keyword">val </span><span class="identifier">logic</span><span class="symbol">: </span><a href="core.protocols/-protocol-logic/index.html"><span class="identifier">ProtocolLogic</span></a><span class="symbol">&lt;</span><span class="identifier">R</span><span class="symbol">&gt;</span></a></a><br/>
<a href="docs/build/html/api/index"><a href="core.protocols/-protocol-state-machine/prepare-for-resume-with.html"><span class="keyword">fun </span><span class="identifier">prepareForResumeWith</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolStateMachine$prepareForResumeWith(core.node.ServiceHub, kotlin.Any, , kotlin.Function2((core.messaging.StateMachineManager.FiberRequest, kotlin.ByteArray, kotlin.Unit)))/serviceHub">serviceHub</span><span class="symbol">:</span>&nbsp;<a href="core.node/-service-hub/index.html"><span class="identifier">ServiceHub</span></a><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$prepareForResumeWith(core.node.ServiceHub, kotlin.Any, , kotlin.Function2((core.messaging.StateMachineManager.FiberRequest, kotlin.ByteArray, kotlin.Unit)))/withObject">withObject</span><span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">?</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$prepareForResumeWith(core.node.ServiceHub, kotlin.Any, , kotlin.Function2((core.messaging.StateMachineManager.FiberRequest, kotlin.ByteArray, kotlin.Unit)))/logger">logger</span><span class="symbol">:</span>&nbsp;<span class="identifier">&lt;ERROR CLASS&gt;</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$prepareForResumeWith(core.node.ServiceHub, kotlin.Any, , kotlin.Function2((core.messaging.StateMachineManager.FiberRequest, kotlin.ByteArray, kotlin.Unit)))/suspendFunc">suspendFunc</span><span class="symbol">:</span>&nbsp;<span class="symbol">(</span><a href="core.messaging/-state-machine-manager/-fiber-request/index.html"><span class="identifier">FiberRequest</span></a><span class="symbol">,</span>&nbsp;<span class="identifier">ByteArray</span><span class="symbol">)</span>&nbsp;<span class="symbol">-&gt;</span>&nbsp;<span class="identifier">Unit</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></a></a><br/>
<a href="docs/build/html/api/index"><a href="core.protocols/-protocol-state-machine/prepare-for-resume-with.html"><span class="keyword">fun </span><span class="identifier">prepareForResumeWith</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolStateMachine$prepareForResumeWith(core.node.ServiceHub, kotlin.Any, kotlin.Function2((core.messaging.StateMachineManager.FiberRequest, kotlin.ByteArray, kotlin.Unit)))/serviceHub">serviceHub</span><span class="symbol">:</span>&nbsp;<a href="core.node/-service-hub/index.html"><span class="identifier">ServiceHub</span></a><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$prepareForResumeWith(core.node.ServiceHub, kotlin.Any, kotlin.Function2((core.messaging.StateMachineManager.FiberRequest, kotlin.ByteArray, kotlin.Unit)))/withObject">withObject</span><span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">?</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$prepareForResumeWith(core.node.ServiceHub, kotlin.Any, kotlin.Function2((core.messaging.StateMachineManager.FiberRequest, kotlin.ByteArray, kotlin.Unit)))/suspendFunc">suspendFunc</span><span class="symbol">:</span>&nbsp;<span class="symbol">(</span><a href="core.messaging/-state-machine-manager/-fiber-request/index.html"><span class="identifier">FiberRequest</span></a><span class="symbol">,</span>&nbsp;<span class="identifier">ByteArray</span><span class="symbol">)</span>&nbsp;<span class="symbol">-&gt;</span>&nbsp;<span class="identifier">Unit</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></a></a><br/>
<a href="docs/build/html/api/index"><a href="core.protocols/-protocol-state-machine/receive.html"><span class="keyword">fun </span><span class="symbol">&lt;</span><span class="identifier">T</span>&nbsp;<span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">&gt;</span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolStateMachine$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolStateMachine.receive.T)))/topic">topic</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolStateMachine.receive.T)))/sessionIDForReceive">sessionIDForReceive</span><span class="symbol">:</span>&nbsp;<span class="identifier">Long</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolStateMachine$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolStateMachine.receive.T)))/recvType">recvType</span><span class="symbol">:</span>&nbsp;<a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span><span class="symbol">)</span><span class="symbol">: </span><a href="core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span></a></a><br/>
<a href="docs/build/html/api/index"><a href="core.protocols/-protocol-state-machine/result-future.html"><span class="keyword">val </span><span class="identifier">resultFuture</span><span class="symbol">: </span><span class="identifier">&lt;ERROR CLASS&gt;</span><span class="symbol">&lt;</span><span class="identifier">R</span><span class="symbol">&gt;</span></a></a><br/>
<a href="docs/build/html/api/index"><a href="core.protocols/-protocol-state-machine/run.html"><span class="keyword">fun </span><span class="identifier">run</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">R</span></a></a><br/>

View File

@ -168,8 +168,8 @@ progress.</p>
<td>
<a href="../../core.protocols/-protocol-logic/receive.html">receive</a></td>
<td>
<code><span class="keyword">fun </span><span class="symbol">&lt;</span><span class="identifier">T</span>&nbsp;<span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">&gt;</span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long)/topic">topic</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long)/sessionIDForReceive">sessionIDForReceive</span><span class="symbol">:</span>&nbsp;<span class="identifier">Long</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span></code><br/>
<code><span class="keyword">fun </span><span class="symbol">&lt;</span><span class="identifier">T</span>&nbsp;<span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">&gt;</span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/topic">topic</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/sessionIDForReceive">sessionIDForReceive</span><span class="symbol">:</span>&nbsp;<span class="identifier">Long</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/clazz">clazz</span><span class="symbol">:</span>&nbsp;<a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span></code></td>
<code><span class="keyword">fun </span><span class="symbol">&lt;</span><span class="identifier">T</span>&nbsp;<span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">&gt;</span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/topic">topic</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/sessionIDForReceive">sessionIDForReceive</span><span class="symbol">:</span>&nbsp;<span class="identifier">Long</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/clazz">clazz</span><span class="symbol">:</span>&nbsp;<a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span></code><br/>
<code><span class="keyword">fun </span><span class="symbol">&lt;</span><span class="identifier">T</span>&nbsp;<span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">&gt;</span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long)/topic">topic</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long)/sessionIDForReceive">sessionIDForReceive</span><span class="symbol">:</span>&nbsp;<span class="identifier">Long</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span></code></td>
</tr>
<tr>
<td>

View File

@ -164,8 +164,8 @@ before its sent back to the oracle for signing (for example, adding output state
<td>
<a href="../../core.protocols/-protocol-logic/receive.html">receive</a></td>
<td>
<code><span class="keyword">fun </span><span class="symbol">&lt;</span><span class="identifier">T</span>&nbsp;<span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">&gt;</span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/topic">topic</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/sessionIDForReceive">sessionIDForReceive</span><span class="symbol">:</span>&nbsp;<span class="identifier">Long</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/clazz">clazz</span><span class="symbol">:</span>&nbsp;<a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span></code><br/>
<code><span class="keyword">fun </span><span class="symbol">&lt;</span><span class="identifier">T</span>&nbsp;<span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">&gt;</span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long)/topic">topic</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long)/sessionIDForReceive">sessionIDForReceive</span><span class="symbol">:</span>&nbsp;<span class="identifier">Long</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span></code></td>
<code><span class="keyword">fun </span><span class="symbol">&lt;</span><span class="identifier">T</span>&nbsp;<span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">&gt;</span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long)/topic">topic</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long)/sessionIDForReceive">sessionIDForReceive</span><span class="symbol">:</span>&nbsp;<span class="identifier">Long</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span></code><br/>
<code><span class="keyword">fun </span><span class="symbol">&lt;</span><span class="identifier">T</span>&nbsp;<span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">&gt;</span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/topic">topic</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/sessionIDForReceive">sessionIDForReceive</span><span class="symbol">:</span>&nbsp;<span class="identifier">Long</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/clazz">clazz</span><span class="symbol">:</span>&nbsp;<a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span></code></td>
</tr>
<tr>
<td>

View File

@ -101,8 +101,8 @@ progress.</p>
<td>
<a href="../../core.protocols/-protocol-logic/receive.html">receive</a></td>
<td>
<code><span class="keyword">fun </span><span class="symbol">&lt;</span><span class="identifier">T</span>&nbsp;<span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">&gt;</span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long)/topic">topic</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long)/sessionIDForReceive">sessionIDForReceive</span><span class="symbol">:</span>&nbsp;<span class="identifier">Long</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span></code><br/>
<code><span class="keyword">fun </span><span class="symbol">&lt;</span><span class="identifier">T</span>&nbsp;<span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">&gt;</span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/topic">topic</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/sessionIDForReceive">sessionIDForReceive</span><span class="symbol">:</span>&nbsp;<span class="identifier">Long</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/clazz">clazz</span><span class="symbol">:</span>&nbsp;<a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span></code></td>
<code><span class="keyword">fun </span><span class="symbol">&lt;</span><span class="identifier">T</span>&nbsp;<span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">&gt;</span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/topic">topic</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/sessionIDForReceive">sessionIDForReceive</span><span class="symbol">:</span>&nbsp;<span class="identifier">Long</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/clazz">clazz</span><span class="symbol">:</span>&nbsp;<a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span></code><br/>
<code><span class="keyword">fun </span><span class="symbol">&lt;</span><span class="identifier">T</span>&nbsp;<span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">&gt;</span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long)/topic">topic</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long)/sessionIDForReceive">sessionIDForReceive</span><span class="symbol">:</span>&nbsp;<span class="identifier">Long</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span></code></td>
</tr>
<tr>
<td>

View File

@ -120,8 +120,8 @@ progress.</p>
<td>
<a href="../../core.protocols/-protocol-logic/receive.html">receive</a></td>
<td>
<code><span class="keyword">fun </span><span class="symbol">&lt;</span><span class="identifier">T</span>&nbsp;<span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">&gt;</span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long)/topic">topic</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long)/sessionIDForReceive">sessionIDForReceive</span><span class="symbol">:</span>&nbsp;<span class="identifier">Long</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span></code><br/>
<code><span class="keyword">fun </span><span class="symbol">&lt;</span><span class="identifier">T</span>&nbsp;<span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">&gt;</span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/topic">topic</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/sessionIDForReceive">sessionIDForReceive</span><span class="symbol">:</span>&nbsp;<span class="identifier">Long</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/clazz">clazz</span><span class="symbol">:</span>&nbsp;<a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span></code></td>
<code><span class="keyword">fun </span><span class="symbol">&lt;</span><span class="identifier">T</span>&nbsp;<span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">&gt;</span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/topic">topic</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/sessionIDForReceive">sessionIDForReceive</span><span class="symbol">:</span>&nbsp;<span class="identifier">Long</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/clazz">clazz</span><span class="symbol">:</span>&nbsp;<a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span></code><br/>
<code><span class="keyword">fun </span><span class="symbol">&lt;</span><span class="identifier">T</span>&nbsp;<span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">&gt;</span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long)/topic">topic</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long)/sessionIDForReceive">sessionIDForReceive</span><span class="symbol">:</span>&nbsp;<span class="identifier">Long</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span></code></td>
</tr>
<tr>
<td>

View File

@ -158,8 +158,8 @@ progress.</p>
<td>
<a href="../../../core.protocols/-protocol-logic/receive.html">receive</a></td>
<td>
<code><span class="keyword">fun </span><span class="symbol">&lt;</span><span class="identifier">T</span>&nbsp;<span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">&gt;</span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/topic">topic</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/sessionIDForReceive">sessionIDForReceive</span><span class="symbol">:</span>&nbsp;<span class="identifier">Long</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/clazz">clazz</span><span class="symbol">:</span>&nbsp;<a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span></code><br/>
<code><span class="keyword">fun </span><span class="symbol">&lt;</span><span class="identifier">T</span>&nbsp;<span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">&gt;</span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long)/topic">topic</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long)/sessionIDForReceive">sessionIDForReceive</span><span class="symbol">:</span>&nbsp;<span class="identifier">Long</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span></code></td>
<code><span class="keyword">fun </span><span class="symbol">&lt;</span><span class="identifier">T</span>&nbsp;<span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">&gt;</span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long)/topic">topic</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long)/sessionIDForReceive">sessionIDForReceive</span><span class="symbol">:</span>&nbsp;<span class="identifier">Long</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span></code><br/>
<code><span class="keyword">fun </span><span class="symbol">&lt;</span><span class="identifier">T</span>&nbsp;<span class="symbol">:</span>&nbsp;<span class="identifier">Any</span><span class="symbol">&gt;</span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/topic">topic</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/sessionIDForReceive">sessionIDForReceive</span><span class="symbol">:</span>&nbsp;<span class="identifier">Long</span><span class="symbol">, </span><span class="identifier" id="core.protocols.ProtocolLogic$receive(kotlin.String, kotlin.Long, java.lang.Class((core.protocols.ProtocolLogic.receive.T)))/clazz">clazz</span><span class="symbol">:</span>&nbsp;<a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span></code></td>
</tr>
<tr>
<td>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Building the documentation &mdash; R3 Prototyping latest documentation</title>
<title>Building the documentation &mdash; R3 Corda latest documentation</title>
@ -30,7 +30,7 @@
<link rel="top" title="R3 Prototyping latest documentation" href="index.html"/>
<link rel="top" title="R3 Corda latest documentation" href="index.html"/>
<link rel="prev" title="Code style guide" href="codestyle.html"/>
@ -50,7 +50,7 @@
<a href="index.html" class="icon icon-home"> R3 Prototyping
<a href="index.html" class="icon icon-home"> R3 Corda
@ -96,7 +96,7 @@
</ul>
<p class="caption"><span class="caption-text">Tutorials</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="tutorial.html">Writing a contract</a></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="protocol-state-machines.html">Protocol state machines</a></li>
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
</ul>
@ -122,7 +122,7 @@
<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 Prototyping</a>
<a href="index.html">R3 Corda</a>
</nav>
@ -215,7 +215,7 @@ following to see a list of all available formats:</p>
<div role="contentinfo">
<p>
&copy; Copyright 2015, R3 CEV.
&copy; Copyright 2016, Distributed Ledger Group, LLC.
</p>
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Code style guide &mdash; R3 Prototyping latest documentation</title>
<title>Code style guide &mdash; R3 Corda latest documentation</title>
@ -30,7 +30,7 @@
<link rel="top" title="R3 Prototyping latest documentation" href="index.html"/>
<link rel="top" title="R3 Corda latest documentation" href="index.html"/>
<link rel="next" title="Building the documentation" href="building-the-docs.html"/>
<link rel="prev" title="Using the visualiser" href="visualiser.html"/>
@ -51,7 +51,7 @@
<a href="index.html" class="icon icon-home"> R3 Prototyping
<a href="index.html" class="icon icon-home"> R3 Corda
@ -128,7 +128,7 @@
<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 Prototyping</a>
<a href="index.html">R3 Corda</a>
</nav>
@ -332,7 +332,7 @@ really necessary. In other words, don&#8217;t do this:</p>
<div role="contentinfo">
<p>
&copy; Copyright 2015, R3 CEV.
&copy; Copyright 2016, Distributed Ledger Group, LLC.
</p>
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Data model &mdash; R3 Prototyping latest documentation</title>
<title>Data model &mdash; R3 Corda latest documentation</title>
@ -30,7 +30,7 @@
<link rel="top" title="R3 Prototyping latest documentation" href="index.html"/>
<link rel="top" title="R3 Corda latest documentation" href="index.html"/>
<link rel="next" title="Networking and messaging" href="messaging.html"/>
<link rel="prev" title="Getting set up" href="getting-set-up.html"/>
@ -51,7 +51,7 @@
<a href="index.html" class="icon icon-home"> R3 Prototyping
<a href="index.html" class="icon icon-home"> R3 Corda
@ -90,19 +90,23 @@
<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>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Data model</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#description">Description</a></li>
<li class="toctree-l2"><a class="reference internal" href="#overview">Overview</a></li>
<li class="toctree-l2"><a class="reference internal" href="#comparison-with-bitcoin">Comparison with Bitcoin</a></li>
<li class="toctree-l2"><a class="reference internal" href="#comparison-with-ethereum">Comparison with Ethereum</a></li>
<li class="toctree-l2"><a class="reference internal" href="#rationale-for-and-tradeoffs-in-adopting-a-utxo-style-model">Rationale for and tradeoffs in adopting a UTXO-style model</a></li>
<li class="toctree-l2"><a class="reference internal" href="#rationale">Rationale</a></li>
<li class="toctree-l2"><a class="reference internal" href="#pros">Pros</a></li>
<li class="toctree-l2"><a class="reference internal" href="#cons">Cons</a></li>
</ul>
</li>
<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="running-the-demos.html">Running the demos</a></li>
<li class="toctree-l1"><a class="reference internal" href="running-the-demos.html">Running the demos</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="irs.html">The Interest Rate Swap Contract</a></li>
</ul>
<p class="caption"><span class="caption-text">Tutorials</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="tutorial.html">Writing a contract</a></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="protocol-state-machines.html">Protocol state machines</a></li>
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
</ul>
@ -110,6 +114,7 @@
<ul>
<li class="toctree-l1"><a class="reference internal" href="visualiser.html">Using the visualiser</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>
@ -123,7 +128,7 @@
<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 Prototyping</a>
<a href="index.html">R3 Corda</a>
</nav>
@ -156,11 +161,11 @@
<div class="section" id="data-model">
<h1>Data model<a class="headerlink" href="#data-model" title="Permalink to this headline"></a></h1>
<div class="section" id="description">
<h2>Description<a class="headerlink" href="#description" title="Permalink to this headline"></a></h2>
<p>This article covers the data model: how <em>states</em>, <em>transactions</em> and <em>code contracts</em> interact with each other and
how they are represented in the code. It doesn&#8217;t attempt to give detailed design rationales or information on future
design elements: please refer to the R3 wiki for background information.</p>
<div class="section" id="overview">
<h2>Overview<a class="headerlink" href="#overview" title="Permalink to this headline"></a></h2>
<p>We begin with the idea of a global ledger. In our model, although the ledger is shared, it is not always the case that
transactions and ledger entries are globally visible. In cases where a set of transactions stays within a small subgroup of
users it should be possible to keep the relevant data purely within that group.</p>
@ -170,15 +175,19 @@ are created and destroyed by digitally signed <strong>transactions</strong>. Eac
consume/destroy, these are called <strong>inputs</strong>, and contains a set of new states that it will create, these are called
<strong>outputs</strong>.</p>
<p>States contain arbitrary data, but they always contain at minimum a hash of the bytecode of a
<strong>code contract</strong>, which is a program expressed in some byte code that runs sandboxed inside a virtual machine. Code
contracts (or just &#8220;contracts&#8221; in the rest of this document) are globally shared pieces of business logic. Contracts
define a <strong>verify function</strong>, which is a pure function given the entire transaction as input.</p>
<p>To be considered valid, the transaction must be <strong>accepted</strong> by the verify function of every contract pointed to by the
input and output states. Beyond inputs and outputs, transactions may also contain <strong>commands</strong>, small data packets that
<strong>contract code</strong> file, which is a program expressed in JVM byte code that runs sandboxed inside a Java virtual machine.
Contract code (or just &#8220;contracts&#8221; in the rest of this document) are globally shared pieces of business logic.</p>
<p>Contracts define a <strong>verify function</strong>, which is a pure function given the entire transaction as input. To be considered
valid, the transaction must be <strong>accepted</strong> by the verify function of every contract pointed to by the
input and output states.</p>
<p>Beyond inputs and outputs, transactions may also contain <strong>commands</strong>, small data packets that
the platform does not interpret itself, but which can parameterise execution of the contracts. They can be thought of as
arguments to the verify function. Each command has a list of <strong>public keys</strong> associated with it. The platform ensures
that the transaction is signed by every key listed in the commands before the contracts start to execute. Public keys
may be random/identityless for privacy, or linked to a well known legal identity via a <em>public key infrastructure</em> (PKI).</p>
that the transaction is signed by every key listed in the commands before the contracts start to execute. Thus, a verify
function can trust that all listed keys have signed the transaction but is responsible for verifying that any keys required
for the transaction to be valid from the verify function&#8217;s perspective are included in the list. Public keys
may be random/identityless for privacy, or linked to a well known legal identity, for example via a
<em>public key infrastructure</em> (PKI).</p>
<p>Commands are always embedded inside a transaction. Sometimes, there&#8217;s a larger piece of data that can be reused across
many different transactions. For this use case, we have <strong>attachments</strong>. Every transaction can refer to zero or more
attachments by hash. Attachments are always ZIP/JAR files, which may contain arbitrary content. Contract code can then
@ -196,8 +205,8 @@ A TSA signs a transaction if a pre-defined timestamping command in it defines a
attachment if the fact it&#8217;s creating is relatively static and may be referred to over and over again.</p>
<p>As the same terminology often crops up in different distributed ledger designs, let&#8217;s compare this to other
distributed ledger systems you may be familiar with. You can find more detailed design rationales for why the platform
differs from existing systems in <a class="reference external" href="https://r3-cev.atlassian.net/wiki/">the R3 wiki</a>, but to summarise, the driving
factors are:</p>
differs from existing systems in <a class="reference external" href="https://r3-cev.atlassian.net/wiki/display/AWG/Platform+Stream%3A+Corda">the R3 wiki</a>,
but to summarise, the driving factors are:</p>
<ul class="simple">
<li>Improved contract flexibility vs Bitcoin</li>
<li>Improved scalability vs Ethereum, as well as ability to keep parts of the transaction graph private (yet still uniquely addressable)</li>
@ -261,6 +270,125 @@ stateless i.e. it may not interact with any other part of the system whilst exec
platform considers non-financial applications to be out of scope.</li>
</ul>
</div>
<div class="section" id="rationale-for-and-tradeoffs-in-adopting-a-utxo-style-model">
<h2>Rationale for and tradeoffs in adopting a UTXO-style model<a class="headerlink" href="#rationale-for-and-tradeoffs-in-adopting-a-utxo-style-model" title="Permalink to this headline"></a></h2>
<p>As discussed above, Corda uses the so-called &#8220;UTXO set&#8221; model (unspent transaction output). In this model, the database
does not track accounts or balances. Instead all database entries are immutable. An entry is either spent or not spent
but it cannot be changed. In Bitcoin, spentness is implemented simply as deletion the inputs of an accepted transaction
are deleted and the outputs created.</p>
<p>This approach has some advantages and some disadvantages, which is why some platforms like Ethereum have tried
(or are trying) to abstract this choice away and support a more traditional account-like model. We have explicitly
chosen <em>not</em> to do this and our decision to adopt a UTXO-style model is a deliberate one. In the section below,
the rationale for this decision and its pros and cons of this choice are outlined.</p>
</div>
<div class="section" id="rationale">
<h2>Rationale<a class="headerlink" href="#rationale" title="Permalink to this headline"></a></h2>
<p>Corda, in common with other blockchain-like platforms, is designed to bring parties to shared sets of data into
consensus as to the existence, content and allowable evolutions of those data sets. However, Corda is designed with the
explicit aim of avoiding, to the extent possible, the scalability and privacy implications that arise from those platforms&#8217;
decisions to adopt a global broadcast model.</p>
<p>Whilst the privacy implications of a global consensus model are easy to understand, the scalability implications are
perhaps more subtle, yet serious. In a consensus system, it is critical that all processors of a transaction reach
precisely the same conclusion as to its effects. In situations where two transactions may act on the same data set,
it means that the two transactions must be processed in the same <em>order</em> by all nodes. If this were not the case then it
would be possible to devise situations where nodes processed transactions in different orders and reached different
conclusions as to the state of the system. It is for this reason that systems like Ethereum effectively run
single-threaded, meaning the speed of the system is limited by the single-threaded performance of the slowest
machine on the network.</p>
<p>In Corda, we assume the data being processed represents financial agreements between identifiable parties and that these
institutions will adopt the system only if a significant number of such agreements can be managed by the platform.
As such, the system has to be able to support parallelisation of execution to the greatest extent possible,
whilst ensuring correct transaction ordering when two transactions seek to act on the same piece of shared state.</p>
<p>To achieve this, we must minimise the number of parties who need to receive and process copies of any given
transaction and we must minimise the extent to which two transactions seek to mutate (or supersede) any given piece
of shared state.</p>
<p>A key design decision, therefore, is what should be the most atomic unit of shared data in the system. This decision
also has profound privacy implications: the more coarsely defined the shared data units, the larger the set of
actors who will likely have a stake in its accuracy and who must process and observe any update to it.</p>
<p>This becomes most obvious when we consider two models for representing cash balances and payments.</p>
<p>A simple account model for cash would define a data structure that maintained a balance at a particular bank for each
&#8220;account holder&#8221;. Every holder of a balance would need a copy of this structure and would thus need to process and
validate every payment transaction, learning about everybody else&#8217;s payments and balances in the process.
All payments across that set of accounts would have to be single-threaded across the platform, limiting maximum
throughput.</p>
<p>A more sophisticated example might create a data structure per account holder.
But, even here, I would leak my account balance to anybody to whom I ever made
a payment and I could only ever make one payment at a time, for the same reasons above.</p>
<p>A UTXO model would define a data structure that represented an <em>instance</em> of a claim against the bank. An account
holder could hold <em>many</em> such instances, the aggregate of which would reveal their balance at that institution. However,
the account holder now only needs to reveal to their payee those instances consumed in making a payment to that payee.
This also means the payer could make several payments in parallel. A downside is that the model is harder to understand.
However, we consider the privacy and scalability advantages to overwhelm the modest additional cognitive load this places
on those attempting to learn the system.</p>
<p>In what follows, further advantages and disadvantages of this design decision are explored.</p>
</div>
<div class="section" id="pros">
<h2>Pros<a class="headerlink" href="#pros" title="Permalink to this headline"></a></h2>
<p>The UTXO model has these advantages:</p>
<ul class="simple">
<li>Immutable ledger entries gives the usual advantages that a more functional approach brings: it&#8217;s easy to do analysis
on a static snapshot of the data and reason about the contents.</li>
<li>Because there are no accounts, it&#8217;s very easy to apply transactions in parallel even for high traffic legal entities
assuming sufficiently granular entries.</li>
<li>Transaction ordering becomes trivial: it is impossible to mis-order transactions due to the reliance on hash functions
to identify previous states. There is no need for sequence numbers or other things that are hard to provide in a
fully distributed system.</li>
<li>Conflict resolution boils down to the double spending problem, which places extremely minimal demands on consensus
algorithms (as the variable you&#8217;re trying to reach consensus on is a set of booleans).</li>
</ul>
</div>
<div class="section" id="cons">
<h2>Cons<a class="headerlink" href="#cons" title="Permalink to this headline"></a></h2>
<p>It also comes with some pretty serious complexities that in practice must be abstracted from developers:</p>
<ul class="simple">
<li>Representing numeric amounts using immutable entries is unnatural. For instance, if you receive $1000 and wish
to send someone $100, you have to consume the $1000 output and then create two more: a $100 for the recipient and
$900 back to yourself as change. The fact that this happens can leak private information to an observer.</li>
<li>Because users do need to think in terms of balances and statements, you have to layer this on top of the
underlying ledger: you can&#8217;t just read someone&#8217;s balance out of the system. Hence, the &#8220;wallet&#8221; / position manager.
Experience from those who have developed wallets for Bitcoin and other systems is that they can be complex pieces of code,
although the bulk of wallets&#8217; complexity in public systems is handling the lack of finality (and key management).</li>
<li>Whilst transactions can be applied in parallel, it is much harder to create them in parallel due to the need to
strictly enforce a total ordering.</li>
</ul>
<p>With respect to parallel creation, if the user is single threaded this is fine, but in a more complex situation
where you might want to be preparing multiple transactions in flight this can prove a limitation in
the worst case where you have a single output that represents all your value, this forces you to serialise
the creation of every transaction. If transactions can be created and signed very fast that&#8217;s not a concern.
If there&#8217;s only a single user, that&#8217;s not a concern.</p>
<p>Both cases are typically true in the Bitcoin world, so users don&#8217;t suffer from this much. In the context of a
complex business with a large pool of shared funds, in which creation of transactions may be very slow due to the
need to get different humans to approve a tx using a signing device, this could quickly lead to frustrating
conflicts where someone approves a transaction and then discovers that it has become a double spend and
they must sign again. In the absolute worst case you could get a form of human livelock.</p>
<p>The tricky part about solving these problems is that the simplest way to express a payment request
(&#8220;send me $1000 to public key X&#8221;) inherently results in you receiving a single output, which then can
prove insufficiently granular to be convenient. In the Bitcoin space Mike Hearn and Gavin Andresen designed &#8220;BIP 70&#8221;
to solve this: it&#8217;s a simple binary format for requesting a payment and specifying exactly how you&#8217;d like to get paid,
including things like the shape of the transaction. It may seem that it&#8217;s an over complex approach: could you not
just immediately respend the big output back to yourself in order to split it? And yes, you could, until you hit
scenarios like &#8220;the machine requesting the payment doesn&#8217;t have the keys needed to spend it&#8221;,
which turn out to be very common. So it&#8217;s really more effective for a recipient to be able to say to the
sender, &#8220;here&#8217;s the kind of transaction I want you to send me&#8221;. The <a class="reference internal" href="protocol-state-machines.html"><span class="doc">protocol framework</span></a>
may provide a vehicle to make such negotiations simpler.</p>
<p>A further challenge is privacy. Whilst our goal of not sending transactions to nodes that don&#8217;t &#8220;need to know&#8221;
helps, to verify a transaction you still need to verify all its dependencies and that can result in you receiving
lots of transactions that involve random third parties. The problems start when you have received lots of separate
payments and been careful not to make them linkable to your identity, but then you need to combine them all in a
single transaction to make a payment.</p>
<p>Mike Hearn wrote an article about this problem and techniques to minimise it in
<a class="reference external" href="https://medium.com/&#64;octskyward/merge-avoidance-7f95a386692f">this article</a> from 2013. This article
coined the term &#8220;merge avoidance&#8221;, which has never been implemented in the Bitcoin space,
although not due to lack of practicality.</p>
<p>A piece of future work for the wallet implementation will be to implement automated &#8220;grooming&#8221; of the wallet
to &#8220;reshape&#8221; outputs to useful/standardised sizes, for example, and to send outputs of complex transactions
back to their issuers for reissuance to &#8220;sever&#8221; long privacy-breaching chains.</p>
<p>Finally, it should be noted that some of the issues described here are not really &#8220;cons&#8221; of
the UTXO model; they&#8217;re just fundamental.
If you used many different anonymous accounts to preserve some privacy and then needed to
spend the contents of them all simultaneously, you&#8217;d hit the same problem, so it&#8217;s not
something that can be trivially fixed with data model changes.</p>
</div>
</div>
@ -282,7 +410,7 @@ platform considers non-financial applications to be out of scope.</li>
<div role="contentinfo">
<p>
&copy; Copyright 2015, R3 CEV.
&copy; Copyright 2016, Distributed Ledger Group, LLC.
</p>
</div>

View File

@ -9,7 +9,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Index &mdash; R3 Prototyping latest documentation</title>
<title>Index &mdash; R3 Corda latest documentation</title>
@ -31,7 +31,7 @@
<link rel="top" title="R3 Prototyping latest documentation" href="index.html"/>
<link rel="top" title="R3 Corda latest documentation" href="index.html"/>
<script src="_static/js/modernizr.min.js"></script>
@ -50,7 +50,7 @@
<a href="index.html" class="icon icon-home"> R3 Prototyping
<a href="index.html" class="icon icon-home"> R3 Corda
@ -118,7 +118,7 @@
<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 Prototyping</a>
<a href="index.html">R3 Corda</a>
</nav>
@ -164,7 +164,7 @@
<div role="contentinfo">
<p>
&copy; Copyright 2015, R3 CEV.
&copy; Copyright 2016, Distributed Ledger Group, LLC.
</p>
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Getting set up &mdash; R3 Prototyping latest documentation</title>
<title>Getting set up &mdash; R3 Corda latest documentation</title>
@ -30,7 +30,7 @@
<link rel="top" title="R3 Prototyping latest documentation" href="index.html"/>
<link rel="top" title="R3 Corda latest documentation" href="index.html"/>
<link rel="next" title="Data model" href="data-model.html"/>
<link rel="prev" title="Whats included?" href="inthebox.html"/>
@ -51,7 +51,7 @@
<a href="index.html" class="icon icon-home"> R3 Prototyping
<a href="index.html" class="icon icon-home"> R3 Corda
@ -95,13 +95,13 @@
</li>
<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="messaging.html">Networking and messaging</a></li>
<li class="toctree-l1"><a class="reference internal" href="running-the-demos.html">Running the demos</a></li>
<li class="toctree-l1"><a class="reference internal" href="running-the-demos.html">Running the demos</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="irs.html">The Interest Rate Swap Contract</a></li>
</ul>
<p class="caption"><span class="caption-text">Tutorials</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="tutorial.html">Writing a contract</a></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="protocol-state-machines.html">Protocol state machines</a></li>
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
</ul>
@ -109,6 +109,7 @@
<ul>
<li class="toctree-l1"><a class="reference internal" href="visualiser.html">Using the visualiser</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>
@ -122,7 +123,7 @@
<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 Prototyping</a>
<a href="index.html">R3 Corda</a>
</nav>
@ -212,7 +213,7 @@ found at something like</p>
<div role="contentinfo">
<p>
&copy; Copyright 2015, R3 CEV.
&copy; Copyright 2016, Distributed Ledger Group, LLC.
</p>
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Welcome to the R3 prototyping repository! &mdash; R3 Prototyping latest documentation</title>
<title>Welcome to the R3 prototyping repository! &mdash; R3 Corda latest documentation</title>
@ -30,7 +30,7 @@
<link rel="top" title="R3 Prototyping latest documentation" href="#"/>
<link rel="top" title="R3 Corda latest documentation" href="#"/>
<link rel="next" title="Whats included?" href="inthebox.html"/>
@ -50,7 +50,7 @@
<a href="#" class="icon icon-home"> R3 Prototyping
<a href="#" class="icon icon-home"> R3 Corda
@ -118,7 +118,7 @@
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="#">R3 Prototyping</a>
<a href="#">R3 Corda</a>
</nav>
@ -178,9 +178,13 @@ prove or disprove the following hypothesis:</p>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="data-model.html">Data model</a><ul>
<li class="toctree-l2"><a class="reference internal" href="data-model.html#description">Description</a></li>
<li class="toctree-l2"><a class="reference internal" href="data-model.html#overview">Overview</a></li>
<li class="toctree-l2"><a class="reference internal" href="data-model.html#comparison-with-bitcoin">Comparison with Bitcoin</a></li>
<li class="toctree-l2"><a class="reference internal" href="data-model.html#comparison-with-ethereum">Comparison with Ethereum</a></li>
<li class="toctree-l2"><a class="reference internal" href="data-model.html#rationale-for-and-tradeoffs-in-adopting-a-utxo-style-model">Rationale for and tradeoffs in adopting a UTXO-style model</a></li>
<li class="toctree-l2"><a class="reference internal" href="data-model.html#rationale">Rationale</a></li>
<li class="toctree-l2"><a class="reference internal" href="data-model.html#pros">Pros</a></li>
<li class="toctree-l2"><a class="reference internal" href="data-model.html#cons">Cons</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="messaging.html">Networking and messaging</a><ul>
@ -281,7 +285,7 @@ prove or disprove the following hypothesis:</p>
<div role="contentinfo">
<p>
&copy; Copyright 2015, R3 CEV.
&copy; Copyright 2016, Distributed Ledger Group, LLC.
</p>
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Whats included? &mdash; R3 Prototyping latest documentation</title>
<title>Whats included? &mdash; R3 Corda latest documentation</title>
@ -30,7 +30,7 @@
<link rel="top" title="R3 Prototyping latest documentation" href="index.html"/>
<link rel="top" title="R3 Corda latest documentation" href="index.html"/>
<link rel="next" title="Getting set up" href="getting-set-up.html"/>
<link rel="prev" title="Welcome to the R3 prototyping repository!" href="index.html"/>
@ -51,7 +51,7 @@
<a href="index.html" class="icon icon-home"> R3 Prototyping
<a href="index.html" class="icon icon-home"> R3 Corda
@ -95,13 +95,13 @@
<li class="toctree-l1"><a class="reference internal" href="getting-set-up.html">Getting set up</a></li>
<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="messaging.html">Networking and messaging</a></li>
<li class="toctree-l1"><a class="reference internal" href="running-the-demos.html">Running the demos</a></li>
<li class="toctree-l1"><a class="reference internal" href="running-the-demos.html">Running the demos</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="irs.html">The Interest Rate Swap Contract</a></li>
</ul>
<p class="caption"><span class="caption-text">Tutorials</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="tutorial.html">Writing a contract</a></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="protocol-state-machines.html">Protocol state machines</a></li>
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
</ul>
@ -109,6 +109,7 @@
<ul>
<li class="toctree-l1"><a class="reference internal" href="visualiser.html">Using the visualiser</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>
@ -122,7 +123,7 @@
<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 Prototyping</a>
<a href="index.html">R3 Corda</a>
</nav>
@ -246,7 +247,7 @@ to write contracts in both Kotlin and Java. You can <a class="reference external
<div role="contentinfo">
<p>
&copy; Copyright 2015, R3 CEV.
&copy; Copyright 2016, Distributed Ledger Group, LLC.
</p>
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>The Interest Rate Swap Contract &mdash; R3 Prototyping latest documentation</title>
<title>The Interest Rate Swap Contract &mdash; R3 Corda latest documentation</title>
@ -30,8 +30,8 @@
<link rel="top" title="R3 Prototyping latest documentation" href="index.html"/>
<link rel="next" title="Writing a contract" href="tutorial.html"/>
<link rel="top" title="R3 Corda latest documentation" href="index.html"/>
<link rel="next" title="Writing a contract" href="tutorial_contract.html"/>
<link rel="prev" title="Node administration" href="node-administration.html"/>
@ -51,7 +51,7 @@
<a href="index.html" class="icon icon-home"> R3 Prototyping
<a href="index.html" class="icon icon-home"> R3 Corda
@ -91,7 +91,7 @@
<li class="toctree-l1"><a class="reference internal" href="getting-set-up.html">Getting set up</a></li>
<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="messaging.html">Networking and messaging</a></li>
<li class="toctree-l1"><a class="reference internal" href="running-the-demos.html">Running the demos</a></li>
<li class="toctree-l1"><a class="reference internal" href="running-the-demos.html">Running the demos</a></li>
<li class="toctree-l1"><a class="reference internal" href="node-administration.html">Node administration</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">The Interest Rate Swap Contract</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#creating-an-instance-and-lifecycle">Creating an instance and lifecycle</a></li>
@ -101,7 +101,7 @@
</ul>
<p class="caption"><span class="caption-text">Tutorials</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="tutorial.html">Writing a contract</a></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="protocol-state-machines.html">Protocol state machines</a></li>
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
</ul>
@ -109,6 +109,7 @@
<ul>
<li class="toctree-l1"><a class="reference internal" href="visualiser.html">Using the visualiser</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>
@ -122,7 +123,7 @@
<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 Prototyping</a>
<a href="index.html">R3 Corda</a>
</nav>
@ -244,7 +245,7 @@ equivalent <code class="docutils literal"><span class="pre">FixedRatePaymentEven
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="tutorial.html" class="btn btn-neutral float-right" title="Writing a contract" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
<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>
<a href="node-administration.html" class="btn btn-neutral" title="Node administration" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
@ -256,7 +257,7 @@ equivalent <code class="docutils literal"><span class="pre">FixedRatePaymentEven
<div role="contentinfo">
<p>
&copy; Copyright 2015, R3 CEV.
&copy; Copyright 2016, Distributed Ledger Group, LLC.
</p>
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Networking and messaging &mdash; R3 Prototyping latest documentation</title>
<title>Networking and messaging &mdash; R3 Corda latest documentation</title>
@ -30,7 +30,7 @@
<link rel="top" title="R3 Prototyping latest documentation" href="index.html"/>
<link rel="top" title="R3 Corda latest documentation" href="index.html"/>
<link rel="next" title="Running the demos" href="running-the-demos.html"/>
<link rel="prev" title="Data model" href="data-model.html"/>
@ -51,7 +51,7 @@
<a href="index.html" class="icon icon-home"> R3 Prototyping
<a href="index.html" class="icon icon-home"> R3 Corda
@ -103,7 +103,7 @@
</ul>
<p class="caption"><span class="caption-text">Tutorials</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="tutorial.html">Writing a contract</a></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="protocol-state-machines.html">Protocol state machines</a></li>
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
</ul>
@ -125,7 +125,7 @@
<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 Prototyping</a>
<a href="index.html">R3 Corda</a>
</nav>
@ -285,7 +285,7 @@ updates the network map accordingly.</p>
<div role="contentinfo">
<p>
&copy; Copyright 2015, R3 CEV.
&copy; Copyright 2016, Distributed Ledger Group, LLC.
</p>
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Node administration &mdash; R3 Prototyping latest documentation</title>
<title>Node administration &mdash; R3 Corda latest documentation</title>
@ -30,12 +30,12 @@
<link rel="top" title="R3 Prototyping latest documentation" href="index.html"/>
<link rel="top" title="R3 Corda latest documentation" href="index.html"/>
<link rel="next" title="The Interest Rate Swap Contract" href="irs.html"/>
<link rel="prev" title="Running the demos" href="running-the-demos.html"/>
<link rel="prev" title="Running the demos" href="running-the-demos.html"/>
<script src="_static/js/modernizr.min.js"></script>
<script src="_static/js/modernizr.min.js"></script>
</head>
@ -51,7 +51,7 @@
<a href="index.html" class="icon icon-home"> R3 Prototyping
<a href="index.html" class="icon icon-home"> R3 Corda
@ -91,7 +91,7 @@
<li class="toctree-l1"><a class="reference internal" href="getting-set-up.html">Getting set up</a></li>
<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="messaging.html">Networking and messaging</a></li>
<li class="toctree-l1"><a class="reference internal" href="running-the-demos.html">Running the demos</a></li>
<li class="toctree-l1"><a class="reference internal" href="running-the-demos.html">Running the demos</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Node administration</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#monitoring-your-node">Monitoring your node</a></li>
<li class="toctree-l2"><a class="reference internal" href="#uploading-and-downloading-attachments">Uploading and downloading attachments</a></li>
@ -102,7 +102,7 @@
</ul>
<p class="caption"><span class="caption-text">Tutorials</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="tutorial.html">Writing a contract</a></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="protocol-state-machines.html">Protocol state machines</a></li>
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
</ul>
@ -110,6 +110,7 @@
<ul>
<li class="toctree-l1"><a class="reference internal" href="visualiser.html">Using the visualiser</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>
@ -123,7 +124,7 @@
<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 Prototyping</a>
<a href="index.html">R3 Corda</a>
</nav>
@ -240,10 +241,9 @@ EURIBOR 2016-03-15 2M = 0.111
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="irs.html" class="btn btn-neutral float-right" title="The Interest Rate Swap Contract" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="running-the-demos.html" class="btn btn-neutral" title="Running the demos" accesskey="p"><span
class="fa fa-arrow-circle-left"></span> Previous</a>
<a href="running-the-demos.html" class="btn btn-neutral" title="Running the demos" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
</div>
@ -252,7 +252,7 @@ EURIBOR 2016-03-15 2M = 0.111
<div role="contentinfo">
<p>
&copy; Copyright 2015, R3 CEV.
&copy; Copyright 2016, Distributed Ledger Group, LLC.
</p>
</div>

Binary file not shown.

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Writing oracle services &mdash; R3 Prototyping latest documentation</title>
<title>Writing oracle services &mdash; R3 Corda latest documentation</title>
@ -30,7 +30,7 @@
<link rel="top" title="R3 Prototyping latest documentation" href="index.html"/>
<link rel="top" title="R3 Corda latest documentation" href="index.html"/>
<link rel="next" title="Using the visualiser" href="visualiser.html"/>
<link rel="prev" title="Protocol state machines" href="protocol-state-machines.html"/>
@ -51,7 +51,7 @@
<a href="index.html" class="icon icon-home"> R3 Prototyping
<a href="index.html" class="icon icon-home"> R3 Corda
@ -91,13 +91,13 @@
<li class="toctree-l1"><a class="reference internal" href="getting-set-up.html">Getting set up</a></li>
<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="messaging.html">Networking and messaging</a></li>
<li class="toctree-l1"><a class="reference internal" href="running-the-demos.html">Running the demos</a></li>
<li class="toctree-l1"><a class="reference internal" href="running-the-demos.html">Running the demos</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="irs.html">The Interest Rate Swap Contract</a></li>
</ul>
<p class="caption"><span class="caption-text">Tutorials</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="tutorial.html">Writing a contract</a></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="protocol-state-machines.html">Protocol state machines</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Writing oracle services</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#introduction">Introduction</a></li>
@ -112,6 +112,7 @@
<ul>
<li class="toctree-l1"><a class="reference internal" href="visualiser.html">Using the visualiser</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>
@ -125,7 +126,7 @@
<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 Prototyping</a>
<a href="index.html">R3 Corda</a>
</nav>
@ -337,7 +338,7 @@ band.</p>
<div role="contentinfo">
<p>
&copy; Copyright 2015, R3 CEV.
&copy; Copyright 2016, Distributed Ledger Group, LLC.
</p>
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Protocol state machines &mdash; R3 Prototyping latest documentation</title>
<title>Protocol state machines &mdash; R3 Corda latest documentation</title>
@ -30,9 +30,9 @@
<link rel="top" title="R3 Prototyping latest documentation" href="index.html"/>
<link rel="top" title="R3 Corda latest documentation" href="index.html"/>
<link rel="next" title="Writing oracle services" href="oracles.html"/>
<link rel="prev" title="Writing a contract" href="tutorial.html"/>
<link rel="prev" title="Writing a contract" href="tutorial_contract.html"/>
<script src="_static/js/modernizr.min.js"></script>
@ -51,7 +51,7 @@
<a href="index.html" class="icon icon-home"> R3 Prototyping
<a href="index.html" class="icon icon-home"> R3 Corda
@ -91,13 +91,13 @@
<li class="toctree-l1"><a class="reference internal" href="getting-set-up.html">Getting set up</a></li>
<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="messaging.html">Networking and messaging</a></li>
<li class="toctree-l1"><a class="reference internal" href="running-the-demos.html">Running the demos</a></li>
<li class="toctree-l1"><a class="reference internal" href="running-the-demos.html">Running the demos</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="irs.html">The Interest Rate Swap Contract</a></li>
</ul>
<p class="caption"><span class="caption-text">Tutorials</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="tutorial.html">Writing a contract</a></li>
<li class="toctree-l1"><a class="reference internal" href="tutorial_contract.html">Writing a contract</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Protocol state machines</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#introduction">Introduction</a></li>
<li class="toctree-l2"><a class="reference internal" href="#theory">Theory</a></li>
@ -115,6 +115,7 @@
<ul>
<li class="toctree-l1"><a class="reference internal" href="visualiser.html">Using the visualiser</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>
@ -128,7 +129,7 @@
<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 Prototyping</a>
<a href="index.html">R3 Corda</a>
</nav>
@ -694,7 +695,7 @@ surfaced to human operators for investigation and resolution.</p>
<a href="oracles.html" class="btn btn-neutral float-right" title="Writing oracle services" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="tutorial.html" class="btn btn-neutral" title="Writing a contract" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
<a href="tutorial_contract.html" class="btn btn-neutral" title="Writing a contract" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
</div>
@ -703,7 +704,7 @@ surfaced to human operators for investigation and resolution.</p>
<div role="contentinfo">
<p>
&copy; Copyright 2015, R3 CEV.
&copy; Copyright 2016, Distributed Ledger Group, LLC.
</p>
</div>

View File

@ -1,302 +1,280 @@
<!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]-->
<!--[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 charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Running the demos &mdash; R3 Corda latest documentation</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Running the demos &mdash; R3 Prototyping latest documentation</title>
<link rel="stylesheet" href="_static/css/custom.css" type="text/css"/>
<link rel="stylesheet" href="_static/css/custom.css" type="text/css" />
<link rel="top" title="R3 Prototyping latest documentation" href="index.html"/>
<link rel="next" title="Node administration" href="node-administration.html"/>
<link rel="prev" title="Networking and messaging" href="messaging.html"/>
<link rel="top" title="R3 Corda latest documentation" href="index.html"/>
<link rel="next" title="Node administration" href="node-administration.html"/>
<link rel="prev" title="Networking and messaging" href="messaging.html"/>
<script src="_static/js/modernizr.min.js"></script>
<script src="_static/js/modernizr.min.js"></script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<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">
<div class="wy-side-scroll">
<div class="wy-side-nav-search">
<a href="index.html" class="icon icon-home"> R3 Prototyping
<a href="index.html" class="icon icon-home"> R3 Corda
</a>
</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>
<div class="version">
latest
</div>
<br>
<a href="api/index.html">API reference</a>
<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">
<p class="caption"><span class="caption-text">Overview</span></p>
<ul class="current">
<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>
<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="messaging.html">Networking and
messaging</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Running the demos</a>
<ul>
<li class="toctree-l2"><a class="reference internal" href="#trader-demo">Trader demo</a>
</li>
<li class="toctree-l2"><a class="reference internal" href="#irs-demo">IRS demo</a></li>
</ul>
</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="irs.html">The Interest Rate Swap
Contract</a></li>
</ul>
<p class="caption"><span class="caption-text">Tutorials</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="tutorial.html">Writing a contract</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="protocol-state-machines.html">Protocol
state machines</a></li>
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a>
</li>
</ul>
<p class="caption"><span class="caption-text">Appendix</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="visualiser.html">Using the visualiser</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="codestyle.html">Code style guide</a></li>
</ul>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<p class="caption"><span class="caption-text">Overview</span></p>
<ul class="current">
<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>
<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="messaging.html">Networking and messaging</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Running the demos</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#trader-demo">Trader demo</a></li>
<li class="toctree-l2"><a class="reference internal" href="#irs-demo">IRS demo</a></li>
</ul>
</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="irs.html">The Interest Rate Swap Contract</a></li>
</ul>
<p class="caption"><span class="caption-text">Tutorials</span></p>
<ul>
<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="protocol-state-machines.html">Protocol state machines</a></li>
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
</ul>
<p class="caption"><span class="caption-text">Appendix</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="visualiser.html">Using the visualiser</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>
</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 Prototyping</a>
</nav>
<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 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>Running the demos</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/running-the-demos.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">
<div class="section" id="running-the-demos">
<h1>Running the demos<a class="headerlink" href="#running-the-demos"
title="Permalink to this headline">¶</a></h1>
<p>The repository contains a small number of demo programs that run two-node networks,
demonstrating functionality developed
so far. We have:</p>
<ol class="arabic simple">
<li>The trader demo, which shows a delivery-vs-payment atomic swap of commercial paper
for cash. You can learn more about
how this works in <a class="reference internal" href="protocol-state-machines.html"><span
class="doc">Protocol state machines</span></a>.
</li>
<li>The IRS demo, which shows two nodes establishing an interest rate swap between them
and performing fixings with a
rates oracle, all driven via the HTTP API.
</li>
</ol>
<p>The demos have only been tested on MacOS X and Ubuntu Linux. If you have success on other
platforms, please let us know.</p>
<p>The demos create node data directories in the root of the project. If something goes
wrong with them, blow away the
directories and try again.</p>
<p>For Windows users, the contents of the shell scripts are very trivial and can easily be
done by hand from a command
window. Essentially, it just runs Gradle to create the startup scripts, and then starts
the node with one set of
flags or another. Alternatively you could play with the new Linux syscall support in
Windows 10!</p>
<div class="section" id="trader-demo">
<h2>Trader demo<a class="headerlink" href="#trader-demo"
title="Permalink to this headline">¶</a></h2>
<p>Open two terminals, and in the first run::</p>
<div class="highlight-kotlin">
<div class="highlight"><pre><span></span><span class="p">./</span><span class="n">scripts</span><span
class="p">/</span><span class="n">trader</span><span class="p">-</span><span
class="n">demo</span><span class="p">.</span><span class="n">sh</span> <span
class="n">buyer</span>
</pre>
</div>
</div>
<p>It will compile things, if necessary, then create a directory named &#8220;buyer&#8221;
with a bunch of files inside and start
the node. You should see it waiting for a trade to begin.</p>
<p>In the second terminal, run:</p>
<div class="highlight-kotlin">
<div class="highlight"><pre><span></span><span class="p">./</span><span class="n">scripts</span><span
class="p">/</span><span class="n">trader</span><span class="p">-</span><span
class="n">demo</span><span class="p">.</span><span class="n">sh</span> <span
class="n">seller</span>
</pre>
</div>
</div>
<p>You should see some log lines scroll past, and within a few seconds the messages
&#8220;Purchase complete - we are a
happy customer!&#8221; and &#8220;Sale completed - we have a happy customer!&#8221;
should be printed.</p>
<p>If it doesn&#8217;t work, jump on the mailing list and let us know.</p>
</div>
<div class="section" id="irs-demo">
<h2>IRS demo<a class="headerlink" href="#irs-demo"
title="Permalink to this headline">¶</a></h2>
<p>Open three terminals. In the first run::</p>
<div class="highlight-kotlin">
<div class="highlight"><pre><span></span><span class="p">./</span><span class="n">scripts</span><span
class="p">/</span><span class="n">irs</span><span class="p">-</span><span
class="n">demo</span><span class="p">.</span><span class="n">sh</span> <span
class="n">nodeA</span>
</pre>
</div>
</div>
<p>And in the second run::</p>
<div class="highlight-kotlin">
<div class="highlight"><pre><span></span><span class="p">./</span><span class="n">scripts</span><span
class="p">/</span><span class="n">irs</span><span class="p">-</span><span
class="n">demo</span><span class="p">.</span><span class="n">sh</span> <span
class="n">nodeB</span>
</pre>
</div>
</div>
<p>The node in the first terminal will complain that it didn&#8217;t know about nodeB,
so restart it. It&#8217;ll then find the
location and identity keys of nodeA and be happy. NodeB also doubles up as the
interest rates oracle and you should
see some rates data get loaded.</p>
<p>Now in the third terminal run::</p>
<div class="highlight-kotlin">
<div class="highlight"><pre><span></span><span class="p">./</span><span class="n">scripts</span><span
class="p">/</span><span class="n">irs</span><span class="p">-</span><span
class="n">demo</span><span class="p">.</span><span class="n">sh</span> <span
class="n">trade</span> <span class="n">trade1</span>
</pre>
</div>
</div>
<p>You should see some activity in the other two terminals as they set up the deal.
Further instructions will be printed
at this point showing how to advance the current date, so you can see them perform
fixings and (eventually) complete
the deal.</p>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="node-administration.html" class="btn btn-neutral float-right"
title="Node administration" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="messaging.html" class="btn btn-neutral" title="Networking and messaging" accesskey="p"><span
class="fa fa-arrow-circle-left"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&copy; Copyright 2015, R3 CEV.
</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 role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html">Docs</a> &raquo;</li>
<li>Running the demos</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/running-the-demos.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">
<div class="section" id="running-the-demos">
<h1>Running the demos<a class="headerlink" href="#running-the-demos" title="Permalink to this headline"></a></h1>
<p>The repository contains a small number of demo programs that run two-node networks, demonstrating functionality developed
so far. We have:</p>
<ol class="arabic simple">
<li>The trader demo, which shows a delivery-vs-payment atomic swap of commercial paper for cash. You can learn more about
how this works in <a class="reference internal" href="protocol-state-machines.html"><span class="doc">Protocol state machines</span></a>.</li>
<li>The IRS demo, which shows two nodes establishing an interest rate swap between them and performing fixings with a
rates oracle, all driven via the HTTP API.</li>
</ol>
<p>The demos have only been tested on MacOS X and Ubuntu Linux. If you have success on other platforms, please let us know.</p>
<p>The demos create node data directories in the root of the project. If something goes wrong with them, blow away the
directories and try again.</p>
<p>For Windows users, the contents of the shell scripts are very trivial and can easily be done by hand from a command
window. Essentially, it just runs Gradle to create the startup scripts, and then starts the node with one set of
flags or another. Alternatively you could play with the new Linux syscall support in Windows 10!</p>
<div class="section" id="trader-demo">
<h2>Trader demo<a class="headerlink" href="#trader-demo" title="Permalink to this headline"></a></h2>
<p>Open two terminals, and in the first run::</p>
<div class="highlight-kotlin"><div class="highlight"><pre><span></span><span class="p">./</span><span class="n">scripts</span><span class="p">/</span><span class="n">trader</span><span class="p">-</span><span class="n">demo</span><span class="p">.</span><span class="n">sh</span> <span class="n">buyer</span>
</pre></div>
</div>
<p>It will compile things, if necessary, then create a directory named &#8220;buyer&#8221; with a bunch of files inside and start
the node. You should see it waiting for a trade to begin.</p>
<p>In the second terminal, run:</p>
<div class="highlight-kotlin"><div class="highlight"><pre><span></span><span class="p">./</span><span class="n">scripts</span><span class="p">/</span><span class="n">trader</span><span class="p">-</span><span class="n">demo</span><span class="p">.</span><span class="n">sh</span> <span class="n">seller</span>
</pre></div>
</div>
<p>You should see some log lines scroll past, and within a few seconds the messages &#8220;Purchase complete - we are a
happy customer!&#8221; and &#8220;Sale completed - we have a happy customer!&#8221; should be printed.</p>
<p>If it doesn&#8217;t work, jump on the mailing list and let us know.</p>
</div>
<div class="section" id="irs-demo">
<h2>IRS demo<a class="headerlink" href="#irs-demo" title="Permalink to this headline"></a></h2>
<p>Open three terminals. In the first run::</p>
<div class="highlight-kotlin"><div class="highlight"><pre><span></span><span class="p">./</span><span class="n">scripts</span><span class="p">/</span><span class="n">irs</span><span class="p">-</span><span class="n">demo</span><span class="p">.</span><span class="n">sh</span> <span class="n">nodeA</span>
</pre></div>
</div>
<p>And in the second run::</p>
<div class="highlight-kotlin"><div class="highlight"><pre><span></span><span class="p">./</span><span class="n">scripts</span><span class="p">/</span><span class="n">irs</span><span class="p">-</span><span class="n">demo</span><span class="p">.</span><span class="n">sh</span> <span class="n">nodeB</span>
</pre></div>
</div>
<p>The node in the first terminal will complain that it didn&#8217;t know about nodeB, so restart it. It&#8217;ll then find the
location and identity keys of nodeA and be happy. NodeB also doubles up as the interest rates oracle and you should
see some rates data get loaded.</p>
<p>Now in the third terminal run::</p>
<div class="highlight-kotlin"><div class="highlight"><pre><span></span><span class="p">./</span><span class="n">scripts</span><span class="p">/</span><span class="n">irs</span><span class="p">-</span><span class="n">demo</span><span class="p">.</span><span class="n">sh</span> <span class="n">trade</span> <span class="n">trade1</span>
</pre></div>
</div>
<p>You should see some activity in the other two terminals as they set up the deal. Further instructions will be printed
at this point showing how to advance the current date, so you can see them perform fixings and (eventually) complete
the deal.</p>
</div>
</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>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="node-administration.html" class="btn btn-neutral float-right" title="Node administration" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="messaging.html" class="btn btn-neutral" title="Networking and messaging" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
</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" src="_static/js/theme.js"></script>
<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">
jQuery(function () {
SphinxRtdTheme.StickyNav.enable();
});
</script>
<script type="text/javascript" src="_static/js/theme.js"></script>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.StickyNav.enable();
});
</script>
</body>
</html>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Search &mdash; R3 Prototyping latest documentation</title>
<title>Search &mdash; R3 Corda latest documentation</title>
@ -30,7 +30,7 @@
<link rel="top" title="R3 Prototyping latest documentation" href="index.html"/>
<link rel="top" title="R3 Corda latest documentation" href="index.html"/>
<script src="_static/js/modernizr.min.js"></script>
@ -49,7 +49,7 @@
<a href="index.html" class="icon icon-home"> R3 Prototyping
<a href="index.html" class="icon icon-home"> R3 Corda
@ -117,7 +117,7 @@
<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 Prototyping</a>
<a href="index.html">R3 Corda</a>
</nav>
@ -167,7 +167,7 @@
<div role="contentinfo">
<p>
&copy; Copyright 2015, R3 CEV.
&copy; Copyright 2016, Distributed Ledger Group, LLC.
</p>
</div>

File diff suppressed because one or more lines are too long

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Writing a contract &mdash; R3 Prototyping latest documentation</title>
<title>Writing a contract &mdash; R3 Corda latest documentation</title>
@ -30,7 +30,7 @@
<link rel="top" title="R3 Prototyping latest documentation" href="index.html"/>
<link rel="top" title="R3 Corda latest documentation" href="index.html"/>
<link rel="next" title="Protocol state machines" href="protocol-state-machines.html"/>
<link rel="prev" title="The Interest Rate Swap Contract" href="irs.html"/>
@ -51,7 +51,7 @@
<a href="index.html" class="icon icon-home"> R3 Prototyping
<a href="index.html" class="icon icon-home"> R3 Corda
@ -130,7 +130,7 @@
<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 Prototyping</a>
<a href="index.html">R3 Corda</a>
</nav>
@ -923,7 +923,7 @@ be implemented once in a separate contract, with the controlling data being held
<div role="contentinfo">
<p>
&copy; Copyright 2015, R3 CEV.
&copy; Copyright 2016, Distributed Ledger Group, LLC.
</p>
</div>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Using the visualiser &mdash; R3 Prototyping latest documentation</title>
<title>Using the visualiser &mdash; R3 Corda latest documentation</title>
@ -30,7 +30,7 @@
<link rel="top" title="R3 Prototyping latest documentation" href="index.html"/>
<link rel="top" title="R3 Corda latest documentation" href="index.html"/>
<link rel="next" title="Code style guide" href="codestyle.html"/>
<link rel="prev" title="Writing oracle services" href="oracles.html"/>
@ -51,7 +51,7 @@
<a href="index.html" class="icon icon-home"> R3 Prototyping
<a href="index.html" class="icon icon-home"> R3 Corda
@ -91,13 +91,13 @@
<li class="toctree-l1"><a class="reference internal" href="getting-set-up.html">Getting set up</a></li>
<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="messaging.html">Networking and messaging</a></li>
<li class="toctree-l1"><a class="reference internal" href="running-the-demos.html">Running the demos</a></li>
<li class="toctree-l1"><a class="reference internal" href="running-the-demos.html">Running the demos</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="irs.html">The Interest Rate Swap Contract</a></li>
</ul>
<p class="caption"><span class="caption-text">Tutorials</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="tutorial.html">Writing a contract</a></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="protocol-state-machines.html">Protocol state machines</a></li>
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
</ul>
@ -105,6 +105,7 @@
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">Using the visualiser</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>
@ -118,7 +119,7 @@
<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 Prototyping</a>
<a href="index.html">R3 Corda</a>
</nav>
@ -235,7 +236,7 @@ feature).</li>
<div role="contentinfo">
<p>
&copy; Copyright 2015, R3 CEV.
&copy; Copyright 2016, Distributed Ledger Group, LLC.
</p>
</div>