Regen docsite
BIN
docs/build/doctrees/clientrpc.doctree
vendored
BIN
docs/build/doctrees/corda-plugins.doctree
vendored
Normal file
BIN
docs/build/doctrees/creating-a-cordapp.doctree
vendored
BIN
docs/build/doctrees/environment.pickle
vendored
BIN
docs/build/doctrees/flow-state-machines.doctree
vendored
BIN
docs/build/doctrees/flow-testing.doctree
vendored
Normal file
BIN
docs/build/doctrees/further-notes-on-kotlin.doctree
vendored
BIN
docs/build/doctrees/getting-set-up.doctree
vendored
BIN
docs/build/doctrees/index.doctree
vendored
BIN
docs/build/doctrees/loadtesting.doctree
vendored
BIN
docs/build/doctrees/network-simulator.doctree
vendored
BIN
docs/build/doctrees/node-administration.doctree
vendored
BIN
docs/build/doctrees/node-explorer.doctree
vendored
BIN
docs/build/doctrees/tutorial-contract.doctree
vendored
BIN
docs/build/html/_images/contract-cp-state.png
vendored
Normal file
After Width: | Height: | Size: 66 KiB |
BIN
docs/build/html/_images/contract-cp.png
vendored
Normal file
After Width: | Height: | Size: 249 KiB |
BIN
docs/build/html/_images/dashboard.png
vendored
Before Width: | Height: | Size: 167 KiB After Width: | Height: | Size: 117 KiB |
BIN
docs/build/html/_images/login.png
vendored
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 74 KiB |
BIN
docs/build/html/_images/network.png
vendored
Normal file
After Width: | Height: | Size: 704 KiB |
BIN
docs/build/html/_images/newTransaction.png
vendored
Before Width: | Height: | Size: 127 KiB After Width: | Height: | Size: 274 KiB |
BIN
docs/build/html/_images/settings.png
vendored
Normal file
After Width: | Height: | Size: 112 KiB |
BIN
docs/build/html/_images/transactionView.png
vendored
Before Width: | Height: | Size: 297 KiB After Width: | Height: | Size: 353 KiB |
BIN
docs/build/html/_images/vault.png
vendored
Before Width: | Height: | Size: 289 KiB After Width: | Height: | Size: 309 KiB |
98
docs/build/html/_sources/corda-plugins.txt
vendored
Normal file
@ -0,0 +1,98 @@
|
||||
The Corda Plugin Framework
|
||||
==========================
|
||||
|
||||
The intention is that Corda is a common platform, which will be extended
|
||||
by numerous application extensions (CorDapps). These extensions will
|
||||
package together all of the Corda contract code, state structures,
|
||||
protocols/flows to create and modify state as well as RPC extensions for
|
||||
node clients. Details of writing these CorDapps is given elsewhere
|
||||
:doc:`creating-a-cordapp`.
|
||||
|
||||
To enable these plugins to register dynamically with the Corda framework
|
||||
the node uses the Java ``ServiceLoader`` to locate and load the plugin
|
||||
components during the ``AbstractNode.start`` call. Therefore,
|
||||
to be recognised as a plugin the component must:
|
||||
|
||||
1. Include a default constructable class extending from
|
||||
``net.corda.core.node.CordaPluginRegistry`` which overrides the relevant
|
||||
registration methods.
|
||||
|
||||
2. Include a resource file named
|
||||
``net.corda.core.node.CordaPluginRegistry`` in the ``META-INF.services``
|
||||
path. This must include a line containing the fully qualified name of
|
||||
the ``CordaPluginRegistry`` implementation class. Multiple plugin
|
||||
registries are allowed in this file if desired.
|
||||
|
||||
3. The plugin component must be on the classpath. In the normal use this
|
||||
means that it should be present within the plugins subfolder of the
|
||||
node's workspace.
|
||||
|
||||
4. As a plugin the registered components are then allowed access to some
|
||||
of the node internal subsystems.
|
||||
|
||||
5. The overridden properties on the registry class information about the different
|
||||
extensions to be created, or registered at startup. In particular:
|
||||
|
||||
a. The ``webApis`` property is a list of JAX-RS annotated REST access
|
||||
classes. These classes will be constructed by the embedded web server
|
||||
and must have a single argument constructor taking a ``ServiceHub``
|
||||
reference. This reference provides acccess to functions such as querying
|
||||
for states through the ``VaultService`` interface, or access to the
|
||||
``NetworkMapCache`` to identify services on remote nodes. The framework will
|
||||
provide a database transaction in scope during the lifetime of the web
|
||||
call, so full access to database data is valid. Unlike
|
||||
``servicePlugins`` the ``webApis`` cannnot register new protocols, or
|
||||
initiate threads. (N.B. The intent is to move the Web support into a
|
||||
separate helper process using the RPC mechanism to control access.)
|
||||
|
||||
b. The ``staticServeDirs`` property maps static web content to virtual
|
||||
paths and allows simple web demos to be distributed within the CorDapp
|
||||
jars. (N.B. The intent is to move the Web support into a separate helper
|
||||
process using the RPC mechanism to control access.)
|
||||
|
||||
c. The ``requiredFlows`` property is used to declare new protocols in
|
||||
the plugin jar. Specifically the property must return a map with a key
|
||||
naming each exposed top level flow class and a value which is a set
|
||||
naming every parameter class that will be passed to the flow's
|
||||
constructor. Standard ``java.lang.*`` and ``kotlin.*`` types do not need
|
||||
to be included, but all other parameter types, or concrete interface
|
||||
implementations need declaring. Declaring a specific flow in this map
|
||||
white lists it for activation by the ``FlowLogicRefFactory``. White
|
||||
listing is not strictly required for ``subFlows`` used internally, but
|
||||
is required for any top level flow, or a flow which is invoked through
|
||||
the scheduler.
|
||||
|
||||
d. The ``servicePlugins`` property returns a list of classes which will
|
||||
be instantiated once during the ``AbstractNode.start`` call. These
|
||||
classes must provide a single argument constructor which will receive a
|
||||
``PluginServiceHub`` reference. These singleton instances are regarded
|
||||
as trusted components and can be used for a number of purposes.
|
||||
|
||||
i. Firstly, they can call ``PluginServiceHub.registerFlowInitiator`` and
|
||||
register flows that will be initiated locally in response to remote flow
|
||||
requests.
|
||||
|
||||
ii. Second, the service can hold a long lived reference to the
|
||||
PluginServiceHub and to other private data, so the service can be used
|
||||
to provide Oracle functionality. This Oracle functionality would
|
||||
typically be exposed to other nodes by flows which are given a reference
|
||||
to the service plugin when initiated (as defined by the
|
||||
``registerFlowInitiator`` call). The flow can then call into functions
|
||||
on the plugin service singleton. Note, care should be taken to not allow
|
||||
flows to hold references to plugin services, or fields which are not
|
||||
also ``SingletonSerializeAsToken``, otherwise Quasar suspension in the
|
||||
``StateMachineManager`` will fail with exceptions. An example oracle can
|
||||
be seen in ``NodeInterestRates.kt`` in the irs-demo sample.
|
||||
|
||||
iii. The final
|
||||
use case for service plugins is that they can spawn threads, or register
|
||||
to monitor vault updates. This allows them to provide long lived active
|
||||
functions inside the node, for instance to initiate workflows when
|
||||
certain conditions are met.
|
||||
|
||||
e. The ``registerRPCKryoTypes`` function allows custom Kryo serialisers
|
||||
to be registered and whitelisted for the RPC client interface. For
|
||||
instance new state types passed to flows started via RPC will need
|
||||
to be explicitly registered. This will be called at various points on
|
||||
various threads and needs to be stable and thread safe.
|
||||
|
@ -178,9 +178,6 @@ To build against Corda and the plugins that cordapps use, update your build.grad
|
||||
|
||||
... your tasks ...
|
||||
|
||||
// Sets the classes for Quasar to scan. Loaded by the the quasar-utils plugin.
|
||||
quasarScan.dependsOn('classes', ... your dependent subprojects...)
|
||||
|
||||
// Standard way to publish Cordapps to maven local with the maven-publish and publish-utils plugin.
|
||||
publishing {
|
||||
publications {
|
||||
|
262
docs/build/html/_sources/flow-state-machines.txt
vendored
@ -4,10 +4,10 @@
|
||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="_static/codesets.js"></script>
|
||||
|
||||
Flow state machines
|
||||
===================
|
||||
Writing flows
|
||||
=============
|
||||
|
||||
This article explains our experimental approach to modelling financial flows in code. It explains how the
|
||||
This article explains our approach to modelling financial flows in code. It explains how the
|
||||
platform's state machine framework is used, and takes you through the code for a simple 2-party asset trading flow
|
||||
which is included in the source.
|
||||
|
||||
@ -91,7 +91,7 @@ Our flow has two parties (B and S for buyer and seller) and will proceed as foll
|
||||
it lacks a signature from S authorising movement of the asset.
|
||||
3. S signs it and hands the now finalised ``SignedTransaction`` back to B.
|
||||
|
||||
You can find the implementation of this flow in the file ``finance/src/main/kotlin/net.corda.flows/TwoPartyTradeFlow.kt``.
|
||||
You can find the implementation of this flow in the file ``finance/src/main/kotlin/net/corda/flows/TwoPartyTradeFlow.kt``.
|
||||
|
||||
Assuming no malicious termination, they both end the flow being in posession of a valid, signed transaction that
|
||||
represents an atomic asset swap.
|
||||
@ -120,13 +120,13 @@ each side.
|
||||
data class SellerTradeInfo(
|
||||
val assetForSale: StateAndRef<OwnableState>,
|
||||
val price: Amount<Currency>,
|
||||
val sellerOwnerKey: PublicKey
|
||||
val sellerOwnerKey: CompositeKey
|
||||
)
|
||||
|
||||
data class SignaturesFromSeller(val sellerSig: DigitalSignature.WithKey,
|
||||
val notarySig: DigitalSignature.LegallyIdentifiable)
|
||||
|
||||
open class Seller(val otherSide: Party,
|
||||
open class Seller(val otherParty: Party,
|
||||
val notaryNode: NodeInfo,
|
||||
val assetToSell: StateAndRef<OwnableState>,
|
||||
val price: Amount<Currency>,
|
||||
@ -138,7 +138,7 @@ each side.
|
||||
}
|
||||
}
|
||||
|
||||
open class Buyer(val otherSide: Party,
|
||||
open class Buyer(val otherParty: Party,
|
||||
val notary: Party,
|
||||
val acceptablePrice: Amount<Currency>,
|
||||
val typeToBuy: Class<out OwnableState>) : FlowLogic<SignedTransaction>() {
|
||||
@ -154,7 +154,7 @@ simply flow messages or exceptions. The other two represent the buyer and seller
|
||||
|
||||
Going through the data needed to become a seller, we have:
|
||||
|
||||
- ``otherSide: Party`` - the party with which you are trading.
|
||||
- ``otherParty: Party`` - the party with which you are trading.
|
||||
- ``notaryNode: NodeInfo`` - the entry in the network map for the chosen notary. See ":doc:`consensus`" for more
|
||||
information on notaries.
|
||||
- ``assetToSell: StateAndRef<OwnableState>`` - a pointer to the ledger entry that represents the thing being sold.
|
||||
@ -197,20 +197,23 @@ when messages arrive. It provides the send/receive/sendAndReceive calls that let
|
||||
interaction and it will save/restore serialised versions of the fiber at the right times.
|
||||
|
||||
Flows can be invoked in several ways. For instance, they can be triggered by scheduled events,
|
||||
see ":doc:`event-scheduling`" to learn more about this. Or they can be triggered via the HTTP API. Or they can
|
||||
be triggered directly via the Java-level node APIs from your app code.
|
||||
see ":doc:`event-scheduling`" to learn more about this. Or they can be triggered directly via the Java-level node RPC
|
||||
APIs from your app code.
|
||||
|
||||
You request a flow to be invoked by using the ``ServiceHub.invokeFlowAsync`` method. This takes a
|
||||
You request a flow to be invoked by using the ``CordaRPCOps.startFlowDynamic`` method. This takes a
|
||||
Java reflection ``Class`` object that describes the flow class to use (in this case, either ``Buyer`` or ``Seller``).
|
||||
It also takes a set of arguments to pass to the constructor. Because it's possible for flow invocations to
|
||||
be requested by untrusted code (e.g. a state that you have been sent), the types that can be passed into the
|
||||
flow are checked against a whitelist, which can be extended by apps themselves at load time.
|
||||
flow are checked against a whitelist, which can be extended by apps themselves at load time. There are also a series
|
||||
of inlined extension functions of the form ``CordaRPCOps.startFlow`` which help with invoking flows in a type
|
||||
safe manner.
|
||||
|
||||
The process of starting a flow returns a ``ListenableFuture`` that you can use to either block waiting for
|
||||
the result, or register a callback that will be invoked when the result is ready.
|
||||
The process of starting a flow returns a ``FlowHandle`` that you can use to either observe
|
||||
the result, observe its progress and which also contains a permanent identifier for the invoked flow in the form
|
||||
of the ``StateMachineRunId``.
|
||||
|
||||
In a two party flow only one side is to be manually started using ``ServiceHub.invokeFlowAsync``. The other side
|
||||
has to be registered by its node to respond to the initiating flow via ``ServiceHubInternal.registerFlowInitiator``.
|
||||
In a two party flow only one side is to be manually started using ``CordaRPCOps.startFlow``. The other side
|
||||
has to be registered by its node to respond to the initiating flow via ``PluginServiceHub.registerFlowInitiator``.
|
||||
In our example it doesn't matter which flow is the initiator and which is the initiated. For example, if we are to
|
||||
take the seller as the initiator then we would register the buyer as such:
|
||||
|
||||
@ -218,8 +221,7 @@ take the seller as the initiator then we would register the buyer as such:
|
||||
|
||||
.. sourcecode:: kotlin
|
||||
|
||||
val services: ServiceHubInternal = TODO()
|
||||
|
||||
val services: PluginServiceHub = TODO()
|
||||
services.registerFlowInitiator(Seller::class) { otherParty ->
|
||||
val notary = services.networkMapCache.notaryNodes[0]
|
||||
val acceptablePrice = TODO()
|
||||
@ -266,25 +268,21 @@ Let's fill out the ``receiveAndCheckProposedTransaction()`` method.
|
||||
@Suspendable
|
||||
private fun receiveAndCheckProposedTransaction(): SignedTransaction {
|
||||
// Make the first message we'll send to kick off the flow.
|
||||
val hello = SellerTradeInfo(assetToSell, price, myKeyPair.public)
|
||||
val myPublicKey = myKeyPair.public.composite
|
||||
val hello = SellerTradeInfo(assetToSell, price, myPublicKey)
|
||||
|
||||
val maybeSTX = sendAndReceive<SignedTransaction>(otherSide, hello)
|
||||
|
||||
maybeSTX.unwrap {
|
||||
// Check that the tx proposed by the buyer is valid.
|
||||
val missingSigs: Set<PublicKey> = it.verifySignatures(throwIfSignaturesAreMissing = false)
|
||||
val expected = setOf(myKeyPair.public, notaryNode.identity.owningKey)
|
||||
if (missingSigs != expected)
|
||||
throw SignatureException("The set of missing signatures is not as expected: ${missingSigs.toStringsShort()} vs ${expected.toStringsShort()}")
|
||||
|
||||
val wtx: WireTransaction = it.tx
|
||||
val wtx: WireTransaction = it.verifySignatures(myPublicKey, notaryNode.notaryIdentity.owningKey)
|
||||
logger.trace { "Received partially signed transaction: ${it.id}" }
|
||||
|
||||
// Download and check all the things that this transaction depends on and verify it is contract-valid,
|
||||
// even though it is missing signatures.
|
||||
subFlow(ResolveTransactionsFlow(wtx, otherSide))
|
||||
subFlow(ResolveTransactionsFlow(wtx, otherParty))
|
||||
|
||||
if (wtx.outputs.map { it.data }.sumCashBy(myKeyPair.public).withoutIssuer() != price)
|
||||
if (wtx.outputs.map { it.data }.sumCashBy(myPublicKey).withoutIssuer() != price)
|
||||
throw IllegalArgumentException("Transaction is not sending us the right amount of cash")
|
||||
|
||||
return it
|
||||
@ -306,7 +304,9 @@ needs human interaction!
|
||||
|
||||
.. note:: There are a couple of rules you need to bear in mind when writing a class that will be used as a continuation.
|
||||
The first is that anything on the stack when the function is suspended will be stored into the heap and kept alive by
|
||||
the garbage collector. So try to avoid keeping enormous data structures alive unless you really have to.
|
||||
the garbage collector. So try to avoid keeping enormous data structures alive unless you really have to. You can
|
||||
always use private methods to keep the stack uncluttered with temporary variables, or to avoid objects that
|
||||
Kryo is not able to serialise correctly.
|
||||
|
||||
The second is that as well as being kept on the heap, objects reachable from the stack will be serialised. The state
|
||||
of the function call may be resurrected much later! Kryo doesn't require objects be marked as serialisable, but even so,
|
||||
@ -372,18 +372,18 @@ Here's the rest of the code:
|
||||
|
||||
.. sourcecode:: kotlin
|
||||
|
||||
open fun computeOurSignature(partialTX: SignedTransaction) = myKeyPair.signWithECDSA(partialTX.txBits)
|
||||
open fun calculateOurSignature(partialTX: SignedTransaction) = myKeyPair.signWithECDSA(partialTX.id)
|
||||
|
||||
@Suspendable
|
||||
private fun sendSignatures(allPartySignedTX: SignedTransaction, ourSignature: DigitalSignature.WithKey,
|
||||
notarySignature: DigitalSignature.LegallyIdentifiable): SignedTransaction {
|
||||
notarySignature: DigitalSignature.WithKey): SignedTransaction {
|
||||
val fullySigned = allPartySignedTX + notarySignature
|
||||
logger.trace { "Built finished transaction, sending back to secondary!" }
|
||||
send(otherSide, SignaturesFromSeller(ourSignature, notarySignature))
|
||||
return fullySigned
|
||||
}
|
||||
|
||||
It's all pretty straightforward from now on. Here ``txBits`` is the raw byte array representing the serialised
|
||||
It's all pretty straightforward from now on. Here ``id`` is the secure hash representing the serialised
|
||||
transaction, and we just use our private key to calculate a signature over it. As a reminder, in Corda signatures do
|
||||
not cover other signatures: just the core of the transaction data.
|
||||
|
||||
@ -405,98 +405,15 @@ Implementing the buyer
|
||||
|
||||
OK, let's do the same for the buyer side:
|
||||
|
||||
.. container:: codeset
|
||||
|
||||
.. sourcecode:: kotlin
|
||||
|
||||
@Suspendable
|
||||
override fun call(): SignedTransaction {
|
||||
val tradeRequest = receiveAndValidateTradeRequest()
|
||||
val (ptx, cashSigningPubKeys) = assembleSharedTX(tradeRequest)
|
||||
val stx = signWithOurKeys(cashSigningPubKeys, ptx)
|
||||
|
||||
val signatures = swapSignaturesWithSeller(stx)
|
||||
|
||||
logger.trace { "Got signatures from seller, verifying ... " }
|
||||
|
||||
val fullySigned = stx + signatures.sellerSig + signatures.notarySig
|
||||
fullySigned.verifySignatures()
|
||||
|
||||
logger.trace { "Signatures received are valid. Trade complete! :-)" }
|
||||
return fullySigned
|
||||
}
|
||||
|
||||
@Suspendable
|
||||
private fun receiveAndValidateTradeRequest(): SellerTradeInfo {
|
||||
// Wait for a trade request to come in from the other side
|
||||
val maybeTradeRequest = receive<SellerTradeInfo>(otherParty)
|
||||
maybeTradeRequest.unwrap {
|
||||
// What is the seller trying to sell us?
|
||||
val asset = it.assetForSale.state.data
|
||||
val assetTypeName = asset.javaClass.name
|
||||
logger.trace { "Got trade request for a $assetTypeName: ${it.assetForSale}" }
|
||||
|
||||
if (it.price > acceptablePrice)
|
||||
throw UnacceptablePriceException(it.price)
|
||||
if (!typeToBuy.isInstance(asset))
|
||||
throw AssetMismatchException(typeToBuy.name, assetTypeName)
|
||||
|
||||
// Check the transaction that contains the state which is being resolved.
|
||||
// We only have a hash here, so if we don't know it already, we have to ask for it.
|
||||
subFlow(ResolveTransactionsFlow(setOf(it.assetForSale.ref.txhash), otherSide))
|
||||
|
||||
return it
|
||||
}
|
||||
}
|
||||
|
||||
@Suspendable
|
||||
private fun swapSignaturesWithSeller(stx: SignedTransaction): SignaturesFromSeller {
|
||||
progressTracker.currentStep = SWAPPING_SIGNATURES
|
||||
logger.trace { "Sending partially signed transaction to seller" }
|
||||
|
||||
// TODO: Protect against the seller terminating here and leaving us in the lurch without the final tx.
|
||||
|
||||
return sendAndReceive<SignaturesFromSeller>(otherSide, stx).unwrap { it }
|
||||
}
|
||||
|
||||
private fun signWithOurKeys(cashSigningPubKeys: List<PublicKey>, ptx: TransactionBuilder): SignedTransaction {
|
||||
// Now sign the transaction with whatever keys we need to move the cash.
|
||||
for (k in cashSigningPubKeys) {
|
||||
val priv = serviceHub.keyManagementService.toPrivate(k)
|
||||
ptx.signWith(KeyPair(k, priv))
|
||||
}
|
||||
|
||||
return ptx.toSignedTransaction(checkSufficientSignatures = false)
|
||||
}
|
||||
|
||||
private fun assembleSharedTX(tradeRequest: SellerTradeInfo): Pair<TransactionBuilder, List<PublicKey>> {
|
||||
val ptx = TransactionType.General.Builder(notary)
|
||||
// Add input and output states for the movement of cash, by using the Cash contract to generate the states.
|
||||
val wallet = serviceHub.walletService.currentWallet
|
||||
val cashStates = wallet.statesOfType<Cash.State>()
|
||||
val cashSigningPubKeys = Cash().generateSpend(ptx, tradeRequest.price, tradeRequest.sellerOwnerKey, cashStates)
|
||||
// Add inputs/outputs/a command for the movement of the asset.
|
||||
ptx.addInputState(tradeRequest.assetForSale)
|
||||
// Just pick some new public key for now. This won't be linked with our identity in any way, which is what
|
||||
// we want for privacy reasons: the key is here ONLY to manage and control ownership, it is not intended to
|
||||
// reveal who the owner actually is. The key management service is expected to derive a unique key from some
|
||||
// initial seed in order to provide privacy protection.
|
||||
val freshKey = serviceHub.keyManagementService.freshKey()
|
||||
val (command, state) = tradeRequest.assetForSale.state.data.withNewOwner(freshKey.public)
|
||||
ptx.addOutputState(state, tradeRequest.assetForSale.state.notary)
|
||||
ptx.addCommand(command, tradeRequest.assetForSale.state.data.owner)
|
||||
|
||||
// And add a request for timestamping: it may be that none of the contracts need this! But it can't hurt
|
||||
// to have one.
|
||||
val currentTime = serviceHub.clock.instant()
|
||||
ptx.setTime(currentTime, 30.seconds)
|
||||
return Pair(ptx, cashSigningPubKeys)
|
||||
}
|
||||
.. literalinclude:: ../../finance/src/main/kotlin/net/corda/flows/TwoPartyTradeFlow.kt
|
||||
:language: kotlin
|
||||
:start-after: DOCSTART 1
|
||||
:end-before: DOCEND 1
|
||||
|
||||
This code is longer but no more complicated. Here are some things to pay attention to:
|
||||
|
||||
1. We do some sanity checking on the received message to ensure we're being offered what we expected to be offered.
|
||||
2. We create a cash spend in the normal way, by using ``Cash().generateSpend``. See the contracts tutorial if this
|
||||
2. We create a cash spend in the normal way, by using ``VaultService.generateSpend``. See the vault documentation if this
|
||||
part isn't clear.
|
||||
3. We access the *service hub* when we need it to access things that are transient and may change or be recreated
|
||||
whilst a flow is suspended, things like the wallet or the network map.
|
||||
@ -559,108 +476,6 @@ and linked ahead of time.
|
||||
In future, the progress tracking framework will become a vital part of how exceptions, errors, and other faults are
|
||||
surfaced to human operators for investigation and resolution.
|
||||
|
||||
Unit testing
|
||||
------------
|
||||
|
||||
A flow can be a fairly complex thing that interacts with many services and other parties over the network. That
|
||||
means unit testing one requires some infrastructure to provide lightweight mock implementations. The MockNetwork
|
||||
provides this testing infrastructure layer; you can find this class in the node module
|
||||
|
||||
A good example to examine for learning how to unit test flows is the ``ResolveTransactionsFlow`` tests. This
|
||||
flow takes care of downloading and verifying transaction graphs, with all the needed dependencies. We start
|
||||
with this basic skeleton:
|
||||
|
||||
.. container:: codeset
|
||||
|
||||
.. sourcecode:: kotlin
|
||||
|
||||
class ResolveTransactionsFlowTest {
|
||||
lateinit var net: MockNetwork
|
||||
lateinit var a: MockNetwork.MockNode
|
||||
lateinit var b: MockNetwork.MockNode
|
||||
lateinit var notary: Party
|
||||
|
||||
@Before
|
||||
fun setup() {
|
||||
net = MockNetwork()
|
||||
val nodes = net.createSomeNodes()
|
||||
a = nodes.partyNodes[0]
|
||||
b = nodes.partyNodes[1]
|
||||
notary = nodes.notaryNode.info.identity
|
||||
net.runNetwork()
|
||||
}
|
||||
|
||||
@After
|
||||
fun tearDown() {
|
||||
net.stopNodes()
|
||||
}
|
||||
}
|
||||
|
||||
We create a mock network in our ``@Before`` setup method and create a couple of nodes. We also record the identity
|
||||
of the notary in our test network, which will come in handy later. We also tidy up when we're done.
|
||||
|
||||
Next, we write a test case:
|
||||
|
||||
.. container:: codeset
|
||||
|
||||
.. sourcecode:: kotlin
|
||||
|
||||
@Test
|
||||
fun resolveFromTwoHashes() {
|
||||
val (stx1, stx2) = makeTransactions()
|
||||
val p = ResolveTransactionsFlow(setOf(stx2.id), a.info.identity)
|
||||
val future = b.services.startFlow("resolve", p)
|
||||
net.runNetwork()
|
||||
val results = future.get()
|
||||
assertEquals(listOf(stx1.id, stx2.id), results.map { it.id })
|
||||
assertEquals(stx1, b.storage.validatedTransactions.getTransaction(stx1.id))
|
||||
assertEquals(stx2, b.storage.validatedTransactions.getTransaction(stx2.id))
|
||||
}
|
||||
|
||||
We'll take a look at the ``makeTransactions`` function in a moment. For now, it's enough to know that it returns two
|
||||
``SignedTransaction`` objects, the second of which spends the first. Both transactions are known by node A
|
||||
but not node B.
|
||||
|
||||
The test logic is simple enough: we create the flow, giving it node A's identity as the target to talk to.
|
||||
Then we start it on node B and use the ``net.runNetwork()`` method to bounce messages around until things have
|
||||
settled (i.e. there are no more messages waiting to be delivered). All this is done using an in memory message
|
||||
routing implementation that is fast to initialise and use. Finally, we obtain the result of the flow and do
|
||||
some tests on it. We also check the contents of node B's database to see that the flow had the intended effect
|
||||
on the node's persistent state.
|
||||
|
||||
Here's what ``makeTransactions`` looks like:
|
||||
|
||||
.. container:: codeset
|
||||
|
||||
.. sourcecode:: kotlin
|
||||
|
||||
private fun makeTransactions(): Pair<SignedTransaction, SignedTransaction> {
|
||||
// Make a chain of custody of dummy states and insert into node A.
|
||||
val dummy1: SignedTransaction = DummyContract.generateInitial(MEGA_CORP.ref(1), 0, notary).let {
|
||||
it.signWith(MEGA_CORP_KEY)
|
||||
it.signWith(DUMMY_NOTARY_KEY)
|
||||
it.toSignedTransaction(false)
|
||||
}
|
||||
val dummy2: SignedTransaction = DummyContract.move(dummy1.tx.outRef(0), MINI_CORP_PUBKEY).let {
|
||||
it.signWith(MEGA_CORP_KEY)
|
||||
it.signWith(DUMMY_NOTARY_KEY)
|
||||
it.toSignedTransaction()
|
||||
}
|
||||
a.services.recordTransactions(dummy1, dummy2)
|
||||
return Pair(dummy1, dummy2)
|
||||
}
|
||||
|
||||
We're using the ``DummyContract``, a simple test smart contract which stores a single number in its states, along
|
||||
with ownership and issuer information. You can issue such states, exit them and re-assign ownership (move them).
|
||||
It doesn't do anything else. This code simply creates a transaction that issues a dummy state (the issuer is
|
||||
``MEGA_CORP``, a pre-defined unit test identity), signs it with the test notary and MegaCorp keys and then
|
||||
converts the builder to the final ``SignedTransaction``. It then does so again, but this time instead of issuing
|
||||
it re-assigns ownership instead. The chain of two transactions is finally committed to node A by sending them
|
||||
directly to the ``a.services.recordTransaction`` method (note that this method doesn't check the transactions are
|
||||
valid).
|
||||
|
||||
And that's it: you can explore the documentation for the `MockNode API <api/net.corda.node.internal.testing/-mock-network/index.html>`_ here.
|
||||
|
||||
Versioning
|
||||
----------
|
||||
|
||||
@ -684,11 +499,10 @@ The flow framework is a key part of the platform and will be extended in major w
|
||||
the features we have planned:
|
||||
|
||||
* Identity based addressing
|
||||
* Exposing progress trackers to local (inside the firewall) clients using message queues and/or WebSockets
|
||||
* Exception propagation and management, with a "flow hospital" tool to manually provide solutions to unavoidable
|
||||
problems (e.g. the other side doesn't know the trade)
|
||||
* Being able to interact with internal apps and tools via HTTP and similar
|
||||
* Being able to interact with internal apps and tools via RPC
|
||||
* Being able to interact with people, either via some sort of external ticketing system, or email, or a custom UI.
|
||||
For example to implement human transaction authorisations.
|
||||
* A standard library of flows that can be easily sub-classed by local developers in order to integrate internal
|
||||
reporting logic, or anything else that might be required as part of a communications lifecycle.
|
||||
reporting logic, or anything else that might be required as part of a communications lifecycle.
|
83
docs/build/html/_sources/flow-testing.txt
vendored
Normal file
@ -0,0 +1,83 @@
|
||||
.. highlight:: kotlin
|
||||
.. raw:: html
|
||||
|
||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="_static/codesets.js"></script>
|
||||
|
||||
Writing flow tests
|
||||
==================
|
||||
|
||||
A flow can be a fairly complex thing that interacts with many services and other parties over the network. That
|
||||
means unit testing one requires some infrastructure to provide lightweight mock implementations. The MockNetwork
|
||||
provides this testing infrastructure layer; you can find this class in the test-utils module.
|
||||
|
||||
A good example to examine for learning how to unit test flows is the ``ResolveTransactionsFlow`` tests. This
|
||||
flow takes care of downloading and verifying transaction graphs, with all the needed dependencies. We start
|
||||
with this basic skeleton:
|
||||
|
||||
.. container:: codeset
|
||||
|
||||
.. sourcecode:: kotlin
|
||||
|
||||
class ResolveTransactionsFlowTest {
|
||||
lateinit var net: MockNetwork
|
||||
lateinit var a: MockNetwork.MockNode
|
||||
lateinit var b: MockNetwork.MockNode
|
||||
lateinit var notary: Party
|
||||
|
||||
@Before
|
||||
fun setup() {
|
||||
net = MockNetwork()
|
||||
val nodes = net.createSomeNodes()
|
||||
a = nodes.partyNodes[0]
|
||||
b = nodes.partyNodes[1]
|
||||
notary = nodes.notaryNode.info.notaryIdentity
|
||||
net.runNetwork()
|
||||
}
|
||||
|
||||
@After
|
||||
fun tearDown() {
|
||||
net.stopNodes()
|
||||
}
|
||||
}
|
||||
|
||||
We create a mock network in our ``@Before`` setup method and create a couple of nodes. We also record the identity
|
||||
of the notary in our test network, which will come in handy later. We also tidy up when we're done.
|
||||
|
||||
Next, we write a test case:
|
||||
|
||||
.. literalinclude:: ../../core/src/test/kotlin/net/corda/core/flows/ResolveTransactionsFlowTest.kt
|
||||
:language: kotlin
|
||||
:start-after: DOCSTART 1
|
||||
:end-before: DOCEND 1
|
||||
|
||||
We'll take a look at the ``makeTransactions`` function in a moment. For now, it's enough to know that it returns two
|
||||
``SignedTransaction`` objects, the second of which spends the first. Both transactions are known by node A
|
||||
but not node B.
|
||||
|
||||
The test logic is simple enough: we create the flow, giving it node A's identity as the target to talk to.
|
||||
Then we start it on node B and use the ``net.runNetwork()`` method to bounce messages around until things have
|
||||
settled (i.e. there are no more messages waiting to be delivered). All this is done using an in memory message
|
||||
routing implementation that is fast to initialise and use. Finally, we obtain the result of the flow and do
|
||||
some tests on it. We also check the contents of node B's database to see that the flow had the intended effect
|
||||
on the node's persistent state.
|
||||
|
||||
Here's what ``makeTransactions`` looks like:
|
||||
|
||||
.. literalinclude:: ../../core/src/test/kotlin/net/corda/core/flows/ResolveTransactionsFlowTest.kt
|
||||
:language: kotlin
|
||||
:start-after: DOCSTART 2
|
||||
:end-before: DOCEND 2
|
||||
|
||||
We're using the ``DummyContract``, a simple test smart contract which stores a single number in its states, along
|
||||
with ownership and issuer information. You can issue such states, exit them and re-assign ownership (move them).
|
||||
It doesn't do anything else. This code simply creates a transaction that issues a dummy state (the issuer is
|
||||
``MEGA_CORP``, a pre-defined unit test identity), signs it with the test notary and MegaCorp keys and then
|
||||
converts the builder to the final ``SignedTransaction``. It then does so again, but this time instead of issuing
|
||||
it re-assigns ownership instead. The chain of two transactions is finally committed to node A by sending them
|
||||
directly to the ``a.services.recordTransaction`` method (note that this method doesn't check the transactions are
|
||||
valid) inside a ``databaseTransaction``. All node flows run within a database transaction in the nodes themselves,
|
||||
but any time we need to use the database directly from a unit test, you need to provide a database transaction as shown
|
||||
here.
|
||||
|
||||
And that's it: you can explore the documentation for the `MockNode API <api/net.corda.node.internal.testing/-mock-network/index.html>`_ here.
|
2
docs/build/html/_sources/index.txt
vendored
@ -49,6 +49,7 @@ Read on to learn:
|
||||
persistence
|
||||
node-administration
|
||||
corda-configuration-files
|
||||
corda-plugins
|
||||
node-services
|
||||
|
||||
.. toctree::
|
||||
@ -67,6 +68,7 @@ Read on to learn:
|
||||
tutorial-test-dsl
|
||||
tutorial-clientrpc-api
|
||||
flow-state-machines
|
||||
flow-testing
|
||||
oracles
|
||||
tutorial-attachments
|
||||
event-scheduling
|
||||
|
11
docs/build/html/_sources/node-administration.txt
vendored
@ -7,11 +7,14 @@ you can upload and download attachments, access a REST API and so on.
|
||||
Logging
|
||||
-------
|
||||
|
||||
Logs are stored to the logs subdirectory of the node directory and are rotated from time to time. You can
|
||||
In the default configuration logs are stored to the logs subdirectory of the node directory and are rotated from time to time. You can
|
||||
have logging printed to the console as well by passing the ``--log-to-console`` command line flag. Corda
|
||||
uses the log4j2 framework to manage its logging, so you can also configure it in more detail by writing
|
||||
a custom logging configuration file and passing ``-Dlog4j.configurationFile=my-config-file.xml`` on the
|
||||
command line as well.
|
||||
uses the SL4J logging façade which is configured with the log4j2 binding framework to manage its logging,
|
||||
so you can also configure it in more detail by writing a custom log4j2 logging configuration file and passing ``-Dlog4j.configurationFile=my-config-file.xml``
|
||||
on the command line as well. The default configuration is copied during the build from ``config/dev/log4j2.xml``, or for the test sourceSet from ``config/test/log4j2.xml``.
|
||||
|
||||
In corda code a logger is typically instantiated via the ``net.corda.core.utilities.loggerFor`` utility method which will create an SL4J ``Logger`` with a name based on the type parameter.
|
||||
Also, available in ``net.corda.core.utilities``, are extension methods to take a lazily evaluated logging lambda for trace and debug level, which will not evaluate the lambda if the LogLevel threshold is higher.
|
||||
|
||||
Database access
|
||||
---------------
|
||||
|
36
docs/build/html/_sources/node-explorer.txt
vendored
@ -34,18 +34,19 @@ Running Demo Nodes
|
||||
Interface
|
||||
---------
|
||||
Login
|
||||
User can login to any Corda node using the explorer, alternately, `gradlew explorer:runDemoNodes` can be used to start up demo nodes for testing.
|
||||
User can login to any Corda node using the explorer. Alternatively, ``gradlew explorer:runDemoNodes`` can be used to start up demo nodes for testing.
|
||||
Corda node address, username and password are required for login, the address is defaulted to localhost:0 if leave blank.
|
||||
Username and password can be configured in node's configuration file; for demo nodes, it is defaulted to ``user1`` and ``test``.
|
||||
|
||||
Username and password can be configured via the ``rpcUsers`` field in node's configuration file; for demo nodes, it is defaulted to ``user1`` and ``test``.
|
||||
|
||||
.. note:: If you are connecting to the demo nodes, only Alice and Bob (20004, 20006) are accessible using user1 credential, you won't be able to connect to the notary.
|
||||
|
||||
.. image:: resources/explorer/login.png
|
||||
:scale: 50 %
|
||||
:align: center
|
||||
|
||||
Home
|
||||
Home view shows the top level state of node and vault; currently, it shows your cash balance and the numbers of transaction executed.
|
||||
Dashboard
|
||||
The dashboard shows the top level state of node and vault.
|
||||
Currently, it shows your cash balance and the numbers of transaction executed.
|
||||
The dashboard is intended to house widgets from different CordApp's and provide useful information to system admin at a glance.
|
||||
|
||||
.. image:: resources/explorer/dashboard.png
|
||||
@ -56,6 +57,13 @@ Cash
|
||||
|
||||
.. image:: resources/explorer/vault.png
|
||||
|
||||
New cash transaction
|
||||
This is where you can create new cash transactions.
|
||||
The user can choose from three transaction types (issue, pay and exit) and any party visible on the network.
|
||||
The result of the transaction will be visible in the transaction screen when executed.
|
||||
|
||||
.. image:: resources/explorer/newTransaction.png
|
||||
|
||||
Transactions
|
||||
The transaction view contains all transactions handled by the node in a table view. It shows basic information on the table e.g. Transaction ID,
|
||||
command type, USD equivalence value etc. User can expand the row by double clicking to view the inputs,
|
||||
@ -63,9 +71,17 @@ Transactions
|
||||
|
||||
.. image:: resources/explorer/transactionView.png
|
||||
|
||||
New Transaction
|
||||
This is where you can create new transaction; currently only the cash contract is supported.
|
||||
The user can choose from three transaction types (issue, move and exit) and any party visible on the network.
|
||||
The result of the transaction will be visible in the transaction screen when executed.
|
||||
Network
|
||||
The network view shows the network information on the world map. Currently only the user's node is rendered on the map.
|
||||
This will be extended to other peers in a future release.
|
||||
The map provides a intuitive way of visualizing the Corda network and the participants.
|
||||
|
||||
.. image:: resources/explorer/newTransaction.png
|
||||
.. image:: resources/explorer/network.png
|
||||
|
||||
|
||||
Settings
|
||||
User can configure the client preference in this view.
|
||||
.. note:: Although the reporting currency is configurable, FX conversion won't be applied to the values as we don't have an FX service yet.
|
||||
|
||||
|
||||
.. image:: resources/explorer/settings.png
|
||||
|
62
docs/build/html/_sources/tutorial-contract.txt
vendored
@ -7,28 +7,52 @@
|
||||
Writing a contract
|
||||
==================
|
||||
|
||||
This tutorial will take you through how the commercial paper contract works. This uses a simple contract structure of
|
||||
everything being in one contract class, while most actual contracts in Corda are broken into clauses (which we'll
|
||||
discuss in the next tutorial). Clauses help reduce tedious boilerplate, but it's worth understanding how a
|
||||
contract is built without them before starting.
|
||||
This tutorial will take you through writing a contract, using a simple commercial paper contract as an example.
|
||||
Smart contracts in Corda have three key elements:
|
||||
|
||||
You can see the full Kotlin version of this contract in the code as ``CommercialPaperLegacy``. The code in this
|
||||
tutorial is available in both Kotlin and Java. You can quickly switch between them to get a feeling for how
|
||||
Kotlin syntax works.
|
||||
* Executable code (validation logic)
|
||||
* State objects
|
||||
* Commands
|
||||
|
||||
The core of a smart contract is the executable code which validates changes to state objects in transactions. State
|
||||
objects are the data held on the ledger, which represent the current state of an instance of a contract, and are used as
|
||||
inputs and outputs of transactions. Commands are additional data included in transactions to describe what is going on,
|
||||
used to instruct the executable code on how to verify the transaction. For example an ``Issue`` command may indicate
|
||||
that the validation logic should expect to see an output which does not exist as an input, issued by the same entity
|
||||
that signed the command.
|
||||
|
||||
The first thing to think about with a new contract is the lifecycle of contract states, how are they issued, what happens
|
||||
to them after they are issued, and how are they destroyed (if applicable). For the commercial paper contract, states are
|
||||
issued by a legal entity which wishes to create a contract to pay money in the future (the maturity date), in return for
|
||||
a lesser payment now. They are then transferred (moved) to another owner as part of a transaction where the issuer
|
||||
receives funds in payment, and later (after the maturity date) are destroyed (redeemed) by paying the owner the face
|
||||
value of the commercial paper.
|
||||
|
||||
This lifecycle for commercial paper is illustrated in the diagram below:
|
||||
|
||||
.. image:: contract-cp.png
|
||||
|
||||
Where to put your code
|
||||
----------------------
|
||||
|
||||
A CorDapp is a collection of contracts, state definitions, flows and other ways to extend the server. To create
|
||||
one you would just create a Java-style project as normal, with your choice of build system (Maven, Gradle, etc).
|
||||
Then add a dependency on ``net.corda.core:0.X`` where X is the milestone number you are depending on. The core
|
||||
module defines the base classes used in this tutorial.
|
||||
A CorDapp is a collection of contracts, state definitions, flows and other ways to extend the Corda platform.
|
||||
To create one you would typically clone the CorDapp template project ("cordapp-template"), which provides an example
|
||||
structure for the code. Alternatively you can just create a Java-style project as normal, with your choice of build
|
||||
system (Maven, Gradle, etc), then add a dependency on ``net.corda.core:0.X`` where X is the milestone number you are
|
||||
depending on. The core module defines the base classes used in this tutorial.
|
||||
|
||||
Starting the commercial paper class
|
||||
-----------------------------------
|
||||
|
||||
A smart contract is a class that implements the ``Contract`` interface. This can be either implemented directly, or
|
||||
by subclassing an abstract contract such as ``OnLedgerAsset``.
|
||||
A smart contract is a class that implements the ``Contract`` interface. This can be either implemented directly, as done
|
||||
here, or by subclassing an abstract contract such as ``OnLedgerAsset``. The heart of any contract in Corda is the
|
||||
``verify()`` function, which determined whether any given transaction is valid. This example shows how to write a
|
||||
``verify()`` function from scratch. A later tutorial will introduce "clauses", which are reusable chunks of verification
|
||||
logic, but first it's worth understanding how a contract is built without them.
|
||||
|
||||
You can see the full Kotlin version of this contract in the code as ``CommercialPaperLegacy``. The code in this
|
||||
tutorial is available in both Kotlin and Java. You can quickly switch between them to get a feeling for how
|
||||
Kotlin syntax works.
|
||||
|
||||
.. container:: codeset
|
||||
|
||||
@ -71,7 +95,10 @@ piece of issued paper.
|
||||
States
|
||||
------
|
||||
|
||||
A state is a class that stores data that is checked by the contract.
|
||||
A state is a class that stores data that is checked by the contract. A commercial paper state is structured as below:
|
||||
|
||||
.. image:: contract-cp-state.png
|
||||
|
||||
|
||||
.. container:: codeset
|
||||
|
||||
@ -174,7 +201,7 @@ A state is a class that stores data that is checked by the contract.
|
||||
We define a class that implements the ``ContractState`` interface.
|
||||
|
||||
The ``ContractState`` interface requires us to provide a ``getContract`` method that returns an instance of the
|
||||
contract class itself. In future, this will change to support dynamic loading of contracts with versioning
|
||||
contract class itself. In future, this may change to support dynamic loading of contracts with versioning
|
||||
and signing constraints, but for now this is how it's written.
|
||||
|
||||
We have four fields in our state:
|
||||
@ -202,8 +229,9 @@ The Java code compiles to almost identical bytecode as the Kotlin version, but a
|
||||
Commands
|
||||
--------
|
||||
|
||||
The logic for a contract may vary depending on what stage of a lifecycle it is automating. So it can be useful to
|
||||
pass additional data into the contract code that isn't represented by the states which exist permanently in the ledger.
|
||||
The validation logic for a contract may vary depending on what stage of a state's lifecycle it is automating. So it can
|
||||
be useful to pass additional data into the contract code that isn't represented by the states which exist permanently
|
||||
in the ledger, in order to clarify intent of a transaction.
|
||||
|
||||
For this purpose we have commands. Often they don't need to contain any data at all, they just need to exist. A command
|
||||
is a piece of data associated with some *signatures*. By the time the contract runs the signatures have already been
|
||||
|
43
docs/build/html/api/index-outline.html
vendored
@ -684,6 +684,7 @@
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.node.services.messaging/-artemis-messaging-component/parse-key-from-queue-name.html"><span class="keyword">protected</span> <span class="keyword">fun </span><span class="identifier">parseKeyFromQueueName</span><span class="symbol">(</span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingComponent$parseKeyFromQueueName(kotlin.String)/name">name</span><span class="symbol">:</span> <span class="identifier">String</span><span class="symbol">)</span><span class="symbol">: </span><a href="net.corda.core.crypto/-composite-key/index.html"><span class="identifier">CompositeKey</span></a></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.node.services.messaging/-artemis-messaging-component/tcp-transport.html"><span class="keyword">protected</span> <span class="keyword">fun </span><span class="identifier">tcpTransport</span><span class="symbol">(</span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingComponent$tcpTransport(net.corda.node.services.messaging.ArtemisMessagingComponent.ConnectionDirection, kotlin.String, kotlin.Int)/direction">direction</span><span class="symbol">:</span> <a href="net.corda.node.services.messaging/-artemis-messaging-component/-connection-direction/index.html"><span class="identifier">ConnectionDirection</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingComponent$tcpTransport(net.corda.node.services.messaging.ArtemisMessagingComponent.ConnectionDirection, kotlin.String, kotlin.Int)/host">host</span><span class="symbol">:</span> <span class="identifier">String</span><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingComponent$tcpTransport(net.corda.node.services.messaging.ArtemisMessagingComponent.ConnectionDirection, kotlin.String, kotlin.Int)/port">port</span><span class="symbol">:</span> <span class="identifier">Int</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.node.services.messaging/-artemis-messaging-component/to-host-and-port.html"><span class="keyword">fun </span><span class="identifier">toHostAndPort</span><span class="symbol">(</span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingComponent.Companion$toHostAndPort(net.corda.core.messaging.MessageRecipients)/target">target</span><span class="symbol">:</span> <a href="net.corda.core.messaging/-message-recipients.html"><span class="identifier">MessageRecipients</span></a><span class="symbol">)</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.node.services.messaging/-artemis-messaging-component/to-my-address.html"><span class="keyword">protected</span> <span class="keyword">fun </span><span class="identifier">toMyAddress</span><span class="symbol">(</span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingComponent.Companion$toMyAddress(net.corda.core.crypto.CompositeKey, )/myIdentity">myIdentity</span><span class="symbol">:</span> <a href="net.corda.core.crypto/-composite-key/index.html"><span class="identifier">CompositeKey</span></a><span class="symbol">?</span><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingComponent.Companion$toMyAddress(net.corda.core.crypto.CompositeKey, )/myHostPort">myHostPort</span><span class="symbol">:</span> <span class="identifier"><ERROR CLASS></span><span class="symbol">)</span><span class="symbol">: </span><a href="net.corda.core.messaging/-single-message-recipient.html"><span class="identifier">SingleMessageRecipient</span></a></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.node.services.messaging/-artemis-messaging-component/to-queue-name.html"><span class="keyword">protected</span> <span class="keyword">fun </span><span class="identifier">toQueueName</span><span class="symbol">(</span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingComponent.Companion$toQueueName(net.corda.core.messaging.MessageRecipients)/target">target</span><span class="symbol">:</span> <a href="net.corda.core.messaging/-message-recipients.html"><span class="identifier">MessageRecipients</span></a><span class="symbol">)</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></a></a><br/>
|
||||
</BODY>
|
||||
</HTML>
|
||||
@ -696,7 +697,7 @@
|
||||
<link rel="stylesheet" href="style.css">
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.node.services.messaging/-artemis-messaging-server/-init-.html"><span class="identifier">ArtemisMessagingServer</span><span class="symbol">(</span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/config">config</span><span class="symbol">:</span> <a href="net.corda.node.services.config/-node-configuration/index.html"><span class="identifier">NodeConfiguration</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/myHostPort">myHostPort</span><span class="symbol">:</span> <span class="identifier"><ERROR CLASS></span><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/networkMapCache">networkMapCache</span><span class="symbol">:</span> <a href="net.corda.core.node.services/-network-map-cache/index.html"><span class="identifier">NetworkMapCache</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/userService">userService</span><span class="symbol">:</span> <a href="net.corda.node.services/-r-p-c-user-service/index.html"><span class="identifier">RPCUserService</span></a><span class="symbol">)</span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.node.services.messaging/-artemis-messaging-server/-init-.html"><span class="identifier">ArtemisMessagingServer</span><span class="symbol">(</span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.crypto.CompositeKey, net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/config">config</span><span class="symbol">:</span> <a href="net.corda.node.services.config/-node-configuration/index.html"><span class="identifier">NodeConfiguration</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.crypto.CompositeKey, net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/myHostPort">myHostPort</span><span class="symbol">:</span> <span class="identifier"><ERROR CLASS></span><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.crypto.CompositeKey, net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/myIdentity">myIdentity</span><span class="symbol">:</span> <a href="net.corda.core.crypto/-composite-key/index.html"><span class="identifier">CompositeKey</span></a><span class="symbol">?</span><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.crypto.CompositeKey, net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/networkMapCache">networkMapCache</span><span class="symbol">:</span> <a href="net.corda.core.node.services/-network-map-cache/index.html"><span class="identifier">NetworkMapCache</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.crypto.CompositeKey, net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/userService">userService</span><span class="symbol">:</span> <a href="net.corda.node.services/-r-p-c-user-service/index.html"><span class="identifier">RPCUserService</span></a><span class="symbol">)</span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.node.services.messaging/-artemis-messaging-server/-node-login-module/index.html"><span class="keyword">class </span><span class="identifier">NodeLoginModule</span> <span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/javax/security/auth/spi/LoginModule.html"><span class="identifier">LoginModule</span></a></a></a><br/>
|
||||
<ul>
|
||||
<HTML>
|
||||
@ -718,6 +719,7 @@
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.node.services.messaging/-artemis-messaging-server/bridge-to-network-map-service.html"><span class="keyword">fun </span><span class="identifier">bridgeToNetworkMapService</span><span class="symbol">(</span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$bridgeToNetworkMapService(net.corda.core.messaging.SingleMessageRecipient)/networkMapService">networkMapService</span><span class="symbol">:</span> <a href="net.corda.core.messaging/-single-message-recipient.html"><span class="identifier">SingleMessageRecipient</span></a><span class="symbol">?</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="net.corda.node.services.messaging/-artemis-messaging-server/config.html"><span class="keyword">val </span><span class="identifier">config</span><span class="symbol">: </span><a href="net.corda.node.services.config/-node-configuration/index.html"><span class="identifier">NodeConfiguration</span></a></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.node.services.messaging/-artemis-messaging-server/my-host-port.html"><span class="keyword">val </span><span class="identifier">myHostPort</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.node.services.messaging/-artemis-messaging-server/my-identity.html"><span class="keyword">val </span><span class="identifier">myIdentity</span><span class="symbol">: </span><a href="net.corda.core.crypto/-composite-key/index.html"><span class="identifier">CompositeKey</span></a><span class="symbol">?</span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.node.services.messaging/-artemis-messaging-server/network-map-cache.html"><span class="keyword">val </span><span class="identifier">networkMapCache</span><span class="symbol">: </span><a href="net.corda.core.node.services/-network-map-cache/index.html"><span class="identifier">NetworkMapCache</span></a></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.node.services.messaging/-artemis-messaging-server/start.html"><span class="keyword">fun </span><span class="identifier">start</span><span class="symbol">(</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="net.corda.node.services.messaging/-artemis-messaging-server/stop.html"><span class="keyword">fun </span><span class="identifier">stop</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></a></a><br/>
|
||||
@ -2930,8 +2932,9 @@
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.mock/-event-generator/-init-.html"><span class="identifier">EventGenerator</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.mock.EventGenerator$<init>(kotlin.collections.List((net.corda.core.crypto.Party)), net.corda.core.crypto.Party)/parties">parties</span><span class="symbol">:</span> <span class="identifier">List</span><span class="symbol"><</span><a href="net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">></span><span class="symbol">, </span><span class="identifier" id="net.corda.client.mock.EventGenerator$<init>(kotlin.collections.List((net.corda.core.crypto.Party)), net.corda.core.crypto.Party)/notary">notary</span><span class="symbol">:</span> <a href="net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">)</span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.mock/-event-generator/amount-generator.html"><span class="keyword">val </span><span class="identifier">amountGenerator</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.mock/-event-generator/amount-issued-generator.html"><span class="keyword">val </span><span class="identifier">amountIssuedGenerator</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.mock/-event-generator/bank-of-corda-command-generator.html"><span class="keyword">val </span><span class="identifier">bankOfCordaCommandGenerator</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.mock/-event-generator/cash-state-generator.html"><span class="keyword">val </span><span class="identifier">cashStateGenerator</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.mock/-event-generator/client-to-service-command-generator.html"><span class="keyword">val </span><span class="identifier">clientToServiceCommandGenerator</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.mock/-event-generator/client-command-generator.html"><span class="keyword">val </span><span class="identifier">clientCommandGenerator</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.mock/-event-generator/consumed-generator.html"><span class="keyword">val </span><span class="identifier">consumedGenerator</span><span class="symbol">: </span><a href="net.corda.client.mock/-generator/index.html"><span class="identifier">Generator</span></a><span class="symbol"><</span><span class="identifier">Set</span><span class="symbol"><</span><a href="net.corda.core.contracts/-state-ref/index.html"><span class="identifier">StateRef</span></a><span class="symbol">></span><span class="symbol">></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.mock/-event-generator/currencies.html"><span class="keyword">val </span><span class="identifier">currencies</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.mock/-event-generator/currency-generator.html"><span class="keyword">val </span><span class="identifier">currencyGenerator</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></a></a><br/>
|
||||
@ -3715,7 +3718,7 @@
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.model/-gathered-transaction-data-model/-init-.html"><span class="identifier">GatheredTransactionDataModel</span><span class="symbol">(</span><span class="symbol">)</span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.model/-gathered-transaction-data-model/gathered-transaction-data-list.html"><span class="keyword">val </span><span class="identifier">gatheredTransactionDataList</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.model/-gathered-transaction-data-model/partially-resolved-transactions.html"><span class="keyword">val </span><span class="identifier">partiallyResolvedTransactions</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></a></a><br/>
|
||||
</BODY>
|
||||
</HTML>
|
||||
</ul>
|
||||
@ -4895,8 +4898,10 @@
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.model/-network-identity-model/-init-.html"><span class="identifier">NetworkIdentityModel</span><span class="symbol">(</span><span class="symbol">)</span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.model/-network-identity-model/lookup.html"><span class="keyword">fun </span><span class="identifier">lookup</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.model.NetworkIdentityModel$lookup(net.corda.core.crypto.CompositeKey)/compositeKey">compositeKey</span><span class="symbol">:</span> <a href="net.corda.core.crypto/-composite-key/index.html"><span class="identifier">CompositeKey</span></a><span class="symbol">)</span><span class="symbol">: </span><a href="net.corda.core.node/-node-info/index.html"><span class="identifier">NodeInfo</span></a><span class="symbol">?</span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.model/-network-identity-model/lookup.html"><span class="keyword">fun </span><span class="identifier">lookup</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.model.NetworkIdentityModel$lookup(net.corda.core.crypto.CompositeKey)/compositeKey">compositeKey</span><span class="symbol">:</span> <a href="net.corda.core.crypto/-composite-key/index.html"><span class="identifier">CompositeKey</span></a><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><a href="net.corda.core.node/-node-info/index.html"><span class="identifier">NodeInfo</span></a><span class="symbol">?</span><span class="symbol">></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.model/-network-identity-model/lookup.html"><span class="keyword">fun </span><span class="identifier">lookup</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.model.NetworkIdentityModel$lookup(java.security.PublicKey)/publicKey">publicKey</span><span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/security/PublicKey.html"><span class="identifier">PublicKey</span></a><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><a href="net.corda.core.node/-node-info/index.html"><span class="identifier">NodeInfo</span></a><span class="symbol">?</span><span class="symbol">></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.model/-network-identity-model/my-identity.html"><span class="keyword">val </span><span class="identifier">myIdentity</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><a href="net.corda.core.node/-node-info/index.html"><span class="identifier">NodeInfo</span></a><span class="symbol">?</span><span class="symbol">></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.model/-network-identity-model/network-identities.html"><span class="keyword">val </span><span class="identifier">networkIdentities</span><span class="symbol">: </span><span class="identifier">ObservableList</span><span class="symbol"><</span><a href="net.corda.core.node/-node-info/index.html"><span class="identifier">NodeInfo</span></a><span class="symbol">></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.model/-network-identity-model/notaries.html"><span class="keyword">val </span><span class="identifier">notaries</span><span class="symbol">: </span><span class="identifier">ObservableList</span><span class="symbol"><</span><a href="net.corda.core.node/-node-info/index.html"><span class="identifier">NodeInfo</span></a><span class="symbol">></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.model/-network-identity-model/parties.html"><span class="keyword">val </span><span class="identifier">parties</span><span class="symbol">: </span><span class="identifier">ObservableList</span><span class="symbol"><</span><a href="net.corda.core.node/-node-info/index.html"><span class="identifier">NodeInfo</span></a><span class="symbol">></span></a></a><br/>
|
||||
</BODY>
|
||||
@ -7050,7 +7055,7 @@
|
||||
</BODY>
|
||||
</HTML>
|
||||
</ul>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.core.contracts/-requirements/index.html"><span class="keyword">class </span><span class="identifier">Requirements</span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.core.contracts/-requirements/index.html"><span class="keyword">object </span><span class="identifier">Requirements</span></a></a><br/>
|
||||
<ul>
|
||||
<HTML>
|
||||
<HEAD>
|
||||
@ -7058,8 +7063,7 @@
|
||||
<link rel="stylesheet" href="style.css">
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.core.contracts/-requirements/-init-.html"><span class="identifier">Requirements</span><span class="symbol">(</span><span class="symbol">)</span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.core.contracts/-requirements/by.html"><span class="keyword">infix</span> <span class="keyword">fun </span><span class="identifier">String</span><span class="symbol">.</span><span class="identifier">by</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.contracts.Requirements$by(kotlin.String, kotlin.Boolean)/expr">expr</span><span class="symbol">:</span> <span class="identifier">Boolean</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="net.corda.core.contracts/-requirements/by.html"><span class="keyword">inline</span> <span class="keyword">infix</span> <span class="keyword">fun </span><span class="identifier">String</span><span class="symbol">.</span><span class="identifier">by</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.contracts.Requirements$by(kotlin.String, kotlin.Boolean)/expr">expr</span><span class="symbol">:</span> <span class="identifier">Boolean</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></a></a><br/>
|
||||
</BODY>
|
||||
</HTML>
|
||||
</ul>
|
||||
@ -9720,6 +9724,7 @@
|
||||
<BODY>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.fxutils/javafx.beans.value.-observable-value/bind.html"><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">, </span><span class="identifier">B</span><span class="symbol">></span> <span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="keyword">out</span> <span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">bind</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$bind(javafx.beans.value.ObservableValue((net.corda.client.fxutils.bind.A)), kotlin.Function1((net.corda.client.fxutils.bind.A, javafx.beans.value.ObservableValue((net.corda.client.fxutils.bind.B)))))/function">function</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">B</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">B</span><span class="symbol">></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.fxutils/javafx.beans.value.-observable-value/bind-out.html"><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">, </span><span class="identifier">B</span><span class="symbol">></span> <span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="keyword">out</span> <span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">bindOut</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$bindOut(javafx.beans.value.ObservableValue((net.corda.client.fxutils.bindOut.A)), kotlin.Function1((net.corda.client.fxutils.bindOut.A, javafx.beans.value.ObservableValue((net.corda.client.fxutils.bindOut.B)))))/function">function</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="keyword">out</span> <span class="identifier">B</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="keyword">out</span> <span class="identifier">B</span><span class="symbol">></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.fxutils/javafx.beans.value.-observable-value/is-not-null.html"><span class="keyword">fun </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">*</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">isNotNull</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">BooleanBinding</span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.fxutils/javafx.beans.value.-observable-value/map.html"><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">, </span><span class="identifier">B</span><span class="symbol">></span> <span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="keyword">out</span> <span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">map</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$map(javafx.beans.value.ObservableValue((net.corda.client.fxutils.map.A)), kotlin.Function1((net.corda.client.fxutils.map.A, net.corda.client.fxutils.map.B)))/function">function</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">B</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">B</span><span class="symbol">></span></a></a><br/>
|
||||
</BODY>
|
||||
</HTML>
|
||||
@ -9740,6 +9745,8 @@
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.fxutils/javafx.collections.-observable-list/filter.html"><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="keyword">out</span> <span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">filter</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$filter(javafx.collections.ObservableList((net.corda.client.fxutils.filter.A)), javafx.beans.value.ObservableValue((kotlin.Function1((net.corda.client.fxutils.filter.A, kotlin.Boolean)))))/predicate">predicate</span><span class="symbol">:</span> <span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="symbol">(</span><span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">Boolean</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.fxutils/javafx.collections.-observable-list/filter-not-null.html"><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="keyword">out</span> <span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">filterNotNull</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.fxutils/javafx.collections.-observable-list/first.html"><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">first</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.fxutils/javafx.collections.-observable-list/first-or-default.html"><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">firstOrDefault</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$firstOrDefault(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrDefault.A)), javafx.beans.value.ObservableValue((net.corda.client.fxutils.firstOrDefault.A)), kotlin.Function1((net.corda.client.fxutils.firstOrDefault.A, kotlin.Boolean)))/default">default</span><span class="symbol">:</span> <span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span><span class="symbol">, </span><span class="identifier" id="net.corda.client.fxutils$firstOrDefault(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrDefault.A)), javafx.beans.value.ObservableValue((net.corda.client.fxutils.firstOrDefault.A)), kotlin.Function1((net.corda.client.fxutils.firstOrDefault.A, kotlin.Boolean)))/predicate">predicate</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">Boolean</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.fxutils/javafx.collections.-observable-list/first-or-null-observable.html"><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">firstOrNullObservable</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$firstOrNullObservable(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrNullObservable.A)), kotlin.Function1((net.corda.client.fxutils.firstOrNullObservable.A, kotlin.Boolean)))/predicate">predicate</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">Boolean</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.fxutils/javafx.collections.-observable-list/flatten.html"><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="keyword">out</span> <span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="keyword">out</span> <span class="identifier">A</span><span class="symbol">></span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">flatten</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.fxutils/javafx.collections.-observable-list/fold-observable.html"><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">, </span><span class="identifier">B</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="keyword">out</span> <span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">foldObservable</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$foldObservable(javafx.collections.ObservableList((net.corda.client.fxutils.foldObservable.A)), net.corda.client.fxutils.foldObservable.B, kotlin.Function2((net.corda.client.fxutils.foldObservable.B, net.corda.client.fxutils.foldObservable.A, )))/initial">initial</span><span class="symbol">:</span> <span class="identifier">B</span><span class="symbol">, </span><span class="identifier" id="net.corda.client.fxutils$foldObservable(javafx.collections.ObservableList((net.corda.client.fxutils.foldObservable.A)), net.corda.client.fxutils.foldObservable.B, kotlin.Function2((net.corda.client.fxutils.foldObservable.B, net.corda.client.fxutils.foldObservable.A, )))/folderFunction">folderFunction</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">B</span><span class="symbol">,</span> <span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">B</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">B</span><span class="symbol">></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.fxutils/javafx.collections.-observable-list/get-value-at.html"><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">getValueAt</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$getValueAt(javafx.collections.ObservableList((net.corda.client.fxutils.getValueAt.A)), kotlin.Int)/index">index</span><span class="symbol">:</span> <span class="identifier">Int</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span></a></a><br/>
|
||||
@ -10314,6 +10321,7 @@
|
||||
<BODY>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.fxutils/javafx.beans.value.-observable-value/bind.html"><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">, </span><span class="identifier">B</span><span class="symbol">></span> <span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="keyword">out</span> <span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">bind</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$bind(javafx.beans.value.ObservableValue((net.corda.client.fxutils.bind.A)), kotlin.Function1((net.corda.client.fxutils.bind.A, javafx.beans.value.ObservableValue((net.corda.client.fxutils.bind.B)))))/function">function</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">B</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">B</span><span class="symbol">></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.fxutils/javafx.beans.value.-observable-value/bind-out.html"><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">, </span><span class="identifier">B</span><span class="symbol">></span> <span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="keyword">out</span> <span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">bindOut</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$bindOut(javafx.beans.value.ObservableValue((net.corda.client.fxutils.bindOut.A)), kotlin.Function1((net.corda.client.fxutils.bindOut.A, javafx.beans.value.ObservableValue((net.corda.client.fxutils.bindOut.B)))))/function">function</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="keyword">out</span> <span class="identifier">B</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="keyword">out</span> <span class="identifier">B</span><span class="symbol">></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.fxutils/javafx.beans.value.-observable-value/is-not-null.html"><span class="keyword">fun </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">*</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">isNotNull</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">BooleanBinding</span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.fxutils/javafx.beans.value.-observable-value/map.html"><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">, </span><span class="identifier">B</span><span class="symbol">></span> <span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="keyword">out</span> <span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">map</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$map(javafx.beans.value.ObservableValue((net.corda.client.fxutils.map.A)), kotlin.Function1((net.corda.client.fxutils.map.A, net.corda.client.fxutils.map.B)))/function">function</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">B</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">B</span><span class="symbol">></span></a></a><br/>
|
||||
</BODY>
|
||||
</HTML>
|
||||
@ -10334,6 +10342,8 @@
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.fxutils/javafx.collections.-observable-list/filter.html"><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="keyword">out</span> <span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">filter</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$filter(javafx.collections.ObservableList((net.corda.client.fxutils.filter.A)), javafx.beans.value.ObservableValue((kotlin.Function1((net.corda.client.fxutils.filter.A, kotlin.Boolean)))))/predicate">predicate</span><span class="symbol">:</span> <span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="symbol">(</span><span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">Boolean</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.fxutils/javafx.collections.-observable-list/filter-not-null.html"><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="keyword">out</span> <span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">filterNotNull</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.fxutils/javafx.collections.-observable-list/first.html"><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">first</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.fxutils/javafx.collections.-observable-list/first-or-default.html"><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">firstOrDefault</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$firstOrDefault(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrDefault.A)), javafx.beans.value.ObservableValue((net.corda.client.fxutils.firstOrDefault.A)), kotlin.Function1((net.corda.client.fxutils.firstOrDefault.A, kotlin.Boolean)))/default">default</span><span class="symbol">:</span> <span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span><span class="symbol">, </span><span class="identifier" id="net.corda.client.fxutils$firstOrDefault(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrDefault.A)), javafx.beans.value.ObservableValue((net.corda.client.fxutils.firstOrDefault.A)), kotlin.Function1((net.corda.client.fxutils.firstOrDefault.A, kotlin.Boolean)))/predicate">predicate</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">Boolean</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.fxutils/javafx.collections.-observable-list/first-or-null-observable.html"><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">firstOrNullObservable</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$firstOrNullObservable(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrNullObservable.A)), kotlin.Function1((net.corda.client.fxutils.firstOrNullObservable.A, kotlin.Boolean)))/predicate">predicate</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">Boolean</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.fxutils/javafx.collections.-observable-list/flatten.html"><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="keyword">out</span> <span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="keyword">out</span> <span class="identifier">A</span><span class="symbol">></span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">flatten</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.fxutils/javafx.collections.-observable-list/fold-observable.html"><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">, </span><span class="identifier">B</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="keyword">out</span> <span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">foldObservable</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$foldObservable(javafx.collections.ObservableList((net.corda.client.fxutils.foldObservable.A)), net.corda.client.fxutils.foldObservable.B, kotlin.Function2((net.corda.client.fxutils.foldObservable.B, net.corda.client.fxutils.foldObservable.A, )))/initial">initial</span><span class="symbol">:</span> <span class="identifier">B</span><span class="symbol">, </span><span class="identifier" id="net.corda.client.fxutils$foldObservable(javafx.collections.ObservableList((net.corda.client.fxutils.foldObservable.A)), net.corda.client.fxutils.foldObservable.B, kotlin.Function2((net.corda.client.fxutils.foldObservable.B, net.corda.client.fxutils.foldObservable.A, )))/folderFunction">folderFunction</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">B</span><span class="symbol">,</span> <span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">B</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">B</span><span class="symbol">></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.fxutils/javafx.collections.-observable-list/get-value-at.html"><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">getValueAt</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$getValueAt(javafx.collections.ObservableList((net.corda.client.fxutils.getValueAt.A)), kotlin.Int)/index">index</span><span class="symbol">:</span> <span class="identifier">Int</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span></a></a><br/>
|
||||
@ -10469,8 +10479,9 @@
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.mock/-event-generator/-init-.html"><span class="identifier">EventGenerator</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.mock.EventGenerator$<init>(kotlin.collections.List((net.corda.core.crypto.Party)), net.corda.core.crypto.Party)/parties">parties</span><span class="symbol">:</span> <span class="identifier">List</span><span class="symbol"><</span><a href="net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">></span><span class="symbol">, </span><span class="identifier" id="net.corda.client.mock.EventGenerator$<init>(kotlin.collections.List((net.corda.core.crypto.Party)), net.corda.core.crypto.Party)/notary">notary</span><span class="symbol">:</span> <a href="net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">)</span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.mock/-event-generator/amount-generator.html"><span class="keyword">val </span><span class="identifier">amountGenerator</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.mock/-event-generator/amount-issued-generator.html"><span class="keyword">val </span><span class="identifier">amountIssuedGenerator</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.mock/-event-generator/bank-of-corda-command-generator.html"><span class="keyword">val </span><span class="identifier">bankOfCordaCommandGenerator</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.mock/-event-generator/cash-state-generator.html"><span class="keyword">val </span><span class="identifier">cashStateGenerator</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.mock/-event-generator/client-to-service-command-generator.html"><span class="keyword">val </span><span class="identifier">clientToServiceCommandGenerator</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.mock/-event-generator/client-command-generator.html"><span class="keyword">val </span><span class="identifier">clientCommandGenerator</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.mock/-event-generator/consumed-generator.html"><span class="keyword">val </span><span class="identifier">consumedGenerator</span><span class="symbol">: </span><a href="net.corda.client.mock/-generator/index.html"><span class="identifier">Generator</span></a><span class="symbol"><</span><span class="identifier">Set</span><span class="symbol"><</span><a href="net.corda.core.contracts/-state-ref/index.html"><span class="identifier">StateRef</span></a><span class="symbol">></span><span class="symbol">></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.mock/-event-generator/currencies.html"><span class="keyword">val </span><span class="identifier">currencies</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.mock/-event-generator/currency-generator.html"><span class="keyword">val </span><span class="identifier">currencyGenerator</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></a></a><br/>
|
||||
@ -10635,7 +10646,7 @@
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.model/-gathered-transaction-data-model/-init-.html"><span class="identifier">GatheredTransactionDataModel</span><span class="symbol">(</span><span class="symbol">)</span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.model/-gathered-transaction-data-model/gathered-transaction-data-list.html"><span class="keyword">val </span><span class="identifier">gatheredTransactionDataList</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.model/-gathered-transaction-data-model/partially-resolved-transactions.html"><span class="keyword">val </span><span class="identifier">partiallyResolvedTransactions</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></a></a><br/>
|
||||
</BODY>
|
||||
</HTML>
|
||||
</ul>
|
||||
@ -10662,8 +10673,10 @@
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.model/-network-identity-model/-init-.html"><span class="identifier">NetworkIdentityModel</span><span class="symbol">(</span><span class="symbol">)</span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.model/-network-identity-model/lookup.html"><span class="keyword">fun </span><span class="identifier">lookup</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.model.NetworkIdentityModel$lookup(net.corda.core.crypto.CompositeKey)/compositeKey">compositeKey</span><span class="symbol">:</span> <a href="net.corda.core.crypto/-composite-key/index.html"><span class="identifier">CompositeKey</span></a><span class="symbol">)</span><span class="symbol">: </span><a href="net.corda.core.node/-node-info/index.html"><span class="identifier">NodeInfo</span></a><span class="symbol">?</span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.model/-network-identity-model/lookup.html"><span class="keyword">fun </span><span class="identifier">lookup</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.model.NetworkIdentityModel$lookup(net.corda.core.crypto.CompositeKey)/compositeKey">compositeKey</span><span class="symbol">:</span> <a href="net.corda.core.crypto/-composite-key/index.html"><span class="identifier">CompositeKey</span></a><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><a href="net.corda.core.node/-node-info/index.html"><span class="identifier">NodeInfo</span></a><span class="symbol">?</span><span class="symbol">></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.model/-network-identity-model/lookup.html"><span class="keyword">fun </span><span class="identifier">lookup</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.model.NetworkIdentityModel$lookup(java.security.PublicKey)/publicKey">publicKey</span><span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/security/PublicKey.html"><span class="identifier">PublicKey</span></a><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><a href="net.corda.core.node/-node-info/index.html"><span class="identifier">NodeInfo</span></a><span class="symbol">?</span><span class="symbol">></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.model/-network-identity-model/my-identity.html"><span class="keyword">val </span><span class="identifier">myIdentity</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><a href="net.corda.core.node/-node-info/index.html"><span class="identifier">NodeInfo</span></a><span class="symbol">?</span><span class="symbol">></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.model/-network-identity-model/network-identities.html"><span class="keyword">val </span><span class="identifier">networkIdentities</span><span class="symbol">: </span><span class="identifier">ObservableList</span><span class="symbol"><</span><a href="net.corda.core.node/-node-info/index.html"><span class="identifier">NodeInfo</span></a><span class="symbol">></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.model/-network-identity-model/notaries.html"><span class="keyword">val </span><span class="identifier">notaries</span><span class="symbol">: </span><span class="identifier">ObservableList</span><span class="symbol"><</span><a href="net.corda.core.node/-node-info/index.html"><span class="identifier">NodeInfo</span></a><span class="symbol">></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.client.model/-network-identity-model/parties.html"><span class="keyword">val </span><span class="identifier">parties</span><span class="symbol">: </span><span class="identifier">ObservableList</span><span class="symbol"><</span><a href="net.corda.core.node/-node-info/index.html"><span class="identifier">NodeInfo</span></a><span class="symbol">></span></a></a><br/>
|
||||
</BODY>
|
||||
@ -13236,8 +13249,7 @@
|
||||
</BODY>
|
||||
</HTML>
|
||||
</ul>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.core.contracts/-r.html"><span class="keyword">val </span><span class="identifier">R</span><span class="symbol">: </span><a href="net.corda.core.contracts/-requirements/index.html"><span class="identifier">Requirements</span></a></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.core.contracts/-requirements/index.html"><span class="keyword">class </span><span class="identifier">Requirements</span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.core.contracts/-requirements/index.html"><span class="keyword">object </span><span class="identifier">Requirements</span></a></a><br/>
|
||||
<ul>
|
||||
<HTML>
|
||||
<HEAD>
|
||||
@ -13245,8 +13257,7 @@
|
||||
<link rel="stylesheet" href="style.css">
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.core.contracts/-requirements/-init-.html"><span class="identifier">Requirements</span><span class="symbol">(</span><span class="symbol">)</span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.core.contracts/-requirements/by.html"><span class="keyword">infix</span> <span class="keyword">fun </span><span class="identifier">String</span><span class="symbol">.</span><span class="identifier">by</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.contracts.Requirements$by(kotlin.String, kotlin.Boolean)/expr">expr</span><span class="symbol">:</span> <span class="identifier">Boolean</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="net.corda.core.contracts/-requirements/by.html"><span class="keyword">inline</span> <span class="keyword">infix</span> <span class="keyword">fun </span><span class="identifier">String</span><span class="symbol">.</span><span class="identifier">by</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.contracts.Requirements$by(kotlin.String, kotlin.Boolean)/expr">expr</span><span class="symbol">:</span> <span class="identifier">Boolean</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></a></a><br/>
|
||||
</BODY>
|
||||
</HTML>
|
||||
</ul>
|
||||
@ -18525,6 +18536,7 @@
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.node.services.messaging/-artemis-messaging-component/parse-key-from-queue-name.html"><span class="keyword">protected</span> <span class="keyword">fun </span><span class="identifier">parseKeyFromQueueName</span><span class="symbol">(</span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingComponent$parseKeyFromQueueName(kotlin.String)/name">name</span><span class="symbol">:</span> <span class="identifier">String</span><span class="symbol">)</span><span class="symbol">: </span><a href="net.corda.core.crypto/-composite-key/index.html"><span class="identifier">CompositeKey</span></a></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.node.services.messaging/-artemis-messaging-component/tcp-transport.html"><span class="keyword">protected</span> <span class="keyword">fun </span><span class="identifier">tcpTransport</span><span class="symbol">(</span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingComponent$tcpTransport(net.corda.node.services.messaging.ArtemisMessagingComponent.ConnectionDirection, kotlin.String, kotlin.Int)/direction">direction</span><span class="symbol">:</span> <a href="net.corda.node.services.messaging/-artemis-messaging-component/-connection-direction/index.html"><span class="identifier">ConnectionDirection</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingComponent$tcpTransport(net.corda.node.services.messaging.ArtemisMessagingComponent.ConnectionDirection, kotlin.String, kotlin.Int)/host">host</span><span class="symbol">:</span> <span class="identifier">String</span><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingComponent$tcpTransport(net.corda.node.services.messaging.ArtemisMessagingComponent.ConnectionDirection, kotlin.String, kotlin.Int)/port">port</span><span class="symbol">:</span> <span class="identifier">Int</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.node.services.messaging/-artemis-messaging-component/to-host-and-port.html"><span class="keyword">fun </span><span class="identifier">toHostAndPort</span><span class="symbol">(</span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingComponent.Companion$toHostAndPort(net.corda.core.messaging.MessageRecipients)/target">target</span><span class="symbol">:</span> <a href="net.corda.core.messaging/-message-recipients.html"><span class="identifier">MessageRecipients</span></a><span class="symbol">)</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.node.services.messaging/-artemis-messaging-component/to-my-address.html"><span class="keyword">protected</span> <span class="keyword">fun </span><span class="identifier">toMyAddress</span><span class="symbol">(</span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingComponent.Companion$toMyAddress(net.corda.core.crypto.CompositeKey, )/myIdentity">myIdentity</span><span class="symbol">:</span> <a href="net.corda.core.crypto/-composite-key/index.html"><span class="identifier">CompositeKey</span></a><span class="symbol">?</span><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingComponent.Companion$toMyAddress(net.corda.core.crypto.CompositeKey, )/myHostPort">myHostPort</span><span class="symbol">:</span> <span class="identifier"><ERROR CLASS></span><span class="symbol">)</span><span class="symbol">: </span><a href="net.corda.core.messaging/-single-message-recipient.html"><span class="identifier">SingleMessageRecipient</span></a></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.node.services.messaging/-artemis-messaging-component/to-queue-name.html"><span class="keyword">protected</span> <span class="keyword">fun </span><span class="identifier">toQueueName</span><span class="symbol">(</span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingComponent.Companion$toQueueName(net.corda.core.messaging.MessageRecipients)/target">target</span><span class="symbol">:</span> <a href="net.corda.core.messaging/-message-recipients.html"><span class="identifier">MessageRecipients</span></a><span class="symbol">)</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></a></a><br/>
|
||||
</BODY>
|
||||
</HTML>
|
||||
@ -18537,7 +18549,7 @@
|
||||
<link rel="stylesheet" href="style.css">
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.node.services.messaging/-artemis-messaging-server/-init-.html"><span class="identifier">ArtemisMessagingServer</span><span class="symbol">(</span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/config">config</span><span class="symbol">:</span> <a href="net.corda.node.services.config/-node-configuration/index.html"><span class="identifier">NodeConfiguration</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/myHostPort">myHostPort</span><span class="symbol">:</span> <span class="identifier"><ERROR CLASS></span><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/networkMapCache">networkMapCache</span><span class="symbol">:</span> <a href="net.corda.core.node.services/-network-map-cache/index.html"><span class="identifier">NetworkMapCache</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/userService">userService</span><span class="symbol">:</span> <a href="net.corda.node.services/-r-p-c-user-service/index.html"><span class="identifier">RPCUserService</span></a><span class="symbol">)</span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.node.services.messaging/-artemis-messaging-server/-init-.html"><span class="identifier">ArtemisMessagingServer</span><span class="symbol">(</span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.crypto.CompositeKey, net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/config">config</span><span class="symbol">:</span> <a href="net.corda.node.services.config/-node-configuration/index.html"><span class="identifier">NodeConfiguration</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.crypto.CompositeKey, net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/myHostPort">myHostPort</span><span class="symbol">:</span> <span class="identifier"><ERROR CLASS></span><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.crypto.CompositeKey, net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/myIdentity">myIdentity</span><span class="symbol">:</span> <a href="net.corda.core.crypto/-composite-key/index.html"><span class="identifier">CompositeKey</span></a><span class="symbol">?</span><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.crypto.CompositeKey, net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/networkMapCache">networkMapCache</span><span class="symbol">:</span> <a href="net.corda.core.node.services/-network-map-cache/index.html"><span class="identifier">NetworkMapCache</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.crypto.CompositeKey, net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/userService">userService</span><span class="symbol">:</span> <a href="net.corda.node.services/-r-p-c-user-service/index.html"><span class="identifier">RPCUserService</span></a><span class="symbol">)</span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.node.services.messaging/-artemis-messaging-server/-node-login-module/index.html"><span class="keyword">class </span><span class="identifier">NodeLoginModule</span> <span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/javax/security/auth/spi/LoginModule.html"><span class="identifier">LoginModule</span></a></a></a><br/>
|
||||
<ul>
|
||||
<HTML>
|
||||
@ -18559,6 +18571,7 @@
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.node.services.messaging/-artemis-messaging-server/bridge-to-network-map-service.html"><span class="keyword">fun </span><span class="identifier">bridgeToNetworkMapService</span><span class="symbol">(</span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$bridgeToNetworkMapService(net.corda.core.messaging.SingleMessageRecipient)/networkMapService">networkMapService</span><span class="symbol">:</span> <a href="net.corda.core.messaging/-single-message-recipient.html"><span class="identifier">SingleMessageRecipient</span></a><span class="symbol">?</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="net.corda.node.services.messaging/-artemis-messaging-server/config.html"><span class="keyword">val </span><span class="identifier">config</span><span class="symbol">: </span><a href="net.corda.node.services.config/-node-configuration/index.html"><span class="identifier">NodeConfiguration</span></a></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.node.services.messaging/-artemis-messaging-server/my-host-port.html"><span class="keyword">val </span><span class="identifier">myHostPort</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.node.services.messaging/-artemis-messaging-server/my-identity.html"><span class="keyword">val </span><span class="identifier">myIdentity</span><span class="symbol">: </span><a href="net.corda.core.crypto/-composite-key/index.html"><span class="identifier">CompositeKey</span></a><span class="symbol">?</span></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.node.services.messaging/-artemis-messaging-server/network-map-cache.html"><span class="keyword">val </span><span class="identifier">networkMapCache</span><span class="symbol">: </span><a href="net.corda.core.node.services/-network-map-cache/index.html"><span class="identifier">NetworkMapCache</span></a></a></a><br/>
|
||||
<a href="docs/build/html/api/index"><a href="net.corda.node.services.messaging/-artemis-messaging-server/start.html"><span class="keyword">fun </span><span class="identifier">start</span><span class="symbol">(</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="net.corda.node.services.messaging/-artemis-messaging-server/stop.html"><span class="keyword">fun </span><span class="identifier">stop</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></a></a><br/>
|
||||
|
@ -151,6 +151,22 @@ val owners: ObservableList = dogs.map(Dog::owner).filterNotNull()</p>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="../javafx.collections.-observable-list/first-or-default.html">firstOrDefault</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">firstOrDefault</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$firstOrDefault(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrDefault.A)), javafx.beans.value.ObservableValue((net.corda.client.fxutils.firstOrDefault.A)), kotlin.Function1((net.corda.client.fxutils.firstOrDefault.A, kotlin.Boolean)))/default">default</span><span class="symbol">:</span> <span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span><span class="symbol">, </span><span class="identifier" id="net.corda.client.fxutils$firstOrDefault(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrDefault.A)), javafx.beans.value.ObservableValue((net.corda.client.fxutils.firstOrDefault.A)), kotlin.Function1((net.corda.client.fxutils.firstOrDefault.A, kotlin.Boolean)))/predicate">predicate</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">Boolean</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span></code><p>Return first element of the observable list as observable value.
|
||||
Return provided default value if the list is empty.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="../javafx.collections.-observable-list/first-or-null-observable.html">firstOrNullObservable</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">firstOrNullObservable</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$firstOrNullObservable(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrNullObservable.A)), kotlin.Function1((net.corda.client.fxutils.firstOrNullObservable.A, kotlin.Boolean)))/predicate">predicate</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">Boolean</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span></code><p>Return first element of the observable list as observable value.
|
||||
Return ObservableValue(null) if the list is empty.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="../javafx.collections.-observable-list/fold-observable.html">foldObservable</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">, </span><span class="identifier">B</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="keyword">out</span> <span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">foldObservable</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$foldObservable(javafx.collections.ObservableList((net.corda.client.fxutils.foldObservable.A)), net.corda.client.fxutils.foldObservable.B, kotlin.Function2((net.corda.client.fxutils.foldObservable.B, net.corda.client.fxutils.foldObservable.A, )))/initial">initial</span><span class="symbol">:</span> <span class="identifier">B</span><span class="symbol">, </span><span class="identifier" id="net.corda.client.fxutils$foldObservable(javafx.collections.ObservableList((net.corda.client.fxutils.foldObservable.A)), net.corda.client.fxutils.foldObservable.B, kotlin.Function2((net.corda.client.fxutils.foldObservable.B, net.corda.client.fxutils.foldObservable.A, )))/folderFunction">folderFunction</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">B</span><span class="symbol">,</span> <span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">B</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">B</span><span class="symbol">></span></code><p>val people: ObservableList = (..)
|
||||
|
@ -108,6 +108,22 @@ val owners: ObservableList = dogs.map(Dog::owner).filterNotNull()</p>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="../javafx.collections.-observable-list/first-or-default.html">firstOrDefault</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">firstOrDefault</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$firstOrDefault(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrDefault.A)), javafx.beans.value.ObservableValue((net.corda.client.fxutils.firstOrDefault.A)), kotlin.Function1((net.corda.client.fxutils.firstOrDefault.A, kotlin.Boolean)))/default">default</span><span class="symbol">:</span> <span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span><span class="symbol">, </span><span class="identifier" id="net.corda.client.fxutils$firstOrDefault(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrDefault.A)), javafx.beans.value.ObservableValue((net.corda.client.fxutils.firstOrDefault.A)), kotlin.Function1((net.corda.client.fxutils.firstOrDefault.A, kotlin.Boolean)))/predicate">predicate</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">Boolean</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span></code><p>Return first element of the observable list as observable value.
|
||||
Return provided default value if the list is empty.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="../javafx.collections.-observable-list/first-or-null-observable.html">firstOrNullObservable</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">firstOrNullObservable</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$firstOrNullObservable(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrNullObservable.A)), kotlin.Function1((net.corda.client.fxutils.firstOrNullObservable.A, kotlin.Boolean)))/predicate">predicate</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">Boolean</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span></code><p>Return first element of the observable list as observable value.
|
||||
Return ObservableValue(null) if the list is empty.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="../javafx.collections.-observable-list/fold-observable.html">foldObservable</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">, </span><span class="identifier">B</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="keyword">out</span> <span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">foldObservable</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$foldObservable(javafx.collections.ObservableList((net.corda.client.fxutils.foldObservable.A)), net.corda.client.fxutils.foldObservable.B, kotlin.Function2((net.corda.client.fxutils.foldObservable.B, net.corda.client.fxutils.foldObservable.A, )))/initial">initial</span><span class="symbol">:</span> <span class="identifier">B</span><span class="symbol">, </span><span class="identifier" id="net.corda.client.fxutils$foldObservable(javafx.collections.ObservableList((net.corda.client.fxutils.foldObservable.A)), net.corda.client.fxutils.foldObservable.B, kotlin.Function2((net.corda.client.fxutils.foldObservable.B, net.corda.client.fxutils.foldObservable.A, )))/folderFunction">folderFunction</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">B</span><span class="symbol">,</span> <span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">B</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">B</span><span class="symbol">></span></code><p>val people: ObservableList = (..)
|
||||
|
@ -110,6 +110,22 @@ val owners: ObservableList = dogs.map(Dog::owner).filterNotNull()</p>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="../javafx.collections.-observable-list/first-or-default.html">firstOrDefault</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">firstOrDefault</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$firstOrDefault(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrDefault.A)), javafx.beans.value.ObservableValue((net.corda.client.fxutils.firstOrDefault.A)), kotlin.Function1((net.corda.client.fxutils.firstOrDefault.A, kotlin.Boolean)))/default">default</span><span class="symbol">:</span> <span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span><span class="symbol">, </span><span class="identifier" id="net.corda.client.fxutils$firstOrDefault(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrDefault.A)), javafx.beans.value.ObservableValue((net.corda.client.fxutils.firstOrDefault.A)), kotlin.Function1((net.corda.client.fxutils.firstOrDefault.A, kotlin.Boolean)))/predicate">predicate</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">Boolean</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span></code><p>Return first element of the observable list as observable value.
|
||||
Return provided default value if the list is empty.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="../javafx.collections.-observable-list/first-or-null-observable.html">firstOrNullObservable</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">firstOrNullObservable</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$firstOrNullObservable(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrNullObservable.A)), kotlin.Function1((net.corda.client.fxutils.firstOrNullObservable.A, kotlin.Boolean)))/predicate">predicate</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">Boolean</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span></code><p>Return first element of the observable list as observable value.
|
||||
Return ObservableValue(null) if the list is empty.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="../javafx.collections.-observable-list/fold-observable.html">foldObservable</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">, </span><span class="identifier">B</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="keyword">out</span> <span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">foldObservable</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$foldObservable(javafx.collections.ObservableList((net.corda.client.fxutils.foldObservable.A)), net.corda.client.fxutils.foldObservable.B, kotlin.Function2((net.corda.client.fxutils.foldObservable.B, net.corda.client.fxutils.foldObservable.A, )))/initial">initial</span><span class="symbol">:</span> <span class="identifier">B</span><span class="symbol">, </span><span class="identifier" id="net.corda.client.fxutils$foldObservable(javafx.collections.ObservableList((net.corda.client.fxutils.foldObservable.A)), net.corda.client.fxutils.foldObservable.B, kotlin.Function2((net.corda.client.fxutils.foldObservable.B, net.corda.client.fxutils.foldObservable.A, )))/folderFunction">folderFunction</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">B</span><span class="symbol">,</span> <span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">B</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">B</span><span class="symbol">></span></code><p>val people: ObservableList = (..)
|
||||
|
@ -136,6 +136,22 @@ val owners: ObservableList = dogs.map(Dog::owner).filterNotNull()</p>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="../javafx.collections.-observable-list/first-or-default.html">firstOrDefault</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">firstOrDefault</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$firstOrDefault(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrDefault.A)), javafx.beans.value.ObservableValue((net.corda.client.fxutils.firstOrDefault.A)), kotlin.Function1((net.corda.client.fxutils.firstOrDefault.A, kotlin.Boolean)))/default">default</span><span class="symbol">:</span> <span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span><span class="symbol">, </span><span class="identifier" id="net.corda.client.fxutils$firstOrDefault(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrDefault.A)), javafx.beans.value.ObservableValue((net.corda.client.fxutils.firstOrDefault.A)), kotlin.Function1((net.corda.client.fxutils.firstOrDefault.A, kotlin.Boolean)))/predicate">predicate</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">Boolean</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span></code><p>Return first element of the observable list as observable value.
|
||||
Return provided default value if the list is empty.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="../javafx.collections.-observable-list/first-or-null-observable.html">firstOrNullObservable</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">firstOrNullObservable</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$firstOrNullObservable(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrNullObservable.A)), kotlin.Function1((net.corda.client.fxutils.firstOrNullObservable.A, kotlin.Boolean)))/predicate">predicate</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">Boolean</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span></code><p>Return first element of the observable list as observable value.
|
||||
Return ObservableValue(null) if the list is empty.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="../javafx.collections.-observable-list/fold-observable.html">foldObservable</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">, </span><span class="identifier">B</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="keyword">out</span> <span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">foldObservable</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$foldObservable(javafx.collections.ObservableList((net.corda.client.fxutils.foldObservable.A)), net.corda.client.fxutils.foldObservable.B, kotlin.Function2((net.corda.client.fxutils.foldObservable.B, net.corda.client.fxutils.foldObservable.A, )))/initial">initial</span><span class="symbol">:</span> <span class="identifier">B</span><span class="symbol">, </span><span class="identifier" id="net.corda.client.fxutils$foldObservable(javafx.collections.ObservableList((net.corda.client.fxutils.foldObservable.A)), net.corda.client.fxutils.foldObservable.B, kotlin.Function2((net.corda.client.fxutils.foldObservable.B, net.corda.client.fxutils.foldObservable.A, )))/folderFunction">folderFunction</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">B</span><span class="symbol">,</span> <span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">B</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">B</span><span class="symbol">></span></code><p>val people: ObservableList = (..)
|
||||
|
@ -86,6 +86,22 @@ val owners: ObservableList = dogs.map(Dog::owner).filterNotNull()</p>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="../javafx.collections.-observable-list/first-or-default.html">firstOrDefault</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">firstOrDefault</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$firstOrDefault(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrDefault.A)), javafx.beans.value.ObservableValue((net.corda.client.fxutils.firstOrDefault.A)), kotlin.Function1((net.corda.client.fxutils.firstOrDefault.A, kotlin.Boolean)))/default">default</span><span class="symbol">:</span> <span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span><span class="symbol">, </span><span class="identifier" id="net.corda.client.fxutils$firstOrDefault(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrDefault.A)), javafx.beans.value.ObservableValue((net.corda.client.fxutils.firstOrDefault.A)), kotlin.Function1((net.corda.client.fxutils.firstOrDefault.A, kotlin.Boolean)))/predicate">predicate</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">Boolean</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span></code><p>Return first element of the observable list as observable value.
|
||||
Return provided default value if the list is empty.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="../javafx.collections.-observable-list/first-or-null-observable.html">firstOrNullObservable</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">firstOrNullObservable</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$firstOrNullObservable(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrNullObservable.A)), kotlin.Function1((net.corda.client.fxutils.firstOrNullObservable.A, kotlin.Boolean)))/predicate">predicate</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">Boolean</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span></code><p>Return first element of the observable list as observable value.
|
||||
Return ObservableValue(null) if the list is empty.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="../javafx.collections.-observable-list/fold-observable.html">foldObservable</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">, </span><span class="identifier">B</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="keyword">out</span> <span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">foldObservable</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$foldObservable(javafx.collections.ObservableList((net.corda.client.fxutils.foldObservable.A)), net.corda.client.fxutils.foldObservable.B, kotlin.Function2((net.corda.client.fxutils.foldObservable.B, net.corda.client.fxutils.foldObservable.A, )))/initial">initial</span><span class="symbol">:</span> <span class="identifier">B</span><span class="symbol">, </span><span class="identifier" id="net.corda.client.fxutils$foldObservable(javafx.collections.ObservableList((net.corda.client.fxutils.foldObservable.A)), net.corda.client.fxutils.foldObservable.B, kotlin.Function2((net.corda.client.fxutils.foldObservable.B, net.corda.client.fxutils.foldObservable.A, )))/folderFunction">folderFunction</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">B</span><span class="symbol">,</span> <span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">B</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">B</span><span class="symbol">></span></code><p>val people: ObservableList = (..)
|
||||
|
@ -118,6 +118,22 @@ val owners: ObservableList = dogs.map(Dog::owner).filterNotNull()</p>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="../javafx.collections.-observable-list/first-or-default.html">firstOrDefault</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">firstOrDefault</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$firstOrDefault(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrDefault.A)), javafx.beans.value.ObservableValue((net.corda.client.fxutils.firstOrDefault.A)), kotlin.Function1((net.corda.client.fxutils.firstOrDefault.A, kotlin.Boolean)))/default">default</span><span class="symbol">:</span> <span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span><span class="symbol">, </span><span class="identifier" id="net.corda.client.fxutils$firstOrDefault(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrDefault.A)), javafx.beans.value.ObservableValue((net.corda.client.fxutils.firstOrDefault.A)), kotlin.Function1((net.corda.client.fxutils.firstOrDefault.A, kotlin.Boolean)))/predicate">predicate</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">Boolean</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span></code><p>Return first element of the observable list as observable value.
|
||||
Return provided default value if the list is empty.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="../javafx.collections.-observable-list/first-or-null-observable.html">firstOrNullObservable</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">firstOrNullObservable</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$firstOrNullObservable(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrNullObservable.A)), kotlin.Function1((net.corda.client.fxutils.firstOrNullObservable.A, kotlin.Boolean)))/predicate">predicate</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">Boolean</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span></code><p>Return first element of the observable list as observable value.
|
||||
Return ObservableValue(null) if the list is empty.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="../javafx.collections.-observable-list/fold-observable.html">foldObservable</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">, </span><span class="identifier">B</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="keyword">out</span> <span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">foldObservable</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$foldObservable(javafx.collections.ObservableList((net.corda.client.fxutils.foldObservable.A)), net.corda.client.fxutils.foldObservable.B, kotlin.Function2((net.corda.client.fxutils.foldObservable.B, net.corda.client.fxutils.foldObservable.A, )))/initial">initial</span><span class="symbol">:</span> <span class="identifier">B</span><span class="symbol">, </span><span class="identifier" id="net.corda.client.fxutils$foldObservable(javafx.collections.ObservableList((net.corda.client.fxutils.foldObservable.A)), net.corda.client.fxutils.foldObservable.B, kotlin.Function2((net.corda.client.fxutils.foldObservable.B, net.corda.client.fxutils.foldObservable.A, )))/folderFunction">folderFunction</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">B</span><span class="symbol">,</span> <span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">B</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">B</span><span class="symbol">></span></code><p>val people: ObservableList = (..)
|
||||
|
@ -116,6 +116,22 @@ val owners: ObservableList = dogs.map(Dog::owner).filterNotNull()</p>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="../javafx.collections.-observable-list/first-or-default.html">firstOrDefault</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">firstOrDefault</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$firstOrDefault(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrDefault.A)), javafx.beans.value.ObservableValue((net.corda.client.fxutils.firstOrDefault.A)), kotlin.Function1((net.corda.client.fxutils.firstOrDefault.A, kotlin.Boolean)))/default">default</span><span class="symbol">:</span> <span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span><span class="symbol">, </span><span class="identifier" id="net.corda.client.fxutils$firstOrDefault(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrDefault.A)), javafx.beans.value.ObservableValue((net.corda.client.fxutils.firstOrDefault.A)), kotlin.Function1((net.corda.client.fxutils.firstOrDefault.A, kotlin.Boolean)))/predicate">predicate</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">Boolean</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span></code><p>Return first element of the observable list as observable value.
|
||||
Return provided default value if the list is empty.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="../javafx.collections.-observable-list/first-or-null-observable.html">firstOrNullObservable</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">firstOrNullObservable</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$firstOrNullObservable(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrNullObservable.A)), kotlin.Function1((net.corda.client.fxutils.firstOrNullObservable.A, kotlin.Boolean)))/predicate">predicate</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">Boolean</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span></code><p>Return first element of the observable list as observable value.
|
||||
Return ObservableValue(null) if the list is empty.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="../javafx.collections.-observable-list/fold-observable.html">foldObservable</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">, </span><span class="identifier">B</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="keyword">out</span> <span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">foldObservable</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$foldObservable(javafx.collections.ObservableList((net.corda.client.fxutils.foldObservable.A)), net.corda.client.fxutils.foldObservable.B, kotlin.Function2((net.corda.client.fxutils.foldObservable.B, net.corda.client.fxutils.foldObservable.A, )))/initial">initial</span><span class="symbol">:</span> <span class="identifier">B</span><span class="symbol">, </span><span class="identifier" id="net.corda.client.fxutils$foldObservable(javafx.collections.ObservableList((net.corda.client.fxutils.foldObservable.A)), net.corda.client.fxutils.foldObservable.B, kotlin.Function2((net.corda.client.fxutils.foldObservable.B, net.corda.client.fxutils.foldObservable.A, )))/folderFunction">folderFunction</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">B</span><span class="symbol">,</span> <span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">B</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">B</span><span class="symbol">></span></code><p>val people: ObservableList = (..)
|
||||
|
@ -28,6 +28,12 @@ propagate variance constraints and type inference fails.</p>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="is-not-null.html">isNotNull</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">*</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">isNotNull</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">BooleanBinding</span></code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="map.html">map</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">, </span><span class="identifier">B</span><span class="symbol">></span> <span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="keyword">out</span> <span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">map</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$map(javafx.beans.value.ObservableValue((net.corda.client.fxutils.map.A)), kotlin.Function1((net.corda.client.fxutils.map.A, net.corda.client.fxutils.map.B)))/function">function</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">B</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">B</span><span class="symbol">></span></code><p>val person: ObservableValue = (..)
|
||||
|
@ -0,0 +1,15 @@
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<title>isNotNull - </title>
|
||||
<link rel="stylesheet" href="../../style.css">
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<a href="../index.html">net.corda.client.fxutils</a> / <a href="index.html">javafx.beans.value.ObservableValue</a> / <a href=".">isNotNull</a><br/>
|
||||
<br/>
|
||||
<h1>isNotNull</h1>
|
||||
<a name="net.corda.client.fxutils$isNotNull(javafx.beans.value.ObservableValue((kotlin.Any)))"></a>
|
||||
<code><span class="keyword">fun </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">*</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">isNotNull</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">BooleanBinding</span></code><br/>
|
||||
<br/>
|
||||
<br/>
|
||||
</BODY>
|
||||
</HTML>
|
@ -0,0 +1,17 @@
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<title>firstOrDefault - </title>
|
||||
<link rel="stylesheet" href="../../style.css">
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<a href="../index.html">net.corda.client.fxutils</a> / <a href="index.html">javafx.collections.ObservableList</a> / <a href=".">firstOrDefault</a><br/>
|
||||
<br/>
|
||||
<h1>firstOrDefault</h1>
|
||||
<a name="net.corda.client.fxutils$firstOrDefault(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrDefault.A)), javafx.beans.value.ObservableValue((net.corda.client.fxutils.firstOrDefault.A)), kotlin.Function1((net.corda.client.fxutils.firstOrDefault.A, kotlin.Boolean)))"></a>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">firstOrDefault</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$firstOrDefault(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrDefault.A)), javafx.beans.value.ObservableValue((net.corda.client.fxutils.firstOrDefault.A)), kotlin.Function1((net.corda.client.fxutils.firstOrDefault.A, kotlin.Boolean)))/default">default</span><span class="symbol">:</span> <span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span><span class="symbol">, </span><span class="identifier" id="net.corda.client.fxutils$firstOrDefault(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrDefault.A)), javafx.beans.value.ObservableValue((net.corda.client.fxutils.firstOrDefault.A)), kotlin.Function1((net.corda.client.fxutils.firstOrDefault.A, kotlin.Boolean)))/predicate">predicate</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">Boolean</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span></code><br/>
|
||||
<p>Return first element of the observable list as observable value.
|
||||
Return provided default value if the list is empty.</p>
|
||||
<br/>
|
||||
<br/>
|
||||
</BODY>
|
||||
</HTML>
|
@ -0,0 +1,17 @@
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<title>firstOrNullObservable - </title>
|
||||
<link rel="stylesheet" href="../../style.css">
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<a href="../index.html">net.corda.client.fxutils</a> / <a href="index.html">javafx.collections.ObservableList</a> / <a href=".">firstOrNullObservable</a><br/>
|
||||
<br/>
|
||||
<h1>firstOrNullObservable</h1>
|
||||
<a name="net.corda.client.fxutils$firstOrNullObservable(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrNullObservable.A)), kotlin.Function1((net.corda.client.fxutils.firstOrNullObservable.A, kotlin.Boolean)))"></a>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">firstOrNullObservable</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$firstOrNullObservable(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrNullObservable.A)), kotlin.Function1((net.corda.client.fxutils.firstOrNullObservable.A, kotlin.Boolean)))/predicate">predicate</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">Boolean</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span></code><br/>
|
||||
<p>Return first element of the observable list as observable value.
|
||||
Return ObservableValue(null) if the list is empty.</p>
|
||||
<br/>
|
||||
<br/>
|
||||
</BODY>
|
||||
</HTML>
|
@ -65,6 +65,22 @@ val owners: ObservableList = dogs.map(Dog::owner).filterNotNull()</p>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="first-or-default.html">firstOrDefault</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">firstOrDefault</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$firstOrDefault(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrDefault.A)), javafx.beans.value.ObservableValue((net.corda.client.fxutils.firstOrDefault.A)), kotlin.Function1((net.corda.client.fxutils.firstOrDefault.A, kotlin.Boolean)))/default">default</span><span class="symbol">:</span> <span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span><span class="symbol">, </span><span class="identifier" id="net.corda.client.fxutils$firstOrDefault(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrDefault.A)), javafx.beans.value.ObservableValue((net.corda.client.fxutils.firstOrDefault.A)), kotlin.Function1((net.corda.client.fxutils.firstOrDefault.A, kotlin.Boolean)))/predicate">predicate</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">Boolean</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span></code><p>Return first element of the observable list as observable value.
|
||||
Return provided default value if the list is empty.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="first-or-null-observable.html">firstOrNullObservable</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">firstOrNullObservable</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.fxutils$firstOrNullObservable(javafx.collections.ObservableList((net.corda.client.fxutils.firstOrNullObservable.A)), kotlin.Function1((net.corda.client.fxutils.firstOrNullObservable.A, kotlin.Boolean)))/predicate">predicate</span><span class="symbol">:</span> <span class="symbol">(</span><span class="identifier">A</span><span class="symbol">)</span> <span class="symbol">-></span> <span class="identifier">Boolean</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">?</span><span class="symbol">></span></code><p>Return first element of the observable list as observable value.
|
||||
Return ObservableValue(null) if the list is empty.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="flatten.html">flatten</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span> <span class="identifier">ObservableList</span><span class="symbol"><</span><span class="keyword">out</span> <span class="identifier">ObservableValue</span><span class="symbol"><</span><span class="keyword">out</span> <span class="identifier">A</span><span class="symbol">></span><span class="symbol">></span><span class="symbol">.</span><span class="identifier">flatten</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableList</span><span class="symbol"><</span><span class="identifier">A</span><span class="symbol">></span></code><p>data class Person(val height: ObservableValue)
|
||||
|
15
docs/build/html/api/net.corda.client.mock/-event-generator/bank-of-corda-command-generator.html
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<title>EventGenerator.bankOfCordaCommandGenerator - </title>
|
||||
<link rel="stylesheet" href="../../style.css">
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<a href="../index.html">net.corda.client.mock</a> / <a href="index.html">EventGenerator</a> / <a href=".">bankOfCordaCommandGenerator</a><br/>
|
||||
<br/>
|
||||
<h1>bankOfCordaCommandGenerator</h1>
|
||||
<a name="net.corda.client.mock.EventGenerator$bankOfCordaCommandGenerator"></a>
|
||||
<code><span class="keyword">val </span><span class="identifier">bankOfCordaCommandGenerator</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></code><br/>
|
||||
<br/>
|
||||
<br/>
|
||||
</BODY>
|
||||
</HTML>
|
15
docs/build/html/api/net.corda.client.mock/-event-generator/client-command-generator.html
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<title>EventGenerator.clientCommandGenerator - </title>
|
||||
<link rel="stylesheet" href="../../style.css">
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<a href="../index.html">net.corda.client.mock</a> / <a href="index.html">EventGenerator</a> / <a href=".">clientCommandGenerator</a><br/>
|
||||
<br/>
|
||||
<h1>clientCommandGenerator</h1>
|
||||
<a name="net.corda.client.mock.EventGenerator$clientCommandGenerator"></a>
|
||||
<code><span class="keyword">val </span><span class="identifier">clientCommandGenerator</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></code><br/>
|
||||
<br/>
|
||||
<br/>
|
||||
</BODY>
|
||||
</HTML>
|
@ -42,15 +42,21 @@ state/ref pairs, but it doesnt necessarily generate "correct" events</p>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="bank-of-corda-command-generator.html">bankOfCordaCommandGenerator</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">val </span><span class="identifier">bankOfCordaCommandGenerator</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="cash-state-generator.html">cashStateGenerator</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">val </span><span class="identifier">cashStateGenerator</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="client-to-service-command-generator.html">clientToServiceCommandGenerator</a></td>
|
||||
<a href="client-command-generator.html">clientCommandGenerator</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">val </span><span class="identifier">clientToServiceCommandGenerator</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></code></td>
|
||||
<code><span class="keyword">val </span><span class="identifier">clientCommandGenerator</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
|
@ -28,10 +28,9 @@
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="gathered-transaction-data-list.html">gatheredTransactionDataList</a></td>
|
||||
<a href="partially-resolved-transactions.html">partiallyResolvedTransactions</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">val </span><span class="identifier">gatheredTransactionDataList</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></code><p>We JOIN the transaction list with state machines</p>
|
||||
</td>
|
||||
<code><span class="keyword">val </span><span class="identifier">partiallyResolvedTransactions</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
@ -0,0 +1,15 @@
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<title>GatheredTransactionDataModel.partiallyResolvedTransactions - </title>
|
||||
<link rel="stylesheet" href="../../style.css">
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<a href="../index.html">net.corda.client.model</a> / <a href="index.html">GatheredTransactionDataModel</a> / <a href=".">partiallyResolvedTransactions</a><br/>
|
||||
<br/>
|
||||
<h1>partiallyResolvedTransactions</h1>
|
||||
<a name="net.corda.client.model.GatheredTransactionDataModel$partiallyResolvedTransactions"></a>
|
||||
<code><span class="keyword">val </span><span class="identifier">partiallyResolvedTransactions</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></code><br/>
|
||||
<br/>
|
||||
<br/>
|
||||
</BODY>
|
||||
</HTML>
|
@ -32,6 +32,12 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="network-identities.html">networkIdentities</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">val </span><span class="identifier">networkIdentities</span><span class="symbol">: </span><span class="identifier">ObservableList</span><span class="symbol"><</span><a href="../../net.corda.core.node/-node-info/index.html"><span class="identifier">NodeInfo</span></a><span class="symbol">></span></code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="notaries.html">notaries</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">val </span><span class="identifier">notaries</span><span class="symbol">: </span><span class="identifier">ObservableList</span><span class="symbol"><</span><a href="../../net.corda.core.node/-node-info/index.html"><span class="identifier">NodeInfo</span></a><span class="symbol">></span></code></td>
|
||||
@ -51,7 +57,8 @@
|
||||
<td>
|
||||
<a href="lookup.html">lookup</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="identifier">lookup</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.model.NetworkIdentityModel$lookup(net.corda.core.crypto.CompositeKey)/compositeKey">compositeKey</span><span class="symbol">:</span> <a href="../../net.corda.core.crypto/-composite-key/index.html"><span class="identifier">CompositeKey</span></a><span class="symbol">)</span><span class="symbol">: </span><a href="../../net.corda.core.node/-node-info/index.html"><span class="identifier">NodeInfo</span></a><span class="symbol">?</span></code></td>
|
||||
<code><span class="keyword">fun </span><span class="identifier">lookup</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.model.NetworkIdentityModel$lookup(net.corda.core.crypto.CompositeKey)/compositeKey">compositeKey</span><span class="symbol">:</span> <a href="../../net.corda.core.crypto/-composite-key/index.html"><span class="identifier">CompositeKey</span></a><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><a href="../../net.corda.core.node/-node-info/index.html"><span class="identifier">NodeInfo</span></a><span class="symbol">?</span><span class="symbol">></span></code><br/>
|
||||
<code><span class="keyword">fun </span><span class="identifier">lookup</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.model.NetworkIdentityModel$lookup(java.security.PublicKey)/publicKey">publicKey</span><span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/security/PublicKey.html"><span class="identifier">PublicKey</span></a><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><a href="../../net.corda.core.node/-node-info/index.html"><span class="identifier">NodeInfo</span></a><span class="symbol">?</span><span class="symbol">></span></code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
@ -8,7 +8,9 @@
|
||||
<br/>
|
||||
<h1>lookup</h1>
|
||||
<a name="net.corda.client.model.NetworkIdentityModel$lookup(net.corda.core.crypto.CompositeKey)"></a>
|
||||
<code><span class="keyword">fun </span><span class="identifier">lookup</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.model.NetworkIdentityModel$lookup(net.corda.core.crypto.CompositeKey)/compositeKey">compositeKey</span><span class="symbol">:</span> <a href="../../net.corda.core.crypto/-composite-key/index.html"><span class="identifier">CompositeKey</span></a><span class="symbol">)</span><span class="symbol">: </span><a href="../../net.corda.core.node/-node-info/index.html"><span class="identifier">NodeInfo</span></a><span class="symbol">?</span></code><br/>
|
||||
<code><span class="keyword">fun </span><span class="identifier">lookup</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.model.NetworkIdentityModel$lookup(net.corda.core.crypto.CompositeKey)/compositeKey">compositeKey</span><span class="symbol">:</span> <a href="../../net.corda.core.crypto/-composite-key/index.html"><span class="identifier">CompositeKey</span></a><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><a href="../../net.corda.core.node/-node-info/index.html"><span class="identifier">NodeInfo</span></a><span class="symbol">?</span><span class="symbol">></span></code><br/>
|
||||
<a name="net.corda.client.model.NetworkIdentityModel$lookup(java.security.PublicKey)"></a>
|
||||
<code><span class="keyword">fun </span><span class="identifier">lookup</span><span class="symbol">(</span><span class="identifier" id="net.corda.client.model.NetworkIdentityModel$lookup(java.security.PublicKey)/publicKey">publicKey</span><span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/security/PublicKey.html"><span class="identifier">PublicKey</span></a><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">ObservableValue</span><span class="symbol"><</span><a href="../../net.corda.core.node/-node-info/index.html"><span class="identifier">NodeInfo</span></a><span class="symbol">?</span><span class="symbol">></span></code><br/>
|
||||
<br/>
|
||||
<br/>
|
||||
</BODY>
|
||||
|
15
docs/build/html/api/net.corda.client.model/-network-identity-model/network-identities.html
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<title>NetworkIdentityModel.networkIdentities - </title>
|
||||
<link rel="stylesheet" href="../../style.css">
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<a href="../index.html">net.corda.client.model</a> / <a href="index.html">NetworkIdentityModel</a> / <a href=".">networkIdentities</a><br/>
|
||||
<br/>
|
||||
<h1>networkIdentities</h1>
|
||||
<a name="net.corda.client.model.NetworkIdentityModel$networkIdentities"></a>
|
||||
<code><span class="keyword">val </span><span class="identifier">networkIdentities</span><span class="symbol">: </span><span class="identifier">ObservableList</span><span class="symbol"><</span><a href="../../net.corda.core.node/-node-info/index.html"><span class="identifier">NodeInfo</span></a><span class="symbol">></span></code><br/>
|
||||
<br/>
|
||||
<br/>
|
||||
</BODY>
|
||||
</HTML>
|
@ -8,7 +8,7 @@
|
||||
<br/>
|
||||
<h1>by</h1>
|
||||
<a name="net.corda.core.contracts.Requirements$by(kotlin.String, kotlin.Boolean)"></a>
|
||||
<code><span class="keyword">infix</span> <span class="keyword">fun </span><span class="identifier">String</span><span class="symbol">.</span><span class="identifier">by</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.contracts.Requirements$by(kotlin.String, kotlin.Boolean)/expr">expr</span><span class="symbol">:</span> <span class="identifier">Boolean</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code><br/>
|
||||
<code><span class="keyword">inline</span> <span class="keyword">infix</span> <span class="keyword">fun </span><span class="identifier">String</span><span class="symbol">.</span><span class="identifier">by</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.contracts.Requirements$by(kotlin.String, kotlin.Boolean)/expr">expr</span><span class="symbol">:</span> <span class="identifier">Boolean</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code><br/>
|
||||
<br/>
|
||||
<br/>
|
||||
</BODY>
|
||||
|
@ -7,20 +7,9 @@
|
||||
<a href="../index.html">net.corda.core.contracts</a> / <a href=".">Requirements</a><br/>
|
||||
<br/>
|
||||
<h1>Requirements</h1>
|
||||
<code><span class="keyword">class </span><span class="identifier">Requirements</span></code><br/>
|
||||
<code><span class="keyword">object </span><span class="identifier">Requirements</span></code><br/>
|
||||
<br/>
|
||||
<br/>
|
||||
<h3>Constructors</h3>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="-init-.html"><init></a></td>
|
||||
<td>
|
||||
<code><span class="identifier">Requirements</span><span class="symbol">(</span><span class="symbol">)</span></code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3>Functions</h3>
|
||||
<table>
|
||||
<tbody>
|
||||
|
@ -314,7 +314,7 @@ ledger. The reference is intended to be encrypted so its meaningless to anyone o
|
||||
<td>
|
||||
<a href="-requirements/index.html">Requirements</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">class </span><span class="identifier">Requirements</span></code></td>
|
||||
<code><span class="keyword">object </span><span class="identifier">Requirements</span></code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
@ -529,12 +529,6 @@ different external IDs, it would indicate a problem with handling of IDs.</p>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="-r.html">R</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">val </span><span class="identifier">R</span><span class="symbol">: </span><a href="-requirements/index.html"><span class="identifier">Requirements</span></a></code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="-u-s-d.html">USD</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">val </span><span class="identifier">USD</span><span class="symbol">: </span><a href="http://docs.oracle.com/javase/6/docs/api/java/util/Currency.html"><span class="identifier">Currency</span></a></code></td>
|
||||
|
@ -130,8 +130,8 @@ will do as long as the other side registers with it.</p>
|
||||
<td>
|
||||
<a href="../../../net.corda.core.flows/-flow-logic/receive.html">receive</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party, java.lang.Class((net.corda.core.flows.FlowLogic.receive.T)))/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party, java.lang.Class((net.corda.core.flows.FlowLogic.receive.T)))/receiveType">receiveType</span><span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code><br/>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party)/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">)</span><span class="symbol">: </span><a href="../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code></td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party)/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">)</span><span class="symbol">: </span><a href="../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code><br/>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party, java.lang.Class((net.corda.core.flows.FlowLogic.receive.T)))/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party, java.lang.Class((net.corda.core.flows.FlowLogic.receive.T)))/receiveType">receiveType</span><span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
|
@ -133,8 +133,8 @@ will do as long as the other side registers with it.</p>
|
||||
<td>
|
||||
<a href="../../../net.corda.core.flows/-flow-logic/receive.html">receive</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party)/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">)</span><span class="symbol">: </span><a href="../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code><br/>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party, java.lang.Class((net.corda.core.flows.FlowLogic.receive.T)))/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party, java.lang.Class((net.corda.core.flows.FlowLogic.receive.T)))/receiveType">receiveType</span><span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code></td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party, java.lang.Class((net.corda.core.flows.FlowLogic.receive.T)))/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party, java.lang.Class((net.corda.core.flows.FlowLogic.receive.T)))/receiveType">receiveType</span><span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code><br/>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party)/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">)</span><span class="symbol">: </span><a href="../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
|
@ -127,8 +127,8 @@ will do as long as the other side registers with it.</p>
|
||||
<td>
|
||||
<a href="../../net.corda.core.flows/-flow-logic/receive.html">receive</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party, java.lang.Class((net.corda.core.flows.FlowLogic.receive.T)))/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party, java.lang.Class((net.corda.core.flows.FlowLogic.receive.T)))/receiveType">receiveType</span><span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><a href="../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code><br/>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party)/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">)</span><span class="symbol">: </span><a href="../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code></td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party)/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">)</span><span class="symbol">: </span><a href="../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code><br/>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party, java.lang.Class((net.corda.core.flows.FlowLogic.receive.T)))/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party, java.lang.Class((net.corda.core.flows.FlowLogic.receive.T)))/receiveType">receiveType</span><span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><a href="../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
@ -140,8 +140,8 @@ will do as long as the other side registers with it.</p>
|
||||
<td>
|
||||
<a href="../../net.corda.core.flows/-flow-logic/send-and-receive.html">sendAndReceive</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">sendAndReceive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/payload">payload</span><span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/receiveType">receiveType</span><span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><a href="../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code><br/>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">sendAndReceive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any)/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any)/payload">payload</span><span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code></td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">sendAndReceive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any)/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any)/payload">payload</span><span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code><br/>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">sendAndReceive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/payload">payload</span><span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/receiveType">receiveType</span><span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><a href="../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
|
@ -103,8 +103,8 @@ will do as long as the other side registers with it.</p>
|
||||
<td>
|
||||
<a href="../../net.corda.core.flows/-flow-logic/receive.html">receive</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party)/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">)</span><span class="symbol">: </span><a href="../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code><br/>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party, java.lang.Class((net.corda.core.flows.FlowLogic.receive.T)))/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party, java.lang.Class((net.corda.core.flows.FlowLogic.receive.T)))/receiveType">receiveType</span><span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><a href="../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code></td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party, java.lang.Class((net.corda.core.flows.FlowLogic.receive.T)))/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party, java.lang.Class((net.corda.core.flows.FlowLogic.receive.T)))/receiveType">receiveType</span><span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><a href="../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code><br/>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party)/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">)</span><span class="symbol">: </span><a href="../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
@ -116,8 +116,8 @@ will do as long as the other side registers with it.</p>
|
||||
<td>
|
||||
<a href="../../net.corda.core.flows/-flow-logic/send-and-receive.html">sendAndReceive</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">sendAndReceive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any)/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any)/payload">payload</span><span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code><br/>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">sendAndReceive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/payload">payload</span><span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/receiveType">receiveType</span><span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><a href="../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code></td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">sendAndReceive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/payload">payload</span><span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/receiveType">receiveType</span><span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><a href="../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code><br/>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">sendAndReceive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any)/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any)/payload">payload</span><span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
|
@ -179,8 +179,8 @@ will do as long as the other side registers with it.</p>
|
||||
<td>
|
||||
<a href="../../net.corda.core.flows/-flow-logic/receive.html">receive</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party, java.lang.Class((net.corda.core.flows.FlowLogic.receive.T)))/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party, java.lang.Class((net.corda.core.flows.FlowLogic.receive.T)))/receiveType">receiveType</span><span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><a href="../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code><br/>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party)/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">)</span><span class="symbol">: </span><a href="../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code></td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party)/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">)</span><span class="symbol">: </span><a href="../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code><br/>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party, java.lang.Class((net.corda.core.flows.FlowLogic.receive.T)))/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party, java.lang.Class((net.corda.core.flows.FlowLogic.receive.T)))/receiveType">receiveType</span><span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><a href="../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
|
@ -136,8 +136,8 @@ will do as long as the other side registers with it.</p>
|
||||
<td>
|
||||
<a href="../../../net.corda.core.flows/-flow-logic/send-and-receive.html">sendAndReceive</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">sendAndReceive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/payload">payload</span><span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/receiveType">receiveType</span><span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code><br/>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">sendAndReceive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any)/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any)/payload">payload</span><span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code></td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">sendAndReceive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any)/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any)/payload">payload</span><span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code><br/>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">sendAndReceive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/payload">payload</span><span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/receiveType">receiveType</span><span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
|
@ -143,8 +143,8 @@ will do as long as the other side registers with it.</p>
|
||||
<td>
|
||||
<a href="../../../net.corda.core.flows/-flow-logic/send-and-receive.html">sendAndReceive</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">sendAndReceive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any)/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any)/payload">payload</span><span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code><br/>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">sendAndReceive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/payload">payload</span><span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/receiveType">receiveType</span><span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code></td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">sendAndReceive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/payload">payload</span><span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/receiveType">receiveType</span><span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code><br/>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">sendAndReceive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any)/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any)/payload">payload</span><span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
|
@ -187,8 +187,8 @@ will do as long as the other side registers with it.</p>
|
||||
<td>
|
||||
<a href="../../../net.corda.core.flows/-flow-logic/receive.html">receive</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party)/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">)</span><span class="symbol">: </span><a href="../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code><br/>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party, java.lang.Class((net.corda.core.flows.FlowLogic.receive.T)))/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party, java.lang.Class((net.corda.core.flows.FlowLogic.receive.T)))/receiveType">receiveType</span><span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code></td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party, java.lang.Class((net.corda.core.flows.FlowLogic.receive.T)))/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party, java.lang.Class((net.corda.core.flows.FlowLogic.receive.T)))/receiveType">receiveType</span><span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code><br/>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party)/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">)</span><span class="symbol">: </span><a href="../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
@ -200,8 +200,8 @@ will do as long as the other side registers with it.</p>
|
||||
<td>
|
||||
<a href="../../../net.corda.core.flows/-flow-logic/send-and-receive.html">sendAndReceive</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">sendAndReceive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any)/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any)/payload">payload</span><span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code><br/>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">sendAndReceive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/payload">payload</span><span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/receiveType">receiveType</span><span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code></td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">sendAndReceive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/payload">payload</span><span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/receiveType">receiveType</span><span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code><br/>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">sendAndReceive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any)/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any)/payload">payload</span><span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
|
@ -158,8 +158,8 @@ will do as long as the other side registers with it.</p>
|
||||
<td>
|
||||
<a href="../../../net.corda.core.flows/-flow-logic/send-and-receive.html">sendAndReceive</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">sendAndReceive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/payload">payload</span><span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/receiveType">receiveType</span><span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code><br/>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">sendAndReceive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any)/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any)/payload">payload</span><span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code></td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">sendAndReceive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any)/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any)/payload">payload</span><span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code><br/>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">sendAndReceive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/payload">payload</span><span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/receiveType">receiveType</span><span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
|
@ -158,6 +158,13 @@ N.B. Marked as JvmStatic to allow use in the inherited classes.</p>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="to-my-address.html">toMyAddress</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="identifier">toMyAddress</span><span class="symbol">(</span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingComponent.Companion$toMyAddress(net.corda.core.crypto.CompositeKey, )/myIdentity">myIdentity</span><span class="symbol">:</span> <a href="../../net.corda.core.crypto/-composite-key/index.html"><span class="identifier">CompositeKey</span></a><span class="symbol">?</span><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingComponent.Companion$toMyAddress(net.corda.core.crypto.CompositeKey, )/myHostPort">myHostPort</span><span class="symbol">:</span> <span class="identifier"><ERROR CLASS></span><span class="symbol">)</span><span class="symbol">: </span><a href="../../net.corda.core.messaging/-single-message-recipient.html"><span class="identifier">SingleMessageRecipient</span></a></code><p>Convert the identity, host and port of this node into the appropriate <a href="../../net.corda.core.messaging/-single-message-recipient.html">SingleMessageRecipient</a>.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="to-queue-name.html">toQueueName</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="identifier">toQueueName</span><span class="symbol">(</span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingComponent.Companion$toQueueName(net.corda.core.messaging.MessageRecipients)/target">target</span><span class="symbol">:</span> <a href="../../net.corda.core.messaging/-message-recipients.html"><span class="identifier">MessageRecipients</span></a><span class="symbol">)</span><span class="symbol">: </span><span class="identifier"><ERROR CLASS></span></code><p>Assuming the passed in target address is actually an ArtemisAddress will extract the queue name used.
|
||||
|
@ -0,0 +1,19 @@
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<title>ArtemisMessagingComponent.toMyAddress - </title>
|
||||
<link rel="stylesheet" href="../../style.css">
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<a href="../index.html">net.corda.node.services.messaging</a> / <a href="index.html">ArtemisMessagingComponent</a> / <a href=".">toMyAddress</a><br/>
|
||||
<br/>
|
||||
<h1>toMyAddress</h1>
|
||||
<a name="net.corda.node.services.messaging.ArtemisMessagingComponent.Companion$toMyAddress(net.corda.core.crypto.CompositeKey, )"></a>
|
||||
<code><span class="keyword">protected</span> <span class="keyword">fun </span><span class="identifier">toMyAddress</span><span class="symbol">(</span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingComponent.Companion$toMyAddress(net.corda.core.crypto.CompositeKey, )/myIdentity">myIdentity</span><span class="symbol">:</span> <a href="../../net.corda.core.crypto/-composite-key/index.html"><span class="identifier">CompositeKey</span></a><span class="symbol">?</span><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingComponent.Companion$toMyAddress(net.corda.core.crypto.CompositeKey, )/myHostPort">myHostPort</span><span class="symbol">:</span> <span class="identifier"><ERROR CLASS></span><span class="symbol">)</span><span class="symbol">: </span><a href="../../net.corda.core.messaging/-single-message-recipient.html"><span class="identifier">SingleMessageRecipient</span></a></code><br/>
|
||||
<p>Convert the identity, host and port of this node into the appropriate <a href="../../net.corda.core.messaging/-single-message-recipient.html">SingleMessageRecipient</a>.</p>
|
||||
<p>N.B. Marked as JvmStatic to allow use in the inherited classes.</p>
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
</BODY>
|
||||
</HTML>
|
@ -7,7 +7,7 @@
|
||||
<a href="../index.html">net.corda.node.services.messaging</a> / <a href="index.html">ArtemisMessagingServer</a> / <a href="."><init></a><br/>
|
||||
<br/>
|
||||
<h1><init></h1>
|
||||
<code><span class="identifier">ArtemisMessagingServer</span><span class="symbol">(</span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/config">config</span><span class="symbol">:</span> <a href="../../net.corda.node.services.config/-node-configuration/index.html"><span class="identifier">NodeConfiguration</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/myHostPort">myHostPort</span><span class="symbol">:</span> <span class="identifier"><ERROR CLASS></span><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/networkMapCache">networkMapCache</span><span class="symbol">:</span> <a href="../../net.corda.core.node.services/-network-map-cache/index.html"><span class="identifier">NetworkMapCache</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/userService">userService</span><span class="symbol">:</span> <a href="../../net.corda.node.services/-r-p-c-user-service/index.html"><span class="identifier">RPCUserService</span></a><span class="symbol">)</span></code><br/>
|
||||
<code><span class="identifier">ArtemisMessagingServer</span><span class="symbol">(</span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.crypto.CompositeKey, net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/config">config</span><span class="symbol">:</span> <a href="../../net.corda.node.services.config/-node-configuration/index.html"><span class="identifier">NodeConfiguration</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.crypto.CompositeKey, net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/myHostPort">myHostPort</span><span class="symbol">:</span> <span class="identifier"><ERROR CLASS></span><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.crypto.CompositeKey, net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/myIdentity">myIdentity</span><span class="symbol">:</span> <a href="../../net.corda.core.crypto/-composite-key/index.html"><span class="identifier">CompositeKey</span></a><span class="symbol">?</span><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.crypto.CompositeKey, net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/networkMapCache">networkMapCache</span><span class="symbol">:</span> <a href="../../net.corda.core.node.services/-network-map-cache/index.html"><span class="identifier">NetworkMapCache</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.crypto.CompositeKey, net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/userService">userService</span><span class="symbol">:</span> <a href="../../net.corda.node.services/-r-p-c-user-service/index.html"><span class="identifier">RPCUserService</span></a><span class="symbol">)</span></code><br/>
|
||||
<p>This class configures and manages an Apache Artemis message queue broker.</p>
|
||||
<p>Nodes communication is managed using an Artemis specific protocol, but it supports other protocols like AMQP/1.0
|
||||
as well for interop.</p>
|
||||
|
@ -36,7 +36,7 @@ a fully connected network, trusted network or on localhost.</p>
|
||||
<td>
|
||||
<a href="-init-.html"><init></a></td>
|
||||
<td>
|
||||
<code><span class="identifier">ArtemisMessagingServer</span><span class="symbol">(</span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/config">config</span><span class="symbol">:</span> <a href="../../net.corda.node.services.config/-node-configuration/index.html"><span class="identifier">NodeConfiguration</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/myHostPort">myHostPort</span><span class="symbol">:</span> <span class="identifier"><ERROR CLASS></span><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/networkMapCache">networkMapCache</span><span class="symbol">:</span> <a href="../../net.corda.core.node.services/-network-map-cache/index.html"><span class="identifier">NetworkMapCache</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/userService">userService</span><span class="symbol">:</span> <a href="../../net.corda.node.services/-r-p-c-user-service/index.html"><span class="identifier">RPCUserService</span></a><span class="symbol">)</span></code><p>This class configures and manages an Apache Artemis message queue broker.</p>
|
||||
<code><span class="identifier">ArtemisMessagingServer</span><span class="symbol">(</span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.crypto.CompositeKey, net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/config">config</span><span class="symbol">:</span> <a href="../../net.corda.node.services.config/-node-configuration/index.html"><span class="identifier">NodeConfiguration</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.crypto.CompositeKey, net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/myHostPort">myHostPort</span><span class="symbol">:</span> <span class="identifier"><ERROR CLASS></span><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.crypto.CompositeKey, net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/myIdentity">myIdentity</span><span class="symbol">:</span> <a href="../../net.corda.core.crypto/-composite-key/index.html"><span class="identifier">CompositeKey</span></a><span class="symbol">?</span><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.crypto.CompositeKey, net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/networkMapCache">networkMapCache</span><span class="symbol">:</span> <a href="../../net.corda.core.node.services/-network-map-cache/index.html"><span class="identifier">NetworkMapCache</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.node.services.messaging.ArtemisMessagingServer$<init>(net.corda.node.services.config.NodeConfiguration, , net.corda.core.crypto.CompositeKey, net.corda.core.node.services.NetworkMapCache, net.corda.node.services.RPCUserService)/userService">userService</span><span class="symbol">:</span> <a href="../../net.corda.node.services/-r-p-c-user-service/index.html"><span class="identifier">RPCUserService</span></a><span class="symbol">)</span></code><p>This class configures and manages an Apache Artemis message queue broker.</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
@ -59,6 +59,12 @@ a fully connected network, trusted network or on localhost.</p>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="my-identity.html">myIdentity</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">val </span><span class="identifier">myIdentity</span><span class="symbol">: </span><a href="../../net.corda.core.crypto/-composite-key/index.html"><span class="identifier">CompositeKey</span></a><span class="symbol">?</span></code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="network-map-cache.html">networkMapCache</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">val </span><span class="identifier">networkMapCache</span><span class="symbol">: </span><a href="../../net.corda.core.node.services/-network-map-cache/index.html"><span class="identifier">NetworkMapCache</span></a></code></td>
|
||||
|
15
docs/build/html/api/net.corda.node.services.messaging/-artemis-messaging-server/my-identity.html
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<title>ArtemisMessagingServer.myIdentity - </title>
|
||||
<link rel="stylesheet" href="../../style.css">
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<a href="../index.html">net.corda.node.services.messaging</a> / <a href="index.html">ArtemisMessagingServer</a> / <a href=".">myIdentity</a><br/>
|
||||
<br/>
|
||||
<h1>myIdentity</h1>
|
||||
<a name="net.corda.node.services.messaging.ArtemisMessagingServer$myIdentity"></a>
|
||||
<code><span class="keyword">val </span><span class="identifier">myIdentity</span><span class="symbol">: </span><a href="../../net.corda.core.crypto/-composite-key/index.html"><span class="identifier">CompositeKey</span></a><span class="symbol">?</span></code><br/>
|
||||
<br/>
|
||||
<br/>
|
||||
</BODY>
|
||||
</HTML>
|
@ -98,8 +98,8 @@ will do as long as the other side registers with it.</p>
|
||||
<td>
|
||||
<a href="../../../../net.corda.core.flows/-flow-logic/receive.html">receive</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party, java.lang.Class((net.corda.core.flows.FlowLogic.receive.T)))/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party, java.lang.Class((net.corda.core.flows.FlowLogic.receive.T)))/receiveType">receiveType</span><span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code><br/>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party)/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">)</span><span class="symbol">: </span><a href="../../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code></td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party)/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">)</span><span class="symbol">: </span><a href="../../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code><br/>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">receive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party, java.lang.Class((net.corda.core.flows.FlowLogic.receive.T)))/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$receive(net.corda.core.crypto.Party, java.lang.Class((net.corda.core.flows.FlowLogic.receive.T)))/receiveType">receiveType</span><span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
@ -111,8 +111,8 @@ will do as long as the other side registers with it.</p>
|
||||
<td>
|
||||
<a href="../../../../net.corda.core.flows/-flow-logic/send-and-receive.html">sendAndReceive</a></td>
|
||||
<td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">sendAndReceive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/payload">payload</span><span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/receiveType">receiveType</span><span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code><br/>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">sendAndReceive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any)/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any)/payload">payload</span><span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code></td>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">sendAndReceive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any)/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any)/payload">payload</span><span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code><br/>
|
||||
<code><span class="keyword">fun </span><span class="symbol"><</span><span class="identifier">T</span> <span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">></span> <span class="identifier">sendAndReceive</span><span class="symbol">(</span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/otherParty">otherParty</span><span class="symbol">:</span> <a href="../../../../net.corda.core.crypto/-party/index.html"><span class="identifier">Party</span></a><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/payload">payload</span><span class="symbol">:</span> <span class="identifier">Any</span><span class="symbol">, </span><span class="identifier" id="net.corda.core.flows.FlowLogic$sendAndReceive(net.corda.core.crypto.Party, kotlin.Any, java.lang.Class((net.corda.core.flows.FlowLogic.sendAndReceive.T)))/receiveType">receiveType</span><span class="symbol">:</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html"><span class="identifier">Class</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span><span class="symbol">)</span><span class="symbol">: </span><a href="../../../../net.corda.core.utilities/-untrustworthy-data/index.html"><span class="identifier">UntrustworthyData</span></a><span class="symbol"><</span><span class="identifier">T</span><span class="symbol">></span></code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
|
4
docs/build/html/clientrpc.html
vendored
@ -114,6 +114,7 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="persistence.html">Persistence</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-administration.html">Node administration</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-configuration-files.html">The Corda Configuration File</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-plugins.html">The Corda Plugin Framework</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-services.html">A Brief Introduction To The Node Services</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">CorDapps</span></p>
|
||||
@ -128,7 +129,8 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-contract-clauses.html">Writing a contract using clauses</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-test-dsl.html">Writing a contract test</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-clientrpc-api.html">Client RPC API Tutorial</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Flow state machines</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Writing flows</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-testing.html">Writing flow tests</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-attachments.html">Using attachments</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="event-scheduling.html">Event scheduling</a></li>
|
||||
|
4
docs/build/html/consensus.html
vendored
@ -116,6 +116,7 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="persistence.html">Persistence</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-administration.html">Node administration</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-configuration-files.html">The Corda Configuration File</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-plugins.html">The Corda Plugin Framework</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-services.html">A Brief Introduction To The Node Services</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">CorDapps</span></p>
|
||||
@ -130,7 +131,8 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-contract-clauses.html">Writing a contract using clauses</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-test-dsl.html">Writing a contract test</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-clientrpc-api.html">Client RPC API Tutorial</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Flow state machines</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Writing flows</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-testing.html">Writing flow tests</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-attachments.html">Using attachments</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="event-scheduling.html">Event scheduling</a></li>
|
||||
|
@ -31,7 +31,7 @@
|
||||
|
||||
|
||||
<link rel="top" title="R3 Corda latest documentation" href="index.html"/>
|
||||
<link rel="next" title="A Brief Introduction To The Node Services" href="node-services.html"/>
|
||||
<link rel="next" title="The Corda Plugin Framework" href="corda-plugins.html"/>
|
||||
<link rel="prev" title="Node administration" href="node-administration.html"/>
|
||||
|
||||
|
||||
@ -111,6 +111,7 @@
|
||||
<li class="toctree-l2"><a class="reference internal" href="#configuration-file-fields">Configuration File Fields</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-plugins.html">The Corda Plugin Framework</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-services.html">A Brief Introduction To The Node Services</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">CorDapps</span></p>
|
||||
@ -125,7 +126,8 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-contract-clauses.html">Writing a contract using clauses</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-test-dsl.html">Writing a contract test</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-clientrpc-api.html">Client RPC API Tutorial</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Flow state machines</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Writing flows</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-testing.html">Writing flow tests</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-attachments.html">Using attachments</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="event-scheduling.html">Event scheduling</a></li>
|
||||
@ -351,7 +353,7 @@ following fields:</p>
|
||||
|
||||
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
|
||||
|
||||
<a href="node-services.html" class="btn btn-neutral float-right" title="A Brief Introduction To The Node Services" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
|
||||
<a href="corda-plugins.html" class="btn btn-neutral float-right" title="The Corda Plugin Framework" 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>
|
||||
|
353
docs/build/html/corda-plugins.html
vendored
Normal file
@ -0,0 +1,353 @@
|
||||
|
||||
|
||||
<!DOCTYPE html>
|
||||
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
<title>The Corda Plugin Framework — R3 Corda latest documentation</title>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="_static/css/custom.css" type="text/css" />
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="top" title="R3 Corda latest documentation" href="index.html"/>
|
||||
<link rel="next" title="A Brief Introduction To The Node Services" href="node-services.html"/>
|
||||
<link rel="prev" title="The Corda Configuration File" href="corda-configuration-files.html"/>
|
||||
|
||||
|
||||
<script src="_static/js/modernizr.min.js"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="wy-body-for-nav" role="document">
|
||||
|
||||
<div class="wy-grid-for-nav">
|
||||
|
||||
|
||||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||
<div class="wy-side-scroll">
|
||||
<div class="wy-side-nav-search">
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="index.html" class="icon icon-home"> R3 Corda
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="version">
|
||||
latest
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div role="search">
|
||||
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
|
||||
<input type="text" name="q" placeholder="Search docs" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
||||
<br>
|
||||
<a href="api/index.html">API reference</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||
|
||||
|
||||
|
||||
<p class="caption"><span class="caption-text">Getting started</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="inthebox.html">What’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="running-the-demos.html">Running the demos</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">Key concepts</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="data-model.html">Data model</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="transaction-data-types.html">Data types</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="merkle-trees.html">Transaction Tear-offs</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="consensus.html">Consensus model</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">The Corda node</span></p>
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="clientrpc.html">Client RPC</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="persistence.html">Persistence</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-administration.html">Node administration</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-configuration-files.html">The Corda Configuration File</a></li>
|
||||
<li class="toctree-l1 current"><a class="current reference internal" href="#">The Corda Plugin Framework</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-services.html">A Brief Introduction To The Node Services</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">CorDapps</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="creating-a-cordapp.html">Creating a Cordapp</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="creating-a-cordapp.html#gradle-plugins-for-cordapps">Gradle Plugins for Cordapps</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">Tutorials</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="where-to-start.html">Where to start</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="tutorial-contract-clauses.html">Writing a contract using clauses</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-test-dsl.html">Writing a contract test</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-clientrpc-api.html">Client RPC API Tutorial</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Writing flows</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-testing.html">Writing flow tests</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-attachments.html">Using attachments</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="event-scheduling.html">Event scheduling</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">Other</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="network-simulator.html">Network Simulator</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-explorer.html">Node Explorer</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="initial-margin-agreement.html">Initial Margin Agreements</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">Component library</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="contract-catalogue.html">Contract catalogue</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="contract-irs.html">Interest Rate Swaps</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">Appendix</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="loadtesting.html">Load testing</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="secure-coding-guidelines.html">Secure coding guidelines</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="release-process.html">Release process</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="release-process.html#steps-to-cut-a-release">Steps to cut a release</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="release-notes.html">Release notes</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="codestyle.html">Code style guide</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="building-the-docs.html">Building the documentation</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">Glossary</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="glossary.html">Glossary</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||
|
||||
|
||||
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
|
||||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||
<a href="index.html">R3 Corda</a>
|
||||
</nav>
|
||||
|
||||
|
||||
|
||||
<div class="wy-nav-content">
|
||||
<div class="rst-content">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||
<ul class="wy-breadcrumbs">
|
||||
<li><a href="index.html">Docs</a> »</li>
|
||||
|
||||
<li>The Corda Plugin Framework</li>
|
||||
<li class="wy-breadcrumbs-aside">
|
||||
|
||||
|
||||
<a href="_sources/corda-plugins.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="the-corda-plugin-framework">
|
||||
<h1>The Corda Plugin Framework<a class="headerlink" href="#the-corda-plugin-framework" title="Permalink to this headline">¶</a></h1>
|
||||
<p>The intention is that Corda is a common platform, which will be extended
|
||||
by numerous application extensions (CorDapps). These extensions will
|
||||
package together all of the Corda contract code, state structures,
|
||||
protocols/flows to create and modify state as well as RPC extensions for
|
||||
node clients. Details of writing these CorDapps is given elsewhere
|
||||
<a class="reference internal" href="creating-a-cordapp.html"><span class="doc">Creating a Cordapp</span></a>.</p>
|
||||
<p>To enable these plugins to register dynamically with the Corda framework
|
||||
the node uses the Java <code class="docutils literal"><span class="pre">ServiceLoader</span></code> to locate and load the plugin
|
||||
components during the <code class="docutils literal"><span class="pre">AbstractNode.start</span></code> call. Therefore,
|
||||
to be recognised as a plugin the component must:</p>
|
||||
<p>1. Include a default constructable class extending from
|
||||
<code class="docutils literal"><span class="pre">net.corda.core.node.CordaPluginRegistry</span></code> which overrides the relevant
|
||||
registration methods.</p>
|
||||
<p>2. Include a resource file named
|
||||
<code class="docutils literal"><span class="pre">net.corda.core.node.CordaPluginRegistry</span></code> in the <code class="docutils literal"><span class="pre">META-INF.services</span></code>
|
||||
path. This must include a line containing the fully qualified name of
|
||||
the <code class="docutils literal"><span class="pre">CordaPluginRegistry</span></code> implementation class. Multiple plugin
|
||||
registries are allowed in this file if desired.</p>
|
||||
<p>3. The plugin component must be on the classpath. In the normal use this
|
||||
means that it should be present within the plugins subfolder of the
|
||||
node’s workspace.</p>
|
||||
<p>4. As a plugin the registered components are then allowed access to some
|
||||
of the node internal subsystems.</p>
|
||||
<p>5. The overridden properties on the registry class information about the different
|
||||
extensions to be created, or registered at startup. In particular:</p>
|
||||
<blockquote>
|
||||
<div><p>a. The <code class="docutils literal"><span class="pre">webApis</span></code> property is a list of JAX-RS annotated REST access
|
||||
classes. These classes will be constructed by the embedded web server
|
||||
and must have a single argument constructor taking a <code class="docutils literal"><span class="pre">ServiceHub</span></code>
|
||||
reference. This reference provides acccess to functions such as querying
|
||||
for states through the <code class="docutils literal"><span class="pre">VaultService</span></code> interface, or access to the
|
||||
<code class="docutils literal"><span class="pre">NetworkMapCache</span></code> to identify services on remote nodes. The framework will
|
||||
provide a database transaction in scope during the lifetime of the web
|
||||
call, so full access to database data is valid. Unlike
|
||||
<code class="docutils literal"><span class="pre">servicePlugins</span></code> the <code class="docutils literal"><span class="pre">webApis</span></code> cannnot register new protocols, or
|
||||
initiate threads. (N.B. The intent is to move the Web support into a
|
||||
separate helper process using the RPC mechanism to control access.)</p>
|
||||
<p>b. The <code class="docutils literal"><span class="pre">staticServeDirs</span></code> property maps static web content to virtual
|
||||
paths and allows simple web demos to be distributed within the CorDapp
|
||||
jars. (N.B. The intent is to move the Web support into a separate helper
|
||||
process using the RPC mechanism to control access.)</p>
|
||||
<p>c. The <code class="docutils literal"><span class="pre">requiredFlows</span></code> property is used to declare new protocols in
|
||||
the plugin jar. Specifically the property must return a map with a key
|
||||
naming each exposed top level flow class and a value which is a set
|
||||
naming every parameter class that will be passed to the flow’s
|
||||
constructor. Standard <code class="docutils literal"><span class="pre">java.lang.*</span></code> and <code class="docutils literal"><span class="pre">kotlin.*</span></code> types do not need
|
||||
to be included, but all other parameter types, or concrete interface
|
||||
implementations need declaring. Declaring a specific flow in this map
|
||||
white lists it for activation by the <code class="docutils literal"><span class="pre">FlowLogicRefFactory</span></code>. White
|
||||
listing is not strictly required for <code class="docutils literal"><span class="pre">subFlows</span></code> used internally, but
|
||||
is required for any top level flow, or a flow which is invoked through
|
||||
the scheduler.</p>
|
||||
<p>d. The <code class="docutils literal"><span class="pre">servicePlugins</span></code> property returns a list of classes which will
|
||||
be instantiated once during the <code class="docutils literal"><span class="pre">AbstractNode.start</span></code> call. These
|
||||
classes must provide a single argument constructor which will receive a
|
||||
<code class="docutils literal"><span class="pre">PluginServiceHub</span></code> reference. These singleton instances are regarded
|
||||
as trusted components and can be used for a number of purposes.</p>
|
||||
<blockquote>
|
||||
<div><p>i. Firstly, they can call <code class="docutils literal"><span class="pre">PluginServiceHub.registerFlowInitiator</span></code> and
|
||||
register flows that will be initiated locally in response to remote flow
|
||||
requests.</p>
|
||||
<p>ii. Second, the service can hold a long lived reference to the
|
||||
PluginServiceHub and to other private data, so the service can be used
|
||||
to provide Oracle functionality. This Oracle functionality would
|
||||
typically be exposed to other nodes by flows which are given a reference
|
||||
to the service plugin when initiated (as defined by the
|
||||
<code class="docutils literal"><span class="pre">registerFlowInitiator</span></code> call). The flow can then call into functions
|
||||
on the plugin service singleton. Note, care should be taken to not allow
|
||||
flows to hold references to plugin services, or fields which are not
|
||||
also <code class="docutils literal"><span class="pre">SingletonSerializeAsToken</span></code>, otherwise Quasar suspension in the
|
||||
<code class="docutils literal"><span class="pre">StateMachineManager</span></code> will fail with exceptions. An example oracle can
|
||||
be seen in <code class="docutils literal"><span class="pre">NodeInterestRates.kt</span></code> in the irs-demo sample.</p>
|
||||
<p>iii. The final
|
||||
use case for service plugins is that they can spawn threads, or register
|
||||
to monitor vault updates. This allows them to provide long lived active
|
||||
functions inside the node, for instance to initiate workflows when
|
||||
certain conditions are met.</p>
|
||||
</div></blockquote>
|
||||
<p>e. The <code class="docutils literal"><span class="pre">registerRPCKryoTypes</span></code> function allows custom Kryo serialisers
|
||||
to be registered and whitelisted for the RPC client interface. For
|
||||
instance new state types passed to flows started via RPC will need
|
||||
to be explicitly registered. This will be called at various points on
|
||||
various threads and needs to be stable and thread safe.</p>
|
||||
</div></blockquote>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
|
||||
|
||||
<a href="node-services.html" class="btn btn-neutral float-right" title="A Brief Introduction To The Node Services" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
|
||||
|
||||
|
||||
<a href="corda-configuration-files.html" class="btn btn-neutral" title="The Corda Configuration File" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<hr/>
|
||||
|
||||
<div role="contentinfo">
|
||||
<p>
|
||||
© Copyright 2016, Distributed Ledger Group, LLC.
|
||||
|
||||
</p>
|
||||
</div>
|
||||
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||
|
||||
</footer>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT:'./',
|
||||
VERSION:'latest',
|
||||
COLLAPSE_INDEX:false,
|
||||
FILE_SUFFIX:'.html',
|
||||
HAS_SOURCE: true
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="_static/underscore.js"></script>
|
||||
<script type="text/javascript" src="_static/doctools.js"></script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript" src="_static/js/theme.js"></script>
|
||||
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript">
|
||||
jQuery(function () {
|
||||
SphinxRtdTheme.StickyNav.enable();
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
7
docs/build/html/creating-a-cordapp.html
vendored
@ -105,6 +105,7 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="persistence.html">Persistence</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-administration.html">Node administration</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-configuration-files.html">The Corda Configuration File</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-plugins.html">The Corda Plugin Framework</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-services.html">A Brief Introduction To The Node Services</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">CorDapps</span></p>
|
||||
@ -135,7 +136,8 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-contract-clauses.html">Writing a contract using clauses</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-test-dsl.html">Writing a contract test</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-clientrpc-api.html">Client RPC API Tutorial</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Flow state machines</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Writing flows</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-testing.html">Writing flow tests</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-attachments.html">Using attachments</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="event-scheduling.html">Event scheduling</a></li>
|
||||
@ -365,9 +367,6 @@ the following segments to the relevant part of your build.gradle.</p>
|
||||
|
||||
<span class="o">...</span> <span class="n">your</span> <span class="n">tasks</span> <span class="o">...</span>
|
||||
|
||||
<span class="c1">// Sets the classes for Quasar to scan. Loaded by the the quasar-utils plugin.</span>
|
||||
<span class="n">quasarScan</span><span class="o">.</span><span class="na">dependsOn</span><span class="o">(</span><span class="s1">'classes'</span><span class="o">,</span> <span class="o">...</span> <span class="n">your</span> <span class="n">dependent</span> <span class="n">subprojects</span><span class="o">...)</span>
|
||||
|
||||
<span class="c1">// Standard way to publish Cordapps to maven local with the maven-publish and publish-utils plugin.</span>
|
||||
<span class="n">publishing</span> <span class="o">{</span>
|
||||
<span class="n">publications</span> <span class="o">{</span>
|
||||
|
4
docs/build/html/data-model.html
vendored
@ -114,6 +114,7 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="persistence.html">Persistence</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-administration.html">Node administration</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-configuration-files.html">The Corda Configuration File</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-plugins.html">The Corda Plugin Framework</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-services.html">A Brief Introduction To The Node Services</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">CorDapps</span></p>
|
||||
@ -128,7 +129,8 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-contract-clauses.html">Writing a contract using clauses</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-test-dsl.html">Writing a contract test</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-clientrpc-api.html">Client RPC API Tutorial</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Flow state machines</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Writing flows</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-testing.html">Writing flow tests</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-attachments.html">Using attachments</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="event-scheduling.html">Event scheduling</a></li>
|
||||
|
4
docs/build/html/event-scheduling.html
vendored
@ -105,6 +105,7 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="persistence.html">Persistence</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-administration.html">Node administration</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-configuration-files.html">The Corda Configuration File</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-plugins.html">The Corda Plugin Framework</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-services.html">A Brief Introduction To The Node Services</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">CorDapps</span></p>
|
||||
@ -119,7 +120,8 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-contract-clauses.html">Writing a contract using clauses</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-test-dsl.html">Writing a contract test</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-clientrpc-api.html">Client RPC API Tutorial</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Flow state machines</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Writing flows</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-testing.html">Writing flow tests</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-attachments.html">Using attachments</a></li>
|
||||
<li class="toctree-l1 current"><a class="current reference internal" href="#">Event scheduling</a><ul>
|
||||
|
314
docs/build/html/flow-state-machines.html
vendored
@ -8,7 +8,7 @@
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
<title>Flow state machines — R3 Corda latest documentation</title>
|
||||
<title>Writing flows — R3 Corda latest documentation</title>
|
||||
|
||||
|
||||
|
||||
@ -31,7 +31,7 @@
|
||||
|
||||
|
||||
<link rel="top" title="R3 Corda latest documentation" href="index.html"/>
|
||||
<link rel="next" title="Writing oracle services" href="oracles.html"/>
|
||||
<link rel="next" title="Writing flow tests" href="flow-testing.html"/>
|
||||
<link rel="prev" title="Client RPC API Tutorial" href="tutorial-clientrpc-api.html"/>
|
||||
|
||||
|
||||
@ -105,6 +105,7 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="persistence.html">Persistence</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-administration.html">Node administration</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-configuration-files.html">The Corda Configuration File</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-plugins.html">The Corda Plugin Framework</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-services.html">A Brief Introduction To The Node Services</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">CorDapps</span></p>
|
||||
@ -119,7 +120,7 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-contract-clauses.html">Writing a contract using clauses</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-test-dsl.html">Writing a contract test</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-clientrpc-api.html">Client RPC API Tutorial</a></li>
|
||||
<li class="toctree-l1 current"><a class="current reference internal" href="#">Flow state machines</a><ul>
|
||||
<li class="toctree-l1 current"><a class="current reference internal" href="#">Writing flows</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>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#a-two-party-trading-flow">A two party trading flow</a></li>
|
||||
@ -129,11 +130,11 @@
|
||||
<li class="toctree-l2"><a class="reference internal" href="#sub-flows">Sub-flows</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#implementing-the-buyer">Implementing the buyer</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#progress-tracking">Progress tracking</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#unit-testing">Unit testing</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#versioning">Versioning</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#future-features">Future features</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-testing.html">Writing flow tests</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-attachments.html">Using attachments</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="event-scheduling.html">Event scheduling</a></li>
|
||||
@ -192,7 +193,7 @@
|
||||
<ul class="wy-breadcrumbs">
|
||||
<li><a href="index.html">Docs</a> »</li>
|
||||
|
||||
<li>Flow state machines</li>
|
||||
<li>Writing flows</li>
|
||||
<li class="wy-breadcrumbs-aside">
|
||||
|
||||
|
||||
@ -207,9 +208,9 @@
|
||||
<div itemprop="articleBody">
|
||||
|
||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="_static/codesets.js"></script><div class="section" id="flow-state-machines">
|
||||
<h1>Flow state machines<a class="headerlink" href="#flow-state-machines" title="Permalink to this headline">¶</a></h1>
|
||||
<p>This article explains our experimental approach to modelling financial flows in code. It explains how the
|
||||
<script type="text/javascript" src="_static/codesets.js"></script><div class="section" id="writing-flows">
|
||||
<h1>Writing flows<a class="headerlink" href="#writing-flows" title="Permalink to this headline">¶</a></h1>
|
||||
<p>This article explains our approach to modelling financial flows in code. It explains how the
|
||||
platform’s state machine framework is used, and takes you through the code for a simple 2-party asset trading flow
|
||||
which is included in the source.</p>
|
||||
<div class="section" id="introduction">
|
||||
@ -283,7 +284,7 @@ owner key as output, and any change cash as output. It contains a single signatu
|
||||
it lacks a signature from S authorising movement of the asset.</li>
|
||||
<li>S signs it and hands the now finalised <code class="docutils literal"><span class="pre">SignedTransaction</span></code> back to B.</li>
|
||||
</ol>
|
||||
<p>You can find the implementation of this flow in the file <code class="docutils literal"><span class="pre">finance/src/main/kotlin/net.corda.flows/TwoPartyTradeFlow.kt</span></code>.</p>
|
||||
<p>You can find the implementation of this flow in the file <code class="docutils literal"><span class="pre">finance/src/main/kotlin/net/corda/flows/TwoPartyTradeFlow.kt</span></code>.</p>
|
||||
<p>Assuming no malicious termination, they both end the flow being in posession of a valid, signed transaction that
|
||||
represents an atomic asset swap.</p>
|
||||
<p>Note that it’s the <em>seller</em> who initiates contact with the buyer, not vice-versa as you might imagine.</p>
|
||||
@ -307,13 +308,13 @@ write them and the approach is the same.</p>
|
||||
<span class="k">data</span> <span class="k">class</span> <span class="nc">SellerTradeInfo</span><span class="p">(</span>
|
||||
<span class="k">val</span> <span class="py">assetForSale</span><span class="p">:</span> <span class="n">StateAndRef</span><span class="p"><</span><span class="n">OwnableState</span><span class="p">>,</span>
|
||||
<span class="k">val</span> <span class="py">price</span><span class="p">:</span> <span class="n">Amount</span><span class="p"><</span><span class="n">Currency</span><span class="p">>,</span>
|
||||
<span class="k">val</span> <span class="py">sellerOwnerKey</span><span class="p">:</span> <span class="n">PublicKey</span>
|
||||
<span class="k">val</span> <span class="py">sellerOwnerKey</span><span class="p">:</span> <span class="n">CompositeKey</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="k">data</span> <span class="k">class</span> <span class="nc">SignaturesFromSeller</span><span class="p">(</span><span class="k">val</span> <span class="py">sellerSig</span><span class="p">:</span> <span class="n">DigitalSignature</span><span class="p">.</span><span class="n">WithKey</span><span class="p">,</span>
|
||||
<span class="k">val</span> <span class="py">notarySig</span><span class="p">:</span> <span class="n">DigitalSignature</span><span class="p">.</span><span class="n">LegallyIdentifiable</span><span class="p">)</span>
|
||||
|
||||
<span class="k">open</span> <span class="k">class</span> <span class="nc">Seller</span><span class="p">(</span><span class="k">val</span> <span class="py">otherSide</span><span class="p">:</span> <span class="n">Party</span><span class="p">,</span>
|
||||
<span class="k">open</span> <span class="k">class</span> <span class="nc">Seller</span><span class="p">(</span><span class="k">val</span> <span class="py">otherParty</span><span class="p">:</span> <span class="n">Party</span><span class="p">,</span>
|
||||
<span class="k">val</span> <span class="py">notaryNode</span><span class="p">:</span> <span class="n">NodeInfo</span><span class="p">,</span>
|
||||
<span class="k">val</span> <span class="py">assetToSell</span><span class="p">:</span> <span class="n">StateAndRef</span><span class="p"><</span><span class="n">OwnableState</span><span class="p">>,</span>
|
||||
<span class="k">val</span> <span class="py">price</span><span class="p">:</span> <span class="n">Amount</span><span class="p"><</span><span class="n">Currency</span><span class="p">>,</span>
|
||||
@ -325,7 +326,7 @@ write them and the approach is the same.</p>
|
||||
<span class="p">}</span>
|
||||
<span class="p">}</span>
|
||||
|
||||
<span class="k">open</span> <span class="k">class</span> <span class="nc">Buyer</span><span class="p">(</span><span class="k">val</span> <span class="py">otherSide</span><span class="p">:</span> <span class="n">Party</span><span class="p">,</span>
|
||||
<span class="k">open</span> <span class="k">class</span> <span class="nc">Buyer</span><span class="p">(</span><span class="k">val</span> <span class="py">otherParty</span><span class="p">:</span> <span class="n">Party</span><span class="p">,</span>
|
||||
<span class="k">val</span> <span class="py">notary</span><span class="p">:</span> <span class="n">Party</span><span class="p">,</span>
|
||||
<span class="k">val</span> <span class="py">acceptablePrice</span><span class="p">:</span> <span class="n">Amount</span><span class="p"><</span><span class="n">Currency</span><span class="p">>,</span>
|
||||
<span class="k">val</span> <span class="py">typeToBuy</span><span class="p">:</span> <span class="n">Class</span><span class="p"><</span><span class="k">out</span> <span class="n">OwnableState</span><span class="p">>)</span> <span class="p">:</span> <span class="n">FlowLogic</span><span class="p"><</span><span class="n">SignedTransaction</span><span class="p">>()</span> <span class="p">{</span>
|
||||
@ -342,7 +343,7 @@ write them and the approach is the same.</p>
|
||||
simply flow messages or exceptions. The other two represent the buyer and seller side of the flow.</p>
|
||||
<p>Going through the data needed to become a seller, we have:</p>
|
||||
<ul class="simple">
|
||||
<li><code class="docutils literal"><span class="pre">otherSide:</span> <span class="pre">Party</span></code> - the party with which you are trading.</li>
|
||||
<li><code class="docutils literal"><span class="pre">otherParty:</span> <span class="pre">Party</span></code> - the party with which you are trading.</li>
|
||||
<li><code class="docutils literal"><span class="pre">notaryNode:</span> <span class="pre">NodeInfo</span></code> - the entry in the network map for the chosen notary. See “<a class="reference internal" href="consensus.html"><span class="doc">Consensus model</span></a>” for more
|
||||
information on notaries.</li>
|
||||
<li><code class="docutils literal"><span class="pre">assetToSell:</span> <span class="pre">StateAndRef<OwnableState></span></code> - a pointer to the ledger entry that represents the thing being sold.</li>
|
||||
@ -383,22 +384,24 @@ how to register handlers with the messaging system (see “<a class="referen
|
||||
when messages arrive. It provides the send/receive/sendAndReceive calls that let the code request network
|
||||
interaction and it will save/restore serialised versions of the fiber at the right times.</p>
|
||||
<p>Flows can be invoked in several ways. For instance, they can be triggered by scheduled events,
|
||||
see “<a class="reference internal" href="event-scheduling.html"><span class="doc">Event scheduling</span></a>” to learn more about this. Or they can be triggered via the HTTP API. Or they can
|
||||
be triggered directly via the Java-level node APIs from your app code.</p>
|
||||
<p>You request a flow to be invoked by using the <code class="docutils literal"><span class="pre">ServiceHub.invokeFlowAsync</span></code> method. This takes a
|
||||
see “<a class="reference internal" href="event-scheduling.html"><span class="doc">Event scheduling</span></a>” to learn more about this. Or they can be triggered directly via the Java-level node RPC
|
||||
APIs from your app code.</p>
|
||||
<p>You request a flow to be invoked by using the <code class="docutils literal"><span class="pre">CordaRPCOps.startFlowDynamic</span></code> method. This takes a
|
||||
Java reflection <code class="docutils literal"><span class="pre">Class</span></code> object that describes the flow class to use (in this case, either <code class="docutils literal"><span class="pre">Buyer</span></code> or <code class="docutils literal"><span class="pre">Seller</span></code>).
|
||||
It also takes a set of arguments to pass to the constructor. Because it’s possible for flow invocations to
|
||||
be requested by untrusted code (e.g. a state that you have been sent), the types that can be passed into the
|
||||
flow are checked against a whitelist, which can be extended by apps themselves at load time.</p>
|
||||
<p>The process of starting a flow returns a <code class="docutils literal"><span class="pre">ListenableFuture</span></code> that you can use to either block waiting for
|
||||
the result, or register a callback that will be invoked when the result is ready.</p>
|
||||
<p>In a two party flow only one side is to be manually started using <code class="docutils literal"><span class="pre">ServiceHub.invokeFlowAsync</span></code>. The other side
|
||||
has to be registered by its node to respond to the initiating flow via <code class="docutils literal"><span class="pre">ServiceHubInternal.registerFlowInitiator</span></code>.
|
||||
flow are checked against a whitelist, which can be extended by apps themselves at load time. There are also a series
|
||||
of inlined extension functions of the form <code class="docutils literal"><span class="pre">CordaRPCOps.startFlow</span></code> which help with invoking flows in a type
|
||||
safe manner.</p>
|
||||
<p>The process of starting a flow returns a <code class="docutils literal"><span class="pre">FlowHandle</span></code> that you can use to either observe
|
||||
the result, observe its progress and which also contains a permanent identifier for the invoked flow in the form
|
||||
of the <code class="docutils literal"><span class="pre">StateMachineRunId</span></code>.</p>
|
||||
<p>In a two party flow only one side is to be manually started using <code class="docutils literal"><span class="pre">CordaRPCOps.startFlow</span></code>. The other side
|
||||
has to be registered by its node to respond to the initiating flow via <code class="docutils literal"><span class="pre">PluginServiceHub.registerFlowInitiator</span></code>.
|
||||
In our example it doesn’t matter which flow is the initiator and which is the initiated. For example, if we are to
|
||||
take the seller as the initiator then we would register the buyer as such:</p>
|
||||
<div class="codeset container">
|
||||
<div class="highlight-kotlin"><div class="highlight"><pre><span></span><span class="k">val</span> <span class="py">services</span><span class="p">:</span> <span class="n">ServiceHubInternal</span> <span class="p">=</span> <span class="n">TODO</span><span class="p">()</span>
|
||||
|
||||
<div class="highlight-kotlin"><div class="highlight"><pre><span></span><span class="k">val</span> <span class="py">services</span><span class="p">:</span> <span class="n">PluginServiceHub</span> <span class="p">=</span> <span class="n">TODO</span><span class="p">()</span>
|
||||
<span class="n">services</span><span class="p">.</span><span class="n">registerFlowInitiator</span><span class="p">(</span><span class="n">Seller</span><span class="o">::</span><span class="k">class</span><span class="p">)</span> <span class="p">{</span> <span class="n">otherParty</span> <span class="p">-></span>
|
||||
<span class="k">val</span> <span class="py">notary</span> <span class="p">=</span> <span class="n">services</span><span class="p">.</span><span class="n">networkMapCache</span><span class="p">.</span><span class="n">notaryNodes</span><span class="p">[</span><span class="m">0</span><span class="p">]</span>
|
||||
<span class="k">val</span> <span class="py">acceptablePrice</span> <span class="p">=</span> <span class="n">TODO</span><span class="p">()</span>
|
||||
@ -439,25 +442,21 @@ Finally, we hand back to the code that invoked the flow the finished transaction
|
||||
<div class="highlight-kotlin"><div class="highlight"><pre><span></span><span class="n">@Suspendable</span>
|
||||
<span class="k">private</span> <span class="k">fun</span> <span class="nf">receiveAndCheckProposedTransaction</span><span class="p">():</span> <span class="n">SignedTransaction</span> <span class="p">{</span>
|
||||
<span class="c1">// Make the first message we'll send to kick off the flow.</span>
|
||||
<span class="k">val</span> <span class="py">hello</span> <span class="p">=</span> <span class="n">SellerTradeInfo</span><span class="p">(</span><span class="n">assetToSell</span><span class="p">,</span> <span class="n">price</span><span class="p">,</span> <span class="n">myKeyPair</span><span class="p">.</span><span class="k">public</span><span class="p">)</span>
|
||||
<span class="k">val</span> <span class="py">myPublicKey</span> <span class="p">=</span> <span class="n">myKeyPair</span><span class="p">.</span><span class="k">public</span><span class="p">.</span><span class="n">composite</span>
|
||||
<span class="k">val</span> <span class="py">hello</span> <span class="p">=</span> <span class="n">SellerTradeInfo</span><span class="p">(</span><span class="n">assetToSell</span><span class="p">,</span> <span class="n">price</span><span class="p">,</span> <span class="n">myPublicKey</span><span class="p">)</span>
|
||||
|
||||
<span class="k">val</span> <span class="py">maybeSTX</span> <span class="p">=</span> <span class="n">sendAndReceive</span><span class="p"><</span><span class="n">SignedTransaction</span><span class="p">>(</span><span class="n">otherSide</span><span class="p">,</span> <span class="n">hello</span><span class="p">)</span>
|
||||
|
||||
<span class="n">maybeSTX</span><span class="p">.</span><span class="n">unwrap</span> <span class="p">{</span>
|
||||
<span class="c1">// Check that the tx proposed by the buyer is valid.</span>
|
||||
<span class="k">val</span> <span class="py">missingSigs</span><span class="p">:</span> <span class="n">Set</span><span class="p"><</span><span class="n">PublicKey</span><span class="p">></span> <span class="p">=</span> <span class="n">it</span><span class="p">.</span><span class="n">verifySignatures</span><span class="p">(</span><span class="n">throwIfSignaturesAreMissing</span> <span class="p">=</span> <span class="k">false</span><span class="p">)</span>
|
||||
<span class="k">val</span> <span class="py">expected</span> <span class="p">=</span> <span class="n">setOf</span><span class="p">(</span><span class="n">myKeyPair</span><span class="p">.</span><span class="k">public</span><span class="p">,</span> <span class="n">notaryNode</span><span class="p">.</span><span class="n">identity</span><span class="p">.</span><span class="n">owningKey</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="p">(</span><span class="n">missingSigs</span> <span class="p">!=</span> <span class="n">expected</span><span class="p">)</span>
|
||||
<span class="k">throw</span> <span class="n">SignatureException</span><span class="p">(</span><span class="s">"The set of missing signatures is not as expected: ${missingSigs.toStringsShort()} vs ${expected.toStringsShort()}"</span><span class="p">)</span>
|
||||
|
||||
<span class="k">val</span> <span class="py">wtx</span><span class="p">:</span> <span class="n">WireTransaction</span> <span class="p">=</span> <span class="n">it</span><span class="p">.</span><span class="n">tx</span>
|
||||
<span class="k">val</span> <span class="py">wtx</span><span class="p">:</span> <span class="n">WireTransaction</span> <span class="p">=</span> <span class="n">it</span><span class="p">.</span><span class="n">verifySignatures</span><span class="p">(</span><span class="n">myPublicKey</span><span class="p">,</span> <span class="n">notaryNode</span><span class="p">.</span><span class="n">notaryIdentity</span><span class="p">.</span><span class="n">owningKey</span><span class="p">)</span>
|
||||
<span class="n">logger</span><span class="p">.</span><span class="n">trace</span> <span class="p">{</span> <span class="s">"Received partially signed transaction: ${it.id}"</span> <span class="p">}</span>
|
||||
|
||||
<span class="c1">// Download and check all the things that this transaction depends on and verify it is contract-valid,</span>
|
||||
<span class="c1">// even though it is missing signatures.</span>
|
||||
<span class="n">subFlow</span><span class="p">(</span><span class="n">ResolveTransactionsFlow</span><span class="p">(</span><span class="n">wtx</span><span class="p">,</span> <span class="n">otherSide</span><span class="p">))</span>
|
||||
<span class="n">subFlow</span><span class="p">(</span><span class="n">ResolveTransactionsFlow</span><span class="p">(</span><span class="n">wtx</span><span class="p">,</span> <span class="n">otherParty</span><span class="p">))</span>
|
||||
|
||||
<span class="k">if</span> <span class="p">(</span><span class="n">wtx</span><span class="p">.</span><span class="n">outputs</span><span class="p">.</span><span class="n">map</span> <span class="p">{</span> <span class="n">it</span><span class="p">.</span><span class="k">data</span> <span class="p">}.</span><span class="n">sumCashBy</span><span class="p">(</span><span class="n">myKeyPair</span><span class="p">.</span><span class="k">public</span><span class="p">).</span><span class="n">withoutIssuer</span><span class="p">()</span> <span class="p">!=</span> <span class="n">price</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="p">(</span><span class="n">wtx</span><span class="p">.</span><span class="n">outputs</span><span class="p">.</span><span class="n">map</span> <span class="p">{</span> <span class="n">it</span><span class="p">.</span><span class="k">data</span> <span class="p">}.</span><span class="n">sumCashBy</span><span class="p">(</span><span class="n">myPublicKey</span><span class="p">).</span><span class="n">withoutIssuer</span><span class="p">()</span> <span class="p">!=</span> <span class="n">price</span><span class="p">)</span>
|
||||
<span class="k">throw</span> <span class="n">IllegalArgumentException</span><span class="p">(</span><span class="s">"Transaction is not sending us the right amount of cash"</span><span class="p">)</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">it</span>
|
||||
@ -482,7 +481,9 @@ needs human interaction!</p>
|
||||
<p class="first admonition-title">Note</p>
|
||||
<p>There are a couple of rules you need to bear in mind when writing a class that will be used as a continuation.
|
||||
The first is that anything on the stack when the function is suspended will be stored into the heap and kept alive by
|
||||
the garbage collector. So try to avoid keeping enormous data structures alive unless you really have to.</p>
|
||||
the garbage collector. So try to avoid keeping enormous data structures alive unless you really have to. You can
|
||||
always use private methods to keep the stack uncluttered with temporary variables, or to avoid objects that
|
||||
Kryo is not able to serialise correctly.</p>
|
||||
<p>The second is that as well as being kept on the heap, objects reachable from the stack will be serialised. The state
|
||||
of the function call may be resurrected much later! Kryo doesn’t require objects be marked as serialisable, but even so,
|
||||
doing things like creating threads from inside these calls would be a bad idea. They should only contain business
|
||||
@ -537,11 +538,11 @@ leak will come later.</p>
|
||||
well (but having handled the fact that some signatures are missing ourselves).</p>
|
||||
<p>Here’s the rest of the code:</p>
|
||||
<div class="codeset container">
|
||||
<div class="highlight-kotlin"><div class="highlight"><pre><span></span><span class="k">open</span> <span class="k">fun</span> <span class="nf">computeOurSignature</span><span class="p">(</span><span class="n">partialTX</span><span class="p">:</span> <span class="n">SignedTransaction</span><span class="p">)</span> <span class="p">=</span> <span class="n">myKeyPair</span><span class="p">.</span><span class="n">signWithECDSA</span><span class="p">(</span><span class="n">partialTX</span><span class="p">.</span><span class="n">txBits</span><span class="p">)</span>
|
||||
<div class="highlight-kotlin"><div class="highlight"><pre><span></span><span class="k">open</span> <span class="k">fun</span> <span class="nf">calculateOurSignature</span><span class="p">(</span><span class="n">partialTX</span><span class="p">:</span> <span class="n">SignedTransaction</span><span class="p">)</span> <span class="p">=</span> <span class="n">myKeyPair</span><span class="p">.</span><span class="n">signWithECDSA</span><span class="p">(</span><span class="n">partialTX</span><span class="p">.</span><span class="n">id</span><span class="p">)</span>
|
||||
|
||||
<span class="n">@Suspendable</span>
|
||||
<span class="k">private</span> <span class="k">fun</span> <span class="nf">sendSignatures</span><span class="p">(</span><span class="n">allPartySignedTX</span><span class="p">:</span> <span class="n">SignedTransaction</span><span class="p">,</span> <span class="n">ourSignature</span><span class="p">:</span> <span class="n">DigitalSignature</span><span class="p">.</span><span class="n">WithKey</span><span class="p">,</span>
|
||||
<span class="n">notarySignature</span><span class="p">:</span> <span class="n">DigitalSignature</span><span class="p">.</span><span class="n">LegallyIdentifiable</span><span class="p">):</span> <span class="n">SignedTransaction</span> <span class="p">{</span>
|
||||
<span class="n">notarySignature</span><span class="p">:</span> <span class="n">DigitalSignature</span><span class="p">.</span><span class="n">WithKey</span><span class="p">):</span> <span class="n">SignedTransaction</span> <span class="p">{</span>
|
||||
<span class="k">val</span> <span class="py">fullySigned</span> <span class="p">=</span> <span class="n">allPartySignedTX</span> <span class="p">+</span> <span class="n">notarySignature</span>
|
||||
<span class="n">logger</span><span class="p">.</span><span class="n">trace</span> <span class="p">{</span> <span class="s">"Built finished transaction, sending back to secondary!"</span> <span class="p">}</span>
|
||||
<span class="n">send</span><span class="p">(</span><span class="n">otherSide</span><span class="p">,</span> <span class="n">SignaturesFromSeller</span><span class="p">(</span><span class="n">ourSignature</span><span class="p">,</span> <span class="n">notarySignature</span><span class="p">))</span>
|
||||
@ -550,7 +551,7 @@ well (but having handled the fact that some signatures are missing ourselves).</
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>It’s all pretty straightforward from now on. Here <code class="docutils literal"><span class="pre">txBits</span></code> is the raw byte array representing the serialised
|
||||
<p>It’s all pretty straightforward from now on. Here <code class="docutils literal"><span class="pre">id</span></code> is the secure hash representing the serialised
|
||||
transaction, and we just use our private key to calculate a signature over it. As a reminder, in Corda signatures do
|
||||
not cover other signatures: just the core of the transaction data.</p>
|
||||
<p>In <code class="docutils literal"><span class="pre">sendSignatures</span></code>, we take the two signatures we obtained and add them to the partial transaction we were sent.
|
||||
@ -570,97 +571,101 @@ future version of the code.</p>
|
||||
<div class="section" id="implementing-the-buyer">
|
||||
<h2>Implementing the buyer<a class="headerlink" href="#implementing-the-buyer" title="Permalink to this headline">¶</a></h2>
|
||||
<p>OK, let’s do the same for the buyer side:</p>
|
||||
<div class="codeset container">
|
||||
<div class="highlight-kotlin"><div class="highlight"><pre><span></span>@Suspendable
|
||||
override fun call(): SignedTransaction {
|
||||
val tradeRequest = receiveAndValidateTradeRequest()
|
||||
val (ptx, cashSigningPubKeys) = assembleSharedTX(tradeRequest)
|
||||
val stx = signWithOurKeys(cashSigningPubKeys, ptx)
|
||||
<div class="highlight-kotlin"><div class="highlight"><pre><span></span> @Suspendable
|
||||
override fun call(): SignedTransaction {
|
||||
val tradeRequest = receiveAndValidateTradeRequest()
|
||||
|
||||
val signatures = swapSignaturesWithSeller(stx)
|
||||
progressTracker.currentStep = SIGNING
|
||||
val (ptx, cashSigningPubKeys) = assembleSharedTX(tradeRequest)
|
||||
val stx = signWithOurKeys(cashSigningPubKeys, ptx)
|
||||
|
||||
logger.trace { "Got signatures from seller, verifying ... " }
|
||||
val signatures = swapSignaturesWithSeller(stx)
|
||||
|
||||
val fullySigned = stx + signatures.sellerSig + signatures.notarySig
|
||||
fullySigned.verifySignatures()
|
||||
logger.trace { "Got signatures from seller, verifying ... " }
|
||||
|
||||
logger.trace { "Signatures received are valid. Trade complete! :-)" }
|
||||
return fullySigned
|
||||
}
|
||||
val fullySigned = stx + signatures.sellerSig + signatures.notarySig
|
||||
fullySigned.verifySignatures()
|
||||
|
||||
@Suspendable
|
||||
private fun receiveAndValidateTradeRequest(): SellerTradeInfo {
|
||||
// Wait for a trade request to come in from the other side
|
||||
val maybeTradeRequest = receive<SellerTradeInfo>(otherParty)
|
||||
maybeTradeRequest.unwrap {
|
||||
// What is the seller trying to sell us?
|
||||
val asset = it.assetForSale.state.data
|
||||
val assetTypeName = asset.javaClass.name
|
||||
logger.trace { "Got trade request for a $assetTypeName: ${it.assetForSale}" }
|
||||
logger.trace { "Signatures received are valid. Trade complete! :-)" }
|
||||
return fullySigned
|
||||
}
|
||||
|
||||
if (it.price > acceptablePrice)
|
||||
throw UnacceptablePriceException(it.price)
|
||||
if (!typeToBuy.isInstance(asset))
|
||||
throw AssetMismatchException(typeToBuy.name, assetTypeName)
|
||||
@Suspendable
|
||||
private fun receiveAndValidateTradeRequest(): SellerTradeInfo {
|
||||
progressTracker.currentStep = RECEIVING
|
||||
// Wait for a trade request to come in from the other side
|
||||
val maybeTradeRequest = receive<SellerTradeInfo>(otherParty)
|
||||
|
||||
// Check the transaction that contains the state which is being resolved.
|
||||
// We only have a hash here, so if we don't know it already, we have to ask for it.
|
||||
subFlow(ResolveTransactionsFlow(setOf(it.assetForSale.ref.txhash), otherSide))
|
||||
progressTracker.currentStep = VERIFYING
|
||||
maybeTradeRequest.unwrap {
|
||||
// What is the seller trying to sell us?
|
||||
val asset = it.assetForSale.state.data
|
||||
val assetTypeName = asset.javaClass.name
|
||||
logger.trace { "Got trade request for a $assetTypeName: ${it.assetForSale}" }
|
||||
|
||||
return it
|
||||
}
|
||||
}
|
||||
if (it.price > acceptablePrice)
|
||||
throw UnacceptablePriceException(it.price)
|
||||
if (!typeToBuy.isInstance(asset))
|
||||
throw AssetMismatchException(typeToBuy.name, assetTypeName)
|
||||
|
||||
@Suspendable
|
||||
private fun swapSignaturesWithSeller(stx: SignedTransaction): SignaturesFromSeller {
|
||||
progressTracker.currentStep = SWAPPING_SIGNATURES
|
||||
logger.trace { "Sending partially signed transaction to seller" }
|
||||
// Check the transaction that contains the state which is being resolved.
|
||||
// We only have a hash here, so if we don't know it already, we have to ask for it.
|
||||
subFlow(ResolveTransactionsFlow(setOf(it.assetForSale.ref.txhash), otherParty))
|
||||
|
||||
// TODO: Protect against the seller terminating here and leaving us in the lurch without the final tx.
|
||||
return it
|
||||
}
|
||||
}
|
||||
|
||||
return sendAndReceive<SignaturesFromSeller>(otherSide, stx).unwrap { it }
|
||||
}
|
||||
@Suspendable
|
||||
private fun swapSignaturesWithSeller(stx: SignedTransaction): SignaturesFromSeller {
|
||||
progressTracker.currentStep = SWAPPING_SIGNATURES
|
||||
logger.trace { "Sending partially signed transaction to seller" }
|
||||
|
||||
private fun signWithOurKeys(cashSigningPubKeys: List<PublicKey>, ptx: TransactionBuilder): SignedTransaction {
|
||||
// Now sign the transaction with whatever keys we need to move the cash.
|
||||
for (k in cashSigningPubKeys) {
|
||||
val priv = serviceHub.keyManagementService.toPrivate(k)
|
||||
ptx.signWith(KeyPair(k, priv))
|
||||
}
|
||||
// TODO: Protect against the seller terminating here and leaving us in the lurch without the final tx.
|
||||
|
||||
return ptx.toSignedTransaction(checkSufficientSignatures = false)
|
||||
}
|
||||
return sendAndReceive<SignaturesFromSeller>(otherParty, stx).unwrap { it }
|
||||
}
|
||||
|
||||
private fun assembleSharedTX(tradeRequest: SellerTradeInfo): Pair<TransactionBuilder, List<PublicKey>> {
|
||||
val ptx = TransactionType.General.Builder(notary)
|
||||
// Add input and output states for the movement of cash, by using the Cash contract to generate the states.
|
||||
val wallet = serviceHub.walletService.currentWallet
|
||||
val cashStates = wallet.statesOfType<Cash.State>()
|
||||
val cashSigningPubKeys = Cash().generateSpend(ptx, tradeRequest.price, tradeRequest.sellerOwnerKey, cashStates)
|
||||
// Add inputs/outputs/a command for the movement of the asset.
|
||||
ptx.addInputState(tradeRequest.assetForSale)
|
||||
// Just pick some new public key for now. This won't be linked with our identity in any way, which is what
|
||||
// we want for privacy reasons: the key is here ONLY to manage and control ownership, it is not intended to
|
||||
// reveal who the owner actually is. The key management service is expected to derive a unique key from some
|
||||
// initial seed in order to provide privacy protection.
|
||||
val freshKey = serviceHub.keyManagementService.freshKey()
|
||||
val (command, state) = tradeRequest.assetForSale.state.data.withNewOwner(freshKey.public)
|
||||
ptx.addOutputState(state, tradeRequest.assetForSale.state.notary)
|
||||
ptx.addCommand(command, tradeRequest.assetForSale.state.data.owner)
|
||||
private fun signWithOurKeys(cashSigningPubKeys: List<CompositeKey>, ptx: TransactionBuilder): SignedTransaction {
|
||||
// Now sign the transaction with whatever keys we need to move the cash.
|
||||
for (publicKey in cashSigningPubKeys.keys) {
|
||||
val privateKey = serviceHub.keyManagementService.toPrivate(publicKey)
|
||||
ptx.signWith(KeyPair(publicKey, privateKey))
|
||||
}
|
||||
|
||||
// And add a request for timestamping: it may be that none of the contracts need this! But it can't hurt
|
||||
// to have one.
|
||||
val currentTime = serviceHub.clock.instant()
|
||||
ptx.setTime(currentTime, 30.seconds)
|
||||
return Pair(ptx, cashSigningPubKeys)
|
||||
}
|
||||
return ptx.toSignedTransaction(checkSufficientSignatures = false)
|
||||
}
|
||||
|
||||
private fun assembleSharedTX(tradeRequest: SellerTradeInfo): Pair<TransactionBuilder, List<CompositeKey>> {
|
||||
val ptx = TransactionType.General.Builder(notary)
|
||||
|
||||
// Add input and output states for the movement of cash, by using the Cash contract to generate the states
|
||||
val (tx, cashSigningPubKeys) = serviceHub.vaultService.generateSpend(ptx, tradeRequest.price, tradeRequest.sellerOwnerKey)
|
||||
|
||||
// Add inputs/outputs/a command for the movement of the asset.
|
||||
tx.addInputState(tradeRequest.assetForSale)
|
||||
|
||||
// Just pick some new public key for now. This won't be linked with our identity in any way, which is what
|
||||
// we want for privacy reasons: the key is here ONLY to manage and control ownership, it is not intended to
|
||||
// reveal who the owner actually is. The key management service is expected to derive a unique key from some
|
||||
// initial seed in order to provide privacy protection.
|
||||
val freshKey = serviceHub.keyManagementService.freshKey()
|
||||
val (command, state) = tradeRequest.assetForSale.state.data.withNewOwner(freshKey.public.composite)
|
||||
tx.addOutputState(state, tradeRequest.assetForSale.state.notary)
|
||||
tx.addCommand(command, tradeRequest.assetForSale.state.data.owner)
|
||||
|
||||
// And add a request for timestamping: it may be that none of the contracts need this! But it can't hurt
|
||||
// to have one.
|
||||
val currentTime = serviceHub.clock.instant()
|
||||
tx.setTime(currentTime, 30.seconds)
|
||||
return Pair(tx, cashSigningPubKeys)
|
||||
}
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>This code is longer but no more complicated. Here are some things to pay attention to:</p>
|
||||
<ol class="arabic simple">
|
||||
<li>We do some sanity checking on the received message to ensure we’re being offered what we expected to be offered.</li>
|
||||
<li>We create a cash spend in the normal way, by using <code class="docutils literal"><span class="pre">Cash().generateSpend</span></code>. See the contracts tutorial if this
|
||||
<li>We create a cash spend in the normal way, by using <code class="docutils literal"><span class="pre">VaultService.generateSpend</span></code>. See the vault documentation if this
|
||||
part isn’t clear.</li>
|
||||
<li>We access the <em>service hub</em> when we need it to access things that are transient and may change or be recreated
|
||||
whilst a flow is suspended, things like the wallet or the network map.</li>
|
||||
@ -716,96 +721,6 @@ and linked ahead of time.</p>
|
||||
<p>In future, the progress tracking framework will become a vital part of how exceptions, errors, and other faults are
|
||||
surfaced to human operators for investigation and resolution.</p>
|
||||
</div>
|
||||
<div class="section" id="unit-testing">
|
||||
<h2>Unit testing<a class="headerlink" href="#unit-testing" title="Permalink to this headline">¶</a></h2>
|
||||
<p>A flow can be a fairly complex thing that interacts with many services and other parties over the network. That
|
||||
means unit testing one requires some infrastructure to provide lightweight mock implementations. The MockNetwork
|
||||
provides this testing infrastructure layer; you can find this class in the node module</p>
|
||||
<p>A good example to examine for learning how to unit test flows is the <code class="docutils literal"><span class="pre">ResolveTransactionsFlow</span></code> tests. This
|
||||
flow takes care of downloading and verifying transaction graphs, with all the needed dependencies. We start
|
||||
with this basic skeleton:</p>
|
||||
<div class="codeset container">
|
||||
<div class="highlight-kotlin"><div class="highlight"><pre><span></span><span class="k">class</span> <span class="nc">ResolveTransactionsFlowTest</span> <span class="p">{</span>
|
||||
<span class="k">lateinit</span> <span class="k">var</span> <span class="py">net</span><span class="p">:</span> <span class="n">MockNetwork</span>
|
||||
<span class="k">lateinit</span> <span class="k">var</span> <span class="py">a</span><span class="p">:</span> <span class="n">MockNetwork</span><span class="p">.</span><span class="n">MockNode</span>
|
||||
<span class="k">lateinit</span> <span class="k">var</span> <span class="py">b</span><span class="p">:</span> <span class="n">MockNetwork</span><span class="p">.</span><span class="n">MockNode</span>
|
||||
<span class="k">lateinit</span> <span class="k">var</span> <span class="py">notary</span><span class="p">:</span> <span class="n">Party</span>
|
||||
|
||||
<span class="n">@Before</span>
|
||||
<span class="k">fun</span> <span class="nf">setup</span><span class="p">()</span> <span class="p">{</span>
|
||||
<span class="n">net</span> <span class="p">=</span> <span class="n">MockNetwork</span><span class="p">()</span>
|
||||
<span class="k">val</span> <span class="py">nodes</span> <span class="p">=</span> <span class="n">net</span><span class="p">.</span><span class="n">createSomeNodes</span><span class="p">()</span>
|
||||
<span class="n">a</span> <span class="p">=</span> <span class="n">nodes</span><span class="p">.</span><span class="n">partyNodes</span><span class="p">[</span><span class="m">0</span><span class="p">]</span>
|
||||
<span class="n">b</span> <span class="p">=</span> <span class="n">nodes</span><span class="p">.</span><span class="n">partyNodes</span><span class="p">[</span><span class="m">1</span><span class="p">]</span>
|
||||
<span class="n">notary</span> <span class="p">=</span> <span class="n">nodes</span><span class="p">.</span><span class="n">notaryNode</span><span class="p">.</span><span class="n">info</span><span class="p">.</span><span class="n">identity</span>
|
||||
<span class="n">net</span><span class="p">.</span><span class="n">runNetwork</span><span class="p">()</span>
|
||||
<span class="p">}</span>
|
||||
|
||||
<span class="n">@After</span>
|
||||
<span class="k">fun</span> <span class="nf">tearDown</span><span class="p">()</span> <span class="p">{</span>
|
||||
<span class="n">net</span><span class="p">.</span><span class="n">stopNodes</span><span class="p">()</span>
|
||||
<span class="p">}</span>
|
||||
<span class="p">}</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>We create a mock network in our <code class="docutils literal"><span class="pre">@Before</span></code> setup method and create a couple of nodes. We also record the identity
|
||||
of the notary in our test network, which will come in handy later. We also tidy up when we’re done.</p>
|
||||
<p>Next, we write a test case:</p>
|
||||
<div class="codeset container">
|
||||
<div class="highlight-kotlin"><div class="highlight"><pre><span></span>@Test
|
||||
fun resolveFromTwoHashes() {
|
||||
val (stx1, stx2) = makeTransactions()
|
||||
val p = ResolveTransactionsFlow(setOf(stx2.id), a.info.identity)
|
||||
val future = b.services.startFlow("resolve", p)
|
||||
net.runNetwork()
|
||||
val results = future.get()
|
||||
assertEquals(listOf(stx1.id, stx2.id), results.map { it.id })
|
||||
assertEquals(stx1, b.storage.validatedTransactions.getTransaction(stx1.id))
|
||||
assertEquals(stx2, b.storage.validatedTransactions.getTransaction(stx2.id))
|
||||
}
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>We’ll take a look at the <code class="docutils literal"><span class="pre">makeTransactions</span></code> function in a moment. For now, it’s enough to know that it returns two
|
||||
<code class="docutils literal"><span class="pre">SignedTransaction</span></code> objects, the second of which spends the first. Both transactions are known by node A
|
||||
but not node B.</p>
|
||||
<p>The test logic is simple enough: we create the flow, giving it node A’s identity as the target to talk to.
|
||||
Then we start it on node B and use the <code class="docutils literal"><span class="pre">net.runNetwork()</span></code> method to bounce messages around until things have
|
||||
settled (i.e. there are no more messages waiting to be delivered). All this is done using an in memory message
|
||||
routing implementation that is fast to initialise and use. Finally, we obtain the result of the flow and do
|
||||
some tests on it. We also check the contents of node B’s database to see that the flow had the intended effect
|
||||
on the node’s persistent state.</p>
|
||||
<p>Here’s what <code class="docutils literal"><span class="pre">makeTransactions</span></code> looks like:</p>
|
||||
<div class="codeset container">
|
||||
<div class="highlight-kotlin"><div class="highlight"><pre><span></span><span class="k">private</span> <span class="k">fun</span> <span class="nf">makeTransactions</span><span class="p">():</span> <span class="n">Pair</span><span class="p"><</span><span class="n">SignedTransaction</span><span class="p">,</span> <span class="n">SignedTransaction</span><span class="p">></span> <span class="p">{</span>
|
||||
<span class="c1">// Make a chain of custody of dummy states and insert into node A.</span>
|
||||
<span class="k">val</span> <span class="py">dummy1</span><span class="p">:</span> <span class="n">SignedTransaction</span> <span class="p">=</span> <span class="n">DummyContract</span><span class="p">.</span><span class="n">generateInitial</span><span class="p">(</span><span class="n">MEGA_CORP</span><span class="p">.</span><span class="n">ref</span><span class="p">(</span><span class="m">1</span><span class="p">),</span> <span class="m">0</span><span class="p">,</span> <span class="n">notary</span><span class="p">).</span><span class="n">let</span> <span class="p">{</span>
|
||||
<span class="n">it</span><span class="p">.</span><span class="n">signWith</span><span class="p">(</span><span class="n">MEGA_CORP_KEY</span><span class="p">)</span>
|
||||
<span class="n">it</span><span class="p">.</span><span class="n">signWith</span><span class="p">(</span><span class="n">DUMMY_NOTARY_KEY</span><span class="p">)</span>
|
||||
<span class="n">it</span><span class="p">.</span><span class="n">toSignedTransaction</span><span class="p">(</span><span class="k">false</span><span class="p">)</span>
|
||||
<span class="p">}</span>
|
||||
<span class="k">val</span> <span class="py">dummy2</span><span class="p">:</span> <span class="n">SignedTransaction</span> <span class="p">=</span> <span class="n">DummyContract</span><span class="p">.</span><span class="n">move</span><span class="p">(</span><span class="n">dummy1</span><span class="p">.</span><span class="n">tx</span><span class="p">.</span><span class="n">outRef</span><span class="p">(</span><span class="m">0</span><span class="p">),</span> <span class="n">MINI_CORP_PUBKEY</span><span class="p">).</span><span class="n">let</span> <span class="p">{</span>
|
||||
<span class="n">it</span><span class="p">.</span><span class="n">signWith</span><span class="p">(</span><span class="n">MEGA_CORP_KEY</span><span class="p">)</span>
|
||||
<span class="n">it</span><span class="p">.</span><span class="n">signWith</span><span class="p">(</span><span class="n">DUMMY_NOTARY_KEY</span><span class="p">)</span>
|
||||
<span class="n">it</span><span class="p">.</span><span class="n">toSignedTransaction</span><span class="p">()</span>
|
||||
<span class="p">}</span>
|
||||
<span class="n">a</span><span class="p">.</span><span class="n">services</span><span class="p">.</span><span class="n">recordTransactions</span><span class="p">(</span><span class="n">dummy1</span><span class="p">,</span> <span class="n">dummy2</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">Pair</span><span class="p">(</span><span class="n">dummy1</span><span class="p">,</span> <span class="n">dummy2</span><span class="p">)</span>
|
||||
<span class="p">}</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>We’re using the <code class="docutils literal"><span class="pre">DummyContract</span></code>, a simple test smart contract which stores a single number in its states, along
|
||||
with ownership and issuer information. You can issue such states, exit them and re-assign ownership (move them).
|
||||
It doesn’t do anything else. This code simply creates a transaction that issues a dummy state (the issuer is
|
||||
<code class="docutils literal"><span class="pre">MEGA_CORP</span></code>, a pre-defined unit test identity), signs it with the test notary and MegaCorp keys and then
|
||||
converts the builder to the final <code class="docutils literal"><span class="pre">SignedTransaction</span></code>. It then does so again, but this time instead of issuing
|
||||
it re-assigns ownership instead. The chain of two transactions is finally committed to node A by sending them
|
||||
directly to the <code class="docutils literal"><span class="pre">a.services.recordTransaction</span></code> method (note that this method doesn’t check the transactions are
|
||||
valid).</p>
|
||||
<p>And that’s it: you can explore the documentation for the <a class="reference external" href="api/net.corda.node.internal.testing/-mock-network/index.html">MockNode API</a> here.</p>
|
||||
</div>
|
||||
<div class="section" id="versioning">
|
||||
<h2>Versioning<a class="headerlink" href="#versioning" title="Permalink to this headline">¶</a></h2>
|
||||
<p>Fibers involve persisting object-serialised stack frames to disk. Although we may do some R&D into in-place upgrades
|
||||
@ -828,10 +743,9 @@ flows for this reason (see “<a class="reference internal" href="event-sche
|
||||
the features we have planned:</p>
|
||||
<ul class="simple">
|
||||
<li>Identity based addressing</li>
|
||||
<li>Exposing progress trackers to local (inside the firewall) clients using message queues and/or WebSockets</li>
|
||||
<li>Exception propagation and management, with a “flow hospital” tool to manually provide solutions to unavoidable
|
||||
problems (e.g. the other side doesn’t know the trade)</li>
|
||||
<li>Being able to interact with internal apps and tools via HTTP and similar</li>
|
||||
<li>Being able to interact with internal apps and tools via RPC</li>
|
||||
<li>Being able to interact with people, either via some sort of external ticketing system, or email, or a custom UI.
|
||||
For example to implement human transaction authorisations.</li>
|
||||
<li>A standard library of flows that can be easily sub-classed by local developers in order to integrate internal
|
||||
@ -847,7 +761,7 @@ reporting logic, or anything else that might be required as part of a communicat
|
||||
|
||||
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
|
||||
|
||||
<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="flow-testing.html" class="btn btn-neutral float-right" title="Writing flow tests" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
|
||||
|
||||
|
||||
<a href="tutorial-clientrpc-api.html" class="btn btn-neutral" title="Client RPC API Tutorial" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
|
||||
|
362
docs/build/html/flow-testing.html
vendored
Normal file
@ -0,0 +1,362 @@
|
||||
|
||||
|
||||
<!DOCTYPE html>
|
||||
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
<title>Writing flow tests — R3 Corda latest documentation</title>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="_static/css/custom.css" type="text/css" />
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="top" title="R3 Corda latest documentation" href="index.html"/>
|
||||
<link rel="next" title="Writing oracle services" href="oracles.html"/>
|
||||
<link rel="prev" title="Writing flows" href="flow-state-machines.html"/>
|
||||
|
||||
|
||||
<script src="_static/js/modernizr.min.js"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="wy-body-for-nav" role="document">
|
||||
|
||||
<div class="wy-grid-for-nav">
|
||||
|
||||
|
||||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||
<div class="wy-side-scroll">
|
||||
<div class="wy-side-nav-search">
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="index.html" class="icon icon-home"> R3 Corda
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="version">
|
||||
latest
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div role="search">
|
||||
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
|
||||
<input type="text" name="q" placeholder="Search docs" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
||||
<br>
|
||||
<a href="api/index.html">API reference</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||
|
||||
|
||||
|
||||
<p class="caption"><span class="caption-text">Getting started</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="inthebox.html">What’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="running-the-demos.html">Running the demos</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">Key concepts</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="data-model.html">Data model</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="transaction-data-types.html">Data types</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="merkle-trees.html">Transaction Tear-offs</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="consensus.html">Consensus model</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">The Corda node</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="clientrpc.html">Client RPC</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="messaging.html">Networking and messaging</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="persistence.html">Persistence</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-administration.html">Node administration</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-configuration-files.html">The Corda Configuration File</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-plugins.html">The Corda Plugin Framework</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-services.html">A Brief Introduction To The Node Services</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">CorDapps</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="creating-a-cordapp.html">Creating a Cordapp</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="creating-a-cordapp.html#gradle-plugins-for-cordapps">Gradle Plugins for Cordapps</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">Tutorials</span></p>
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="where-to-start.html">Where to start</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="tutorial-contract-clauses.html">Writing a contract using clauses</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-test-dsl.html">Writing a contract test</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-clientrpc-api.html">Client RPC API Tutorial</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Writing flows</a></li>
|
||||
<li class="toctree-l1 current"><a class="current reference internal" href="#">Writing flow tests</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-attachments.html">Using attachments</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="event-scheduling.html">Event scheduling</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">Other</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="network-simulator.html">Network Simulator</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-explorer.html">Node Explorer</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="initial-margin-agreement.html">Initial Margin Agreements</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">Component library</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="contract-catalogue.html">Contract catalogue</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="contract-irs.html">Interest Rate Swaps</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">Appendix</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="loadtesting.html">Load testing</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="secure-coding-guidelines.html">Secure coding guidelines</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="release-process.html">Release process</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="release-process.html#steps-to-cut-a-release">Steps to cut a release</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="release-notes.html">Release notes</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="codestyle.html">Code style guide</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="building-the-docs.html">Building the documentation</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">Glossary</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="glossary.html">Glossary</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||
|
||||
|
||||
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
|
||||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||
<a href="index.html">R3 Corda</a>
|
||||
</nav>
|
||||
|
||||
|
||||
|
||||
<div class="wy-nav-content">
|
||||
<div class="rst-content">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||
<ul class="wy-breadcrumbs">
|
||||
<li><a href="index.html">Docs</a> »</li>
|
||||
|
||||
<li>Writing flow tests</li>
|
||||
<li class="wy-breadcrumbs-aside">
|
||||
|
||||
|
||||
<a href="_sources/flow-testing.txt" rel="nofollow"> View page source</a>
|
||||
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<hr/>
|
||||
</div>
|
||||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||
<div itemprop="articleBody">
|
||||
|
||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="_static/codesets.js"></script><div class="section" id="writing-flow-tests">
|
||||
<h1>Writing flow tests<a class="headerlink" href="#writing-flow-tests" title="Permalink to this headline">¶</a></h1>
|
||||
<p>A flow can be a fairly complex thing that interacts with many services and other parties over the network. That
|
||||
means unit testing one requires some infrastructure to provide lightweight mock implementations. The MockNetwork
|
||||
provides this testing infrastructure layer; you can find this class in the test-utils module.</p>
|
||||
<p>A good example to examine for learning how to unit test flows is the <code class="docutils literal"><span class="pre">ResolveTransactionsFlow</span></code> tests. This
|
||||
flow takes care of downloading and verifying transaction graphs, with all the needed dependencies. We start
|
||||
with this basic skeleton:</p>
|
||||
<div class="codeset container">
|
||||
<div class="highlight-kotlin"><div class="highlight"><pre><span></span><span class="k">class</span> <span class="nc">ResolveTransactionsFlowTest</span> <span class="p">{</span>
|
||||
<span class="k">lateinit</span> <span class="k">var</span> <span class="py">net</span><span class="p">:</span> <span class="n">MockNetwork</span>
|
||||
<span class="k">lateinit</span> <span class="k">var</span> <span class="py">a</span><span class="p">:</span> <span class="n">MockNetwork</span><span class="p">.</span><span class="n">MockNode</span>
|
||||
<span class="k">lateinit</span> <span class="k">var</span> <span class="py">b</span><span class="p">:</span> <span class="n">MockNetwork</span><span class="p">.</span><span class="n">MockNode</span>
|
||||
<span class="k">lateinit</span> <span class="k">var</span> <span class="py">notary</span><span class="p">:</span> <span class="n">Party</span>
|
||||
|
||||
<span class="n">@Before</span>
|
||||
<span class="k">fun</span> <span class="nf">setup</span><span class="p">()</span> <span class="p">{</span>
|
||||
<span class="n">net</span> <span class="p">=</span> <span class="n">MockNetwork</span><span class="p">()</span>
|
||||
<span class="k">val</span> <span class="py">nodes</span> <span class="p">=</span> <span class="n">net</span><span class="p">.</span><span class="n">createSomeNodes</span><span class="p">()</span>
|
||||
<span class="n">a</span> <span class="p">=</span> <span class="n">nodes</span><span class="p">.</span><span class="n">partyNodes</span><span class="p">[</span><span class="m">0</span><span class="p">]</span>
|
||||
<span class="n">b</span> <span class="p">=</span> <span class="n">nodes</span><span class="p">.</span><span class="n">partyNodes</span><span class="p">[</span><span class="m">1</span><span class="p">]</span>
|
||||
<span class="n">notary</span> <span class="p">=</span> <span class="n">nodes</span><span class="p">.</span><span class="n">notaryNode</span><span class="p">.</span><span class="n">info</span><span class="p">.</span><span class="n">notaryIdentity</span>
|
||||
<span class="n">net</span><span class="p">.</span><span class="n">runNetwork</span><span class="p">()</span>
|
||||
<span class="p">}</span>
|
||||
|
||||
<span class="n">@After</span>
|
||||
<span class="k">fun</span> <span class="nf">tearDown</span><span class="p">()</span> <span class="p">{</span>
|
||||
<span class="n">net</span><span class="p">.</span><span class="n">stopNodes</span><span class="p">()</span>
|
||||
<span class="p">}</span>
|
||||
<span class="p">}</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>We create a mock network in our <code class="docutils literal"><span class="pre">@Before</span></code> setup method and create a couple of nodes. We also record the identity
|
||||
of the notary in our test network, which will come in handy later. We also tidy up when we’re done.</p>
|
||||
<p>Next, we write a test case:</p>
|
||||
<div class="highlight-kotlin"><div class="highlight"><pre><span></span> @Test
|
||||
fun `resolve from two hashes`() {
|
||||
val (stx1, stx2) = makeTransactions()
|
||||
val p = ResolveTransactionsFlow(setOf(stx2.id), a.info.legalIdentity)
|
||||
val future = b.services.startFlow(p).resultFuture
|
||||
net.runNetwork()
|
||||
val results = future.get()
|
||||
assertEquals(listOf(stx1.id, stx2.id), results.map { it.id })
|
||||
databaseTransaction(b.database) {
|
||||
assertEquals(stx1, b.storage.validatedTransactions.getTransaction(stx1.id))
|
||||
assertEquals(stx2, b.storage.validatedTransactions.getTransaction(stx2.id))
|
||||
}
|
||||
}
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>We’ll take a look at the <code class="docutils literal"><span class="pre">makeTransactions</span></code> function in a moment. For now, it’s enough to know that it returns two
|
||||
<code class="docutils literal"><span class="pre">SignedTransaction</span></code> objects, the second of which spends the first. Both transactions are known by node A
|
||||
but not node B.</p>
|
||||
<p>The test logic is simple enough: we create the flow, giving it node A’s identity as the target to talk to.
|
||||
Then we start it on node B and use the <code class="docutils literal"><span class="pre">net.runNetwork()</span></code> method to bounce messages around until things have
|
||||
settled (i.e. there are no more messages waiting to be delivered). All this is done using an in memory message
|
||||
routing implementation that is fast to initialise and use. Finally, we obtain the result of the flow and do
|
||||
some tests on it. We also check the contents of node B’s database to see that the flow had the intended effect
|
||||
on the node’s persistent state.</p>
|
||||
<p>Here’s what <code class="docutils literal"><span class="pre">makeTransactions</span></code> looks like:</p>
|
||||
<div class="highlight-kotlin"><div class="highlight"><pre><span></span> <span class="k">private</span> <span class="k">fun</span> <span class="nf">makeTransactions</span><span class="p">(</span><span class="n">signFirstTX</span><span class="p">:</span> <span class="n">Boolean</span> <span class="p">=</span> <span class="k">true</span><span class="p">,</span> <span class="n">withAttachment</span><span class="p">:</span> <span class="n">SecureHash</span><span class="p">?</span> <span class="p">=</span> <span class="k">null</span><span class="p">):</span> <span class="n">Pair</span><span class="p"><</span><span class="n">SignedTransaction</span><span class="p">,</span> <span class="n">SignedTransaction</span><span class="p">></span> <span class="p">{</span>
|
||||
<span class="c1">// Make a chain of custody of dummy states and insert into node A.</span>
|
||||
<span class="k">val</span> <span class="py">dummy1</span><span class="p">:</span> <span class="n">SignedTransaction</span> <span class="p">=</span> <span class="n">DummyContract</span><span class="p">.</span><span class="n">generateInitial</span><span class="p">(</span><span class="n">MEGA_CORP</span><span class="p">.</span><span class="n">ref</span><span class="p">(</span><span class="m">1</span><span class="p">),</span> <span class="m">0</span><span class="p">,</span> <span class="n">notary</span><span class="p">).</span><span class="n">let</span> <span class="p">{</span>
|
||||
<span class="k">if</span> <span class="p">(</span><span class="n">withAttachment</span> <span class="p">!=</span> <span class="k">null</span><span class="p">)</span>
|
||||
<span class="n">it</span><span class="p">.</span><span class="n">addAttachment</span><span class="p">(</span><span class="n">withAttachment</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="p">(</span><span class="n">signFirstTX</span><span class="p">)</span>
|
||||
<span class="n">it</span><span class="p">.</span><span class="n">signWith</span><span class="p">(</span><span class="n">MEGA_CORP_KEY</span><span class="p">)</span>
|
||||
<span class="n">it</span><span class="p">.</span><span class="n">signWith</span><span class="p">(</span><span class="n">DUMMY_NOTARY_KEY</span><span class="p">)</span>
|
||||
<span class="n">it</span><span class="p">.</span><span class="n">toSignedTransaction</span><span class="p">(</span><span class="k">false</span><span class="p">)</span>
|
||||
<span class="p">}</span>
|
||||
<span class="k">val</span> <span class="py">dummy2</span><span class="p">:</span> <span class="n">SignedTransaction</span> <span class="p">=</span> <span class="n">DummyContract</span><span class="p">.</span><span class="n">move</span><span class="p">(</span><span class="n">dummy1</span><span class="p">.</span><span class="n">tx</span><span class="p">.</span><span class="n">outRef</span><span class="p">(</span><span class="m">0</span><span class="p">),</span> <span class="n">MINI_CORP_PUBKEY</span><span class="p">).</span><span class="n">let</span> <span class="p">{</span>
|
||||
<span class="n">it</span><span class="p">.</span><span class="n">signWith</span><span class="p">(</span><span class="n">MEGA_CORP_KEY</span><span class="p">)</span>
|
||||
<span class="n">it</span><span class="p">.</span><span class="n">signWith</span><span class="p">(</span><span class="n">DUMMY_NOTARY_KEY</span><span class="p">)</span>
|
||||
<span class="n">it</span><span class="p">.</span><span class="n">toSignedTransaction</span><span class="p">()</span>
|
||||
<span class="p">}</span>
|
||||
<span class="n">databaseTransaction</span><span class="p">(</span><span class="n">a</span><span class="p">.</span><span class="n">database</span><span class="p">)</span> <span class="p">{</span>
|
||||
<span class="n">a</span><span class="p">.</span><span class="n">services</span><span class="p">.</span><span class="n">recordTransactions</span><span class="p">(</span><span class="n">dummy1</span><span class="p">,</span> <span class="n">dummy2</span><span class="p">)</span>
|
||||
<span class="p">}</span>
|
||||
<span class="k">return</span> <span class="n">Pair</span><span class="p">(</span><span class="n">dummy1</span><span class="p">,</span> <span class="n">dummy2</span><span class="p">)</span>
|
||||
<span class="p">}</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>We’re using the <code class="docutils literal"><span class="pre">DummyContract</span></code>, a simple test smart contract which stores a single number in its states, along
|
||||
with ownership and issuer information. You can issue such states, exit them and re-assign ownership (move them).
|
||||
It doesn’t do anything else. This code simply creates a transaction that issues a dummy state (the issuer is
|
||||
<code class="docutils literal"><span class="pre">MEGA_CORP</span></code>, a pre-defined unit test identity), signs it with the test notary and MegaCorp keys and then
|
||||
converts the builder to the final <code class="docutils literal"><span class="pre">SignedTransaction</span></code>. It then does so again, but this time instead of issuing
|
||||
it re-assigns ownership instead. The chain of two transactions is finally committed to node A by sending them
|
||||
directly to the <code class="docutils literal"><span class="pre">a.services.recordTransaction</span></code> method (note that this method doesn’t check the transactions are
|
||||
valid) inside a <code class="docutils literal"><span class="pre">databaseTransaction</span></code>. All node flows run within a database transaction in the nodes themselves,
|
||||
but any time we need to use the database directly from a unit test, you need to provide a database transaction as shown
|
||||
here.</p>
|
||||
<p>And that’s it: you can explore the documentation for the <a class="reference external" href="api/net.corda.node.internal.testing/-mock-network/index.html">MockNode API</a> here.</p>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
|
||||
|
||||
<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="flow-state-machines.html" class="btn btn-neutral" title="Writing flows" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<hr/>
|
||||
|
||||
<div role="contentinfo">
|
||||
<p>
|
||||
© Copyright 2016, Distributed Ledger Group, LLC.
|
||||
|
||||
</p>
|
||||
</div>
|
||||
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||
|
||||
</footer>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT:'./',
|
||||
VERSION:'latest',
|
||||
COLLAPSE_INDEX:false,
|
||||
FILE_SUFFIX:'.html',
|
||||
HAS_SOURCE: true
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="_static/underscore.js"></script>
|
||||
<script type="text/javascript" src="_static/doctools.js"></script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript" src="_static/js/theme.js"></script>
|
||||
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript">
|
||||
jQuery(function () {
|
||||
SphinxRtdTheme.StickyNav.enable();
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
4
docs/build/html/further-notes-on-kotlin.html
vendored
@ -103,6 +103,7 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="persistence.html">Persistence</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-administration.html">Node administration</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-configuration-files.html">The Corda Configuration File</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-plugins.html">The Corda Plugin Framework</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-services.html">A Brief Introduction To The Node Services</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">CorDapps</span></p>
|
||||
@ -117,7 +118,8 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-contract-clauses.html">Writing a contract using clauses</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-test-dsl.html">Writing a contract test</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-clientrpc-api.html">Client RPC API Tutorial</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Flow state machines</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Writing flows</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-testing.html">Writing flow tests</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-attachments.html">Using attachments</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="event-scheduling.html">Event scheduling</a></li>
|
||||
|
4
docs/build/html/genindex.html
vendored
@ -104,6 +104,7 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="persistence.html">Persistence</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-administration.html">Node administration</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-configuration-files.html">The Corda Configuration File</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-plugins.html">The Corda Plugin Framework</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-services.html">A Brief Introduction To The Node Services</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">CorDapps</span></p>
|
||||
@ -118,7 +119,8 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-contract-clauses.html">Writing a contract using clauses</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-test-dsl.html">Writing a contract test</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-clientrpc-api.html">Client RPC API Tutorial</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Flow state machines</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Writing flows</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-testing.html">Writing flow tests</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-attachments.html">Using attachments</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="event-scheduling.html">Event scheduling</a></li>
|
||||
|
@ -103,6 +103,7 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="persistence.html">Persistence</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-administration.html">Node administration</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-configuration-files.html">The Corda Configuration File</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-plugins.html">The Corda Plugin Framework</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-services.html">A Brief Introduction To The Node Services</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">CorDapps</span></p>
|
||||
@ -117,7 +118,8 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-contract-clauses.html">Writing a contract using clauses</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-test-dsl.html">Writing a contract test</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-clientrpc-api.html">Client RPC API Tutorial</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Flow state machines</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Writing flows</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-testing.html">Writing flow tests</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-attachments.html">Using attachments</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="event-scheduling.html">Event scheduling</a></li>
|
||||
|
4
docs/build/html/getting-set-up.html
vendored
@ -114,6 +114,7 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="persistence.html">Persistence</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-administration.html">Node administration</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-configuration-files.html">The Corda Configuration File</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-plugins.html">The Corda Plugin Framework</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-services.html">A Brief Introduction To The Node Services</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">CorDapps</span></p>
|
||||
@ -128,7 +129,8 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-contract-clauses.html">Writing a contract using clauses</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-test-dsl.html">Writing a contract test</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-clientrpc-api.html">Client RPC API Tutorial</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Flow state machines</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Writing flows</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-testing.html">Writing flow tests</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-attachments.html">Using attachments</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="event-scheduling.html">Event scheduling</a></li>
|
||||
|
4
docs/build/html/glossary.html
vendored
@ -104,6 +104,7 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="persistence.html">Persistence</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-administration.html">Node administration</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-configuration-files.html">The Corda Configuration File</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-plugins.html">The Corda Plugin Framework</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-services.html">A Brief Introduction To The Node Services</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">CorDapps</span></p>
|
||||
@ -118,7 +119,8 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-contract-clauses.html">Writing a contract using clauses</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-test-dsl.html">Writing a contract test</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-clientrpc-api.html">Client RPC API Tutorial</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Flow state machines</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Writing flows</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-testing.html">Writing flow tests</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-attachments.html">Using attachments</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="event-scheduling.html">Event scheduling</a></li>
|
||||
|
9
docs/build/html/index.html
vendored
@ -104,6 +104,7 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="persistence.html">Persistence</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-administration.html">Node administration</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-configuration-files.html">The Corda Configuration File</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-plugins.html">The Corda Plugin Framework</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-services.html">A Brief Introduction To The Node Services</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">CorDapps</span></p>
|
||||
@ -118,7 +119,8 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-contract-clauses.html">Writing a contract using clauses</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-test-dsl.html">Writing a contract test</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-clientrpc-api.html">Client RPC API Tutorial</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Flow state machines</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Writing flows</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-testing.html">Writing flow tests</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-attachments.html">Using attachments</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="event-scheduling.html">Event scheduling</a></li>
|
||||
@ -314,6 +316,7 @@ you already have read the relevant sections of the technology white paper and no
|
||||
<li class="toctree-l2"><a class="reference internal" href="corda-configuration-files.html#configuration-file-fields">Configuration File Fields</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-plugins.html">The Corda Plugin Framework</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-services.html">A Brief Introduction To The Node Services</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="node-services.html#services-within-the-node">Services Within The Node</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="node-services.html#key-management-and-identity-services">Key Management and Identity Services</a></li>
|
||||
@ -390,7 +393,7 @@ you already have read the relevant sections of the technology white paper and no
|
||||
<li class="toctree-l2"><a class="reference internal" href="tutorial-clientrpc-api.html#registering-classes-from-your-cordapp-with-rpc-kryo">Registering classes from your Cordapp with RPC Kryo</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Flow state machines</a><ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Writing flows</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="flow-state-machines.html#introduction">Introduction</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="flow-state-machines.html#theory">Theory</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="flow-state-machines.html#a-two-party-trading-flow">A two party trading flow</a></li>
|
||||
@ -400,11 +403,11 @@ you already have read the relevant sections of the technology white paper and no
|
||||
<li class="toctree-l2"><a class="reference internal" href="flow-state-machines.html#sub-flows">Sub-flows</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="flow-state-machines.html#implementing-the-buyer">Implementing the buyer</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="flow-state-machines.html#progress-tracking">Progress tracking</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="flow-state-machines.html#unit-testing">Unit testing</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="flow-state-machines.html#versioning">Versioning</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="flow-state-machines.html#future-features">Future features</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-testing.html">Writing flow tests</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="oracles.html#introduction">Introduction</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="oracles.html#the-two-basic-approaches">The two basic approaches</a></li>
|
||||
|
@ -105,6 +105,7 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="persistence.html">Persistence</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-administration.html">Node administration</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-configuration-files.html">The Corda Configuration File</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-plugins.html">The Corda Plugin Framework</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-services.html">A Brief Introduction To The Node Services</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">CorDapps</span></p>
|
||||
@ -119,7 +120,8 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-contract-clauses.html">Writing a contract using clauses</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-test-dsl.html">Writing a contract test</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-clientrpc-api.html">Client RPC API Tutorial</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Flow state machines</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Writing flows</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-testing.html">Writing flow tests</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-attachments.html">Using attachments</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="event-scheduling.html">Event scheduling</a></li>
|
||||
|
4
docs/build/html/inthebox.html
vendored
@ -105,6 +105,7 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="persistence.html">Persistence</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-administration.html">Node administration</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-configuration-files.html">The Corda Configuration File</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-plugins.html">The Corda Plugin Framework</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-services.html">A Brief Introduction To The Node Services</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">CorDapps</span></p>
|
||||
@ -119,7 +120,8 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-contract-clauses.html">Writing a contract using clauses</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-test-dsl.html">Writing a contract test</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-clientrpc-api.html">Client RPC API Tutorial</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Flow state machines</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Writing flows</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-testing.html">Writing flow tests</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-attachments.html">Using attachments</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="event-scheduling.html">Event scheduling</a></li>
|
||||
|
4
docs/build/html/loadtesting.html
vendored
@ -105,6 +105,7 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="persistence.html">Persistence</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-administration.html">Node administration</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-configuration-files.html">The Corda Configuration File</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-plugins.html">The Corda Plugin Framework</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-services.html">A Brief Introduction To The Node Services</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">CorDapps</span></p>
|
||||
@ -119,7 +120,8 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-contract-clauses.html">Writing a contract using clauses</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-test-dsl.html">Writing a contract test</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-clientrpc-api.html">Client RPC API Tutorial</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Flow state machines</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Writing flows</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-testing.html">Writing flow tests</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-attachments.html">Using attachments</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="event-scheduling.html">Event scheduling</a></li>
|
||||
|
4
docs/build/html/merkle-trees.html
vendored
@ -110,6 +110,7 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="persistence.html">Persistence</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-administration.html">Node administration</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-configuration-files.html">The Corda Configuration File</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-plugins.html">The Corda Plugin Framework</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-services.html">A Brief Introduction To The Node Services</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">CorDapps</span></p>
|
||||
@ -124,7 +125,8 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-contract-clauses.html">Writing a contract using clauses</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-test-dsl.html">Writing a contract test</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-clientrpc-api.html">Client RPC API Tutorial</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Flow state machines</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Writing flows</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-testing.html">Writing flow tests</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-attachments.html">Using attachments</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="event-scheduling.html">Event scheduling</a></li>
|
||||
|
4
docs/build/html/messaging.html
vendored
@ -109,6 +109,7 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="persistence.html">Persistence</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-administration.html">Node administration</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-configuration-files.html">The Corda Configuration File</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-plugins.html">The Corda Plugin Framework</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-services.html">A Brief Introduction To The Node Services</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">CorDapps</span></p>
|
||||
@ -123,7 +124,8 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-contract-clauses.html">Writing a contract using clauses</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-test-dsl.html">Writing a contract test</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-clientrpc-api.html">Client RPC API Tutorial</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Flow state machines</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Writing flows</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-testing.html">Writing flow tests</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-attachments.html">Using attachments</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="event-scheduling.html">Event scheduling</a></li>
|
||||
|
4
docs/build/html/network-simulator.html
vendored
@ -105,6 +105,7 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="persistence.html">Persistence</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-administration.html">Node administration</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-configuration-files.html">The Corda Configuration File</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-plugins.html">The Corda Plugin Framework</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-services.html">A Brief Introduction To The Node Services</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">CorDapps</span></p>
|
||||
@ -119,7 +120,8 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-contract-clauses.html">Writing a contract using clauses</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-test-dsl.html">Writing a contract test</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-clientrpc-api.html">Client RPC API Tutorial</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Flow state machines</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Writing flows</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-testing.html">Writing flow tests</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-attachments.html">Using attachments</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="event-scheduling.html">Event scheduling</a></li>
|
||||
|
14
docs/build/html/node-administration.html
vendored
@ -112,6 +112,7 @@
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-configuration-files.html">The Corda Configuration File</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-plugins.html">The Corda Plugin Framework</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-services.html">A Brief Introduction To The Node Services</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">CorDapps</span></p>
|
||||
@ -126,7 +127,8 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-contract-clauses.html">Writing a contract using clauses</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-test-dsl.html">Writing a contract test</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-clientrpc-api.html">Client RPC API Tutorial</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Flow state machines</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Writing flows</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-testing.html">Writing flow tests</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-attachments.html">Using attachments</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="event-scheduling.html">Event scheduling</a></li>
|
||||
@ -205,11 +207,13 @@
|
||||
you can upload and download attachments, access a REST API and so on.</p>
|
||||
<div class="section" id="logging">
|
||||
<h2>Logging<a class="headerlink" href="#logging" title="Permalink to this headline">¶</a></h2>
|
||||
<p>Logs are stored to the logs subdirectory of the node directory and are rotated from time to time. You can
|
||||
<p>In the default configuration logs are stored to the logs subdirectory of the node directory and are rotated from time to time. You can
|
||||
have logging printed to the console as well by passing the <code class="docutils literal"><span class="pre">--log-to-console</span></code> command line flag. Corda
|
||||
uses the log4j2 framework to manage its logging, so you can also configure it in more detail by writing
|
||||
a custom logging configuration file and passing <code class="docutils literal"><span class="pre">-Dlog4j.configurationFile=my-config-file.xml</span></code> on the
|
||||
command line as well.</p>
|
||||
uses the SL4J logging façade which is configured with the log4j2 binding framework to manage its logging,
|
||||
so you can also configure it in more detail by writing a custom log4j2 logging configuration file and passing <code class="docutils literal"><span class="pre">-Dlog4j.configurationFile=my-config-file.xml</span></code>
|
||||
on the command line as well. The default configuration is copied during the build from <code class="docutils literal"><span class="pre">config/dev/log4j2.xml</span></code>, or for the test sourceSet from <code class="docutils literal"><span class="pre">config/test/log4j2.xml</span></code>.</p>
|
||||
<p>In corda code a logger is typically instantiated via the <code class="docutils literal"><span class="pre">net.corda.core.utilities.loggerFor</span></code> utility method which will create an SL4J <code class="docutils literal"><span class="pre">Logger</span></code> with a name based on the type parameter.
|
||||
Also, available in <code class="docutils literal"><span class="pre">net.corda.core.utilities</span></code>, are extension methods to take a lazily evaluated logging lambda for trace and debug level, which will not evaluate the lambda if the LogLevel threshold is higher.</p>
|
||||
</div>
|
||||
<div class="section" id="database-access">
|
||||
<h2>Database access<a class="headerlink" href="#database-access" title="Permalink to this headline">¶</a></h2>
|
||||
|
41
docs/build/html/node-explorer.html
vendored
@ -105,6 +105,7 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="persistence.html">Persistence</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-administration.html">Node administration</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-configuration-files.html">The Corda Configuration File</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-plugins.html">The Corda Plugin Framework</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-services.html">A Brief Introduction To The Node Services</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">CorDapps</span></p>
|
||||
@ -119,7 +120,8 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-contract-clauses.html">Writing a contract using clauses</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-test-dsl.html">Writing a contract test</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-clientrpc-api.html">Client RPC API Tutorial</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Flow state machines</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Writing flows</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-testing.html">Writing flow tests</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-attachments.html">Using attachments</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="event-scheduling.html">Event scheduling</a></li>
|
||||
@ -236,18 +238,19 @@ The user can execute cash transaction commands to issue and move cash to other p
|
||||
<h2>Interface<a class="headerlink" href="#interface" title="Permalink to this headline">¶</a></h2>
|
||||
<dl class="docutils">
|
||||
<dt>Login</dt>
|
||||
<dd>User can login to any Corda node using the explorer, alternately, <cite>gradlew explorer:runDemoNodes</cite> can be used to start up demo nodes for testing.
|
||||
<dd>User can login to any Corda node using the explorer. Alternatively, <code class="docutils literal"><span class="pre">gradlew</span> <span class="pre">explorer:runDemoNodes</span></code> can be used to start up demo nodes for testing.
|
||||
Corda node address, username and password are required for login, the address is defaulted to localhost:0 if leave blank.
|
||||
Username and password can be configured in node’s configuration file; for demo nodes, it is defaulted to <code class="docutils literal"><span class="pre">user1</span></code> and <code class="docutils literal"><span class="pre">test</span></code>.</dd>
|
||||
Username and password can be configured via the <code class="docutils literal"><span class="pre">rpcUsers</span></code> field in node’s configuration file; for demo nodes, it is defaulted to <code class="docutils literal"><span class="pre">user1</span></code> and <code class="docutils literal"><span class="pre">test</span></code>.</dd>
|
||||
</dl>
|
||||
<div class="admonition note">
|
||||
<p class="first admonition-title">Note</p>
|
||||
<p class="last">If you are connecting to the demo nodes, only Alice and Bob (20004, 20006) are accessible using user1 credential, you won’t be able to connect to the notary.</p>
|
||||
</div>
|
||||
<a class="reference internal image-reference" href="_images/login.png"><img alt="_images/login.png" class="align-center" src="_images/login.png" style="width: 502.0px; height: 224.0px;" /></a>
|
||||
<a class="reference internal image-reference" href="_images/login.png"><img alt="_images/login.png" class="align-center" src="_images/login.png" style="width: 520.0px; height: 599.0px;" /></a>
|
||||
<dl class="docutils">
|
||||
<dt>Home</dt>
|
||||
<dd>Home view shows the top level state of node and vault; currently, it shows your cash balance and the numbers of transaction executed.
|
||||
<dt>Dashboard</dt>
|
||||
<dd>The dashboard shows the top level state of node and vault.
|
||||
Currently, it shows your cash balance and the numbers of transaction executed.
|
||||
The dashboard is intended to house widgets from different CordApp’s and provide useful information to system admin at a glance.</dd>
|
||||
</dl>
|
||||
<img alt="_images/dashboard.png" src="_images/dashboard.png" />
|
||||
@ -258,6 +261,13 @@ Individual cash transactions can be viewed by clicking on the table row. The use
|
||||
</dl>
|
||||
<img alt="_images/vault.png" src="_images/vault.png" />
|
||||
<dl class="docutils">
|
||||
<dt>New cash transaction</dt>
|
||||
<dd>This is where you can create new cash transactions.
|
||||
The user can choose from three transaction types (issue, pay and exit) and any party visible on the network.
|
||||
The result of the transaction will be visible in the transaction screen when executed.</dd>
|
||||
</dl>
|
||||
<img alt="_images/newTransaction.png" src="_images/newTransaction.png" />
|
||||
<dl class="docutils">
|
||||
<dt>Transactions</dt>
|
||||
<dd>The transaction view contains all transactions handled by the node in a table view. It shows basic information on the table e.g. Transaction ID,
|
||||
command type, USD equivalence value etc. User can expand the row by double clicking to view the inputs,
|
||||
@ -265,12 +275,21 @@ outputs and the signatures details for that transaction.</dd>
|
||||
</dl>
|
||||
<img alt="_images/transactionView.png" src="_images/transactionView.png" />
|
||||
<dl class="docutils">
|
||||
<dt>New Transaction</dt>
|
||||
<dd>This is where you can create new transaction; currently only the cash contract is supported.
|
||||
The user can choose from three transaction types (issue, move and exit) and any party visible on the network.
|
||||
The result of the transaction will be visible in the transaction screen when executed.</dd>
|
||||
<dt>Network</dt>
|
||||
<dd>The network view shows the network information on the world map. Currently only the user’s node is rendered on the map.
|
||||
This will be extended to other peers in a future release.
|
||||
The map provides a intuitive way of visualizing the Corda network and the participants.</dd>
|
||||
</dl>
|
||||
<img alt="_images/newTransaction.png" src="_images/newTransaction.png" />
|
||||
<img alt="_images/network.png" src="_images/network.png" />
|
||||
<dl class="docutils">
|
||||
<dt>Settings</dt>
|
||||
<dd>User can configure the client preference in this view.</dd>
|
||||
</dl>
|
||||
<div class="admonition note">
|
||||
<p class="first admonition-title">Note</p>
|
||||
<p class="last">Although the reporting currency is configurable, FX conversion won’t be applied to the values as we don’t have an FX service yet.</p>
|
||||
</div>
|
||||
<img alt="_images/settings.png" src="_images/settings.png" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
8
docs/build/html/node-services.html
vendored
@ -32,7 +32,7 @@
|
||||
|
||||
<link rel="top" title="R3 Corda latest documentation" href="index.html"/>
|
||||
<link rel="next" title="Creating a Cordapp" href="creating-a-cordapp.html"/>
|
||||
<link rel="prev" title="The Corda Configuration File" href="corda-configuration-files.html"/>
|
||||
<link rel="prev" title="The Corda Plugin Framework" href="corda-plugins.html"/>
|
||||
|
||||
|
||||
<script src="_static/js/modernizr.min.js"></script>
|
||||
@ -105,6 +105,7 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="persistence.html">Persistence</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-administration.html">Node administration</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-configuration-files.html">The Corda Configuration File</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-plugins.html">The Corda Plugin Framework</a></li>
|
||||
<li class="toctree-l1 current"><a class="current reference internal" href="#">A Brief Introduction To The Node Services</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#services-within-the-node">Services Within The Node</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#key-management-and-identity-services">Key Management and Identity Services</a><ul>
|
||||
@ -157,7 +158,8 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-contract-clauses.html">Writing a contract using clauses</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-test-dsl.html">Writing a contract test</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-clientrpc-api.html">Client RPC API Tutorial</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Flow state machines</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Writing flows</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-testing.html">Writing flow tests</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-attachments.html">Using attachments</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="event-scheduling.html">Event scheduling</a></li>
|
||||
@ -561,7 +563,7 @@ tables. To enable these features the contract state must implement the
|
||||
<a href="creating-a-cordapp.html" class="btn btn-neutral float-right" title="Creating a Cordapp" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
|
||||
|
||||
|
||||
<a href="corda-configuration-files.html" class="btn btn-neutral" title="The Corda Configuration File" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
|
||||
<a href="corda-plugins.html" class="btn btn-neutral" title="The Corda Plugin Framework" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
|
||||
|
||||
</div>
|
||||
|
||||
|
BIN
docs/build/html/objects.inv
vendored
4
docs/build/html/persistence.html
vendored
@ -109,6 +109,7 @@
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-administration.html">Node administration</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-configuration-files.html">The Corda Configuration File</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-plugins.html">The Corda Plugin Framework</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-services.html">A Brief Introduction To The Node Services</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">CorDapps</span></p>
|
||||
@ -123,7 +124,8 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-contract-clauses.html">Writing a contract using clauses</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-test-dsl.html">Writing a contract test</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-clientrpc-api.html">Client RPC API Tutorial</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Flow state machines</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Writing flows</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-testing.html">Writing flow tests</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-attachments.html">Using attachments</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="event-scheduling.html">Event scheduling</a></li>
|
||||
|
6
docs/build/html/running-the-demos.html
vendored
@ -111,6 +111,7 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="persistence.html">Persistence</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-administration.html">Node administration</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-configuration-files.html">The Corda Configuration File</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-plugins.html">The Corda Plugin Framework</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-services.html">A Brief Introduction To The Node Services</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">CorDapps</span></p>
|
||||
@ -125,7 +126,8 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-contract-clauses.html">Writing a contract using clauses</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-test-dsl.html">Writing a contract test</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-clientrpc-api.html">Client RPC API Tutorial</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Flow state machines</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Writing flows</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-testing.html">Writing flow tests</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-attachments.html">Using attachments</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="event-scheduling.html">Event scheduling</a></li>
|
||||
@ -204,7 +206,7 @@
|
||||
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="flow-state-machines.html"><span class="doc">Flow state machines</span></a>.</li>
|
||||
how this works in <a class="reference internal" href="flow-state-machines.html"><span class="doc">Writing flows</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>
|
||||
<li>The IRS demo web interface - a web interface to the IRS demo.</li>
|
||||
|
4
docs/build/html/search.html
vendored
@ -103,6 +103,7 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="persistence.html">Persistence</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-administration.html">Node administration</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-configuration-files.html">The Corda Configuration File</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="corda-plugins.html">The Corda Plugin Framework</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="node-services.html">A Brief Introduction To The Node Services</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">CorDapps</span></p>
|
||||
@ -117,7 +118,8 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-contract-clauses.html">Writing a contract using clauses</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-test-dsl.html">Writing a contract test</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-clientrpc-api.html">Client RPC API Tutorial</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Flow state machines</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-state-machines.html">Writing flows</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="flow-testing.html">Writing flow tests</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="oracles.html">Writing oracle services</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tutorial-attachments.html">Using attachments</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="event-scheduling.html">Event scheduling</a></li>
|
||||
|