From a5c0e2426c6ef314a4da0a7a575b17f57e0742c3 Mon Sep 17 00:00:00 2001 From: Joel Dudley Date: Wed, 1 Feb 2017 12:14:36 +0000 Subject: [PATCH 01/33] Addresses RGB feedback. --- docs/source/getting-set-up-fault-finding.rst | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/source/getting-set-up-fault-finding.rst b/docs/source/getting-set-up-fault-finding.rst index a814b65f85..af1992dab3 100644 --- a/docs/source/getting-set-up-fault-finding.rst +++ b/docs/source/getting-set-up-fault-finding.rst @@ -6,7 +6,7 @@ Milestone releases When you clone the corda or cordapp-template repos, they will default to the master branch. The master branch is being continuously developed upon, and its features may not align with the state of Corda as described in the docs. Additionally, the master branch of the CorDapp Template may break in response to changes in the main corda repo. -When developing on Corda, you should always check out the latest stable branch instead, by running ``git checkout release-M7``. +When developing on Corda, you should always check out the latest milestone (i.e. stable) branch instead. For example, to check out milestone 7, you'd run ``git checkout release-M7``. Java issues ----------- @@ -19,7 +19,9 @@ Many users have faced issues when running versions of Java that are either outda "Unresolved reference: javafx" ****************************** -JavaFX is not bundled with OpenJDK. If you are using OpenJDK and get an 'Unresolved reference: javafx' error, this means that you need to install OpenJFX. Do this by running ``sudo apt install openjfx``, and possibly ``sudo apt install libopenjfx-jav``. +JavaFX is not bundled with OpenJDK. If you are using OpenJDK and get an 'Unresolved reference: javafx' error, this means that you need to install OpenJFX. + +If you have APT installed and OpenJFX is part of your Unix distribution's package list, you can do this by running ``sudo apt install openjfx``, and possibly ``sudo apt install libopenjfx-jav``. Other users will want to refer to the guide `here `_, or to the list of Community Builds `here `_. IDEA issues --------------- From 0ae681de7675af45adfe7512305e698141a85e59 Mon Sep 17 00:00:00 2001 From: Clinton Alexander Date: Fri, 3 Feb 2017 14:00:49 +0000 Subject: [PATCH 02/33] Cleaned up logging in the webdriver to remove log that fails to display correctly on Windows. --- node/src/main/kotlin/net/corda/node/webserver/WebServer.kt | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/node/src/main/kotlin/net/corda/node/webserver/WebServer.kt b/node/src/main/kotlin/net/corda/node/webserver/WebServer.kt index cf9b774231..8244a04f67 100644 --- a/node/src/main/kotlin/net/corda/node/webserver/WebServer.kt +++ b/node/src/main/kotlin/net/corda/node/webserver/WebServer.kt @@ -95,17 +95,14 @@ class WebServer(val config: FullNodeConfiguration) { val httpConfiguration = HttpConfiguration() httpConfiguration.outputBufferSize = 32768 val httpConnector = ServerConnector(server, HttpConnectionFactory(httpConfiguration)) - log.info("Starting webserver on address $address") httpConnector.port = address.port httpConnector } server.connectors = arrayOf(connector) server.handler = handlerCollection - //runOnStop += Runnable { server.stop() } server.start() - log.info("Server started") - log.info("Embedded web server is listening on", "http://${InetAddress.getLocalHost().hostAddress}:${connector.port}/") + log.info("Started webserver on address $address") return server } From 45d8e0f76d04f56a13cb1ccf182a8028e94bdcc8 Mon Sep 17 00:00:00 2001 From: kasiastreich Date: Fri, 3 Feb 2017 14:02:51 +0000 Subject: [PATCH 03/33] Tearoff fixes (#78) * Move merkle building extension functions on wire tx to WireTransaction class. * Add timestamp, notary, transaction type and signers to wire transaction id calculation. * Change construction of MerkleTree from duplicating last node on a given level to padding leaves' list with zero hash to size of the nearest power of 2 - so we always have a full binary tree. The problem was that it was possible to construct 2 different transactions with the same ids. Trick worked for txs having number of leaves that were not power of 2. * Update tear-offs documentation and diagrams to reflect changes in construction of Merkle trees - padding with zero hashes and including all WireTransaction fields in id computation. * Change in filtering API of WireTransaction for partial Merkle trees calculation. Instead of many filtering functions over a transaction only one needs to be provided. Additional change to check and verification of FilteredTransaction. * IRS demo change. Make filtering function a protected method of RatesFixFlow class. Comment on situation when capturing too much scope and connected problems with checkpointing. Change oracle and tear-offs documentation. --- .../corda/core/crypto/PartialMerkleTree.kt | 51 +++-- .../net/corda/core/crypto/SecureHash.kt | 2 + .../core/transactions/MerkleTransaction.kt | 195 +++++++++--------- .../core/transactions/WireTransaction.kt | 48 ++++- .../core/crypto/PartialMerkleTreeTest.kt | 104 ++++++++-- docs/source/merkle-trees.rst | 72 ++++--- docs/source/oracles.rst | 17 +- docs/source/resources/merkleTree.png | Bin 15642 -> 22627 bytes docs/source/resources/partialMerkle.png | Bin 8741 -> 18381 bytes .../net/corda/irs/api/NodeInterestRates.kt | 36 ++-- .../kotlin/net/corda/irs/flows/FixingFlow.kt | 15 +- .../net/corda/irs/flows/RatesFixFlow.kt | 28 ++- .../irs/testing/NodeInterestRatesTest.kt | 71 +++++-- 13 files changed, 409 insertions(+), 230 deletions(-) diff --git a/core/src/main/kotlin/net/corda/core/crypto/PartialMerkleTree.kt b/core/src/main/kotlin/net/corda/core/crypto/PartialMerkleTree.kt index 36d12a1924..d03767176c 100644 --- a/core/src/main/kotlin/net/corda/core/crypto/PartialMerkleTree.kt +++ b/core/src/main/kotlin/net/corda/core/crypto/PartialMerkleTree.kt @@ -1,7 +1,7 @@ package net.corda.core.crypto import net.corda.core.transactions.MerkleTree -import net.corda.core.transactions.hashConcat +import net.corda.core.crypto.SecureHash.Companion.zeroHash import java.util.* @@ -19,14 +19,12 @@ class MerkleTreeException(val reason: String) : Exception() { * / \ * h14 h55 * / \ / \ - * h12 h34 h5->d(h5) - * / \ / \ / \ - * l1 l2 l3 l4 l5->d(l5) + * h12 h34 h50 h00 + * / \ / \ / \ / \ + * l1 l2 l3 l4 l5 0 0 0 * - * l* denote hashes of leaves, h* - hashes of nodes below. - * h5->d(h5) denotes duplication of the left hand side node. These nodes are kept in a full tree as DuplicatedLeaf. - * When filtering the tree for l5, we don't want to keep both l5 and its duplicate (it can also be solved using null - * values in a tree, but this solution is clearer). + * l* denote hashes of leaves, h* - hashes of nodes below. 0 denotes zero hash, we use it to pad not full binary trees, + * so the number of leaves is always a power of 2. * * Example of Partial tree based on the tree above. * @@ -34,13 +32,13 @@ class MerkleTreeException(val reason: String) : Exception() { * / \ * _ _ * / \ / \ - * h12 _ _ d(h5) + * h12 _ _ h00 * / \ / \ - * I3 l4 I5 d(l5) + * I3 l4 I5 0 * * We want to check l3 and l5 - now turned into IncudedLeaf (I3 and I5 above). To verify that these two leaves belong to * the tree with a hash root h15 we need to provide a Merkle branch (or partial tree). In our case we need hashes: - * h12, l4, d(l5) and d(h5). Verification is done by hashing the partial tree to obtain the root and checking it against + * h12, l4, 0 and h00. Verification is done by hashing the partial tree to obtain the root and checking it against * the obtained h15 hash. Additionally we store included hashes used in calculation and compare them to leaves hashes we got * (there can be a difference in obtained leaves ordering - that's why it's a set comparison not hashing leaves into a tree). * If both equalities hold, we can assume that l3 and l5 belong to the transaction with root h15. @@ -54,7 +52,7 @@ class PartialMerkleTree(val root: PartialTree) { * transaction and leaves that just keep hashes needed for calculation. Reason for this approach: during verification * it's easier to extract hashes used as a base for this tree. */ - sealed class PartialTree() { + sealed class PartialTree { class IncludedLeaf(val hash: SecureHash) : PartialTree() class Leaf(val hash: SecureHash) : PartialTree() class Node(val left: PartialTree, val right: PartialTree) : PartialTree() @@ -66,15 +64,31 @@ class PartialMerkleTree(val root: PartialTree) { * @param includeHashes Hashes that should be included in a partial tree. * @return Partial Merkle tree root. */ + @Throws(IllegalArgumentException::class, MerkleTreeException::class) fun build(merkleRoot: MerkleTree, includeHashes: List): PartialMerkleTree { val usedHashes = ArrayList() + require(zeroHash !in includeHashes) { "Zero hashes shouldn't be included in partial tree." } + checkFull(merkleRoot) // Throws MerkleTreeException if it is not a full binary tree. val tree = buildPartialTree(merkleRoot, includeHashes, usedHashes) - //Too much included hashes or different ones. + // Too many included hashes or different ones. if (includeHashes.size != usedHashes.size) throw MerkleTreeException("Some of the provided hashes are not in the tree.") return PartialMerkleTree(tree.second) } + // Check if a MerkleTree is full binary tree. Returns the height of the tree if full, otherwise throws exception. + private fun checkFull(tree: MerkleTree, level: Int = 0): Int { + return when (tree) { + is MerkleTree.Leaf -> level + is MerkleTree.Node -> { + val l1 = checkFull(tree.left, level+1) + val l2 = checkFull(tree.right, level+1) + if (l1 != l2) throw MerkleTreeException("Got not full binary tree.") + l1 + } + } + } + /** * @param root Root of full Merkle tree which is a base for a partial one. * @param includeHashes Hashes of leaves to be included in this partial tree. @@ -93,18 +107,17 @@ class PartialMerkleTree(val root: PartialTree) { usedHashes.add(root.value) Pair(true, PartialTree.IncludedLeaf(root.value)) } else Pair(false, PartialTree.Leaf(root.value)) - is MerkleTree.DuplicatedLeaf -> Pair(false, PartialTree.Leaf(root.value)) is MerkleTree.Node -> { val leftNode = buildPartialTree(root.left, includeHashes, usedHashes) val rightNode = buildPartialTree(root.right, includeHashes, usedHashes) if (leftNode.first or rightNode.first) { - //This node is on a path to some included leaves. Don't store hash. + // This node is on a path to some included leaves. Don't store hash. val newTree = PartialTree.Node(leftNode.second, rightNode.second) - return Pair(true, newTree) + Pair(true, newTree) } else { - //This node has no included leaves below. Cut the tree here and store a hash as a Leaf. + // This node has no included leaves below. Cut the tree here and store a hash as a Leaf. val newTree = PartialTree.Leaf(root.value) - return Pair(false, newTree) + Pair(false, newTree) } } } @@ -118,7 +131,7 @@ class PartialMerkleTree(val root: PartialTree) { fun verify(merkleRootHash: SecureHash, hashesToCheck: List): Boolean { val usedHashes = ArrayList() val verifyRoot = verify(root, usedHashes) - //It means that we obtained more/less hashes than needed or different sets of hashes. + // It means that we obtained more/fewer hashes than needed or different sets of hashes. if (hashesToCheck.groupBy { it } != usedHashes.groupBy { it }) return false return (verifyRoot == merkleRootHash) diff --git a/core/src/main/kotlin/net/corda/core/crypto/SecureHash.kt b/core/src/main/kotlin/net/corda/core/crypto/SecureHash.kt index f5bb961c72..b16d17ef89 100644 --- a/core/src/main/kotlin/net/corda/core/crypto/SecureHash.kt +++ b/core/src/main/kotlin/net/corda/core/crypto/SecureHash.kt @@ -19,6 +19,7 @@ sealed class SecureHash(bytes: ByteArray) : OpaqueBytes(bytes) { override fun toString() = BaseEncoding.base16().encode(bytes) fun prefixChars(prefixLen: Int = 6) = toString().substring(0, prefixLen) + fun hashConcat(other: SecureHash) = (this.bytes + other.bytes).sha256() // Like static methods in Java, except the 'companion' is a singleton that can have state. companion object { @@ -35,6 +36,7 @@ sealed class SecureHash(bytes: ByteArray) : OpaqueBytes(bytes) { @JvmStatic fun sha256(str: String) = sha256(str.toByteArray()) @JvmStatic fun randomSHA256() = sha256(newSecureRandom().generateSeed(32)) + val zeroHash = SecureHash.SHA256(ByteArray(32, { 0.toByte() })) } // In future, maybe SHA3, truncated hashes etc. diff --git a/core/src/main/kotlin/net/corda/core/transactions/MerkleTransaction.kt b/core/src/main/kotlin/net/corda/core/transactions/MerkleTransaction.kt index 1eacf56258..c0198ec456 100644 --- a/core/src/main/kotlin/net/corda/core/transactions/MerkleTransaction.kt +++ b/core/src/main/kotlin/net/corda/core/transactions/MerkleTransaction.kt @@ -1,39 +1,15 @@ package net.corda.core.transactions -import net.corda.core.contracts.Command -import net.corda.core.contracts.ContractState -import net.corda.core.contracts.StateRef -import net.corda.core.contracts.TransactionState -import net.corda.core.crypto.MerkleTreeException -import net.corda.core.crypto.PartialMerkleTree -import net.corda.core.crypto.SecureHash -import net.corda.core.crypto.sha256 +import net.corda.core.contracts.* +import net.corda.core.crypto.* +import net.corda.core.crypto.SecureHash.Companion.zeroHash import net.corda.core.serialization.createKryo import net.corda.core.serialization.extendKryoHash import net.corda.core.serialization.serialize import java.util.* -/** - * Build filtered transaction using provided filtering functions. - */ -fun WireTransaction.buildFilteredTransaction(filterFuns: FilterFuns): FilteredTransaction { - return FilteredTransaction.buildMerkleTransaction(this, filterFuns) -} - -/** - * Calculation of all leaves hashes that are needed for calculation of transaction id and partial Merkle branches. - */ -fun WireTransaction.calculateLeavesHashes(): List { - val resultHashes = ArrayList() - val entries = listOf(inputs, outputs, attachments, commands) - entries.forEach { it.mapTo(resultHashes, { x -> serializedHash(x) }) } - return resultHashes -} - -fun SecureHash.hashConcat(other: SecureHash) = (this.bytes + other.bytes).sha256() - fun serializedHash(x: T): SecureHash { - val kryo = extendKryoHash(createKryo()) //Dealing with HashMaps inside states. + val kryo = extendKryoHash(createKryo()) // Dealing with HashMaps inside states. return x.serialize(kryo).hash } @@ -42,55 +18,58 @@ fun serializedHash(x: T): SecureHash { * * See: https://en.wikipedia.org/wiki/Merkle_tree * - * Transaction is split into following blocks: inputs, outputs, commands, attachments' refs. Merkle Tree is kept in - * a recursive data structure. Building is done bottom up, from all leaves' hashes. - * If a row in a tree has an odd number of elements - the final hash is hashed with itself. + * Transaction is split into following blocks: inputs, attachments' refs, outputs, commands, notary, + * signers, tx type, timestamp. Merkle Tree is kept in a recursive data structure. Building is done bottom up, + * from all leaves' hashes. If number of leaves is not a power of two, the tree is padded with zero hashes. */ sealed class MerkleTree(val hash: SecureHash) { class Leaf(val value: SecureHash) : MerkleTree(value) class Node(val value: SecureHash, val left: MerkleTree, val right: MerkleTree) : MerkleTree(value) - //DuplicatedLeaf is storing a hash of the rightmost node that had to be duplicated to obtain the tree. - //That duplication can cause problems while building and verifying partial tree (especially for trees with duplicate - //attachments or commands). - class DuplicatedLeaf(val value: SecureHash) : MerkleTree(value) - - fun hashNodes(right: MerkleTree): MerkleTree { - val newHash = this.hash.hashConcat(right.hash) - return Node(newHash, this, right) - } companion object { + private fun isPow2(num: Int): Boolean = num and (num-1) == 0 + /** - * Merkle tree building using hashes. + * Merkle tree building using hashes, with zero hash padding to full power of 2. */ + @Throws(IllegalArgumentException::class) fun getMerkleTree(allLeavesHashes: List): MerkleTree { - val leaves = allLeavesHashes.map { MerkleTree.Leaf(it) } + val leaves = padWithZeros(allLeavesHashes).map { MerkleTree.Leaf(it) } return buildMerkleTree(leaves) } + // If number of leaves in the tree is not a power of 2, we need to pad it with zero hashes. + private fun padWithZeros(allLeavesHashes: List): List { + var n = allLeavesHashes.size + if (isPow2(n)) return allLeavesHashes + val paddedHashes = ArrayList(allLeavesHashes) + while (!isPow2(n)) { + paddedHashes.add(zeroHash) + n++ + } + return paddedHashes + } + /** * Tailrecursive function for building a tree bottom up. * @param lastNodesList MerkleTree nodes from previous level. * @return Tree root. */ private tailrec fun buildMerkleTree(lastNodesList: List): MerkleTree { - if (lastNodesList.size < 1) + if (lastNodesList.isEmpty()) throw MerkleTreeException("Cannot calculate Merkle root on empty hash list.") if (lastNodesList.size == 1) { return lastNodesList[0] //Root reached. } else { val newLevelHashes: MutableList = ArrayList() var i = 0 - while (i < lastNodesList.size) { + val n = lastNodesList.size + while (i < n) { val left = lastNodesList[i] - val n = lastNodesList.size - // If there is an odd number of elements at this level, - // the last element is hashed with itself and stored as a Leaf. - val right = when { - i + 1 > n - 1 -> MerkleTree.DuplicatedLeaf(lastNodesList[n - 1].hash) - else -> lastNodesList[i + 1] - } - val combined = left.hashNodes(right) + require(i+1 <= n-1) { "Sanity check: number of nodes should be even." } + val right = lastNodesList[i+1] + val newHash = left.hash.hashConcat(right.hash) + val combined = Node(newHash, left, right) newLevelHashes.add(combined) i += 2 } @@ -101,40 +80,67 @@ sealed class MerkleTree(val hash: SecureHash) { } /** - * Class that holds filtered leaves for a partial Merkle transaction. We assume mixed leaves types. + * Interface implemented by WireTransaction and FilteredLeaves. + * Property traversableList assures that we always calculate hashes in the same order, lets us define which + * fields of WireTransaction will be included in id calculation or partial merkle tree building. */ -class FilteredLeaves( - val inputs: List, - val outputs: List>, - val attachments: List, - val commands: List -) { - fun getFilteredHashes(): List { - val resultHashes = ArrayList() - val entries = listOf(inputs, outputs, attachments, commands) - entries.forEach { it.mapTo(resultHashes, { x -> serializedHash(x) }) } - return resultHashes - } +interface TraversableTransaction { + val inputs: List + val attachments: List + val outputs: List> + val commands: List + val notary: Party? + val mustSign: List + val type: TransactionType? + val timestamp: Timestamp? + + /** + * Traversing transaction fields with a list function over transaction contents. Used for leaves hashes calculation + * and user provided filtering and checking of filtered transaction. + */ + // We may want to specify our own behaviour on certain tx fields. + // Like if we include them at all, what to do with null values, if we treat list as one or not etc. for building + // torn-off transaction and id calculation. + val traversableList: List + get() { + val traverseList = mutableListOf(inputs, attachments, outputs, commands).flatten().toMutableList() + if (notary != null) traverseList.add(notary!!) + traverseList.addAll(mustSign) + if (type != null) traverseList.add(type!!) + if (timestamp != null) traverseList.add(timestamp!!) + return traverseList + } + + // Calculation of all leaves hashes that are needed for calculation of transaction id and partial Merkle branches. + fun calculateLeavesHashes(): List = traversableList.map { serializedHash(it) } } /** - * Holds filter functions on transactions fields. - * Functions are used to build a partial tree only out of some subset of original transaction fields. + * Class that holds filtered leaves for a partial Merkle transaction. We assume mixed leaf types, notice that every + * field from WireTransaction can be used in PartialMerkleTree calculation. */ -class FilterFuns( - val filterInputs: (StateRef) -> Boolean = { false }, - val filterOutputs: (TransactionState) -> Boolean = { false }, - val filterAttachments: (SecureHash) -> Boolean = { false }, - val filterCommands: (Command) -> Boolean = { false } -) { - fun genericFilter(elem: T): Boolean { - return when (elem) { - is StateRef -> filterInputs(elem) - is TransactionState<*> -> filterOutputs(elem) - is SecureHash -> filterAttachments(elem) - is Command -> filterCommands(elem) - else -> throw IllegalArgumentException("Wrong argument type: ${elem.javaClass}") - } +class FilteredLeaves( + override val inputs: List, + override val attachments: List, + override val outputs: List>, + override val commands: List, + override val notary: Party?, + override val mustSign: List, + override val type: TransactionType?, + override val timestamp: Timestamp? +) : TraversableTransaction { + /** + * Function that checks the whole filtered structure. + * Force type checking on a structure that we obtained, so we don't sign more than expected. + * Example: Oracle is implemented to check only for commands, if it gets an attachment and doesn't expect it - it can sign + * over a transaction with the attachment that wasn't verified. Of course it depends on how you implement it, but else -> false + * should solve a problem with possible later extensions to WireTransaction. + * @param checkingFun function that performs type checking on the structure fields and provides verification logic accordingly. + * @returns false if no elements were matched on a structure or checkingFun returned false. + */ + fun checkWithFun(checkingFun: (Any) -> Boolean): Boolean { + val checkList = traversableList.map { checkingFun(it) } + return (!checkList.isEmpty()) && checkList.all { true } } } @@ -151,18 +157,14 @@ class FilteredTransaction( /** * Construction of filtered transaction with Partial Merkle Tree. * @param wtx WireTransaction to be filtered. - * @param filterFuns filtering functions for inputs, outputs, attachments, commands. + * @param filtering filtering over the whole WireTransaction */ fun buildMerkleTransaction(wtx: WireTransaction, - filterFuns: FilterFuns + filtering: (Any) -> Boolean ): FilteredTransaction { - val filteredInputs = wtx.inputs.filter { filterFuns.genericFilter(it) } - val filteredOutputs = wtx.outputs.filter { filterFuns.genericFilter(it) } - val filteredAttachments = wtx.attachments.filter { filterFuns.genericFilter(it) } - val filteredCommands = wtx.commands.filter { filterFuns.genericFilter(it) } - val filteredLeaves = FilteredLeaves(filteredInputs, filteredOutputs, filteredAttachments, filteredCommands) - - val pmt = PartialMerkleTree.build(wtx.merkleTree, filteredLeaves.getFilteredHashes()) + val filteredLeaves = wtx.filterWithFun(filtering) + val merkleTree = wtx.getMerkleTree() + val pmt = PartialMerkleTree.build(merkleTree, filteredLeaves.calculateLeavesHashes()) return FilteredTransaction(filteredLeaves, pmt) } } @@ -170,10 +172,19 @@ class FilteredTransaction( /** * Runs verification of Partial Merkle Branch with merkleRootHash. */ + @Throws(MerkleTreeException::class) fun verify(merkleRootHash: SecureHash): Boolean { - val hashes: List = filteredLeaves.getFilteredHashes() - if (hashes.size == 0) + val hashes: List = filteredLeaves.calculateLeavesHashes() + if (hashes.isEmpty()) throw MerkleTreeException("Transaction without included leaves.") return partialMerkleTree.verify(merkleRootHash, hashes) } + + /** + * Runs verification of Partial Merkle Branch with merkleRootHash. Checks filteredLeaves with provided checkingFun. + */ + @Throws(MerkleTreeException::class) + fun verifyWithFunction(merkleRootHash: SecureHash, checkingFun: (Any) -> Boolean): Boolean { + return verify(merkleRootHash) && filteredLeaves.checkWithFun { checkingFun(it) } + } } diff --git a/core/src/main/kotlin/net/corda/core/transactions/WireTransaction.kt b/core/src/main/kotlin/net/corda/core/transactions/WireTransaction.kt index eb67965b46..1a8a40ab04 100644 --- a/core/src/main/kotlin/net/corda/core/transactions/WireTransaction.kt +++ b/core/src/main/kotlin/net/corda/core/transactions/WireTransaction.kt @@ -25,15 +25,15 @@ class WireTransaction( /** Pointers to the input states on the ledger, identified by (tx identity hash, output index). */ override val inputs: List, /** Hashes of the ZIP/JAR files that are needed to interpret the contents of this wire transaction. */ - val attachments: List, + override val attachments: List, outputs: List>, /** Ordered list of ([CommandData], [PublicKey]) pairs that instruct the contracts what to do. */ - val commands: List, + override val commands: List, notary: Party?, signers: List, type: TransactionType, timestamp: Timestamp? -) : BaseTransaction(inputs, outputs, notary, signers, type, timestamp) { +) : BaseTransaction(inputs, outputs, notary, signers, type, timestamp), TraversableTransaction { init { checkInvariants() } @@ -42,14 +42,7 @@ class WireTransaction( @Volatile @Transient private var cachedBytes: SerializedBytes? = null val serialized: SerializedBytes get() = cachedBytes ?: serialize().apply { cachedBytes = this } - //We need cashed leaves hashes and whole tree for an id and Partial Merkle Tree calculation. - @Volatile @Transient private var cachedLeavesHashes: List? = null - val allLeavesHashes: List get() = cachedLeavesHashes ?: calculateLeavesHashes().apply { cachedLeavesHashes = this } - - @Volatile @Transient var cachedTree: MerkleTree? = null - val merkleTree: MerkleTree get() = cachedTree ?: MerkleTree.getMerkleTree(allLeavesHashes).apply { cachedTree = this } - - override val id: SecureHash get() = merkleTree.hash + override val id: SecureHash by lazy { getMerkleTree().hash } companion object { fun deserialize(data: SerializedBytes, kryo: Kryo = THREAD_LOCAL_KRYO.get()): WireTransaction { @@ -91,6 +84,39 @@ class WireTransaction( return LedgerTransaction(resolvedInputs, outputs, authenticatedArgs, attachments, id, notary, mustSign, timestamp, type) } + /** + * Build filtered transaction using provided filtering functions. + */ + fun buildFilteredTransaction(filtering: (Any) -> Boolean): FilteredTransaction { + return FilteredTransaction.buildMerkleTransaction(this, filtering) + } + + /** + * Builds whole Merkle tree for a transaction. + */ + fun getMerkleTree(): MerkleTree { + return MerkleTree.getMerkleTree(calculateLeavesHashes()) + } + + /** + * Construction of partial transaction from WireTransaction based on filtering. + * @param filtering filtering over the whole WireTransaction + * @returns FilteredLeaves used in PartialMerkleTree calculation and verification. + */ + fun filterWithFun(filtering: (Any) -> Boolean): FilteredLeaves { + fun notNullFalse(elem: Any?): Any? = if(elem == null || !filtering(elem)) null else elem + return FilteredLeaves( + inputs.filter { filtering(it) }, + attachments.filter { filtering(it) }, + outputs.filter { filtering(it) }, + commands.filter { filtering(it) }, + notNullFalse(notary) as Party?, + mustSign.filter { filtering(it) }, + notNullFalse(type) as TransactionType?, + notNullFalse(timestamp) as Timestamp? + ) + } + override fun toString(): String { val buf = StringBuilder() buf.appendln("Transaction $id:") diff --git a/core/src/test/kotlin/net/corda/core/crypto/PartialMerkleTreeTest.kt b/core/src/test/kotlin/net/corda/core/crypto/PartialMerkleTreeTest.kt index 53ac8e0f33..b8b0b3bc9a 100644 --- a/core/src/test/kotlin/net/corda/core/crypto/PartialMerkleTreeTest.kt +++ b/core/src/test/kotlin/net/corda/core/crypto/PartialMerkleTreeTest.kt @@ -3,26 +3,22 @@ package net.corda.core.crypto import com.esotericsoftware.kryo.serializers.MapSerializer import net.corda.contracts.asset.Cash -import net.corda.core.contracts.DOLLARS -import net.corda.core.contracts.`issued by` +import net.corda.core.contracts.* +import net.corda.core.crypto.SecureHash.Companion.zeroHash import net.corda.core.serialization.* import net.corda.core.transactions.* -import net.corda.core.utilities.DUMMY_PUBKEY_1 -import net.corda.testing.ALICE_PUBKEY +import net.corda.core.utilities.* import net.corda.testing.MEGA_CORP import net.corda.testing.MEGA_CORP_PUBKEY import net.corda.testing.ledger import org.junit.Test import java.util.* -import kotlin.test.assertEquals -import kotlin.test.assertFailsWith -import kotlin.test.assertFalse -import kotlin.test.assertTrue +import kotlin.test.* class PartialMerkleTreeTest { val nodes = "abcdef" val hashed = nodes.map { it.serialize().sha256() } - val root = SecureHash.parse("F6D8FB3720114F8D040D64F633B0D9178EB09A55AA7D62FAE1A070D1BF561051") + val expectedRoot = MerkleTree.getMerkleTree(hashed.toMutableList() + listOf(zeroHash, zeroHash)).hash val merkleTree = MerkleTree.getMerkleTree(hashed) val testLedger = ledger { @@ -33,22 +29,30 @@ class PartialMerkleTreeTest { owner = MEGA_CORP_PUBKEY ) } + output("dummy cash 1") { + Cash.State( + amount = 900.DOLLARS `issued by` MEGA_CORP.ref(1, 1), + owner = DUMMY_PUBKEY_1 + ) + } } transaction { input("MEGA_CORP cash") output("MEGA_CORP cash".output().copy(owner = DUMMY_PUBKEY_1)) command(MEGA_CORP_PUBKEY) { Cash.Commands.Move() } + timestamp(TEST_TX_TIME) this.verifies() } } - val testTx = testLedger.interpreter.transactionsToVerify[0] + val txs = testLedger.interpreter.transactionsToVerify + val testTx = txs[0] - //Building full Merkle Tree tests. + // Building full Merkle Tree tests. @Test fun `building Merkle tree with 6 nodes - no rightmost nodes`() { - assertEquals(root, merkleTree.hash) + assertEquals(expectedRoot, merkleTree.hash) } @Test @@ -67,25 +71,70 @@ class PartialMerkleTreeTest { fun `building Merkle tree odd number of nodes`() { val odd = hashed.subList(0, 3) val h1 = hashed[0].hashConcat(hashed[1]) - val h2 = hashed[2].hashConcat(hashed[2]) + val h2 = hashed[2].hashConcat(zeroHash) val expected = h1.hashConcat(h2) val mt = MerkleTree.getMerkleTree(odd) assertEquals(mt.hash, expected) } + @Test + fun `check full tree`() { + val h = SecureHash.randomSHA256() + val left = MerkleTree.Node(h, MerkleTree.Node(h, MerkleTree.Leaf(h), MerkleTree.Leaf(h)), + MerkleTree.Node(h, MerkleTree.Leaf(h), MerkleTree.Leaf(h))) + val right = MerkleTree.Node(h, MerkleTree.Leaf(h), MerkleTree.Leaf(h)) + val tree = MerkleTree.Node(h, left, right) + assertFailsWith { PartialMerkleTree.build(tree, listOf(h)) } + PartialMerkleTree.build(right, listOf(h, h)) // Node and two leaves. + PartialMerkleTree.build(MerkleTree.Leaf(h), listOf(h)) // Just a leaf. + } + @Test fun `building Merkle tree for a transaction`() { - val filterFuns = FilterFuns( - filterCommands = { x -> ALICE_PUBKEY in x.signers }, - filterOutputs = { true }, - filterInputs = { true }) - val mt = testTx.buildFilteredTransaction(filterFuns) + fun filtering(elem: Any): Boolean { + return when (elem) { + is StateRef -> true + is TransactionState<*> -> elem.data.participants[0].keys == DUMMY_PUBKEY_1.keys + is Command -> MEGA_CORP_PUBKEY in elem.signers + is Timestamp -> true + is CompositeKey -> elem == MEGA_CORP_PUBKEY + else -> false + } + } + val mt = testTx.buildFilteredTransaction(::filtering) + val leaves = mt.filteredLeaves val d = WireTransaction.deserialize(testTx.serialized) assertEquals(testTx.id, d.id) + assertEquals(1, leaves.commands.size) + assertEquals(1, leaves.outputs.size) + assertEquals(1, leaves.inputs.size) + assertEquals(1, leaves.mustSign.size) + assertEquals(0, leaves.attachments.size) + assertTrue(mt.filteredLeaves.timestamp != null) + assertEquals(null, mt.filteredLeaves.type) + assertEquals(null, mt.filteredLeaves.notary) assert(mt.verify(testTx.id)) } - //Partial Merkle Tree building tests + @Test + fun `same transactions with different notaries have different ids`() { + val wtx1 = makeSimpleCashWtx(DUMMY_NOTARY) + val wtx2 = makeSimpleCashWtx(MEGA_CORP) + assertNotEquals(wtx1.id, wtx2.id) + } + + @Test + fun `nothing filtered`() { + val mt = testTx.buildFilteredTransaction( {false} ) + assertTrue(mt.filteredLeaves.attachments.isEmpty()) + assertTrue(mt.filteredLeaves.commands.isEmpty()) + assertTrue(mt.filteredLeaves.inputs.isEmpty()) + assertTrue(mt.filteredLeaves.outputs.isEmpty()) + assertTrue(mt.filteredLeaves.timestamp == null) + assertFailsWith { mt.verify(testTx.id) } + } + + // Partial Merkle Tree building tests @Test fun `build Partial Merkle Tree, only left nodes branch`() { val inclHashes = listOf(hashed[3], hashed[5]) @@ -137,7 +186,7 @@ class PartialMerkleTreeTest { @Test fun `verify Partial Merkle Tree - duplicate leaves failure`() { - val mt = MerkleTree.getMerkleTree(hashed.subList(0, 5)) //Odd number of leaves. Last one is duplicated. + val mt = MerkleTree.getMerkleTree(hashed.subList(0, 5)) // Odd number of leaves. Last one is duplicated. val inclHashes = arrayListOf(hashed[3], hashed[4]) val pmt = PartialMerkleTree.build(mt, inclHashes) inclHashes.add(hashed[4]) @@ -162,11 +211,24 @@ class PartialMerkleTreeTest { @Test fun `hash map serialization`() { val hm1 = hashMapOf("a" to 1, "b" to 2, "c" to 3, "e" to 4) - assert(serializedHash(hm1) == serializedHash(hm1.serialize().deserialize())) //It internally uses the ordered HashMap extension. + assert(serializedHash(hm1) == serializedHash(hm1.serialize().deserialize())) // It internally uses the ordered HashMap extension. val kryo = extendKryoHash(createKryo()) assertTrue(kryo.getSerializer(HashMap::class.java) is OrderedSerializer) assertTrue(kryo.getSerializer(LinkedHashMap::class.java) is MapSerializer) val hm2 = hm1.serialize(kryo).deserialize(kryo) assert(hm1.hashCode() == hm2.hashCode()) } + + private fun makeSimpleCashWtx(notary: Party, timestamp: Timestamp? = null, attachments: List = emptyList()): WireTransaction { + return WireTransaction( + inputs = testTx.inputs, + attachments = attachments, + outputs = testTx.outputs, + commands = testTx.commands, + notary = notary, + signers = listOf(MEGA_CORP_PUBKEY, DUMMY_PUBKEY_1), + type = TransactionType.General(), + timestamp = timestamp + ) + } } diff --git a/docs/source/merkle-trees.rst b/docs/source/merkle-trees.rst index 23b1b9e149..6c8378fa1f 100644 --- a/docs/source/merkle-trees.rst +++ b/docs/source/merkle-trees.rst @@ -15,17 +15,17 @@ You can read more on the concept `here Boolean``. .. container:: codeset .. sourcecode:: kotlin - val partialTx = ... + val partialTx = ... val oracle: Party = ... - fun filterCommands(c: Command) = oracle.owningKey in c.signers && c.value is Fix - val filterFuns = FilterFuns(filterCommands = ::filterCommands) + fun filtering(elem: Any): Boolean { + return when (elem) { + is Command -> oracleParty.owningKey in elem.signers && elem.value is Fix + else -> false + } + } Assuming that we already assembled partialTx with some commands and know the identity of Oracle service, -we pass filtering function over commands - ``filterCommands`` to ``FilterFuns``. It filters only -commands of type ``Fix`` as in IRSDemo example. Then we can construct ``FilteredTransaction``: +we construct filtering function over commands - ``filtering``. It performs type checking and filters only ``Fix`` commands +as in IRSDemo example. Then we can construct ``FilteredTransaction``: .. container:: codeset .. sourcecode:: kotlin val wtx: WireTransaction = partialTx.toWireTransaction() - val ftx = FilteredTransaction.buildMerkleTransaction(wtx, filterFuns) + val ftx: FilteredTransaction = wtx.buildFilteredTransaction(filtering) -In the Oracle example this step takes place in ``RatesFixFlow``: +In the Oracle example this step takes place in ``RatesFixFlow`` by overriding ``filtering`` function, see: :ref:`filtering_ref` -.. container:: codeset - - .. sourcecode:: kotlin - - val flow = RatesFixFlow(partialTx, filterFuns, oracle, fixOf, "0.675".bd, "0.1".bd) ``FilteredTransaction`` holds ``filteredLeaves`` (data that we wanted to reveal) and Merkle branch for them. @@ -87,14 +87,21 @@ In the Oracle example this step takes place in ``RatesFixFlow``: .. sourcecode:: kotlin - // Getting included commands, inputs, outputs, attachments. + // Direct accsess to included commands, inputs, outputs, attachments etc. val cmds: List = ftx.filteredLeaves.commands val ins: List = ftx.filteredLeaves.inputs - val outs: List> = ftx.filteredLeaves.outputs - val attchs: List = ftx.filteredLeaves.attachments + val timestamp: Timestamp? = ftx.filteredLeaves.timestamp + ... +.. literalinclude:: ../../samples/irs-demo/src/main/kotlin/net/corda/irs/api/NodeInterestRates.kt + :language: kotlin + :start-after: DOCSTART 1 + :end-before: DOCEND 1 -If you want to verify obtained ``FilteredTransaction`` all you need is the root hash of the full transaction: +Above code snippet is taken from ``NodeInterestRates.kt`` file and implements a signing part of an Oracle. +You can check only leaves using ``leaves.checkWithFun { check(it) }`` and then verify obtained ``FilteredTransaction`` +to see if data from ``PartialMerkleTree`` belongs to ``WireTransaction`` with provided ``id``. All you need is the root hash +of the full transaction: .. container:: codeset @@ -104,6 +111,13 @@ If you want to verify obtained ``FilteredTransaction`` all you need is the root throw MerkleTreeException("Rate Fix Oracle: Couldn't verify partial Merkle tree.") } +Or combine the two steps together: + +.. container:: codeset + + .. sourcecode:: kotlin + + ftx.verifyWithFunction(merkleRoot, ::check) .. note:: The way the ``FilteredTransaction`` is constructed ensures that after signing of the root hash it's impossible to add or remove leaves. However, it can happen that having transaction with multiple commands one party reveals only subset of them to the Oracle. diff --git a/docs/source/oracles.rst b/docs/source/oracles.rst index 7150d273dd..641cadb3b1 100644 --- a/docs/source/oracles.rst +++ b/docs/source/oracles.rst @@ -239,8 +239,11 @@ those for ``NodeInterestRates.Oracle``. :start-after: DOCSTART 1 :end-before: DOCEND 1 -You'll note that the ``FixSignFlow`` requires a ``FilterFuns`` instance with the appropriate filter to include only -the ``Fix`` commands. You can find a further explanation of this in :doc:`merkle-trees`. +You'll note that the ``FixSignFlow`` requires a ``FilterTransaction`` instance which includes only ``Fix`` commands. +You can find a further explanation of this in :doc:`merkle-trees`. Below you will see how to build such transaction with +hidden fields. + +.. _filtering_ref: Using an oracle --------------- @@ -260,8 +263,9 @@ As you can see, this: 2. Does some quick validation. 3. Adds the command to the transaction containing the fact to be signed for by the oracle. 4. Calls an extension point that allows clients to generate output states based on the fact from the oracle. -5. Requests the signature from the oracle using the client sub-flow for signing from above. -6. Adds the signature returned from the oracle. +5. Builds filtered transaction based on filtering function extended from ``RatesFixFlow``. +6. Requests the signature from the oracle using the client sub-flow for signing from above. +7. Adds the signature returned from the oracle. Here's an example of it in action from ``FixingFlow.Fixer``. @@ -269,3 +273,8 @@ Here's an example of it in action from ``FixingFlow.Fixer``. :language: kotlin :start-after: DOCSTART 1 :end-before: DOCEND 1 + +.. note:: + When overriding be careful when making the sub-class an anonymous or inner class (object declarations in Kotlin), + because that kind of classes can access variables from the enclosing scope and cause serialization problems when + checkpointed. diff --git a/docs/source/resources/merkleTree.png b/docs/source/resources/merkleTree.png index 696f5104504ca964273dab39a890452d8a7c4c6f..6aa07752b0daf0f4af34d3a61788543d91a1dd66 100644 GIT binary patch literal 22627 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 literal 15642 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 SyBqw3cqIK)sz^fD>wf?-Ose|; diff --git a/docs/source/resources/partialMerkle.png b/docs/source/resources/partialMerkle.png index a2c5af7a2350d95224f4cb838e6d9e1696e304bc..c99030f38ba05717f5a7b79f067197edeeb369eb 100644 GIT binary patch literal 18381 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 literal 8741 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 -p{zW38ITE@*aRW8)m)3V$d46&T70 zK~FMS79(1K4ql+Pw{Wj*f4r)QTFJsRyYvlOO7B32*~(tRU5Un_&hK!egAq`~Unv+V zRiNK*I-C#Tg7e!h69N-ijD50*|3_VlcEx4ImdB_8iveXJ8keO4dOex0&GeWlkSZf_ z$A{}NlsaH?Sr)reFpTu{ExXf^BmDUy<^AFPnT96b9!fNfDm%k}S0^!2P8Spv!vU>2 zb3R1mpumTLa7{dfx8QZ#L?GZ0K!R3!tSB%4HgeZ*{vW^QCjJZA1+cn85zG}Oi)e7} zoDe>sh_4qMA1wJtZ|9x-j#M?PSjY$UXEw@dlv*F~_)a(Polw4&XH_R^0bp}pL98K6 zm0g;cE$M9!ir3mp#4~TdRet@zt$wB@?`!X5rjJBh^+|TwHirBplgW-@-&jj-KGtq= zI^HfgK4}3672F3i)Q5-Q;9WoYOM)9t8XL26b}o3D9xXMWLUrN5UXL+vif5$FU3xqQ z?5t>V2iVmc9c_oJ{v9P=Z;$V&_MX{NAccPknB-veec*g2WTySrInTib+u6zL%UUN* zv8tj|SC^-?*v9pz6EIF`q?(X@H)fAMR$ef*ZAl2iTy^nTMFkI{Z~yo zDy$iZHR2xMsV$YJLp-g0hA=xOx2dwnE~?$OQFEX#R9Z(HCnY&DR9$lB^LTS!+-0tw zTX9{Ky2p;I4Q;$97XLVE>|%<1;>QNH_c#wrXU7%JT=pf$#TiAqyT-UXo>R1wrGGLK zWv1OKR6Dc2sdIPRt;Nm`q6!;!bkAqBEll(K`(TKzOqLS7%&J-LVo?ZZ7(HYJt3LRTlRr`S8;uG?0x0=b;I9UWJVKe zc_Nw5=GjnO-^D5&r!Bri4cDhPrp*STwX2l#y=@3xjiXFSVP(JTxjkA9Uj zbKlo)VzY>Yf4r}h_xxYD&?nIny$9jJ`CchymhO3{HNvE7^cLNR(ngE+$Pb#weN-qa zxg9vA>J_DT>pFf4Ez?K~Rc3BWa#|%~dvypJav@VJ^X8#2LlPP@r9sfhj{kur&_#hG pQU+YYAZUyH=LPuSL;dzKC6-RqtXa-H7ks4v8R(d5ztnUg{6B!v`R4!t diff --git a/samples/irs-demo/src/main/kotlin/net/corda/irs/api/NodeInterestRates.kt b/samples/irs-demo/src/main/kotlin/net/corda/irs/api/NodeInterestRates.kt index b172a9768d..b524dedf9b 100644 --- a/samples/irs-demo/src/main/kotlin/net/corda/irs/api/NodeInterestRates.kt +++ b/samples/irs-demo/src/main/kotlin/net/corda/irs/api/NodeInterestRates.kt @@ -192,31 +192,27 @@ object NodeInterestRates { if (!ftx.verify(merkleRoot)) { throw MerkleTreeException("Rate Fix Oracle: Couldn't verify partial Merkle tree.") } - - // Reject if we have something different than only commands. - val leaves = ftx.filteredLeaves - require(leaves.inputs.isEmpty() && leaves.outputs.isEmpty() && leaves.attachments.isEmpty()) - - val fixes: List = ftx.filteredLeaves.commands. - filter { identity.owningKey in it.signers && it.value is Fix }. - map { it.value as Fix } - - // Reject signing attempt if we received more commands than we should. - if (fixes.size != ftx.filteredLeaves.commands.size) - throw IllegalArgumentException() - - // Reject this signing attempt if there are no commands of the right kind. - if (fixes.isEmpty()) - throw IllegalArgumentException() - - // For each fix, verify that the data is correct. - val knownFixes = knownFixes // Snapshot - for (fix in fixes) { + // Performing validation of obtained FilteredLeaves. + fun commandValidator(elem: Command): Boolean { + if (!(identity.owningKey in elem.signers && elem.value is Fix)) + throw IllegalArgumentException("Oracle received unknown command (not in signers or not Fix).") + val fix = elem.value as Fix val known = knownFixes[fix.of] if (known == null || known != fix) throw UnknownFix(fix.of) + return true } + fun check(elem: Any): Boolean { + return when (elem) { + is Command -> commandValidator(elem) + else -> throw IllegalArgumentException("Oracle received data of different type than expected.") + } + } + val leaves = ftx.filteredLeaves + if (!leaves.checkWithFun(::check)) + throw IllegalArgumentException() + // It all checks out, so we can return a signature. // // Note that we will happily sign an invalid transaction, as we are only being presented with a filtered diff --git a/samples/irs-demo/src/main/kotlin/net/corda/irs/flows/FixingFlow.kt b/samples/irs-demo/src/main/kotlin/net/corda/irs/flows/FixingFlow.kt index c34dbb0ac7..67245913af 100644 --- a/samples/irs-demo/src/main/kotlin/net/corda/irs/flows/FixingFlow.kt +++ b/samples/irs-demo/src/main/kotlin/net/corda/irs/flows/FixingFlow.kt @@ -10,7 +10,6 @@ import net.corda.core.node.NodeInfo import net.corda.core.node.PluginServiceHub import net.corda.core.node.services.ServiceType import net.corda.core.seconds -import net.corda.core.transactions.FilterFuns import net.corda.core.transactions.TransactionBuilder import net.corda.core.utilities.ProgressTracker import net.corda.core.utilities.trace @@ -68,12 +67,8 @@ object FixingFlow { val oracle = serviceHub.networkMapCache.getNodesWithService(handshake.payload.oracleType).first() val oracleParty = oracle.serviceIdentities(handshake.payload.oracleType).first() - // TODO Could it be solved in better way, move filtering here not in RatesFixFlow? // DOCSTART 1 - fun filterCommands(c: Command) = oracleParty.owningKey in c.signers && c.value is Fix - - val filterFuns = FilterFuns(filterCommands = ::filterCommands) - val addFixing = object : RatesFixFlow(ptx, filterFuns, oracleParty, fixOf, BigDecimal.ZERO, BigDecimal.ONE) { + val addFixing = object : RatesFixFlow(ptx, oracleParty, fixOf, BigDecimal.ZERO, BigDecimal.ONE) { @Suspendable override fun beforeSigning(fix: Fix) { newDeal.generateFix(ptx, StateAndRef(txState, handshake.payload.ref), fix) @@ -82,6 +77,14 @@ object FixingFlow { // to have one. ptx.setTime(serviceHub.clock.instant(), 30.seconds) } + + @Suspendable + override fun filtering(elem: Any): Boolean { + return when (elem) { + is Command -> oracleParty.owningKey in elem.signers && elem.value is Fix + else -> false + } + } } subFlow(addFixing) // DOCEND 1 diff --git a/samples/irs-demo/src/main/kotlin/net/corda/irs/flows/RatesFixFlow.kt b/samples/irs-demo/src/main/kotlin/net/corda/irs/flows/RatesFixFlow.kt index 237264cfc8..2bf9be5e1e 100644 --- a/samples/irs-demo/src/main/kotlin/net/corda/irs/flows/RatesFixFlow.kt +++ b/samples/irs-demo/src/main/kotlin/net/corda/irs/flows/RatesFixFlow.kt @@ -7,7 +7,6 @@ import net.corda.core.crypto.DigitalSignature import net.corda.core.crypto.Party import net.corda.core.crypto.SecureHash import net.corda.core.flows.FlowLogic -import net.corda.core.transactions.FilterFuns import net.corda.core.transactions.FilteredTransaction import net.corda.core.transactions.TransactionBuilder import net.corda.core.utilities.ProgressTracker @@ -28,12 +27,10 @@ import java.util.* * @throws FixOutOfRange if the returned fix was further away from the expected rate by the given amount. */ open class RatesFixFlow(protected val tx: TransactionBuilder, - /** Filtering functions over transaction, used to build partial transaction presented to oracle. */ - private val filterFuns: FilterFuns, - private val oracle: Party, - private val fixOf: FixOf, - private val expectedRate: BigDecimal, - private val rateTolerance: BigDecimal, + protected val oracle: Party, + protected val fixOf: FixOf, + protected val expectedRate: BigDecimal, + protected val rateTolerance: BigDecimal, override val progressTracker: ProgressTracker = RatesFixFlow.tracker(fixOf.name)) : FlowLogic() { companion object { @@ -59,7 +56,8 @@ open class RatesFixFlow(protected val tx: TransactionBuilder, tx.addCommand(fix, oracle.owningKey) beforeSigning(fix) progressTracker.currentStep = SIGNING - val signature = subFlow(FixSignFlow(tx, oracle, filterFuns)) + val mtx = tx.toWireTransaction().buildFilteredTransaction({ filtering(it) }) + val signature = subFlow(FixSignFlow(tx, oracle, mtx)) tx.addSignatureUnchecked(signature) } // DOCEND 2 @@ -72,6 +70,15 @@ open class RatesFixFlow(protected val tx: TransactionBuilder, protected open fun beforeSigning(fix: Fix) { } + /** + * Filtering functions over transaction, used to build partial transaction with partial Merkle tree presented to oracle. + * When overriding be careful when making the sub-class an anonymous or inner class (object declarations in Kotlin), + * because that kind of classes can access variables from the enclosing scope and cause serialization problems when + * checkpointed. + */ + @Suspendable + protected open fun filtering(elem: Any): Boolean = false + private fun checkFixIsNearExpected(fix: Fix) { val delta = (fix.value - expectedRate).abs() if (delta > rateTolerance) { @@ -97,13 +104,12 @@ open class RatesFixFlow(protected val tx: TransactionBuilder, } } - class FixSignFlow(val tx: TransactionBuilder, val oracle: Party, val filterFuns: FilterFuns) : FlowLogic() { + class FixSignFlow(val tx: TransactionBuilder, val oracle: Party, + val partialMerkleTx: FilteredTransaction) : FlowLogic() { @Suspendable override fun call(): DigitalSignature.LegallyIdentifiable { val wtx = tx.toWireTransaction() - val partialMerkleTx = FilteredTransaction.buildMerkleTransaction(wtx, filterFuns) val rootHash = wtx.id - val resp = sendAndReceive(oracle, SignRequest(rootHash, partialMerkleTx)) return resp.unwrap { sig -> check(sig.signer == oracle) diff --git a/samples/irs-demo/src/test/kotlin/net/corda/irs/testing/NodeInterestRatesTest.kt b/samples/irs-demo/src/test/kotlin/net/corda/irs/testing/NodeInterestRatesTest.kt index a837a22fc7..afed9222a4 100644 --- a/samples/irs-demo/src/test/kotlin/net/corda/irs/testing/NodeInterestRatesTest.kt +++ b/samples/irs-demo/src/test/kotlin/net/corda/irs/testing/NodeInterestRatesTest.kt @@ -11,10 +11,10 @@ import net.corda.core.crypto.Party import net.corda.core.crypto.generateKeyPair import net.corda.core.getOrThrow import net.corda.core.node.services.ServiceInfo -import net.corda.core.transactions.FilterFuns -import net.corda.core.transactions.FilteredTransaction +import net.corda.core.transactions.TransactionBuilder import net.corda.core.utilities.DUMMY_NOTARY import net.corda.core.utilities.LogHelper +import net.corda.core.utilities.ProgressTracker import net.corda.irs.api.NodeInterestRates import net.corda.irs.flows.RatesFixFlow import net.corda.node.utilities.configureDatabase @@ -30,6 +30,7 @@ import org.junit.Assert import org.junit.Before import org.junit.Test import java.io.Closeable +import java.math.BigDecimal import java.time.Clock import kotlin.test.assertEquals import kotlin.test.assertFailsWith @@ -53,6 +54,15 @@ class NodeInterestRatesTest { lateinit var dataSource: Closeable lateinit var database: Database + fun fixCmdFilter(elem: Any): Boolean { + return when (elem) { + is Command -> oracle.identity.owningKey in elem.signers && elem.value is Fix + else -> false + } + } + + fun filterCmds(elem: Any): Boolean = elem is Command + @Before fun setUp() { val dataSourceAndDatabase = configureDatabase(makeTestDataSourceProperties()) @@ -120,11 +130,17 @@ class NodeInterestRatesTest { databaseTransaction(database) { val tx = makeTX() val wtx1 = tx.toWireTransaction() - val ftx1 = FilteredTransaction.buildMerkleTransaction(wtx1, FilterFuns(filterOutputs = { true })) + fun filterAllOutputs(elem: Any): Boolean { + return when (elem) { + is TransactionState -> true + else -> false + } + } + val ftx1 = wtx1.buildFilteredTransaction(::filterAllOutputs) assertFailsWith { oracle.sign(ftx1, wtx1.id) } tx.addCommand(Cash.Commands.Move(), ALICE_PUBKEY) val wtx2 = tx.toWireTransaction() - val ftx2 = FilteredTransaction.buildMerkleTransaction(wtx2, FilterFuns(filterCommands = { true })) + val ftx2 = wtx2.buildFilteredTransaction { x -> filterCmds(x) } assertFalse(wtx1.id == wtx2.id) assertFailsWith { oracle.sign(ftx2, wtx2.id) } } @@ -138,9 +154,7 @@ class NodeInterestRatesTest { tx.addCommand(fix, oracle.identity.owningKey) // Sign successfully. val wtx = tx.toWireTransaction() - fun filterCommands(c: Command) = oracle.identity.owningKey in c.signers && c.value is Fix - val filterFuns = FilterFuns(filterCommands = ::filterCommands) - val ftx = FilteredTransaction.buildMerkleTransaction(wtx, filterFuns) + val ftx = wtx.buildFilteredTransaction { x -> fixCmdFilter(x) } val signature = oracle.sign(ftx, wtx.id) tx.checkAndAddSignature(signature) } @@ -154,9 +168,7 @@ class NodeInterestRatesTest { val badFix = Fix(fixOf, "0.6789".bd) tx.addCommand(badFix, oracle.identity.owningKey) val wtx = tx.toWireTransaction() - fun filterCommands(c: Command) = oracle.identity.owningKey in c.signers && c.value is Fix - val filterFuns = FilterFuns(filterCommands = ::filterCommands) - val ftx = FilteredTransaction.buildMerkleTransaction(wtx, filterFuns) + val ftx = wtx.buildFilteredTransaction { x -> fixCmdFilter(x) } val e1 = assertFailsWith { oracle.sign(ftx, wtx.id) } assertEquals(fixOf, e1.fix) } @@ -167,15 +179,28 @@ class NodeInterestRatesTest { databaseTransaction(database) { val tx = makeTX() val fix = oracle.query(listOf(NodeInterestRates.parseFixOf("LIBOR 2016-03-16 1M")), clock.instant()).first() + fun filtering(elem: Any): Boolean { + return when (elem) { + is Command -> oracle.identity.owningKey in elem.signers && elem.value is Fix + is TransactionState -> true + else -> false + } + } tx.addCommand(fix, oracle.identity.owningKey) val wtx = tx.toWireTransaction() - fun filterCommands(c: Command) = oracle.identity.owningKey in c.signers && c.value is Fix - val filterFuns = FilterFuns(filterCommands = ::filterCommands, filterOutputs = { true }) - val ftx = FilteredTransaction.buildMerkleTransaction(wtx, filterFuns) + val ftx = wtx.buildFilteredTransaction(::filtering) assertFailsWith { oracle.sign(ftx, wtx.id) } } } + @Test + fun `empty partial transaction to sign`() { + val tx = makeTX() + val wtx = tx.toWireTransaction() + val ftx = wtx.buildFilteredTransaction({ false }) + assertFailsWith { oracle.sign(ftx, wtx.id) } + } + @Test fun `partial tree verification exception`() { databaseTransaction(database) { @@ -183,7 +208,7 @@ class NodeInterestRatesTest { val wtx1 = tx.toWireTransaction() tx.addCommand(Cash.Commands.Move(), ALICE_PUBKEY) val wtx2 = tx.toWireTransaction() - val ftx2 = FilteredTransaction.buildMerkleTransaction(wtx2, FilterFuns(filterCommands = { true })) + val ftx2 = wtx2.buildFilteredTransaction { x -> filterCmds(x) } assertFalse(wtx1.id == wtx2.id) assertFailsWith { oracle.sign(ftx2, wtx1.id) } } @@ -200,9 +225,7 @@ class NodeInterestRatesTest { val tx = TransactionType.General.Builder(null) val fixOf = NodeInterestRates.parseFixOf("LIBOR 2016-03-16 1M") val oracle = n2.info.serviceIdentities(NodeInterestRates.type).first() - fun filterCommands(c: Command) = oracle.owningKey in c.signers && c.value is Fix - val filterFuns = FilterFuns(filterCommands = ::filterCommands) - val flow = RatesFixFlow(tx, filterFuns, oracle, fixOf, "0.675".bd, "0.1".bd) + val flow = FilteredRatesFlow(tx, oracle, fixOf, "0.675".bd, "0.1".bd) LogHelper.setLevel("rates") net.runNetwork() val future = n1.services.startFlow(flow).resultFuture @@ -214,5 +237,19 @@ class NodeInterestRatesTest { assertEquals("0.678".bd, fix.value) } + class FilteredRatesFlow(tx: TransactionBuilder, + oracle: Party, + fixOf: FixOf, + expectedRate: BigDecimal, + rateTolerance: BigDecimal, + progressTracker: ProgressTracker = RatesFixFlow.tracker(fixOf.name)) : RatesFixFlow(tx, oracle, fixOf, expectedRate, rateTolerance, progressTracker) { + override fun filtering(elem: Any): Boolean { + return when (elem) { + is Command -> oracle.owningKey in elem.signers && elem.value is Fix + else -> false + } + } + } + private fun makeTX() = TransactionType.General.Builder(DUMMY_NOTARY).withItems(1000.DOLLARS.CASH `issued by` DUMMY_CASH_ISSUER `owned by` ALICE_PUBKEY `with notary` DUMMY_NOTARY) } From cc20a10225d4a0ac7936771b7cd068ed2615b059 Mon Sep 17 00:00:00 2001 From: Mike Hearn Date: Fri, 6 Jan 2017 10:42:04 +0100 Subject: [PATCH 04/33] Improve the flow commit API. Make FinalityFlow do more, and be used more consistently. Add a new waitForLedgerCommit API that is intended to be used at the end of flows, or at any other point where a flow wants to wait for a transaction to finalise (but the finalisation flow is being done by someone else). Update the docs a bit. --- .../kotlin/net/corda/core/flows/FlowLogic.kt | 12 ++ .../net/corda/core/flows/FlowStateMachine.kt | 5 + .../net/corda/core/messaging/Messaging.kt | 3 +- .../kotlin/net/corda/core/node/ServiceHub.kt | 5 +- .../net/corda/core/node/services/Services.kt | 20 ++- .../corda/flows/BroadcastTransactionFlow.kt | 11 +- .../kotlin/net/corda/flows/FinalityFlow.kt | 117 ++++++++++++++---- .../main/kotlin/net/corda/flows/NotaryFlow.kt | 1 - .../corda/flows/ResolveTransactionsFlow.kt | 11 +- .../corda/docs/FxTransactionBuildTutorial.kt | 2 +- .../docs/WorkflowTransactionBuildTutorial.kt | 17 +-- docs/source/flow-state-machines.rst | 96 +++++++------- docs/source/release-notes.rst | 4 + .../main/kotlin/net/corda/flows/CashFlow.kt | 5 +- .../net/corda/flows/TwoPartyTradeFlow.kt | 112 ++++++----------- node/build.gradle | 10 +- .../persistence/DataVendingService.kt | 1 - .../services/statemachine/FlowIORequest.kt | 13 +- .../statemachine/FlowStateMachineImpl.kt | 20 ++- .../statemachine/StateMachineManager.kt | 68 +++++++++- .../node/services/vault/NodeVaultService.kt | 7 -- .../statemachine/StateMachineManagerTests.kt | 46 ++++++- .../net/corda/traderdemo/flow/SellerFlow.kt | 5 +- 23 files changed, 374 insertions(+), 217 deletions(-) diff --git a/core/src/main/kotlin/net/corda/core/flows/FlowLogic.kt b/core/src/main/kotlin/net/corda/core/flows/FlowLogic.kt index 519a1c0149..ea32e377af 100644 --- a/core/src/main/kotlin/net/corda/core/flows/FlowLogic.kt +++ b/core/src/main/kotlin/net/corda/core/flows/FlowLogic.kt @@ -2,7 +2,9 @@ package net.corda.core.flows import co.paralleluniverse.fibers.Suspendable import net.corda.core.crypto.Party +import net.corda.core.crypto.SecureHash import net.corda.core.node.ServiceHub +import net.corda.core.transactions.SignedTransaction import net.corda.core.utilities.ProgressTracker import net.corda.core.utilities.UntrustworthyData import org.slf4j.Logger @@ -171,6 +173,16 @@ abstract class FlowLogic { } } + /** + * Suspends the flow until the transaction with the specified ID is received, successfully verified and + * sent to the vault for processing. Note that this call suspends until the transaction is considered + * valid by the local node, but that doesn't imply the vault will consider it relevant. + */ + @Suspendable + fun waitForLedgerCommit(hash: SecureHash): SignedTransaction { + return stateMachine.waitForLedgerCommit(hash, this) + } + //////////////////////////////////////////////////////////////////////////////////////////////////////////// private var _stateMachine: FlowStateMachine<*>? = null diff --git a/core/src/main/kotlin/net/corda/core/flows/FlowStateMachine.kt b/core/src/main/kotlin/net/corda/core/flows/FlowStateMachine.kt index 25aa753a9c..974b9e0d45 100644 --- a/core/src/main/kotlin/net/corda/core/flows/FlowStateMachine.kt +++ b/core/src/main/kotlin/net/corda/core/flows/FlowStateMachine.kt @@ -3,7 +3,9 @@ package net.corda.core.flows import co.paralleluniverse.fibers.Suspendable import com.google.common.util.concurrent.ListenableFuture import net.corda.core.crypto.Party +import net.corda.core.crypto.SecureHash import net.corda.core.node.ServiceHub +import net.corda.core.transactions.SignedTransaction import net.corda.core.utilities.UntrustworthyData import org.slf4j.Logger import java.util.* @@ -35,6 +37,9 @@ interface FlowStateMachine { @Suspendable fun send(otherParty: Party, payload: Any, sessionFlow: FlowLogic<*>) + @Suspendable + fun waitForLedgerCommit(hash: SecureHash, sessionFlow: FlowLogic<*>): SignedTransaction + val serviceHub: ServiceHub val logger: Logger val id: StateMachineRunId diff --git a/core/src/main/kotlin/net/corda/core/messaging/Messaging.kt b/core/src/main/kotlin/net/corda/core/messaging/Messaging.kt index 6b29086153..d1499cdc81 100644 --- a/core/src/main/kotlin/net/corda/core/messaging/Messaging.kt +++ b/core/src/main/kotlin/net/corda/core/messaging/Messaging.kt @@ -43,7 +43,8 @@ interface MessagingService { /** * The provided function will be invoked for each received message whose topic and session matches. The callback - * will run on threads provided by the messaging service, and the callback is expected to be thread safe as a result. + * will run on the main server thread provided when the messaging service is constructed, and a database + * transaction is set up for you automatically. * * The returned object is an opaque handle that may be used to un-register handlers later with [removeMessageHandler]. * The handle is passed to the callback as well, to avoid race conditions whereby the callback wants to unregister diff --git a/core/src/main/kotlin/net/corda/core/node/ServiceHub.kt b/core/src/main/kotlin/net/corda/core/node/ServiceHub.kt index 8ddb260ed0..f516593fb6 100644 --- a/core/src/main/kotlin/net/corda/core/node/ServiceHub.kt +++ b/core/src/main/kotlin/net/corda/core/node/ServiceHub.kt @@ -29,11 +29,12 @@ interface ServiceHub { val myInfo: NodeInfo /** - * Given a list of [SignedTransaction]s, writes them to the local storage for validated transactions and then - * sends them to the vault for further processing. + * Given a [SignedTransaction], writes it to the local storage for validated transactions and then + * sends them to the vault for further processing. Expects to be run within a database transaction. * * @param txs The transactions to record. */ + // TODO: Make this take a single tx. fun recordTransactions(txs: Iterable) /** diff --git a/core/src/main/kotlin/net/corda/core/node/services/Services.kt b/core/src/main/kotlin/net/corda/core/node/services/Services.kt index 997331c1fd..800040174c 100644 --- a/core/src/main/kotlin/net/corda/core/node/services/Services.kt +++ b/core/src/main/kotlin/net/corda/core/node/services/Services.kt @@ -178,10 +178,22 @@ interface VaultService { fun getTransactionNotes(txnId: SecureHash): Iterable /** - * [InsufficientBalanceException] is thrown when a Cash Spending transaction fails because - * there is insufficient quantity for a given currency (and optionally set of Issuer Parties). - * Note: an [Amount] of [Currency] is only fungible for a given Issuer Party within a [FungibleAsset] - **/ + * Generate a transaction that moves an amount of currency to the given pubkey. + * + * Note: an [Amount] of [Currency] is only fungible for a given Issuer Party within a [FungibleAsset] + * + * @param tx A builder, which may contain inputs, outputs and commands already. The relevant components needed + * to move the cash will be added on top. + * @param amount How much currency to send. + * @param to a key of the recipient. + * @param onlyFromParties if non-null, the asset states will be filtered to only include those issued by the set + * of given parties. This can be useful if the party you're trying to pay has expectations + * about which type of asset claims they are willing to accept. + * @return A [Pair] of the same transaction builder passed in as [tx], and the list of keys that need to sign + * the resulting transaction for it to be valid. + * @throws InsufficientBalanceException when a cash spending transaction fails because + * there is insufficient quantity for a given currency (and optionally set of Issuer Parties). + */ @Throws(InsufficientBalanceException::class) fun generateSpend(tx: TransactionBuilder, amount: Amount, diff --git a/core/src/main/kotlin/net/corda/flows/BroadcastTransactionFlow.kt b/core/src/main/kotlin/net/corda/flows/BroadcastTransactionFlow.kt index 952bb80afb..eec9561040 100644 --- a/core/src/main/kotlin/net/corda/flows/BroadcastTransactionFlow.kt +++ b/core/src/main/kotlin/net/corda/flows/BroadcastTransactionFlow.kt @@ -3,13 +3,13 @@ package net.corda.flows import co.paralleluniverse.fibers.Suspendable import net.corda.core.crypto.Party import net.corda.core.flows.FlowLogic -import net.corda.core.node.recordTransactions import net.corda.core.transactions.SignedTransaction /** - * Notify all involved parties about a transaction, including storing a copy. Normally this would be called via - * [FinalityFlow]. + * Notify the specified parties about a transaction. The remote peers will download this transaction and its + * dependency graph, verifying them all. The flow returns when all peers have acknowledged the transactions + * as valid. Normally you wouldn't use this directly, it would be called via [FinalityFlow]. * * @param notarisedTransaction transaction which has been notarised (if needed) and is ready to notify nodes about. * @param participants a list of participants involved in the transaction. @@ -17,17 +17,14 @@ import net.corda.core.transactions.SignedTransaction */ class BroadcastTransactionFlow(val notarisedTransaction: SignedTransaction, val participants: Set) : FlowLogic() { - data class NotifyTxRequest(val tx: SignedTransaction) @Suspendable override fun call() { - // Record it locally - serviceHub.recordTransactions(notarisedTransaction) - // TODO: Messaging layer should handle this broadcast for us val msg = NotifyTxRequest(notarisedTransaction) participants.filter { it != serviceHub.myInfo.legalIdentity }.forEach { participant -> + // This pops out the other side in DataVending.NotifyTransactionHandler. send(participant, msg) } } diff --git a/core/src/main/kotlin/net/corda/flows/FinalityFlow.kt b/core/src/main/kotlin/net/corda/flows/FinalityFlow.kt index 5dac3167b5..61a18d7ef3 100644 --- a/core/src/main/kotlin/net/corda/flows/FinalityFlow.kt +++ b/core/src/main/kotlin/net/corda/flows/FinalityFlow.kt @@ -1,48 +1,87 @@ package net.corda.flows import co.paralleluniverse.fibers.Suspendable +import net.corda.core.contracts.ContractState +import net.corda.core.contracts.StateRef +import net.corda.core.contracts.TransactionState import net.corda.core.crypto.Party import net.corda.core.flows.FlowLogic +import net.corda.core.node.ServiceHub +import net.corda.core.transactions.LedgerTransaction import net.corda.core.transactions.SignedTransaction import net.corda.core.utilities.ProgressTracker - /** - * Finalise a transaction by notarising it, then recording it locally, and then sending it to all involved parties. + * Verifies the given transactions, then sends them to the named notaries. If the notary agrees that the transactions + * are acceptable then they are from that point onwards committed to the ledger, and will be written through to the + * vault. Additionally they will be distributed to the parties reflected in the participants list of the states. * - * @param transaction to commit. - * @param participants a list of participants involved in the transaction. - * @return a list of participants who were successfully notified of the transaction. + * The transactions will be topologically sorted before commitment to ensure that dependencies are committed before + * dependers, so you don't need to do this yourself. + * + * The transactions are expected to have already been resolved: if their dependencies are not available in local + * storage or within the given set, verification will fail. They must have signatures from all necessary parties + * other than the notary. + * + * If specified, the extra recipients are sent all the given transactions. The base set of parties to inform of each + * transaction are calculated on a per transaction basis from the contract-given set of participants. + * + * The flow returns the same transactions, in the same order, with the additional signatures. + * + * @param transactions What to commit. + * @param extraRecipients A list of additional participants to inform of the transaction. */ -class FinalityFlow(val transaction: SignedTransaction, - val participants: Set, - override val progressTracker: ProgressTracker) : FlowLogic() { - constructor(transaction: SignedTransaction, participants: Set) : this(transaction, participants, tracker()) +class FinalityFlow(val transactions: Iterable, + val extraRecipients: Set, + override val progressTracker: ProgressTracker) : FlowLogic>() { + constructor(transaction: SignedTransaction, extraParticipants: Set) : this(listOf(transaction), extraParticipants, tracker()) + constructor(transaction: SignedTransaction) : this(listOf(transaction), emptySet(), tracker()) companion object { - object NOTARISING : ProgressTracker.Step("Requesting signature by notary service") + object NOTARISING : ProgressTracker.Step("Requesting signature by notary service") { + override fun childProgressTracker() = NotaryFlow.Client.tracker() + } object BROADCASTING : ProgressTracker.Step("Broadcasting transaction to participants") + // TODO: Make all tracker() methods @JvmStatic fun tracker() = ProgressTracker(NOTARISING, BROADCASTING) } @Suspendable @Throws(NotaryException::class) - override fun call() { - // TODO: Resolve the tx here: it's probably already been done, but re-resolution is a no-op and it'll make the API more forgiving. - + override fun call(): List { + // Note: this method is carefully broken up to minimize the amount of data reachable from the stack at + // the point where subFlow is invoked, as that minimizes the checkpointing work to be done. + // + // Lookup the resolved transactions and use them to map each signed transaction to the list of participants. + // Then send to the notary if needed, record locally and distribute. progressTracker.currentStep = NOTARISING - // Notarise the transaction if needed - val notarisedTransaction = if (needsNotarySignature(transaction)) { - val notarySig = subFlow(NotaryFlow.Client(transaction)) - transaction.withAdditionalSignature(notarySig) - } else { - transaction - } + val notarisedTxns = notariseAndRecord(lookupParties(resolveDependenciesOf(transactions))) - // Let everyone else know about the transaction + // Each transaction has its own set of recipients, but extra recipients get them all. progressTracker.currentStep = BROADCASTING - subFlow(BroadcastTransactionFlow(notarisedTransaction, participants)) + val me = serviceHub.myInfo.legalIdentity + for ((stx, parties) in notarisedTxns) { + subFlow(BroadcastTransactionFlow(stx, parties + extraRecipients - me)) + } + return notarisedTxns.map { it.first } + } + + // TODO: API: Make some of these protected? + + @Suspendable + private fun notariseAndRecord(stxnsAndParties: List>>): List>> { + return stxnsAndParties.map { pair -> + val stx = pair.first + val notarised = if (needsNotarySignature(stx)) { + val notarySig = subFlow(NotaryFlow.Client(stx)) + stx + notarySig + } else { + stx + } + serviceHub.recordTransactions(listOf(notarised)) + Pair(notarised, pair.second) + } } private fun needsNotarySignature(stx: SignedTransaction) = stx.tx.notary != null && hasNoNotarySignature(stx) @@ -51,4 +90,38 @@ class FinalityFlow(val transaction: SignedTransaction, val signers = stx.sigs.map { it.by }.toSet() return !(notaryKey?.isFulfilledBy(signers) ?: false) } + + private fun lookupParties(ltxns: List>): List>> { + return ltxns.map { pair -> + val (stx, ltx) = pair + // Calculate who is meant to see the results based on the participants involved. + val keys = ltx.outputs.flatMap { it.data.participants } + ltx.inputs.flatMap { it.state.data.participants } + // TODO: Is it safe to drop participants we don't know how to contact? Does not knowing how to contact them count as a reason to fail? + val parties = keys.mapNotNull { serviceHub.identityService.partyFromKey(it) }.toSet() + Pair(stx, parties) + } + } + + private fun resolveDependenciesOf(signedTransactions: Iterable): List> { + // Make sure the dependencies come before the dependers. + val sorted = ResolveTransactionsFlow.topologicalSort(signedTransactions.toList()) + // Build a ServiceHub that consults the argument list as well as what's in local tx storage so uncommitted + // transactions can depend on each other. + val augmentedLookup = object : ServiceHub by serviceHub { + val hashToTx = sorted.associateBy { it.id } + override fun loadState(stateRef: StateRef): TransactionState<*> { + val provided: TransactionState? = hashToTx[stateRef.txhash]?.let { it.tx.outputs[stateRef.index] } + return provided ?: super.loadState(stateRef) + } + } + // Load and verify each transaction. + return sorted.map { stx -> + val notary = stx.tx.notary + // The notary signature is allowed to be missing but no others. + val wtx = if (notary != null) stx.verifySignatures(notary.owningKey) else stx.verifySignatures() + val ltx = wtx.toLedgerTransaction(augmentedLookup) + ltx.verify() + stx to ltx + } + } } diff --git a/core/src/main/kotlin/net/corda/flows/NotaryFlow.kt b/core/src/main/kotlin/net/corda/flows/NotaryFlow.kt index af6df1cf54..f29281fc7c 100644 --- a/core/src/main/kotlin/net/corda/flows/NotaryFlow.kt +++ b/core/src/main/kotlin/net/corda/flows/NotaryFlow.kt @@ -16,7 +16,6 @@ import net.corda.core.transactions.WireTransaction import net.corda.core.utilities.ProgressTracker object NotaryFlow { - /** * A flow to be used for obtaining a signature from a [NotaryService] ascertaining the transaction * timestamp is correct and none of its inputs have been used in another completed transaction. diff --git a/core/src/main/kotlin/net/corda/flows/ResolveTransactionsFlow.kt b/core/src/main/kotlin/net/corda/flows/ResolveTransactionsFlow.kt index 07f573ab67..f15c614155 100644 --- a/core/src/main/kotlin/net/corda/flows/ResolveTransactionsFlow.kt +++ b/core/src/main/kotlin/net/corda/flows/ResolveTransactionsFlow.kt @@ -34,13 +34,16 @@ class ResolveTransactionsFlow(private val txHashes: Set, companion object { private fun dependencyIDs(wtx: WireTransaction) = wtx.inputs.map { it.txhash }.toSet() - private fun topologicalSort(transactions: Collection): List { + /** + * Topologically sorts the given transactions such that dependencies are listed before dependers. */ + @JvmStatic + fun topologicalSort(transactions: Collection): List { // Construct txhash -> dependent-txs map val forwardGraph = HashMap>() - transactions.forEach { tx -> - tx.tx.inputs.forEach { input -> + transactions.forEach { stx -> + stx.tx.inputs.forEach { input -> // Note that we use a LinkedHashSet here to make the traversal deterministic (as long as the input list is) - forwardGraph.getOrPut(input.txhash) { LinkedHashSet() }.add(tx) + forwardGraph.getOrPut(input.txhash) { LinkedHashSet() }.add(stx) } } diff --git a/docs/source/example-code/src/main/kotlin/net/corda/docs/FxTransactionBuildTutorial.kt b/docs/source/example-code/src/main/kotlin/net/corda/docs/FxTransactionBuildTutorial.kt index a75ff24521..02f25559eb 100644 --- a/docs/source/example-code/src/main/kotlin/net/corda/docs/FxTransactionBuildTutorial.kt +++ b/docs/source/example-code/src/main/kotlin/net/corda/docs/FxTransactionBuildTutorial.kt @@ -174,7 +174,7 @@ class ForeignExchangeFlow(val tradeId: String, withNewSignature // return the almost complete transaction } - // Initiate the standard protocol to notarise and distribute to the involved parties + // Initiate the standard protocol to notarise and distribute to the involved parties. subFlow(FinalityFlow(allPartySignedTx, setOf(baseCurrencyBuyer, baseCurrencySeller))) return allPartySignedTx.id diff --git a/docs/source/example-code/src/main/kotlin/net/corda/docs/WorkflowTransactionBuildTutorial.kt b/docs/source/example-code/src/main/kotlin/net/corda/docs/WorkflowTransactionBuildTutorial.kt index dae7c1efe8..0818835fa1 100644 --- a/docs/source/example-code/src/main/kotlin/net/corda/docs/WorkflowTransactionBuildTutorial.kt +++ b/docs/source/example-code/src/main/kotlin/net/corda/docs/WorkflowTransactionBuildTutorial.kt @@ -27,6 +27,7 @@ inline fun ServiceHub.latest(ref: StateRef): StateAndR val original = toStateAndRef(ref) return linearHeads.get(original.state.data.linearId)!! } + // DOCEND 1 // Minimal state model of a manual approval process @@ -121,18 +122,14 @@ class SubmitTradeApprovalFlow(val tradeId: String, // identify a notary. This might also be done external to the flow val notary = serviceHub.networkMapCache.getAnyNotary() // Create the TransactionBuilder and populate with the new state. - val tx = TransactionType. - General. - Builder(notary). - withItems(tradeProposal, - Command(TradeApprovalContract.Commands.Issue(), - listOf(tradeProposal.source.owningKey))) + val tx = TransactionType.General.Builder(notary) + .withItems(tradeProposal, Command(TradeApprovalContract.Commands.Issue(), listOf(tradeProposal.source.owningKey))) tx.setTime(serviceHub.clock.instant(), Duration.ofSeconds(60)) // We can automatically sign as there is no untrusted data. tx.signWith(serviceHub.legalIdentityKey) // Convert to a SignedTransaction that we can send to the notary val signedTx = tx.toSignedTransaction(false) - // Run the FinalityFlow to notarise and distribute the SignedTransaction to the counterparty + // Notarise and distribute. subFlow(FinalityFlow(signedTx, setOf(serviceHub.myInfo.legalIdentity, counterparty))) // Return the initial state return signedTx.tx.outRef(0) @@ -210,10 +207,8 @@ class SubmitCompletionFlow(val ref: StateRef, val verdict: WorkflowState) : Flow agreedTx } // DOCSTART 4 - // Run the FinalityFlow to notarise and distribute the completed transaction. - subFlow(FinalityFlow(allPartySignedTx, - setOf(latestRecord.state.data.source, latestRecord.state.data.counterparty))) - + // Notarise and distribute the completed transaction. + subFlow(FinalityFlow(allPartySignedTx, setOf(latestRecord.state.data.source, latestRecord.state.data.counterparty))) // DOCEND 4 // Return back the details of the completed state/transaction. return allPartySignedTx.tx.outRef(0) diff --git a/docs/source/flow-state-machines.rst b/docs/source/flow-state-machines.rst index f01b24d79c..075057ec72 100644 --- a/docs/source/flow-state-machines.rst +++ b/docs/source/flow-state-machines.rst @@ -89,7 +89,9 @@ Our flow has two parties (B and S for buyer and seller) and will proceed as foll 2. B sends to S a ``SignedTransaction`` that includes the state as input, B's cash as input, the state with the new owner key as output, and any change cash as output. It contains a single signature from B but isn't valid because it lacks a signature from S authorising movement of the asset. -3. S signs it and hands the now finalised ``SignedTransaction`` back to B. +3. S signs it and *finalises* the transaction. This means sending it to the notary, which checks the transaction for + validity, recording the transaction in the local vault, and then sending it back to B who also checks it and commits + the transaction to their local vault. You can find the implementation of this flow in the file ``finance/src/main/kotlin/net/corda/flows/TwoPartyTradeFlow.kt``. @@ -98,8 +100,7 @@ represents an atomic asset swap. Note that it's the *seller* who initiates contact with the buyer, not vice-versa as you might imagine. -We start by defining a wrapper that namespaces the flow code, two functions to start either the buy or sell side -of the flow, and two classes that will contain the flow definition. We also pick what data will be used by +We start by defining two classes that will contain the flow definition. We also pick what data will be used by each side. .. note:: The code samples in this tutorial are only available in Kotlin, but you can use any JVM language to @@ -110,7 +111,6 @@ each side. .. sourcecode:: kotlin object TwoPartyTradeFlow { - class UnacceptablePriceException(val givenPrice: Amount) : FlowException("Unacceptable price: $givenPrice") class AssetMismatchException(val expectedTypeName: String, val typeName: String) : FlowException() { override fun toString() = "The submitted asset didn't match the expected type: $expectedTypeName vs $typeName" @@ -188,8 +188,6 @@ and try again. .. note:: Java 9 is likely to remove this pre-marking requirement completely. -.. note:: Accessing the vault from inside an @Suspendable function (e.g. via ``serviceHub.vaultService``) can cause a serialisation error when the fiber suspends. Instead, vault access should be performed from a helper non-suspendable function, which you then call from the @Suspendable function. We are working to fix this. - Starting your flow ------------------ @@ -248,12 +246,11 @@ Let's implement the ``Seller.call`` method. This will be run when the flow is in :dedent: 4 Here we see the outline of the procedure. We receive a proposed trade transaction from the buyer and check that it's -valid. The buyer has already attached their signature before sending it. Then we calculate and attach our own signature so that the transaction is -now signed by both the buyer and the seller. We then send this request to a notary to assert with another signature that the -timestamp in the transaction (if any) is valid and there are no double spends, and send back both -our signature and the notaries signature. Note we should not send to the notary until all other required signatures have been appended -as the notary may validate the signatures as well as verifying for itself the transactional integrity. -Finally, we hand back to the code that invoked the flow the finished transaction. +valid. The buyer has already attached their signature before sending it. Then we calculate and attach our own signature +so that the transaction is now signed by both the buyer and the seller. We then *finalise* this transaction by sending +it to a notary to assert (with another signature) that the timestamp in the transaction (if any) is valid and there are no +double spends. Finally, after the finalisation process is complete, we retrieve the now fully signed transaction from +local storage. It will have the same ID as the one we started with but more signatures. Let's fill out the ``receiveAndCheckProposedTransaction()`` method. @@ -327,24 +324,39 @@ Throwing a ``FlowException`` enables a flow to reject a piece of data it has rec done in the ``unwrap`` method of the received ``UntrustworthyData``. In the above example the seller checks the price and throws ``FlowException`` if it's invalid. It's then up to the buyer to either try again with a better price or give up. -Sub-flows ---------- +Sub-flows and finalisation +-------------------------- Flows can be composed via nesting. Invoking a sub-flow looks similar to an ordinary function call: .. container:: codeset - .. literalinclude:: ../../finance/src/main/kotlin/net/corda/flows/TwoPartyTradeFlow.kt - :language: kotlin - :start-after: DOCSTART 6 - :end-before: DOCEND 6 - :dedent: 4 + .. sourcecode:: kotlin + + @Suspendable + fun call() { + val unnotarisedTransaction = ... + subFlow(FinalityFlow(unnotarisedTransaction)) + } + + .. sourcecode:: java + + @Suspendable + public void call() throws FlowException { + SignedTransaction unnotarisedTransaction = ... + subFlow(new FinalityFlow(unnotarisedTransaction)) + } + +In this code snippet we are using the ``FinalityFlow`` to finish off the transaction. It will: + +* Send the transaction to the chosen notary and, if necessary, satisfy the notary that the transaction is valid. +* Record the transaction in the local vault, if it is relevant (i.e. involves the owner of the node). +* Send the fully signed transaction to the other participants for recording as well. -In this code snippet we are using the ``NotaryFlow.Client`` to request notarisation of the transaction. We simply create the flow object via its constructor, and then pass it to the ``subFlow`` method which returns the result of the flow's execution directly. Behind the scenes all this is doing is wiring up progress -tracking (discussed more below) and then running the objects ``call`` method. Because this little helper method can -be on the stack when network IO takes place, we mark it as ``@Suspendable``. +tracking (discussed more below) and then running the objects ``call`` method. Because the sub-flow might suspend, +we must mark the method that invokes it as suspendable. Going back to the previous code snippet, we use a sub-flow called ``ResolveTransactionsFlow``. This is responsible for downloading and checking all the dependencies of a transaction, which in Corda are always retrievable @@ -360,32 +372,11 @@ objects, but we don't need them here so we just ignore the return value. After the dependencies, we check the proposed trading transaction for validity by running the contracts for that as well (but having handled the fact that some signatures are missing ourselves). -Here's the rest of the code: - -.. container:: codeset - - .. literalinclude:: ../../finance/src/main/kotlin/net/corda/flows/TwoPartyTradeFlow.kt - :language: kotlin - :start-after: DOCSTART 7 - :end-before: DOCEND 7 - :dedent: 4 - -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. - -In ``sendSignatures``, we take the two signatures we obtained and add them to the partial transaction we were sent. -There is an overload for the + operator so signatures can be added to a SignedTransaction easily. Finally, we wrap the -two signatures in a simple wrapper message class and send it back. The send won't block waiting for an acknowledgement, -but the underlying message queue software will retry delivery if the other side has gone away temporarily. - -You can also see that every flow instance has a logger (using the SLF4J API) which you can use to log progress -messages. - -.. warning:: This sample code is **not secure**. Other than not checking for all possible invalid constructions, if the - seller stops before sending the finalised transaction to the buyer, the seller is left with a valid transaction - but the buyer isn't, so they can't spend the asset they just purchased! This sort of thing will be fixed in a - future version of the code. +.. warning:: If the seller stops before sending the finalised transaction to the buyer, the seller is left with a + valid transaction but the buyer isn't, so they can't spend the asset they just purchased! This sort of thing is not + always a risk (as the seller may not gain anything from that sort of behaviour except a lawsuit), but if it is, a future + version of the platform will allow you to ask the notary to send you the transaction as well, in case your counterparty + does not. This is not the default because it reveals more private info to the notary. Implementing the buyer ---------------------- @@ -403,12 +394,11 @@ OK, let's do the same for the buyer side: 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 ``VaultService.generateSpend``. See the vault documentation if this - part isn't clear. +2. We create a cash spend using ``VaultService.generateSpend``. You can read the vault documentation to learn more about this. 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. -4. Finally, we send the unfinished, invalid transaction to the seller so they can sign it. They are expected to send - back to us a ``SignaturesFromSeller``, which once we verify it, should be the final outcome of the trade. +4. We send the unfinished, invalid transaction to the seller so they can sign it and finalise it. +5. Finally, we wait for the finished transaction to arrive in our local storage and vault. As you can see, the flow logic is straightforward and does not contain any callbacks or network glue code, despite the fact that it takes minimal resources and can survive node restarts. @@ -435,7 +425,7 @@ A flow might declare some steps with code inside the flow class like this: .. literalinclude:: ../../finance/src/main/kotlin/net/corda/flows/TwoPartyTradeFlow.kt :language: kotlin :start-after: DOCSTART 2 - :end-before: DOCSTART 1 + :end-before: DOCEND 2 :dedent: 4 .. sourcecode:: java diff --git a/docs/source/release-notes.rst b/docs/source/release-notes.rst index 5d2d25e9e7..4731eb7ab1 100644 --- a/docs/source/release-notes.rst +++ b/docs/source/release-notes.rst @@ -10,6 +10,10 @@ Milestone 8 * ``Party`` equality is now based on the owning key, rather than the owning key and name. This is important for party anonymisation to work, as each key must identify exactly one party. + * A new ``waitForLedgerCommit`` method is available inside flows. Given a hash it will suspend the flow until + a valid transaction with that hash has been received, committed and processed by the vault. This is useful + in multi-party flows where one side takes responsibility for sending the finished transaction to the notary, + and the other side wishes to wait for it. Milestone 7 ----------- diff --git a/finance/src/main/kotlin/net/corda/flows/CashFlow.kt b/finance/src/main/kotlin/net/corda/flows/CashFlow.kt index 5214ff907c..9aeb53ca77 100644 --- a/finance/src/main/kotlin/net/corda/flows/CashFlow.kt +++ b/finance/src/main/kotlin/net/corda/flows/CashFlow.kt @@ -123,9 +123,8 @@ class CashFlow(val command: CashCommand, override val progressTracker: ProgressT Cash().generateIssue(builder, req.amount.issuedBy(issuer), req.recipient.owningKey, req.notary) val myKey = serviceHub.legalIdentityKey builder.signWith(myKey) - val tx = builder.toSignedTransaction(checkSufficientSignatures = true) - // Issuance transactions do not need to be notarised, so we can skip directly to broadcasting it - subFlow(BroadcastTransactionFlow(tx, setOf(req.recipient))) + val tx = builder.toSignedTransaction() + subFlow(FinalityFlow(tx)) return tx } } diff --git a/finance/src/main/kotlin/net/corda/flows/TwoPartyTradeFlow.kt b/finance/src/main/kotlin/net/corda/flows/TwoPartyTradeFlow.kt index 50341d8ded..aadd430fe3 100644 --- a/finance/src/main/kotlin/net/corda/flows/TwoPartyTradeFlow.kt +++ b/finance/src/main/kotlin/net/corda/flows/TwoPartyTradeFlow.kt @@ -25,23 +25,17 @@ import java.util.* * 2. B sends to S a [SignedTransaction] that includes the state as input, B's cash as input, the state with the new * owner key as output, and any change cash as output. It contains a single signature from B but isn't valid because * it lacks a signature from S authorising movement of the asset. - * 3. S signs it and hands the now finalised SignedWireTransaction back to B. + * 3. S signs it and commits it to the ledger, notarising it and distributing the final signed transaction back + * to B. * * Assuming no malicious termination, they both end the flow being in posession of a valid, signed transaction * that represents an atomic asset swap. * * Note that it's the *seller* who initiates contact with the buyer, not vice-versa as you might imagine. - * - * To initiate the flow, use either the [runBuyer] or [runSeller] methods, depending on which side of the trade - * your node is taking. These methods return a future which will complete once the trade is over and a fully signed - * transaction is available: you can either block your thread waiting for the flow to complete by using - * [ListenableFuture.get] or more usefully, register a callback that will be invoked when the time comes. - * - * To see an example of how to use this class, look at the unit tests. */ -// TODO: Common elements in multi-party transaction consensus and signing should be refactored into a superclass of this -// and [AbstractStateReplacementFlow]. object TwoPartyTradeFlow { + // TODO: Common elements in multi-party transaction consensus and signing should be refactored into a superclass of this + // and [AbstractStateReplacementFlow]. class UnacceptablePriceException(givenPrice: Amount) : FlowException("Unacceptable price: $givenPrice") class AssetMismatchException(val expectedTypeName: String, val typeName: String) : FlowException() { @@ -70,35 +64,26 @@ object TwoPartyTradeFlow { object VERIFYING : ProgressTracker.Step("Verifying transaction proposal") object SIGNING : ProgressTracker.Step("Signing transaction") // DOCSTART 3 - object NOTARY : ProgressTracker.Step("Getting notary signature") { + object COMMITTING : ProgressTracker.Step("Committing transaction to the ledger") { override fun childProgressTracker() = FinalityFlow.tracker() } // DOCEND 3 - object SENDING_SIGS : ProgressTracker.Step("Sending transaction signatures to buyer") + object SENDING_FINAL_TX : ProgressTracker.Step("Sending final transaction to buyer") - fun tracker() = ProgressTracker(AWAITING_PROPOSAL, VERIFYING, SIGNING, NOTARY, SENDING_SIGS) + fun tracker() = ProgressTracker(AWAITING_PROPOSAL, VERIFYING, SIGNING, COMMITTING, SENDING_FINAL_TX) } // DOCSTART 4 @Suspendable override fun call(): SignedTransaction { - val partialTX: SignedTransaction = receiveAndCheckProposedTransaction() - val ourSignature: DigitalSignature.WithKey = calculateOurSignature(partialTX) - val allPartySignedTx: SignedTransaction = partialTX + ourSignature - val notarySignature: DigitalSignature.WithKey = getNotarySignature(allPartySignedTx) - val result: SignedTransaction = sendSignatures(allPartySignedTx, ourSignature, notarySignature) - return result + val partialSTX: SignedTransaction = receiveAndCheckProposedTransaction() + val ourSignature = calculateOurSignature(partialSTX) + val unnotarisedSTX: SignedTransaction = partialSTX + ourSignature + val finishedSTX = subFlow(FinalityFlow(unnotarisedSTX)).single() + return finishedSTX } // DOCEND 4 - // DOCSTART 6 - @Suspendable - private fun getNotarySignature(stx: SignedTransaction): DigitalSignature.WithKey { - progressTracker.currentStep = NOTARY - return subFlow(NotaryFlow.Client(stx)) - } - // DOCEND 6 - // DOCSTART 5 @Suspendable private fun receiveAndCheckProposedTransaction(): SignedTransaction { @@ -107,14 +92,12 @@ object TwoPartyTradeFlow { val myPublicKey = myKeyPair.public.composite // Make the first message we'll send to kick off the flow. val hello = SellerTradeInfo(assetToSell, price, myPublicKey) - - val maybeSTX = sendAndReceive(otherParty, hello) + // What we get back from the other side is a transaction that *might* be valid and acceptable to us, + // but we must check it out thoroughly before we sign! + val untrustedSTX = sendAndReceive(otherParty, hello) progressTracker.currentStep = VERIFYING - - maybeSTX.unwrap { - progressTracker.nextStep() - + return untrustedSTX.unwrap { // Check that the tx proposed by the buyer is valid. val wtx: WireTransaction = it.verifySignatures(myPublicKey, notaryNode.notaryIdentity.owningKey) logger.trace { "Received partially signed transaction: ${it.id}" } @@ -123,11 +106,10 @@ object TwoPartyTradeFlow { // even though it is missing signatures. subFlow(ResolveTransactionsFlow(wtx, otherParty)) - if (wtx.outputs.map { it.data }.sumCashBy(myPublicKey).withoutIssuer() != price) { + if (wtx.outputs.map { it.data }.sumCashBy(myPublicKey).withoutIssuer() != price) throw FlowException("Transaction is not sending us the right amount of cash") - } - return it + it } } // DOCEND 5 @@ -144,64 +126,50 @@ object TwoPartyTradeFlow { // but the goal of this code is not to be fully secure (yet), but rather, just to find good ways to // express flow state machines on top of the messaging layer. - // DOCSTART 7 open fun calculateOurSignature(partialTX: SignedTransaction): DigitalSignature.WithKey { progressTracker.currentStep = SIGNING return myKeyPair.signWithECDSA(partialTX.id) } - - @Suspendable - private fun sendSignatures(allPartySignedTx: SignedTransaction, - ourSignature: DigitalSignature.WithKey, - notarySignature: DigitalSignature.WithKey): SignedTransaction { - progressTracker.currentStep = SENDING_SIGS - val fullySigned = allPartySignedTx + notarySignature - - logger.trace { "Built finished transaction, sending back to secondary!" } - - send(otherParty, SignaturesFromSeller(ourSignature, notarySignature)) - return fullySigned - } - // DOCEND 7 } - // DOCSTART 2 open class Buyer(val otherParty: Party, val notary: Party, val acceptablePrice: Amount, val typeToBuy: Class) : FlowLogic() { - + // DOCSTART 2 object RECEIVING : ProgressTracker.Step("Waiting for seller trading info") object VERIFYING : ProgressTracker.Step("Verifying seller assets") object SIGNING : ProgressTracker.Step("Generating and signing transaction proposal") - object SWAPPING_SIGNATURES : ProgressTracker.Step("Swapping signatures with the seller") + object SENDING_SIGNATURES : ProgressTracker.Step("Sending signatures to the seller") + object WAITING_FOR_TX : ProgressTracker.Step("Waiting for the transaction to finalise.") - override val progressTracker = ProgressTracker(RECEIVING, VERIFYING, SIGNING, SWAPPING_SIGNATURES) + override val progressTracker = ProgressTracker(RECEIVING, VERIFYING, SIGNING, SENDING_SIGNATURES, WAITING_FOR_TX) + // DOCEND 2 // DOCSTART 1 @Suspendable override fun call(): SignedTransaction { + // Wait for a trade request to come in from the other party. + progressTracker.currentStep = RECEIVING val tradeRequest = receiveAndValidateTradeRequest() + // Put together a proposed transaction that performs the trade, and sign it. progressTracker.currentStep = SIGNING val (ptx, cashSigningPubKeys) = assembleSharedTX(tradeRequest) val stx = signWithOurKeys(cashSigningPubKeys, ptx) - val signatures = swapSignaturesWithSeller(stx) + // Send the signed transaction to the seller, who must then sign it themselves and commit + // it to the ledger by sending it to the notary. + progressTracker.currentStep = SENDING_SIGNATURES + send(otherParty, 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 + // Wait for the finished, notarised transaction to arrive in our transaction store. + progressTracker.currentStep = WAITING_FOR_TX + return waitForLedgerCommit(stx.id) } @Suspendable private fun receiveAndValidateTradeRequest(): SellerTradeInfo { - progressTracker.currentStep = RECEIVING - // Wait for a trade request to come in from the other side val maybeTradeRequest = receive(otherParty) progressTracker.currentStep = VERIFYING @@ -216,24 +184,14 @@ object TwoPartyTradeFlow { 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. + // Check that the state being sold to us is in a valid chain of transactions, i.e. that the + // seller has a valid chain of custody proving that they own the thing they're selling. subFlow(ResolveTransactionsFlow(setOf(it.assetForSale.ref.txhash), otherParty)) 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(otherParty, stx).unwrap { it } - } - private fun signWithOurKeys(cashSigningPubKeys: List, ptx: TransactionBuilder): SignedTransaction { // Now sign the transaction with whatever keys we need to move the cash. for (publicKey in cashSigningPubKeys.keys) { diff --git a/node/build.gradle b/node/build.gradle index 991db103da..a061ad7f4f 100644 --- a/node/build.gradle +++ b/node/build.gradle @@ -52,9 +52,6 @@ sourceSets { dependencies { compile project(':finance') - testCompile project(':test-utils') - testCompile project(':client') - compile "com.google.code.findbugs:jsr305:3.0.1" // Log4J: logging framework (with SLF4J bindings) @@ -126,8 +123,11 @@ dependencies { // Unit testing helpers. testCompile "junit:junit:$junit_version" testCompile "org.assertj:assertj-core:${assertj_version}" - testCompile "com.pholser:junit-quickcheck-core:$quickcheck_version" + testCompile "com.nhaarman:mockito-kotlin:1.1.0" + testCompile project(':test-utils') + testCompile project(':client') + testCompile project(':core') // For H2 database support in persistence compile "com.h2database:h2:1.4.193" @@ -156,8 +156,6 @@ dependencies { // Integration test helpers integrationTestCompile "junit:junit:$junit_version" - - testCompile "com.nhaarman:mockito-kotlin:1.1.0" } task integrationTest(type: Test) { diff --git a/node/src/main/kotlin/net/corda/node/services/persistence/DataVendingService.kt b/node/src/main/kotlin/net/corda/node/services/persistence/DataVendingService.kt index 8bbf3cd811..d43fad7564 100644 --- a/node/src/main/kotlin/net/corda/node/services/persistence/DataVendingService.kt +++ b/node/src/main/kotlin/net/corda/node/services/persistence/DataVendingService.kt @@ -15,7 +15,6 @@ import java.util.function.Function import javax.annotation.concurrent.ThreadSafe object DataVending { - class Plugin : CordaPluginRegistry() { override val servicePlugins = listOf(Function(::Service)) } diff --git a/node/src/main/kotlin/net/corda/node/services/statemachine/FlowIORequest.kt b/node/src/main/kotlin/net/corda/node/services/statemachine/FlowIORequest.kt index 10a1c72e16..9496feeb2e 100644 --- a/node/src/main/kotlin/net/corda/node/services/statemachine/FlowIORequest.kt +++ b/node/src/main/kotlin/net/corda/node/services/statemachine/FlowIORequest.kt @@ -1,5 +1,6 @@ package net.corda.node.services.statemachine +import net.corda.core.crypto.SecureHash import net.corda.node.services.statemachine.StateMachineManager.FlowSession // TODO revisit when Kotlin 1.1 is released and data classes can extend other classes @@ -7,14 +8,17 @@ interface FlowIORequest { // This is used to identify where we suspended, in case of message mismatch errors and other things where we // don't have the original stack trace because it's in a suspended fiber. val stackTraceInCaseOfProblems: StackSnapshot +} + +interface SessionedFlowIORequest : FlowIORequest { val session: FlowSession } -interface SendRequest : FlowIORequest { +interface SendRequest : SessionedFlowIORequest { val message: SessionMessage } -interface ReceiveRequest : FlowIORequest { +interface ReceiveRequest : SessionedFlowIORequest { val receiveType: Class } @@ -36,4 +40,9 @@ data class SendOnly(override val session: FlowSession, override val message: Ses override val stackTraceInCaseOfProblems: StackSnapshot = StackSnapshot() } +data class WaitForLedgerCommit(val hash: SecureHash, val fiber: FlowStateMachineImpl<*>) : FlowIORequest { + @Transient + override val stackTraceInCaseOfProblems: StackSnapshot = StackSnapshot() +} + class StackSnapshot : Throwable("This is a stack trace to help identify the source of the underlying problem") diff --git a/node/src/main/kotlin/net/corda/node/services/statemachine/FlowStateMachineImpl.kt b/node/src/main/kotlin/net/corda/node/services/statemachine/FlowStateMachineImpl.kt index 520657c526..4beab873e2 100644 --- a/node/src/main/kotlin/net/corda/node/services/statemachine/FlowStateMachineImpl.kt +++ b/node/src/main/kotlin/net/corda/node/services/statemachine/FlowStateMachineImpl.kt @@ -7,11 +7,13 @@ import co.paralleluniverse.strands.Strand import com.google.common.util.concurrent.ListenableFuture import com.google.common.util.concurrent.SettableFuture import net.corda.core.crypto.Party +import net.corda.core.crypto.SecureHash import net.corda.core.flows.FlowException import net.corda.core.flows.FlowLogic import net.corda.core.flows.FlowStateMachine import net.corda.core.flows.StateMachineRunId import net.corda.core.random63BitValue +import net.corda.core.transactions.SignedTransaction import net.corda.core.utilities.UntrustworthyData import net.corda.core.utilities.trace import net.corda.node.services.api.ServiceHubInternal @@ -72,7 +74,9 @@ class FlowStateMachineImpl(override val id: StateMachineRunId, } } + // This state IS serialised, as we need it to know what the fiber is waiting for. internal val openSessions = HashMap, Party>, FlowSession>() + internal var waitingForLedgerCommitOf: SecureHash? = null init { logic.stateMachine = this @@ -172,6 +176,16 @@ class FlowStateMachineImpl(override val id: StateMachineRunId, } } + @Suspendable + override fun waitForLedgerCommit(hash: SecureHash, sessionFlow: FlowLogic<*>): SignedTransaction { + waitingForLedgerCommitOf = hash + logger.info("Waiting for transaction $hash to commit") + suspend(WaitForLedgerCommit(hash, sessionFlow.stateMachine as FlowStateMachineImpl<*>)) + logger.info("Transaction $hash has committed to the ledger, resuming") + val stx = serviceHub.storageService.validatedTransactions.getTransaction(hash) + return stx ?: throw IllegalStateException("We were resumed after waiting for $hash but it wasn't found in our local storage") + } + private fun createSessionData(session: FlowSession, payload: Any): SessionData { val sessionState = session.state val peerSessionId = when (sessionState) { @@ -266,10 +280,12 @@ class FlowStateMachineImpl(override val id: StateMachineRunId, @Suspendable private fun suspend(ioRequest: FlowIORequest) { - // we have to pass the Thread local Transaction across via a transient field as the Fiber Park swaps them out. + // We have to pass the thread local database transaction across via a transient field as the fiber park + // swaps them out. txTrampoline = TransactionManager.currentOrNull() StrandLocalTransactionManager.setThreadLocalTx(null) - ioRequest.session.waitingForResponse = (ioRequest is ReceiveRequest<*>) + if (ioRequest is SessionedFlowIORequest) + ioRequest.session.waitingForResponse = (ioRequest is ReceiveRequest<*>) var exceptionDuringSuspend: Throwable? = null parkAndSerialize { fiber, serializer -> diff --git a/node/src/main/kotlin/net/corda/node/services/statemachine/StateMachineManager.kt b/node/src/main/kotlin/net/corda/node/services/statemachine/StateMachineManager.kt index 85a890f459..4ed04014fc 100644 --- a/node/src/main/kotlin/net/corda/node/services/statemachine/StateMachineManager.kt +++ b/node/src/main/kotlin/net/corda/node/services/statemachine/StateMachineManager.kt @@ -6,11 +6,13 @@ import co.paralleluniverse.io.serialization.kryo.KryoSerializer import co.paralleluniverse.strands.Strand import com.codahale.metrics.Gauge import com.esotericsoftware.kryo.Kryo +import com.google.common.collect.HashMultimap import com.google.common.util.concurrent.ListenableFuture import kotlinx.support.jdk8.collections.removeIf import net.corda.core.ThreadBox import net.corda.core.bufferUntilSubscribed import net.corda.core.crypto.Party +import net.corda.core.crypto.SecureHash import net.corda.core.crypto.commonName import net.corda.core.flows.FlowException import net.corda.core.flows.FlowLogic @@ -62,7 +64,7 @@ import javax.annotation.concurrent.ThreadSafe * TODO: Timeouts * TODO: Surfacing of exceptions via an API and/or management UI * TODO: Ability to control checkpointing explicitly, for cases where you know replaying a message can't hurt - * TODO: Implement stub/skel classes that provide a basic RPC framework on top of this. + * TODO: Don't store all active flows in memory, load from the database on demand. */ @ThreadSafe class StateMachineManager(val serviceHub: ServiceHubInternal, @@ -89,15 +91,17 @@ class StateMachineManager(val serviceHub: ServiceHubInternal, // A list of all the state machines being managed by this class. We expose snapshots of it via the stateMachines // property. - private val mutex = ThreadBox(object { + private class InnerState { var started = false val stateMachines = LinkedHashMap, Checkpoint>() - val changesPublisher = PublishSubject.create() + val changesPublisher = PublishSubject.create()!! + val fibersWaitingForLedgerCommit = HashMultimap.create>()!! fun notifyChangeObservers(fiber: FlowStateMachineImpl<*>, addOrRemove: AddOrRemove) { changesPublisher.bufferUntilDatabaseCommit().onNext(Change(fiber.logic, addOrRemove, fiber.id)) } - }) + } + private val mutex = ThreadBox(InnerState()) // True if we're shutting down, so don't resume anything. @Volatile private var stopping = false @@ -152,9 +156,27 @@ class StateMachineManager(val serviceHub: ServiceHubInternal, fun start() { restoreFibersFromCheckpoints() + listenToLedgerTransactions() serviceHub.networkMapCache.mapServiceRegistered.then(executor) { resumeRestoredFibers() } } + private fun listenToLedgerTransactions() { + // Observe the stream of committed, validated transactions and resume fibers that are waiting for them. + serviceHub.storageService.validatedTransactions.updates.subscribe { stx -> + val hash = stx.id + val flows: Set> = mutex.locked { fibersWaitingForLedgerCommit.removeAll(hash) } + if (flows.isNotEmpty()) { + executor.executeASAP { + for (flow in flows) { + logger.info("Resuming ${flow.id} because it was waiting for tx ${flow.waitingForLedgerCommitOf!!} which is now committed.") + flow.waitingForLedgerCommitOf = null + resumeFiber(flow) + } + } + } + } + } + private fun decrementLiveFibers() { liveFibers.countDown() } @@ -217,8 +239,20 @@ class StateMachineManager(val serviceHub: ServiceHubInternal, private fun resumeRestoredFiber(fiber: FlowStateMachineImpl<*>) { fiber.openSessions.values.forEach { openSessions[it.ourSessionId] = it } + val waitingForHash = fiber.waitingForLedgerCommitOf if (fiber.openSessions.values.any { it.waitingForResponse }) { fiber.logger.info("Restored, pending on receive") + } else if (waitingForHash != null) { + val stx = databaseTransaction(database) { + serviceHub.storageService.validatedTransactions.getTransaction(waitingForHash) + } + if (stx != null) { + fiber.logger.info("Resuming fiber as tx $waitingForHash has committed.") + resumeFiber(fiber) + } else { + fiber.logger.info("Restored, pending on ledger commit of $waitingForHash") + mutex.locked { fibersWaitingForLedgerCommit.put(waitingForHash, fiber) } + } } else { resumeFiber(fiber) } @@ -424,6 +458,7 @@ class StateMachineManager(val serviceHub: ServiceHubInternal, * Note that you must be on the [executor] thread. */ fun add(logic: FlowLogic): FlowStateMachine { + // TODO: Check that logic has @Suspendable on its call method. executor.checkOnThread() // We swap out the parent transaction context as using this frequently leads to a deadlock as we wait // on the flow completion future inside that context. The problem is that any progress checkpoints are @@ -457,8 +492,10 @@ class StateMachineManager(val serviceHub: ServiceHubInternal, private fun resumeFiber(fiber: FlowStateMachineImpl<*>) { // Avoid race condition when setting stopping to true and then checking liveFibers incrementLiveFibers() - if (!stopping) executor.executeASAP { - fiber.resume(scheduler) + if (!stopping) { + executor.executeASAP { + fiber.resume(scheduler) + } } else { fiber.logger.debug("Not resuming as SMM is stopping.") decrementLiveFibers() @@ -466,6 +503,7 @@ class StateMachineManager(val serviceHub: ServiceHubInternal, } private fun processIORequest(ioRequest: FlowIORequest) { + executor.checkOnThread() if (ioRequest is SendRequest) { if (ioRequest.message is SessionInit) { openSessions[ioRequest.session.ourSessionId] = ioRequest.session @@ -475,6 +513,24 @@ class StateMachineManager(val serviceHub: ServiceHubInternal, // We sent a message, but don't expect a response, so re-enter the continuation to let it keep going. resumeFiber(ioRequest.session.fiber) } + } else if (ioRequest is WaitForLedgerCommit) { + // Is it already committed? + val stx = databaseTransaction(database) { + serviceHub.storageService.validatedTransactions.getTransaction(ioRequest.hash) + } + if (stx != null) { + resumeFiber(ioRequest.fiber) + } else { + // No, then register to wait. + // + // We assume this code runs on the server thread, which is the only place transactions are committed + // currently. When we liberalise our threading somewhat, handing of wait requests will need to be + // reworked to make the wait atomic in another way. Otherwise there is a race between checking the + // database and updating the waiting list. + mutex.locked { + fibersWaitingForLedgerCommit[ioRequest.hash] += ioRequest.fiber + } + } } } diff --git a/node/src/main/kotlin/net/corda/node/services/vault/NodeVaultService.kt b/node/src/main/kotlin/net/corda/node/services/vault/NodeVaultService.kt index eeff28cf6d..80154b1c07 100644 --- a/node/src/main/kotlin/net/corda/node/services/vault/NodeVaultService.kt +++ b/node/src/main/kotlin/net/corda/node/services/vault/NodeVaultService.kt @@ -195,13 +195,6 @@ class NodeVaultService(private val services: ServiceHub) : SingletonSerializeAsT } } - /** - * Generate a transaction that moves an amount of currency to the given pubkey. - * - * @param onlyFromParties if non-null, the asset states will be filtered to only include those issued by the set - * of given parties. This can be useful if the party you're trying to pay has expectations - * about which type of asset claims they are willing to accept. - */ override fun generateSpend(tx: TransactionBuilder, amount: Amount, to: CompositeKey, diff --git a/node/src/test/kotlin/net/corda/node/services/statemachine/StateMachineManagerTests.kt b/node/src/test/kotlin/net/corda/node/services/statemachine/StateMachineManagerTests.kt index d8fdb57330..b0ed7a81da 100644 --- a/node/src/test/kotlin/net/corda/node/services/statemachine/StateMachineManagerTests.kt +++ b/node/src/test/kotlin/net/corda/node/services/statemachine/StateMachineManagerTests.kt @@ -5,8 +5,10 @@ import co.paralleluniverse.fibers.Suspendable import co.paralleluniverse.strands.Strand.UncaughtExceptionHandler import com.google.common.util.concurrent.ListenableFuture import net.corda.core.contracts.DOLLARS +import net.corda.core.contracts.DummyState import net.corda.core.contracts.issuedBy import net.corda.core.crypto.Party +import net.corda.core.crypto.SecureHash import net.corda.core.crypto.generateKeyPair import net.corda.core.flows.FlowException import net.corda.core.flows.FlowLogic @@ -19,8 +21,11 @@ import net.corda.core.random63BitValue import net.corda.core.rootCause import net.corda.core.serialization.OpaqueBytes import net.corda.core.serialization.deserialize +import net.corda.core.transactions.SignedTransaction +import net.corda.core.transactions.TransactionBuilder import net.corda.flows.CashCommand import net.corda.flows.CashFlow +import net.corda.flows.FinalityFlow import net.corda.flows.NotaryFlow import net.corda.node.services.persistence.checkpoints import net.corda.node.services.transactions.ValidatingNotaryService @@ -483,9 +488,26 @@ class StateMachineManagerTests { assertThat(resultFuture.getOrThrow()).isEqualTo("Hello") } - private inline fun > MockNode.restartAndGetRestoredFlow( - networkMapNode: MockNode? = null): P { - disableDBCloseOnStop() //Handover DB to new node copy + @Test + fun `wait for transaction`() { + val ptx = TransactionBuilder(notary = notary1.info.notaryIdentity) + ptx.addOutputState(DummyState()) + ptx.signWith(node1.services.legalIdentityKey) + val stx = ptx.toSignedTransaction() + + val future1 = node2.services.startFlow(WaitingFlows.Waiter(stx.id)).resultFuture + val future2 = node1.services.startFlow(WaitingFlows.Committer(stx, node2.info.legalIdentity)).resultFuture + net.runNetwork() + future1.getOrThrow() + future2.getOrThrow() + } + + + //////////////////////////////////////////////////////////////////////////////////////////////////////////// + //region Helpers + + private inline fun > MockNode.restartAndGetRestoredFlow(networkMapNode: MockNode? = null): P { + disableDBCloseOnStop() // Handover DB to new node copy stop() val newNode = mockNet.createNode(networkMapNode?.info?.address, id, advertisedServices = *advertisedServices.toTypedArray()) newNode.acceptableLiveFiberCountOnStop = 1 @@ -611,4 +633,22 @@ class StateMachineManagerTests { override fun equals(other: Any?): Boolean = other is MyFlowException && other.message == this.message override fun hashCode(): Int = message?.hashCode() ?: 31 } + + private object WaitingFlows { + class Waiter(private val hash: SecureHash) : FlowLogic() { + @Suspendable + override fun call() { + waitForLedgerCommit(hash) + } + } + + class Committer(private val stx: SignedTransaction, private val otherParty: Party) : FlowLogic() { + @Suspendable + override fun call() { + subFlow(FinalityFlow(stx, setOf(otherParty))) + } + } + } + + //endregion Helpers } diff --git a/samples/trader-demo/src/main/kotlin/net/corda/traderdemo/flow/SellerFlow.kt b/samples/trader-demo/src/main/kotlin/net/corda/traderdemo/flow/SellerFlow.kt index 6ae1c8f5d7..49c3b240ec 100644 --- a/samples/trader-demo/src/main/kotlin/net/corda/traderdemo/flow/SellerFlow.kt +++ b/samples/trader-demo/src/main/kotlin/net/corda/traderdemo/flow/SellerFlow.kt @@ -55,10 +55,7 @@ class SellerFlow(val otherParty: Party, amount, cpOwnerKey, progressTracker.getChildProgressTracker(TRADING)!!) - val tradeTX: SignedTransaction = subFlow(seller, shareParentSessions = true) - serviceHub.recordTransactions(listOf(tradeTX)) - - return tradeTX + return subFlow(seller, shareParentSessions = true) } @Suspendable From f8292f814827fb79d3bb26edca1761421e364733 Mon Sep 17 00:00:00 2001 From: Mike Hearn Date: Fri, 3 Feb 2017 12:48:22 +0100 Subject: [PATCH 05/33] Print out exceptions in the attachment demo test. --- .../net/corda/attachmentdemo/AttachmentDemoTest.kt | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/samples/attachment-demo/src/integration-test/kotlin/net/corda/attachmentdemo/AttachmentDemoTest.kt b/samples/attachment-demo/src/integration-test/kotlin/net/corda/attachmentdemo/AttachmentDemoTest.kt index 616fa3acd2..e1ddf1de70 100644 --- a/samples/attachment-demo/src/integration-test/kotlin/net/corda/attachmentdemo/AttachmentDemoTest.kt +++ b/samples/attachment-demo/src/integration-test/kotlin/net/corda/attachmentdemo/AttachmentDemoTest.kt @@ -19,20 +19,21 @@ class AttachmentDemoTest { startNode("Notary", setOf(ServiceInfo(SimpleNotaryService.Companion.type))) ).getOrThrow() - val senderThread = CompletableFuture.runAsync { + val senderThread = CompletableFuture.supplyAsync { nodeA.rpcClientToNode().use(demoUser[0].username, demoUser[0].password) { sender(this) } - } - val recipientThread = CompletableFuture.runAsync { + }.exceptionally { it.printStackTrace() } + + val recipientThread = CompletableFuture.supplyAsync{ nodeB.rpcClientToNode().use(demoUser[0].username, demoUser[0].password) { recipient(this) } - } + }.exceptionally { it.printStackTrace() } - // Just check they don't throw any exceptions.d - recipientThread.get() + // Just check they finish and don't throw any exceptions. senderThread.get() + recipientThread.get() }, isDebug = true) } } From 5ad10b05fb9100c05e1beff778cadaf3879875df Mon Sep 17 00:00:00 2001 From: Mike Hearn Date: Fri, 3 Feb 2017 12:49:31 +0100 Subject: [PATCH 06/33] Make FlowLogicRef able to handle multiple constructors more elegantly (e.g. when invoking FinalityFlow directly via RPC). --- .../net/corda/core/flows/FlowLogicRef.kt | 33 ++++++++++++++++--- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/core/src/main/kotlin/net/corda/core/flows/FlowLogicRef.kt b/core/src/main/kotlin/net/corda/core/flows/FlowLogicRef.kt index 9ee5cf9556..5324d47480 100644 --- a/core/src/main/kotlin/net/corda/core/flows/FlowLogicRef.kt +++ b/core/src/main/kotlin/net/corda/core/flows/FlowLogicRef.kt @@ -8,6 +8,7 @@ import java.lang.reflect.Type import java.util.* import kotlin.reflect.KFunction import kotlin.reflect.KParameter +import kotlin.reflect.jvm.javaConstructor import kotlin.reflect.jvm.javaType import kotlin.reflect.primaryConstructor @@ -63,13 +64,37 @@ class FlowLogicRefFactory(private val flowWhitelist: Map>) : } /** - * Create a [FlowLogicRef] for the Kotlin primary constructor or Java constructor and the given args. + * Create a [FlowLogicRef] by matching against the available constructors and the given args. */ fun create(type: Class>, vararg args: Any?): FlowLogicRef { - val constructor = type.kotlin.primaryConstructor ?: return createJava(type, *args) - if (constructor.parameters.size < args.size) { - throw IllegalFlowLogicException(type, "due to too many arguments supplied to kotlin primary constructor") + // If it's not a Kotlin class, do the Java path. + if (type.kotlin.primaryConstructor == null) + return createJava(type, *args) + + // Find the right constructor to use, based on passed argument types. This is for when we don't know + // the right argument names. + // + // TODO: This is used via RPC but it's probably better if we pass in argument names and values explicitly + // to avoid guessing which constructor too use. + val argTypes = args.map { it?.javaClass } + val constructor = try { + type.kotlin.constructors.single { ctor -> + // Get the types of the arguments, always boxed (as that's what we get in the invocation). + val ctorTypes = ctor.javaConstructor!!.parameterTypes.map { Primitives.wrap(it) } + if (argTypes.size != ctorTypes.size) + return@single false + for ((argType, ctorType) in argTypes.zip(ctorTypes)) { + if (argType == null) continue // Try and find a match based on the other arguments. + if (!ctorType.isAssignableFrom(argType)) return@single false + } + true + } + } catch (e: IllegalArgumentException) { + throw IllegalFlowLogicException(type, "due to ambiguous match against the constructors: $argTypes") + } catch (e: NoSuchElementException) { + throw IllegalFlowLogicException(type, "due to missing constructor for arguments: $argTypes") } + // Build map of args from array val argsMap = args.zip(constructor.parameters).map { Pair(it.second.name!!, it.first) }.toMap() return createKotlin(type, argsMap) From 879ee9d897506458ab3ef0cdbe5fc68466a27ea4 Mon Sep 17 00:00:00 2001 From: Mike Hearn Date: Fri, 3 Feb 2017 13:37:44 +0100 Subject: [PATCH 07/33] Work around change in how c'tors with optional arguments are handled via RPC in FixingRoleDecider. --- .../src/main/kotlin/net/corda/irs/flows/FixingFlow.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/samples/irs-demo/src/main/kotlin/net/corda/irs/flows/FixingFlow.kt b/samples/irs-demo/src/main/kotlin/net/corda/irs/flows/FixingFlow.kt index 67245913af..041535441a 100644 --- a/samples/irs-demo/src/main/kotlin/net/corda/irs/flows/FixingFlow.kt +++ b/samples/irs-demo/src/main/kotlin/net/corda/irs/flows/FixingFlow.kt @@ -132,8 +132,9 @@ object FixingFlow { * * TODO: Replace [FixingSession] and [FixingSessionInitiationHandler] with generic session initiation logic once it exists. */ - class FixingRoleDecider(val ref: StateRef, - override val progressTracker: ProgressTracker = tracker()) : FlowLogic() { + class FixingRoleDecider(val ref: StateRef, override val progressTracker: ProgressTracker) : FlowLogic() { + @Suppress("unused") // Used via reflection. + constructor(ref: StateRef) : this(ref, tracker()) companion object { class LOADING() : ProgressTracker.Step("Loading state to decide fixing role") From 2f378f0e15f4a170b76522f1930c10a50779004a Mon Sep 17 00:00:00 2001 From: Mike Hearn Date: Fri, 3 Feb 2017 13:38:01 +0100 Subject: [PATCH 08/33] Minor: suppress deprecation warning in CordaRPCOpsImpl --- node/src/main/kotlin/net/corda/node/internal/CordaRPCOpsImpl.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/node/src/main/kotlin/net/corda/node/internal/CordaRPCOpsImpl.kt b/node/src/main/kotlin/net/corda/node/internal/CordaRPCOpsImpl.kt index 6bf007ddf3..773b2c9965 100644 --- a/node/src/main/kotlin/net/corda/node/internal/CordaRPCOpsImpl.kt +++ b/node/src/main/kotlin/net/corda/node/internal/CordaRPCOpsImpl.kt @@ -103,6 +103,7 @@ class CordaRPCOpsImpl( override fun attachmentExists(id: SecureHash) = services.storageService.attachments.openAttachment(id) != null override fun uploadAttachment(jar: InputStream) = services.storageService.attachments.importAttachment(jar) override fun currentNodeTime(): Instant = Instant.now(services.clock) + @Suppress("OverridingDeprecatedMember", "DEPRECATION") override fun uploadFile(dataType: String, name: String?, file: InputStream): String { val acceptor = services.storageService.uploaders.firstOrNull { it.accepts(dataType) } return databaseTransaction(database) { From 9910ce01a3b01db902474944d3eb3b96bbcb3cb2 Mon Sep 17 00:00:00 2001 From: Ross Nicoll Date: Thu, 2 Feb 2017 16:10:10 +0000 Subject: [PATCH 09/33] Switch to using CompositeKey inside network map cache Switch to using CompositeKey inside network map cache, so that look up of node info from keys can be done in a more sensible manner. --- .../node/services/network/InMemoryNetworkMapCache.kt | 10 +++++----- .../net/corda/testing/node/MockNetworkMapCache.kt | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/node/src/main/kotlin/net/corda/node/services/network/InMemoryNetworkMapCache.kt b/node/src/main/kotlin/net/corda/node/services/network/InMemoryNetworkMapCache.kt index 892194c24f..ae30fe3cfd 100644 --- a/node/src/main/kotlin/net/corda/node/services/network/InMemoryNetworkMapCache.kt +++ b/node/src/main/kotlin/net/corda/node/services/network/InMemoryNetworkMapCache.kt @@ -54,10 +54,10 @@ open class InMemoryNetworkMapCache : SingletonSerializeAsToken(), NetworkMapCach override val mapServiceRegistered: ListenableFuture get() = _registrationFuture private var registeredForPush = false - protected var registeredNodes: MutableMap = Collections.synchronizedMap(HashMap()) + protected var registeredNodes: MutableMap = Collections.synchronizedMap(HashMap()) override fun getPartyInfo(party: Party): PartyInfo? { - val node = registeredNodes[party] + val node = registeredNodes[party.owningKey] if (node != null) { return PartyInfo.Node(node) } @@ -71,7 +71,7 @@ open class InMemoryNetworkMapCache : SingletonSerializeAsToken(), NetworkMapCach return null } - override fun getNodeByLegalIdentityKey(compositeKey: CompositeKey): NodeInfo? = registeredNodes[Party("", compositeKey)] + override fun getNodeByLegalIdentityKey(compositeKey: CompositeKey): NodeInfo? = registeredNodes[compositeKey] override fun track(): Pair, Observable> { synchronized(_changed) { @@ -113,7 +113,7 @@ open class InMemoryNetworkMapCache : SingletonSerializeAsToken(), NetworkMapCach override fun addNode(node: NodeInfo) { synchronized(_changed) { - val previousNode = registeredNodes.put(node.legalIdentity, node) + val previousNode = registeredNodes.put(node.legalIdentity.owningKey, node) if (previousNode == null) { changePublisher.onNext(MapChange.Added(node)) } else if (previousNode != node) { @@ -124,7 +124,7 @@ open class InMemoryNetworkMapCache : SingletonSerializeAsToken(), NetworkMapCach override fun removeNode(node: NodeInfo) { synchronized(_changed) { - registeredNodes.remove(node.legalIdentity) + registeredNodes.remove(node.legalIdentity.owningKey) changePublisher.onNext(MapChange.Removed(node)) } } diff --git a/test-utils/src/main/kotlin/net/corda/testing/node/MockNetworkMapCache.kt b/test-utils/src/main/kotlin/net/corda/testing/node/MockNetworkMapCache.kt index a961f264a1..c200fc3cf8 100644 --- a/test-utils/src/main/kotlin/net/corda/testing/node/MockNetworkMapCache.kt +++ b/test-utils/src/main/kotlin/net/corda/testing/node/MockNetworkMapCache.kt @@ -21,8 +21,8 @@ class MockNetworkMapCache() : InMemoryNetworkMapCache() { init { val mockNodeA = NodeInfo(MockAddress("bankC:8080"), Party("Bank C", DummyPublicKey("Bank C"))) val mockNodeB = NodeInfo(MockAddress("bankD:8080"), Party("Bank D", DummyPublicKey("Bank D"))) - registeredNodes[mockNodeA.legalIdentity] = mockNodeA - registeredNodes[mockNodeB.legalIdentity] = mockNodeB + registeredNodes[mockNodeA.legalIdentity.owningKey] = mockNodeA + registeredNodes[mockNodeB.legalIdentity.owningKey] = mockNodeB runWithoutMapService() } @@ -32,7 +32,7 @@ class MockNetworkMapCache() : InMemoryNetworkMapCache() { */ @VisibleForTesting fun addRegistration(node: NodeInfo) { - registeredNodes[node.legalIdentity] = node + registeredNodes[node.legalIdentity.owningKey] = node } /** @@ -41,6 +41,6 @@ class MockNetworkMapCache() : InMemoryNetworkMapCache() { */ @VisibleForTesting fun deleteRegistration(legalIdentity: Party) : Boolean { - return registeredNodes.remove(legalIdentity) != null + return registeredNodes.remove(legalIdentity.owningKey) != null } } From 6ff8d734020293e4abc74ae6dfa3586c4ac18e41 Mon Sep 17 00:00:00 2001 From: Patrick Kuo Date: Mon, 6 Feb 2017 14:56:00 +0000 Subject: [PATCH 10/33] Rename netpermission to doorman --- {netpermission => doorman}/build.gradle | 6 ++-- .../com/r3/corda/doorman/DoormanWebService.kt | 12 +++---- .../main/kotlin/com/r3/corda/doorman}/Main.kt | 34 +++++++++---------- .../CertificationRequestStorage.kt | 10 +++--- .../DBCertificateRequestStorage.kt | 12 +++---- .../src/main/resources/reference.conf | 0 .../r3/corda/doorman/DoormanServiceTest.kt | 26 +++++++------- .../DBCertificateRequestStorageTest.kt | 9 +++-- settings.gradle | 2 +- 9 files changed, 55 insertions(+), 56 deletions(-) rename {netpermission => doorman}/build.gradle (92%) rename netpermission/src/main/kotlin/com/r3/corda/netpermission/internal/CertificateSigningService.kt => doorman/src/main/kotlin/com/r3/corda/doorman/DoormanWebService.kt (86%) rename {netpermission/src/main/kotlin/com/r3/corda/netpermission => doorman/src/main/kotlin/com/r3/corda/doorman}/Main.kt (81%) rename {netpermission/src/main/kotlin/com/r3/corda/netpermission/internal => doorman/src/main/kotlin/com/r3/corda/doorman}/persistence/CertificationRequestStorage.kt (81%) rename {netpermission/src/main/kotlin/com/r3/corda/netpermission/internal => doorman/src/main/kotlin/com/r3/corda/doorman}/persistence/DBCertificateRequestStorage.kt (92%) rename {netpermission => doorman}/src/main/resources/reference.conf (100%) rename netpermission/src/test/kotlin/com/r3/corda/netpermission/CertificateSigningServiceTest.kt => doorman/src/test/kotlin/com/r3/corda/doorman/DoormanServiceTest.kt (83%) rename {netpermission/src/test/kotlin/com/r3/corda/netpermission => doorman/src/test/kotlin/com/r3/corda/doorman}/internal/persistence/DBCertificateRequestStorageTest.kt (94%) diff --git a/netpermission/build.gradle b/doorman/build.gradle similarity index 92% rename from netpermission/build.gradle rename to doorman/build.gradle index aba9d88891..457d845d87 100644 --- a/netpermission/build.gradle +++ b/doorman/build.gradle @@ -13,9 +13,9 @@ repositories { } } -task buildCertSignerJAR(type: FatCapsule, dependsOn: 'jar') { - applicationClass 'com.r3.corda.netpermission.MainKt' - archiveName 'certSigner.jar' +task buildDoormanJAR(type: FatCapsule, dependsOn: 'jar') { + applicationClass 'com.r3.corda.doorman.MainKt' + archiveName 'doorman.jar' capsuleManifest { systemProperties['log4j.configuration'] = 'log4j2.xml' diff --git a/netpermission/src/main/kotlin/com/r3/corda/netpermission/internal/CertificateSigningService.kt b/doorman/src/main/kotlin/com/r3/corda/doorman/DoormanWebService.kt similarity index 86% rename from netpermission/src/main/kotlin/com/r3/corda/netpermission/internal/CertificateSigningService.kt rename to doorman/src/main/kotlin/com/r3/corda/doorman/DoormanWebService.kt index 4d2e9f8043..73c17789e6 100644 --- a/netpermission/src/main/kotlin/com/r3/corda/netpermission/internal/CertificateSigningService.kt +++ b/doorman/src/main/kotlin/com/r3/corda/doorman/DoormanWebService.kt @@ -1,8 +1,8 @@ -package com.r3.corda.netpermission.internal +package com.r3.corda.doorman -import com.r3.corda.netpermission.internal.persistence.CertificateResponse -import com.r3.corda.netpermission.internal.persistence.CertificationData -import com.r3.corda.netpermission.internal.persistence.CertificationRequestStorage +import com.r3.corda.doorman.persistence.CertificateResponse +import com.r3.corda.doorman.persistence.CertificationRequestData +import com.r3.corda.doorman.persistence.CertificationRequestStorage import net.corda.core.crypto.X509Utilities.CACertAndKey import net.corda.core.crypto.X509Utilities.CORDA_CLIENT_CA import net.corda.core.crypto.X509Utilities.CORDA_INTERMEDIATE_CA @@ -25,7 +25,7 @@ import javax.ws.rs.core.Response.Status.UNAUTHORIZED * Provides functionality for asynchronous submission of certificate signing requests and retrieval of the results. */ @Path("") -class CertificateSigningService(val intermediateCACertAndKey: CACertAndKey, val rootCert: Certificate, val storage: CertificationRequestStorage) { +class DoormanWebService(val intermediateCACertAndKey: CACertAndKey, val rootCert: Certificate, val storage: CertificationRequestStorage) { @Context lateinit var request: HttpServletRequest /** * Accept stream of [PKCS10CertificationRequest] from user and persists in [CertificationRequestStorage] for approval. @@ -42,7 +42,7 @@ class CertificateSigningService(val intermediateCACertAndKey: CACertAndKey, val // TODO: Certificate signing request verifications. // TODO: Use jira api / slack bot to semi automate the approval process? // TODO: Acknowledge to user we have received the request via email? - val requestId = storage.saveRequest(CertificationData(request.remoteHost, request.remoteAddr, certificationRequest)) + val requestId = storage.saveRequest(CertificationRequestData(request.remoteHost, request.remoteAddr, certificationRequest)) return ok(requestId).build() } diff --git a/netpermission/src/main/kotlin/com/r3/corda/netpermission/Main.kt b/doorman/src/main/kotlin/com/r3/corda/doorman/Main.kt similarity index 81% rename from netpermission/src/main/kotlin/com/r3/corda/netpermission/Main.kt rename to doorman/src/main/kotlin/com/r3/corda/doorman/Main.kt index 0394e9a1ed..5a64a2c916 100644 --- a/netpermission/src/main/kotlin/com/r3/corda/netpermission/Main.kt +++ b/doorman/src/main/kotlin/com/r3/corda/doorman/Main.kt @@ -1,8 +1,7 @@ -package com.r3.corda.netpermission +package com.r3.corda.doorman import com.google.common.net.HostAndPort -import com.r3.corda.netpermission.internal.CertificateSigningService -import com.r3.corda.netpermission.internal.persistence.DBCertificateRequestStorage +import com.r3.corda.doorman.persistence.DBCertificateRequestStorage import joptsimple.ArgumentAcceptingOptionSpec import joptsimple.OptionParser import net.corda.core.crypto.X509Utilities @@ -30,20 +29,22 @@ import kotlin.system.exitProcess * The server will require keystorePath, keystore password and key password via command line input. * The Intermediate CA certificate,Intermediate CA private key and Root CA Certificate should use alias name specified in [X509Utilities] */ -class CertificateSigningServer(val webServerAddr: HostAndPort, val certSigningService: CertificateSigningService) : Closeable { +class DoormanServer(val webServerAddr: HostAndPort, val doormanWebService: DoormanWebService) : Closeable { companion object { - val log = loggerFor() - fun Server.hostAndPort(): HostAndPort { - val connector = server.connectors.first() as ServerConnector - return HostAndPort.fromParts(connector.host, connector.localPort) - } + val log = loggerFor() } - val server: Server = initWebServer() + private val server: Server = initWebServer() + val hostAndPort: HostAndPort get() = server.connectors + .map { it as? ServerConnector } + .filterNotNull() + .map { HostAndPort.fromParts(it.host, it.localPort) } + .first() override fun close() { log.info("Shutting down CertificateSigningService...") server.stop() + server.join() } private fun initWebServer(): Server { @@ -53,7 +54,7 @@ class CertificateSigningServer(val webServerAddr: HostAndPort, val certSigningSe addHandler(buildServletContextHandler()) } start() - log.info("CertificateSigningService started on ${server.hostAndPort()}") + log.info("CertificateSigningService started on $hostAndPort") } } @@ -62,7 +63,7 @@ class CertificateSigningServer(val webServerAddr: HostAndPort, val certSigningSe contextPath = "/" val resourceConfig = ResourceConfig().apply { // Add your API provider classes (annotated for JAX-RS) here - register(certSigningService) + register(doormanWebService) } val jerseyServlet = ServletHolder(ServletContainer(resourceConfig)).apply { initOrder = 0 // Initialise at server start @@ -79,7 +80,7 @@ object ParamsSpec { } fun main(args: Array) { - val log = CertificateSigningServer.log + val log = DoormanServer.log log.info("Starting certificate signing server.") try { ParamsSpec.parser.parse(*args) @@ -97,9 +98,8 @@ fun main(args: Array) { // Create DB connection. val (datasource, database) = configureDatabase(config.getProperties("dataSourceProperties")) - val storage = DBCertificateRequestStorage(database) - val service = CertificateSigningService(intermediateCACertAndKey, rootCA, storage) + val service = DoormanWebService(intermediateCACertAndKey, rootCA, storage) // Background thread approving all request periodically. var stopSigner = false @@ -123,14 +123,12 @@ fun main(args: Array) { null } - CertificateSigningServer(HostAndPort.fromParts(config.getString("host"), config.getInt("port")), service).use { + DoormanServer(HostAndPort.fromParts(config.getString("host"), config.getInt("port")), service).use { Runtime.getRuntime().addShutdownHook(thread(false) { stopSigner = true certSinger?.join() - it.close() datasource.close() }) - it.server.join() } } } \ No newline at end of file diff --git a/netpermission/src/main/kotlin/com/r3/corda/netpermission/internal/persistence/CertificationRequestStorage.kt b/doorman/src/main/kotlin/com/r3/corda/doorman/persistence/CertificationRequestStorage.kt similarity index 81% rename from netpermission/src/main/kotlin/com/r3/corda/netpermission/internal/persistence/CertificationRequestStorage.kt rename to doorman/src/main/kotlin/com/r3/corda/doorman/persistence/CertificationRequestStorage.kt index 5c861fac64..0e9db59c0f 100644 --- a/netpermission/src/main/kotlin/com/r3/corda/netpermission/internal/persistence/CertificationRequestStorage.kt +++ b/doorman/src/main/kotlin/com/r3/corda/doorman/persistence/CertificationRequestStorage.kt @@ -1,4 +1,4 @@ -package com.r3.corda.netpermission.internal.persistence +package com.r3.corda.doorman.persistence import org.bouncycastle.pkcs.PKCS10CertificationRequest import java.security.cert.Certificate @@ -11,12 +11,12 @@ interface CertificationRequestStorage { * Persist [certificationData] in storage for further approval if it's a valid request. If not then it will be automically * rejected and not subject to any approval process. In both cases a randomly generated request ID is returned. */ - fun saveRequest(certificationData: CertificationData): String + fun saveRequest(certificationData: CertificationRequestData): String /** * Retrieve certificate singing request and Host/IP information using [requestId]. */ - fun getRequest(requestId: String): CertificationData? + fun getRequest(requestId: String): CertificationRequestData? /** * Return the response for a previously saved request with ID [requestId]. @@ -26,7 +26,7 @@ interface CertificationRequestStorage { /** * Approve the given request by generating and storing a new certificate using the provided generator. */ - fun approveRequest(requestId: String, certificateGenerator: (CertificationData) -> Certificate) + fun approveRequest(requestId: String, certificateGenerator: (CertificationRequestData) -> Certificate) /** * Reject the given request using the given reason. @@ -40,7 +40,7 @@ interface CertificationRequestStorage { fun getPendingRequestIds(): List } -data class CertificationData(val hostName: String, val ipAddress: String, val request: PKCS10CertificationRequest) +data class CertificationRequestData(val hostName: String, val ipAddress: String, val request: PKCS10CertificationRequest) sealed class CertificateResponse { object NotReady : CertificateResponse() diff --git a/netpermission/src/main/kotlin/com/r3/corda/netpermission/internal/persistence/DBCertificateRequestStorage.kt b/doorman/src/main/kotlin/com/r3/corda/doorman/persistence/DBCertificateRequestStorage.kt similarity index 92% rename from netpermission/src/main/kotlin/com/r3/corda/netpermission/internal/persistence/DBCertificateRequestStorage.kt rename to doorman/src/main/kotlin/com/r3/corda/doorman/persistence/DBCertificateRequestStorage.kt index 167d550462..1bd0809655 100644 --- a/netpermission/src/main/kotlin/com/r3/corda/netpermission/internal/persistence/DBCertificateRequestStorage.kt +++ b/doorman/src/main/kotlin/com/r3/corda/doorman/persistence/DBCertificateRequestStorage.kt @@ -1,4 +1,4 @@ -package com.r3.corda.netpermission.internal.persistence +package com.r3.corda.doorman.persistence import net.corda.core.crypto.SecureHash import net.corda.core.crypto.commonName @@ -29,7 +29,7 @@ class DBCertificateRequestStorage(private val database: Database) : Certificatio } } - override fun saveRequest(certificationData: CertificationData): String { + override fun saveRequest(certificationData: CertificationRequestData): String { val legalName = certificationData.request.subject.commonName val requestId = SecureHash.randomSHA256().toString() databaseTransaction(database) { @@ -83,7 +83,7 @@ class DBCertificateRequestStorage(private val database: Database) : Certificatio } } - override fun approveRequest(requestId: String, certificateGenerator: (CertificationData) -> Certificate) { + override fun approveRequest(requestId: String, certificateGenerator: (CertificationRequestData) -> Certificate) { databaseTransaction(database) { val request = singleRequestWhere { DataTable.requestId eq requestId and DataTable.processTimestamp.isNull() } if (request != null) { @@ -109,7 +109,7 @@ class DBCertificateRequestStorage(private val database: Database) : Certificatio } } - override fun getRequest(requestId: String): CertificationData? { + override fun getRequest(requestId: String): CertificationRequestData? { return databaseTransaction(database) { singleRequestWhere { DataTable.requestId eq requestId } } @@ -121,10 +121,10 @@ class DBCertificateRequestStorage(private val database: Database) : Certificatio } } - private fun singleRequestWhere(where: SqlExpressionBuilder.() -> Op): CertificationData? { + private fun singleRequestWhere(where: SqlExpressionBuilder.() -> Op): CertificationRequestData? { return DataTable .select(where) - .map { CertificationData(it[DataTable.hostName], it[DataTable.ipAddress], deserializeFromBlob(it[DataTable.request])) } + .map { CertificationRequestData(it[DataTable.hostName], it[DataTable.ipAddress], deserializeFromBlob(it[DataTable.request])) } .singleOrNull() } } \ No newline at end of file diff --git a/netpermission/src/main/resources/reference.conf b/doorman/src/main/resources/reference.conf similarity index 100% rename from netpermission/src/main/resources/reference.conf rename to doorman/src/main/resources/reference.conf diff --git a/netpermission/src/test/kotlin/com/r3/corda/netpermission/CertificateSigningServiceTest.kt b/doorman/src/test/kotlin/com/r3/corda/doorman/DoormanServiceTest.kt similarity index 83% rename from netpermission/src/test/kotlin/com/r3/corda/netpermission/CertificateSigningServiceTest.kt rename to doorman/src/test/kotlin/com/r3/corda/doorman/DoormanServiceTest.kt index 1de93f2168..21c42e1afd 100644 --- a/netpermission/src/test/kotlin/com/r3/corda/netpermission/CertificateSigningServiceTest.kt +++ b/doorman/src/test/kotlin/com/r3/corda/doorman/DoormanServiceTest.kt @@ -1,12 +1,10 @@ -package com.r3.corda.netpermission +package com.r3.corda.doorman import com.google.common.net.HostAndPort import com.nhaarman.mockito_kotlin.* -import com.r3.corda.netpermission.CertificateSigningServer.Companion.hostAndPort -import com.r3.corda.netpermission.internal.CertificateSigningService -import com.r3.corda.netpermission.internal.persistence.CertificateResponse -import com.r3.corda.netpermission.internal.persistence.CertificationData -import com.r3.corda.netpermission.internal.persistence.CertificationRequestStorage +import com.r3.corda.doorman.persistence.CertificateResponse +import com.r3.corda.doorman.persistence.CertificationRequestData +import com.r3.corda.doorman.persistence.CertificationRequestStorage import net.corda.core.crypto.CertificateStream import net.corda.core.crypto.SecureHash import net.corda.core.crypto.X509Utilities @@ -27,18 +25,18 @@ import java.util.zip.ZipInputStream import javax.ws.rs.core.MediaType import kotlin.test.assertEquals -class CertificateSigningServiceTest { +class DoormanServiceTest { private val rootCA = X509Utilities.createSelfSignedCACert("Corda Node Root CA") private val intermediateCA = X509Utilities.createSelfSignedCACert("Corda Node Intermediate CA") - private lateinit var signingServer: CertificateSigningServer + private lateinit var doormanServer: DoormanServer private fun startSigningServer(storage: CertificationRequestStorage) { - signingServer = CertificateSigningServer(HostAndPort.fromParts("localhost", 0), CertificateSigningService(intermediateCA, rootCA.certificate, storage)) + doormanServer = DoormanServer(HostAndPort.fromParts("localhost", 0), DoormanWebService(intermediateCA, rootCA.certificate, storage)) } @After fun close() { - signingServer.close() + doormanServer.close() } @Test @@ -74,8 +72,8 @@ class CertificateSigningServiceTest { } on { approveRequest(eq(id), any()) }.then { @Suppress("UNCHECKED_CAST") - val certGen = it.arguments[1] as ((CertificationData) -> Certificate) - val request = CertificationData("", "", X509Utilities.createCertificateSigningRequest("LegalName", "London", "admin@test.com", keyPair)) + val certGen = it.arguments[1] as ((CertificationRequestData) -> Certificate) + val request = CertificationRequestData("", "", X509Utilities.createCertificateSigningRequest("LegalName", "London", "admin@test.com", keyPair)) certificateStore[id] = certGen(request) Unit } @@ -123,7 +121,7 @@ class CertificateSigningServiceTest { } private fun submitRequest(request: PKCS10CertificationRequest): String { - val conn = URL("http://${signingServer.server.hostAndPort()}/api/certificate").openConnection() as HttpURLConnection + val conn = URL("http://${doormanServer.hostAndPort}/api/certificate").openConnection() as HttpURLConnection conn.doOutput = true conn.requestMethod = "POST" conn.setRequestProperty("Content-Type", MediaType.APPLICATION_OCTET_STREAM) @@ -132,7 +130,7 @@ class CertificateSigningServiceTest { } private fun pollForResponse(id: String): PollResponse { - val url = URL("http://${signingServer.server.hostAndPort()}/api/certificate/$id") + val url = URL("http://${doormanServer.hostAndPort}/api/certificate/$id") val conn = url.openConnection() as HttpURLConnection conn.requestMethod = "GET" diff --git a/netpermission/src/test/kotlin/com/r3/corda/netpermission/internal/persistence/DBCertificateRequestStorageTest.kt b/doorman/src/test/kotlin/com/r3/corda/doorman/internal/persistence/DBCertificateRequestStorageTest.kt similarity index 94% rename from netpermission/src/test/kotlin/com/r3/corda/netpermission/internal/persistence/DBCertificateRequestStorageTest.kt rename to doorman/src/test/kotlin/com/r3/corda/doorman/internal/persistence/DBCertificateRequestStorageTest.kt index 652798d257..6a84306b33 100644 --- a/netpermission/src/test/kotlin/com/r3/corda/netpermission/internal/persistence/DBCertificateRequestStorageTest.kt +++ b/doorman/src/test/kotlin/com/r3/corda/doorman/internal/persistence/DBCertificateRequestStorageTest.kt @@ -1,5 +1,8 @@ -package com.r3.corda.netpermission.internal.persistence +package com.r3.corda.doorman.internal.persistence +import com.r3.corda.doorman.persistence.CertificateResponse +import com.r3.corda.doorman.persistence.CertificationRequestData +import com.r3.corda.doorman.persistence.DBCertificateRequestStorage import net.corda.core.crypto.X509Utilities import net.corda.node.utilities.configureDatabase import net.corda.testing.node.makeTestDataSourceProperties @@ -119,9 +122,9 @@ class DBCertificateRequestStorageTest { assertThat(response.message).contains(",") } - private fun createRequest(legalName: String): Pair { + private fun createRequest(legalName: String): Pair { val keyPair = X509Utilities.generateECDSAKeyPairForSSL() - val request = CertificationData( + val request = CertificationRequestData( "hostname", "0.0.0.0", X509Utilities.createCertificateSigningRequest(legalName, "London", "admin@test.com", keyPair)) diff --git a/settings.gradle b/settings.gradle index 5848cc6751..966b143624 100644 --- a/settings.gradle +++ b/settings.gradle @@ -7,7 +7,7 @@ include 'core' include 'node' include 'node:capsule' include 'client' -include 'netpermission' +include 'doorman' include 'experimental' include 'experimental:sandbox' include 'test-utils' From f5c9e4ed594cbb5c4d55c88bc91f50a26524cf53 Mon Sep 17 00:00:00 2001 From: Ross Nicoll Date: Thu, 2 Feb 2017 10:42:49 +0000 Subject: [PATCH 11/33] Remove use of names from contracts Remove dependency on name data that cash/obligation state objects will not have access to party details (such as name) once privacy is correctly enforced. --- .../net/corda/contracts/asset/Obligation.kt | 2 +- .../contracts/clause/AbstractConserveAmount.kt | 2 +- .../net/corda/contracts/asset/CashTests.kt | 18 +++++++++--------- .../corda/contracts/asset/ObligationTests.kt | 14 +++++++------- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/finance/src/main/kotlin/net/corda/contracts/asset/Obligation.kt b/finance/src/main/kotlin/net/corda/contracts/asset/Obligation.kt index 8f946c0b9c..9d384cda0a 100644 --- a/finance/src/main/kotlin/net/corda/contracts/asset/Obligation.kt +++ b/finance/src/main/kotlin/net/corda/contracts/asset/Obligation.kt @@ -190,7 +190,7 @@ class Obligation

: Contract { "amount in settle command ${command.value.amount} matches settled total $totalAmountSettled" by (command.value.amount == totalAmountSettled) "signatures are present from all obligors" by command.signers.containsAll(requiredSigners) "there are no zero sized inputs" by inputs.none { it.amount.quantity == 0L } - "at obligor ${obligor.name} the obligations after settlement balance" by + "at obligor ${obligor} the obligations after settlement balance" by (inputAmount == outputAmount + Amount(totalPenniesSettled, groupingKey)) } return setOf(command.value) diff --git a/finance/src/main/kotlin/net/corda/contracts/clause/AbstractConserveAmount.kt b/finance/src/main/kotlin/net/corda/contracts/clause/AbstractConserveAmount.kt index d636ccd1e3..1863997635 100644 --- a/finance/src/main/kotlin/net/corda/contracts/clause/AbstractConserveAmount.kt +++ b/finance/src/main/kotlin/net/corda/contracts/clause/AbstractConserveAmount.kt @@ -99,7 +99,7 @@ abstract class AbstractConserveAmount, C : CommandData, T : requireThat { "there are no zero sized inputs" by inputs.none { it.amount.quantity == 0L } - "for reference ${deposit.reference} at issuer ${deposit.party.name} the amounts balance: ${inputAmount.quantity} - ${amountExitingLedger.quantity} != ${outputAmount.quantity}" by + "for reference ${deposit.reference} at issuer ${deposit.party} the amounts balance: ${inputAmount.quantity} - ${amountExitingLedger.quantity} != ${outputAmount.quantity}" by (inputAmount == outputAmount + amountExitingLedger) } diff --git a/finance/src/test/kotlin/net/corda/contracts/asset/CashTests.kt b/finance/src/test/kotlin/net/corda/contracts/asset/CashTests.kt index 0e2e910968..e1e4c8e65d 100644 --- a/finance/src/test/kotlin/net/corda/contracts/asset/CashTests.kt +++ b/finance/src/test/kotlin/net/corda/contracts/asset/CashTests.kt @@ -191,7 +191,7 @@ class CashTests { // Move fails: not allowed to summon money. tweak { command(DUMMY_PUBKEY_1) { Cash.Commands.Move() } - this `fails with` "at issuer MegaCorp the amounts balance" + this `fails with` "the amounts balance" } // Issue works. @@ -305,14 +305,14 @@ class CashTests { transaction { input { inState } output { outState `issued by` MINI_CORP } - this `fails with` "at issuer MegaCorp the amounts balance" + this `fails with` "the amounts balance" } // Can't change deposit reference when splitting. transaction { input { inState } output { outState.copy(amount = inState.amount / 2).editDepositRef(0) } output { outState.copy(amount = inState.amount / 2).editDepositRef(1) } - this `fails with` "for reference [01] at issuer MegaCorp the amounts balance" + this `fails with` "the amounts balance" } // Can't mix currencies. transaction { @@ -338,7 +338,7 @@ class CashTests { input { inState `issued by` MINI_CORP } output { outState } command(DUMMY_PUBKEY_1) { Cash.Commands.Move() } - this `fails with` "at issuer MiniCorp the amounts balance" + this `fails with` "the amounts balance" } // Can't combine two different deposits at the same issuer. transaction { @@ -386,10 +386,10 @@ class CashTests { command(MEGA_CORP_PUBKEY, MINI_CORP_PUBKEY) { Cash.Commands.Move() } - this `fails with` "at issuer MegaCorp the amounts balance" + this `fails with` "the amounts balance" command(MEGA_CORP_PUBKEY) { Cash.Commands.Exit(200.DOLLARS `issued by` defaultIssuer) } - this `fails with` "at issuer MiniCorp the amounts balance" + this `fails with` "the amounts balance" command(MINI_CORP_PUBKEY) { Cash.Commands.Exit(200.DOLLARS `issued by` MINI_CORP.ref(defaultRef)) } this.verifies() @@ -404,7 +404,7 @@ class CashTests { output { outState.copy(amount = inState.amount - (200.DOLLARS `issued by` defaultIssuer)) } command(MEGA_CORP_PUBKEY) { Cash.Commands.Exit(200.DOLLARS `issued by` defaultIssuer) } command(DUMMY_PUBKEY_1) { Cash.Commands.Move() } - this `fails with` "at issuer MegaCorp the amounts balance" + this `fails with` "the amounts balance" } } @@ -418,13 +418,13 @@ class CashTests { // Can't merge them together. tweak { output { inState.copy(owner = DUMMY_PUBKEY_2, amount = 2000.DOLLARS `issued by` defaultIssuer) } - this `fails with` "at issuer MegaCorp the amounts balance" + this `fails with` "the amounts balance" } // Missing MiniCorp deposit tweak { output { inState.copy(owner = DUMMY_PUBKEY_2) } output { inState.copy(owner = DUMMY_PUBKEY_2) } - this `fails with` "at issuer MegaCorp the amounts balance" + this `fails with` "the amounts balance" } // This works. diff --git a/finance/src/test/kotlin/net/corda/contracts/asset/ObligationTests.kt b/finance/src/test/kotlin/net/corda/contracts/asset/ObligationTests.kt index 2324e15602..59671b79a9 100644 --- a/finance/src/test/kotlin/net/corda/contracts/asset/ObligationTests.kt +++ b/finance/src/test/kotlin/net/corda/contracts/asset/ObligationTests.kt @@ -143,7 +143,7 @@ class ObligationTests { // Move fails: not allowed to summon money. tweak { command(DUMMY_PUBKEY_1) { Obligation.Commands.Move() } - this `fails with` "for reference [00] at issuer MegaCorp the amounts balance" + this `fails with` "the amounts balance" } // Issue works. @@ -609,7 +609,7 @@ class ObligationTests { transaction { input { inState } output { outState `issued by` MINI_CORP } - this `fails with` "for reference [00] at issuer MegaCorp the amounts balance" + this `fails with` "the amounts balance" } // Can't mix currencies. transaction { @@ -636,7 +636,7 @@ class ObligationTests { input { inState `issued by` MINI_CORP } output { outState } command(DUMMY_PUBKEY_1) { Obligation.Commands.Move() } - this `fails with` "for reference [00] at issuer MiniCorp the amounts balance" + this `fails with` "the amounts balance" } } @@ -678,10 +678,10 @@ class ObligationTests { command(DUMMY_PUBKEY_1) { Obligation.Commands.Move() } - this `fails with` "for reference [00] at issuer MegaCorp the amounts balance" + this `fails with` "the amounts balance" command(DUMMY_PUBKEY_1) { Obligation.Commands.Exit(Amount(200.DOLLARS.quantity, inState.amount.token.copy(product = megaCorpDollarSettlement))) } - this `fails with` "for reference [00] at issuer MegaCorp the amounts balance" + this `fails with` "the amounts balance" command(DUMMY_PUBKEY_1) { Obligation.Commands.Exit(Amount(200.POUNDS.quantity, inState.amount.token.copy(product = megaCorpPoundSettlement))) } this.verifies() @@ -698,13 +698,13 @@ class ObligationTests { // Can't merge them together. tweak { output { inState.copy(beneficiary = DUMMY_PUBKEY_2, quantity = 200000L) } - this `fails with` "for reference [00] at issuer MegaCorp the amounts balance" + this `fails with` "the amounts balance" } // Missing MiniCorp deposit tweak { output { inState.copy(beneficiary = DUMMY_PUBKEY_2) } output { inState.copy(beneficiary = DUMMY_PUBKEY_2) } - this `fails with` "for reference [00] at issuer MegaCorp the amounts balance" + this `fails with` "the amounts balance" } // This works. From 1e5dd1843df44b2d4705eacce23cfb314a36e3d1 Mon Sep 17 00:00:00 2001 From: Ross Nicoll Date: Thu, 2 Feb 2017 15:51:24 +0000 Subject: [PATCH 12/33] Update party match in vault service Replaces the legacy name-only comparison in the vault service with a party comparison. `Party` now has an equals method that only uses the owning key, and therefore this functions as expected. --- core/src/main/kotlin/net/corda/core/node/services/Services.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/src/main/kotlin/net/corda/core/node/services/Services.kt b/core/src/main/kotlin/net/corda/core/node/services/Services.kt index 800040174c..8d90ba7c77 100644 --- a/core/src/main/kotlin/net/corda/core/node/services/Services.kt +++ b/core/src/main/kotlin/net/corda/core/node/services/Services.kt @@ -203,8 +203,7 @@ interface VaultService { inline fun VaultService.linearHeadsOfType() = linearHeadsOfType_(T::class.java) inline fun VaultService.dealsWith(party: Party) = linearHeadsOfType().values.filter { - // TODO: Replace name comparison with full party comparison (keys are currenty not equal) - it.state.data.parties.any { it.name == party.name } + it.state.data.parties.any { it == party } } /** From 657cfa5d96724df015d93faa6a66cb6313f18bf6 Mon Sep 17 00:00:00 2001 From: Shams Asari Date: Wed, 1 Feb 2017 11:28:50 +0000 Subject: [PATCH 13/33] FlowException can be thrown from within UntrustworthyData.unwrap for better Java interop, and more checked exception annotations relating to flows --- .gitignore | 2 -- .../corda/core/contracts/TransactionTypes.kt | 1 + .../core/contracts/TransactionVerification.kt | 22 ++++++++++++------- .../net/corda/core/flows/FlowException.kt | 7 ++++-- .../core/transactions/LedgerTransaction.kt | 1 + .../core/transactions/SignedTransaction.kt | 6 ++--- .../core/transactions/WireTransaction.kt | 7 +++--- .../corda/core/utilities/UntrustworthyData.kt | 11 ++++++++-- .../flows/AbstractStateReplacementFlow.kt | 1 + .../kotlin/net/corda/flows/FetchDataFlow.kt | 1 + .../main/kotlin/net/corda/flows/NotaryFlow.kt | 3 ++- .../net/corda/flows/TwoPartyDealFlow.kt | 1 + .../corda/docs/FxTransactionBuildTutorial.kt | 1 + .../docs/WorkflowTransactionBuildTutorial.kt | 1 + .../main/kotlin/net/corda/flows/IssuerFlow.kt | 1 + .../net/corda/flows/TwoPartyTradeFlow.kt | 1 + .../services/messaging/MQSecurityTest.kt | 1 + .../persistence/DataVendingService.kt | 1 + .../statemachine/StateMachineManagerTests.kt | 1 + .../net/corda/irs/api/NodeInterestRates.kt | 1 + .../net/corda/irs/flows/ExitServerFlow.kt | 1 + .../net/corda/irs/flows/RatesFixFlow.kt | 1 + .../corda/irs/flows/UpdateBusinessDayFlow.kt | 1 + .../net/corda/vega/flows/IRSTradeFlow.kt | 1 + .../kotlin/net/corda/vega/flows/SimmFlow.kt | 1 + .../net/corda/traderdemo/flow/BuyerFlow.kt | 1 + 26 files changed, 55 insertions(+), 22 deletions(-) diff --git a/.gitignore b/.gitignore index 0672057c36..ba6dd8df33 100644 --- a/.gitignore +++ b/.gitignore @@ -11,7 +11,6 @@ tags .gradle local.properties -/docs/build/doctrees # General build files **/build/* @@ -34,7 +33,6 @@ lib/dokka.jar .idea/libraries .idea/shelf .idea/dataSources -.idea/modules.xml # if you remove the above rule, at least ignore the following: diff --git a/core/src/main/kotlin/net/corda/core/contracts/TransactionTypes.kt b/core/src/main/kotlin/net/corda/core/contracts/TransactionTypes.kt index 3570bc35e1..7cd6ef4d39 100644 --- a/core/src/main/kotlin/net/corda/core/contracts/TransactionTypes.kt +++ b/core/src/main/kotlin/net/corda/core/contracts/TransactionTypes.kt @@ -17,6 +17,7 @@ sealed class TransactionType { * * Note: Presence of _signatures_ is not checked, only the public keys to be signed for. */ + @Throws(TransactionVerificationException::class) fun verify(tx: LedgerTransaction) { require(tx.notary != null || tx.timestamp == null) { "Transactions with timestamps must be notarised." } val duplicates = detectDuplicateInputs(tx) diff --git a/core/src/main/kotlin/net/corda/core/contracts/TransactionVerification.kt b/core/src/main/kotlin/net/corda/core/contracts/TransactionVerification.kt index 060d8c49f5..2c59c872f9 100644 --- a/core/src/main/kotlin/net/corda/core/contracts/TransactionVerification.kt +++ b/core/src/main/kotlin/net/corda/core/contracts/TransactionVerification.kt @@ -3,6 +3,7 @@ package net.corda.core.contracts import net.corda.core.crypto.CompositeKey import net.corda.core.crypto.Party import net.corda.core.crypto.SecureHash +import net.corda.core.flows.FlowException import net.corda.core.transactions.LedgerTransaction import java.util.* @@ -85,30 +86,35 @@ data class TransactionForContract(val inputs: List, data class InOutGroup(val inputs: List, val outputs: List, val groupingKey: K) } -class TransactionResolutionException(val hash: SecureHash) : Exception() { - override fun toString() = "Transaction resolution failure for $hash" +class TransactionResolutionException(val hash: SecureHash) : FlowException() { + override fun toString(): String = "Transaction resolution failure for $hash" +} + +class AttachmentResolutionException(val hash : SecureHash) : FlowException() { + override fun toString(): String = "Attachment resolution failure for $hash" } class TransactionConflictException(val conflictRef: StateRef, val tx1: LedgerTransaction, val tx2: LedgerTransaction) : Exception() -sealed class TransactionVerificationException(val tx: LedgerTransaction, cause: Throwable?) : Exception(cause) { +sealed class TransactionVerificationException(val tx: LedgerTransaction, cause: Throwable?) : FlowException(cause) { class ContractRejection(tx: LedgerTransaction, val contract: Contract, cause: Throwable?) : TransactionVerificationException(tx, cause) class MoreThanOneNotary(tx: LedgerTransaction) : TransactionVerificationException(tx, null) class SignersMissing(tx: LedgerTransaction, val missing: List) : TransactionVerificationException(tx, null) { - override fun toString() = "Signers missing: ${missing.joinToString()}" + override fun toString(): String = "Signers missing: ${missing.joinToString()}" } class DuplicateInputStates(tx: LedgerTransaction, val duplicates: Set) : TransactionVerificationException(tx, null) { - override fun toString() = "Duplicate inputs: ${duplicates.joinToString()}" + override fun toString(): String = "Duplicate inputs: ${duplicates.joinToString()}" } class InvalidNotaryChange(tx: LedgerTransaction) : TransactionVerificationException(tx, null) class NotaryChangeInWrongTransactionType(tx: LedgerTransaction, val outputNotary: Party) : TransactionVerificationException(tx, null) { - override fun toString(): String = "Found unexpected notary change in transaction. Tx notary: ${tx.notary}, found: ${outputNotary}" + override fun toString(): String { + return "Found unexpected notary change in transaction. Tx notary: ${tx.notary}, found: $outputNotary" + } } class TransactionMissingEncumbranceException(tx: LedgerTransaction, val missing: Int, val inOut: Direction) : TransactionVerificationException(tx, null) { - override val message: String? - get() = "Missing required encumbrance ${missing} in ${inOut}" + override val message: String get() = "Missing required encumbrance $missing in $inOut" } enum class Direction { INPUT, diff --git a/core/src/main/kotlin/net/corda/core/flows/FlowException.kt b/core/src/main/kotlin/net/corda/core/flows/FlowException.kt index fc8014f4d4..9419049d68 100644 --- a/core/src/main/kotlin/net/corda/core/flows/FlowException.kt +++ b/core/src/main/kotlin/net/corda/core/flows/FlowException.kt @@ -9,5 +9,8 @@ package net.corda.core.flows * [FlowException] (or a subclass) can be a valid expected response from a flow, particularly ones which act as a service. * It is recommended a [FlowLogic] document the [FlowException] types it can throw. */ -open class FlowException @JvmOverloads constructor(message: String? = null, cause: Throwable? = null) - : Exception(message, cause) +open class FlowException(override val message: String?, override val cause: Throwable?) : Exception() { + constructor(message: String?) : this(message, null) + constructor(cause: Throwable?) : this(cause?.toString(), cause) + constructor() : this(null, null) +} diff --git a/core/src/main/kotlin/net/corda/core/transactions/LedgerTransaction.kt b/core/src/main/kotlin/net/corda/core/transactions/LedgerTransaction.kt index 26c44f711f..4a548c0c46 100644 --- a/core/src/main/kotlin/net/corda/core/transactions/LedgerTransaction.kt +++ b/core/src/main/kotlin/net/corda/core/transactions/LedgerTransaction.kt @@ -54,6 +54,7 @@ class LedgerTransaction( * * @throws TransactionVerificationException if anything goes wrong. */ + @Throws(TransactionVerificationException::class) fun verify() = type.verify(this) // TODO: When we upgrade to Kotlin 1.1 we can make this a data class again and have the compiler generate these. diff --git a/core/src/main/kotlin/net/corda/core/transactions/SignedTransaction.kt b/core/src/main/kotlin/net/corda/core/transactions/SignedTransaction.kt index efde6949fd..49349f0882 100644 --- a/core/src/main/kotlin/net/corda/core/transactions/SignedTransaction.kt +++ b/core/src/main/kotlin/net/corda/core/transactions/SignedTransaction.kt @@ -1,5 +1,6 @@ package net.corda.core.transactions +import net.corda.core.contracts.AttachmentResolutionException import net.corda.core.contracts.NamedByHash import net.corda.core.contracts.TransactionResolutionException import net.corda.core.crypto.CompositeKey @@ -8,7 +9,6 @@ import net.corda.core.crypto.SecureHash import net.corda.core.crypto.signWithECDSA import net.corda.core.node.ServiceHub import net.corda.core.serialization.SerializedBytes -import java.io.FileNotFoundException import java.security.KeyPair import java.security.SignatureException import java.util.* @@ -127,12 +127,12 @@ data class SignedTransaction(val txBits: SerializedBytes, * [WireTransaction.toLedgerTransaction] with the passed in [ServiceHub] to resolve the dependencies, * returning an unverified LedgerTransaction. * - * @throws FileNotFoundException if a required attachment was not found in storage. + * @throws AttachmentResolutionException if a required attachment was not found in storage. * @throws TransactionResolutionException if an input points to a transaction not found in storage. * @throws SignatureException if any signatures were invalid or unrecognised * @throws SignaturesMissingException if any signatures that should have been present are missing. */ - @Throws(FileNotFoundException::class, TransactionResolutionException::class, SignaturesMissingException::class) + @Throws(AttachmentResolutionException::class, TransactionResolutionException::class, SignatureException::class) fun toLedgerTransaction(services: ServiceHub) = verifySignatures().toLedgerTransaction(services) /** diff --git a/core/src/main/kotlin/net/corda/core/transactions/WireTransaction.kt b/core/src/main/kotlin/net/corda/core/transactions/WireTransaction.kt index 1a8a40ab04..583448f518 100644 --- a/core/src/main/kotlin/net/corda/core/transactions/WireTransaction.kt +++ b/core/src/main/kotlin/net/corda/core/transactions/WireTransaction.kt @@ -12,7 +12,6 @@ import net.corda.core.serialization.THREAD_LOCAL_KRYO import net.corda.core.serialization.deserialize import net.corda.core.serialization.serialize import net.corda.core.utilities.Emoji -import java.io.FileNotFoundException import java.security.PublicKey /** @@ -66,10 +65,10 @@ class WireTransaction( * Looks up identities and attachments from storage to generate a [LedgerTransaction]. A transaction is expected to * have been fully resolved using the resolution flow by this point. * - * @throws FileNotFoundException if a required attachment was not found in storage. + * @throws AttachmentResolutionException if a required attachment was not found in storage. * @throws TransactionResolutionException if an input points to a transaction not found in storage. */ - @Throws(FileNotFoundException::class, TransactionResolutionException::class) + @Throws(AttachmentResolutionException::class, TransactionResolutionException::class) fun toLedgerTransaction(services: ServiceHub): LedgerTransaction { // Look up public keys to authenticated identities. This is just a stub placeholder and will all change in future. val authenticatedArgs = commands.map { @@ -78,7 +77,7 @@ class WireTransaction( } // Open attachments specified in this transaction. If we haven't downloaded them, we fail. val attachments = attachments.map { - services.storageService.attachments.openAttachment(it) ?: throw FileNotFoundException(it.toString()) + services.storageService.attachments.openAttachment(it) ?: throw AttachmentResolutionException(it) } val resolvedInputs = inputs.map { StateAndRef(services.loadState(it), it) } return LedgerTransaction(resolvedInputs, outputs, authenticatedArgs, attachments, id, notary, mustSign, timestamp, type) diff --git a/core/src/main/kotlin/net/corda/core/utilities/UntrustworthyData.kt b/core/src/main/kotlin/net/corda/core/utilities/UntrustworthyData.kt index b220ea20ca..7db3d496df 100644 --- a/core/src/main/kotlin/net/corda/core/utilities/UntrustworthyData.kt +++ b/core/src/main/kotlin/net/corda/core/utilities/UntrustworthyData.kt @@ -18,11 +18,18 @@ class UntrustworthyData(private val fromUntrustedWorld: T) { @Deprecated("Accessing the untrustworthy data directly without validating it first is a bad idea") get() = fromUntrustedWorld - @Suppress("DEPRECATION") @Throws(FlowException::class) - inline fun unwrap(validator: (T) -> R) = validator(data) + fun unwrap(validator: Validator) = validator.validate(fromUntrustedWorld) @Suppress("DEPRECATION") @Deprecated("This old name was confusing, use unwrap instead", replaceWith = ReplaceWith("unwrap")) inline fun validate(validator: (T) -> R) = validator(data) + + interface Validator { + @Throws(FlowException::class) + fun validate(data: T): R + } } + +@Suppress("DEPRECATION") +inline fun UntrustworthyData.unwrap(validator: (T) -> R): R = validator(data) diff --git a/core/src/main/kotlin/net/corda/flows/AbstractStateReplacementFlow.kt b/core/src/main/kotlin/net/corda/flows/AbstractStateReplacementFlow.kt index a05f15dd1f..8d5e520b44 100644 --- a/core/src/main/kotlin/net/corda/flows/AbstractStateReplacementFlow.kt +++ b/core/src/main/kotlin/net/corda/flows/AbstractStateReplacementFlow.kt @@ -15,6 +15,7 @@ import net.corda.core.transactions.SignedTransaction import net.corda.core.transactions.WireTransaction import net.corda.core.utilities.ProgressTracker import net.corda.core.utilities.UntrustworthyData +import net.corda.core.utilities.unwrap import net.corda.flows.AbstractStateReplacementFlow.Acceptor import net.corda.flows.AbstractStateReplacementFlow.Instigator diff --git a/core/src/main/kotlin/net/corda/flows/FetchDataFlow.kt b/core/src/main/kotlin/net/corda/flows/FetchDataFlow.kt index 0be2b1a081..1661476aae 100644 --- a/core/src/main/kotlin/net/corda/flows/FetchDataFlow.kt +++ b/core/src/main/kotlin/net/corda/flows/FetchDataFlow.kt @@ -7,6 +7,7 @@ import net.corda.core.crypto.SecureHash import net.corda.core.flows.FlowException import net.corda.core.flows.FlowLogic import net.corda.core.utilities.UntrustworthyData +import net.corda.core.utilities.unwrap import net.corda.flows.FetchDataFlow.DownloadedVsRequestedDataMismatch import net.corda.flows.FetchDataFlow.HashNotFound import java.util.* diff --git a/core/src/main/kotlin/net/corda/flows/NotaryFlow.kt b/core/src/main/kotlin/net/corda/flows/NotaryFlow.kt index f29281fc7c..66ee378e51 100644 --- a/core/src/main/kotlin/net/corda/flows/NotaryFlow.kt +++ b/core/src/main/kotlin/net/corda/flows/NotaryFlow.kt @@ -5,8 +5,8 @@ import net.corda.core.crypto.DigitalSignature import net.corda.core.crypto.Party import net.corda.core.crypto.SignedData import net.corda.core.crypto.signWithECDSA -import net.corda.core.flows.FlowLogic import net.corda.core.flows.FlowException +import net.corda.core.flows.FlowLogic import net.corda.core.node.services.TimestampChecker import net.corda.core.node.services.UniquenessException import net.corda.core.node.services.UniquenessProvider @@ -14,6 +14,7 @@ import net.corda.core.serialization.serialize import net.corda.core.transactions.SignedTransaction import net.corda.core.transactions.WireTransaction import net.corda.core.utilities.ProgressTracker +import net.corda.core.utilities.unwrap object NotaryFlow { /** diff --git a/core/src/main/kotlin/net/corda/flows/TwoPartyDealFlow.kt b/core/src/main/kotlin/net/corda/flows/TwoPartyDealFlow.kt index f8ae8c5905..6e3556d85d 100644 --- a/core/src/main/kotlin/net/corda/flows/TwoPartyDealFlow.kt +++ b/core/src/main/kotlin/net/corda/flows/TwoPartyDealFlow.kt @@ -16,6 +16,7 @@ import net.corda.core.transactions.WireTransaction import net.corda.core.utilities.ProgressTracker import net.corda.core.utilities.UntrustworthyData import net.corda.core.utilities.trace +import net.corda.core.utilities.unwrap import java.security.KeyPair /** diff --git a/docs/source/example-code/src/main/kotlin/net/corda/docs/FxTransactionBuildTutorial.kt b/docs/source/example-code/src/main/kotlin/net/corda/docs/FxTransactionBuildTutorial.kt index 02f25559eb..cf07bc3faf 100644 --- a/docs/source/example-code/src/main/kotlin/net/corda/docs/FxTransactionBuildTutorial.kt +++ b/docs/source/example-code/src/main/kotlin/net/corda/docs/FxTransactionBuildTutorial.kt @@ -14,6 +14,7 @@ import net.corda.core.flows.FlowLogic import net.corda.core.node.PluginServiceHub import net.corda.core.node.ServiceHub import net.corda.core.transactions.SignedTransaction +import net.corda.core.utilities.unwrap import net.corda.flows.FinalityFlow import net.corda.flows.ResolveTransactionsFlow import java.util.* diff --git a/docs/source/example-code/src/main/kotlin/net/corda/docs/WorkflowTransactionBuildTutorial.kt b/docs/source/example-code/src/main/kotlin/net/corda/docs/WorkflowTransactionBuildTutorial.kt index 0818835fa1..099dc63b72 100644 --- a/docs/source/example-code/src/main/kotlin/net/corda/docs/WorkflowTransactionBuildTutorial.kt +++ b/docs/source/example-code/src/main/kotlin/net/corda/docs/WorkflowTransactionBuildTutorial.kt @@ -8,6 +8,7 @@ import net.corda.core.node.PluginServiceHub import net.corda.core.node.ServiceHub import net.corda.core.node.services.linearHeadsOfType import net.corda.core.transactions.SignedTransaction +import net.corda.core.utilities.unwrap import net.corda.flows.FinalityFlow import java.security.PublicKey import java.time.Duration diff --git a/finance/src/main/kotlin/net/corda/flows/IssuerFlow.kt b/finance/src/main/kotlin/net/corda/flows/IssuerFlow.kt index ff946f0fa4..921a6120eb 100644 --- a/finance/src/main/kotlin/net/corda/flows/IssuerFlow.kt +++ b/finance/src/main/kotlin/net/corda/flows/IssuerFlow.kt @@ -9,6 +9,7 @@ import net.corda.core.node.PluginServiceHub import net.corda.core.serialization.OpaqueBytes import net.corda.core.transactions.SignedTransaction import net.corda.core.utilities.ProgressTracker +import net.corda.core.utilities.unwrap import java.util.* /** diff --git a/finance/src/main/kotlin/net/corda/flows/TwoPartyTradeFlow.kt b/finance/src/main/kotlin/net/corda/flows/TwoPartyTradeFlow.kt index aadd430fe3..c1cfade1cf 100644 --- a/finance/src/main/kotlin/net/corda/flows/TwoPartyTradeFlow.kt +++ b/finance/src/main/kotlin/net/corda/flows/TwoPartyTradeFlow.kt @@ -13,6 +13,7 @@ import net.corda.core.transactions.TransactionBuilder import net.corda.core.transactions.WireTransaction import net.corda.core.utilities.ProgressTracker import net.corda.core.utilities.trace +import net.corda.core.utilities.unwrap import java.security.KeyPair import java.util.* diff --git a/node/src/integration-test/kotlin/net/corda/services/messaging/MQSecurityTest.kt b/node/src/integration-test/kotlin/net/corda/services/messaging/MQSecurityTest.kt index 1a1018db51..c0df706bcc 100644 --- a/node/src/integration-test/kotlin/net/corda/services/messaging/MQSecurityTest.kt +++ b/node/src/integration-test/kotlin/net/corda/services/messaging/MQSecurityTest.kt @@ -10,6 +10,7 @@ import net.corda.core.getOrThrow import net.corda.core.messaging.CordaRPCOps import net.corda.core.random63BitValue import net.corda.core.seconds +import net.corda.core.utilities.unwrap import net.corda.node.internal.Node import net.corda.node.services.User import net.corda.node.services.config.SSLConfiguration diff --git a/node/src/main/kotlin/net/corda/node/services/persistence/DataVendingService.kt b/node/src/main/kotlin/net/corda/node/services/persistence/DataVendingService.kt index d43fad7564..2b4dddeb5d 100644 --- a/node/src/main/kotlin/net/corda/node/services/persistence/DataVendingService.kt +++ b/node/src/main/kotlin/net/corda/node/services/persistence/DataVendingService.kt @@ -10,6 +10,7 @@ import net.corda.core.node.PluginServiceHub import net.corda.core.node.recordTransactions import net.corda.core.serialization.SingletonSerializeAsToken import net.corda.core.transactions.SignedTransaction +import net.corda.core.utilities.unwrap import net.corda.flows.* import java.util.function.Function import javax.annotation.concurrent.ThreadSafe diff --git a/node/src/test/kotlin/net/corda/node/services/statemachine/StateMachineManagerTests.kt b/node/src/test/kotlin/net/corda/node/services/statemachine/StateMachineManagerTests.kt index b0ed7a81da..ce06994a5d 100644 --- a/node/src/test/kotlin/net/corda/node/services/statemachine/StateMachineManagerTests.kt +++ b/node/src/test/kotlin/net/corda/node/services/statemachine/StateMachineManagerTests.kt @@ -21,6 +21,7 @@ import net.corda.core.random63BitValue import net.corda.core.rootCause import net.corda.core.serialization.OpaqueBytes import net.corda.core.serialization.deserialize +import net.corda.core.utilities.unwrap import net.corda.core.transactions.SignedTransaction import net.corda.core.transactions.TransactionBuilder import net.corda.flows.CashCommand diff --git a/samples/irs-demo/src/main/kotlin/net/corda/irs/api/NodeInterestRates.kt b/samples/irs-demo/src/main/kotlin/net/corda/irs/api/NodeInterestRates.kt index b524dedf9b..aedf23af3f 100644 --- a/samples/irs-demo/src/main/kotlin/net/corda/irs/api/NodeInterestRates.kt +++ b/samples/irs-demo/src/main/kotlin/net/corda/irs/api/NodeInterestRates.kt @@ -14,6 +14,7 @@ import net.corda.core.node.services.ServiceType import net.corda.core.serialization.SingletonSerializeAsToken import net.corda.core.transactions.FilteredTransaction import net.corda.core.utilities.ProgressTracker +import net.corda.core.utilities.unwrap import net.corda.irs.flows.FixingFlow import net.corda.irs.flows.RatesFixFlow import net.corda.node.services.api.AcceptsFileUpload diff --git a/samples/irs-demo/src/main/kotlin/net/corda/irs/flows/ExitServerFlow.kt b/samples/irs-demo/src/main/kotlin/net/corda/irs/flows/ExitServerFlow.kt index 044036d19c..7b88cd12e2 100644 --- a/samples/irs-demo/src/main/kotlin/net/corda/irs/flows/ExitServerFlow.kt +++ b/samples/irs-demo/src/main/kotlin/net/corda/irs/flows/ExitServerFlow.kt @@ -7,6 +7,7 @@ import net.corda.core.flows.FlowLogic import net.corda.core.node.CordaPluginRegistry import net.corda.core.node.NodeInfo import net.corda.core.node.PluginServiceHub +import net.corda.core.utilities.unwrap import net.corda.testing.node.MockNetworkMapCache import java.util.concurrent.TimeUnit import java.util.function.Function diff --git a/samples/irs-demo/src/main/kotlin/net/corda/irs/flows/RatesFixFlow.kt b/samples/irs-demo/src/main/kotlin/net/corda/irs/flows/RatesFixFlow.kt index 2bf9be5e1e..917cc2b9f1 100644 --- a/samples/irs-demo/src/main/kotlin/net/corda/irs/flows/RatesFixFlow.kt +++ b/samples/irs-demo/src/main/kotlin/net/corda/irs/flows/RatesFixFlow.kt @@ -10,6 +10,7 @@ import net.corda.core.flows.FlowLogic import net.corda.core.transactions.FilteredTransaction import net.corda.core.transactions.TransactionBuilder import net.corda.core.utilities.ProgressTracker +import net.corda.core.utilities.unwrap import net.corda.irs.flows.RatesFixFlow.FixOutOfRange import net.corda.irs.utilities.suggestInterestRateAnnouncementTimeWindow import java.math.BigDecimal diff --git a/samples/irs-demo/src/main/kotlin/net/corda/irs/flows/UpdateBusinessDayFlow.kt b/samples/irs-demo/src/main/kotlin/net/corda/irs/flows/UpdateBusinessDayFlow.kt index d6918d9020..7f0d725f87 100644 --- a/samples/irs-demo/src/main/kotlin/net/corda/irs/flows/UpdateBusinessDayFlow.kt +++ b/samples/irs-demo/src/main/kotlin/net/corda/irs/flows/UpdateBusinessDayFlow.kt @@ -7,6 +7,7 @@ import net.corda.core.node.CordaPluginRegistry import net.corda.core.node.NodeInfo import net.corda.core.node.PluginServiceHub import net.corda.core.utilities.ProgressTracker +import net.corda.core.utilities.unwrap import net.corda.node.utilities.TestClock import net.corda.testing.node.MockNetworkMapCache import java.time.LocalDate diff --git a/samples/simm-valuation-demo/src/main/kotlin/net/corda/vega/flows/IRSTradeFlow.kt b/samples/simm-valuation-demo/src/main/kotlin/net/corda/vega/flows/IRSTradeFlow.kt index c9e60d7296..822c104c23 100644 --- a/samples/simm-valuation-demo/src/main/kotlin/net/corda/vega/flows/IRSTradeFlow.kt +++ b/samples/simm-valuation-demo/src/main/kotlin/net/corda/vega/flows/IRSTradeFlow.kt @@ -5,6 +5,7 @@ import net.corda.core.crypto.Party import net.corda.core.flows.FlowLogic import net.corda.core.node.PluginServiceHub import net.corda.core.transactions.SignedTransaction +import net.corda.core.utilities.unwrap import net.corda.flows.TwoPartyDealFlow import net.corda.vega.contracts.IRSState import net.corda.vega.contracts.OGTrade diff --git a/samples/simm-valuation-demo/src/main/kotlin/net/corda/vega/flows/SimmFlow.kt b/samples/simm-valuation-demo/src/main/kotlin/net/corda/vega/flows/SimmFlow.kt index 40ba74a159..6617862b7c 100644 --- a/samples/simm-valuation-demo/src/main/kotlin/net/corda/vega/flows/SimmFlow.kt +++ b/samples/simm-valuation-demo/src/main/kotlin/net/corda/vega/flows/SimmFlow.kt @@ -18,6 +18,7 @@ import net.corda.core.messaging.Ack import net.corda.core.node.PluginServiceHub import net.corda.core.node.services.dealsWith import net.corda.core.transactions.SignedTransaction +import net.corda.core.utilities.unwrap import net.corda.flows.AbstractStateReplacementFlow.Proposal import net.corda.flows.StateReplacementException import net.corda.flows.TwoPartyDealFlow diff --git a/samples/trader-demo/src/main/kotlin/net/corda/traderdemo/flow/BuyerFlow.kt b/samples/trader-demo/src/main/kotlin/net/corda/traderdemo/flow/BuyerFlow.kt index 1226e178b9..35382d9ba1 100644 --- a/samples/trader-demo/src/main/kotlin/net/corda/traderdemo/flow/BuyerFlow.kt +++ b/samples/trader-demo/src/main/kotlin/net/corda/traderdemo/flow/BuyerFlow.kt @@ -12,6 +12,7 @@ import net.corda.core.serialization.SingletonSerializeAsToken import net.corda.core.transactions.SignedTransaction import net.corda.core.utilities.Emoji import net.corda.core.utilities.ProgressTracker +import net.corda.core.utilities.unwrap import net.corda.flows.TwoPartyTradeFlow import net.corda.node.services.persistence.NodeAttachmentService import java.nio.file.Path From b1c5de1112c5c0cf9fdcc430e44baf521ca1c661 Mon Sep 17 00:00:00 2001 From: Gary Rowe Date: Mon, 6 Feb 2017 16:22:15 +0000 Subject: [PATCH 14/33] Fix the port numbers in the documentation to match actual values --- docs/build/html/node-explorer.html | 10 +++++----- docs/source/node-explorer.rst | 8 ++++---- tools/explorer/README.md | 10 +++++----- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/build/html/node-explorer.html b/docs/build/html/node-explorer.html index d3506146a9..95fc4d41cc 100644 --- a/docs/build/html/node-explorer.html +++ b/docs/build/html/node-explorer.html @@ -288,11 +288,11 @@ Participant nodes will randomly generate spends (eg. move cash to other nodes, i

Note

5 Corda nodes will be created on the following port on localhost by default.

    -
  • Notary -> 20002
  • -
  • Alice -> 20004
  • -
  • Bob -> 20006
  • -
  • UK Bank Plc -> 20008 (Issuer node)
  • -
  • USA Bank Corp -> 20010 (Issuer node)
  • +
  • Notary -> 20001
  • +
  • Alice -> 20003
  • +
  • Bob -> 20005
  • +
  • UK Bank Plc -> 20007 (Issuer node)
  • +
  • USA Bank Corp -> 20009 (Issuer node)

Explorer login credentials to the Issuer nodes are defaulted to manager and test. diff --git a/docs/source/node-explorer.rst b/docs/source/node-explorer.rst index 53c1fee715..293d90987c 100644 --- a/docs/source/node-explorer.rst +++ b/docs/source/node-explorer.rst @@ -63,11 +63,11 @@ The Demo Nodes can be started in one of two modes: .. note:: 5 Corda nodes will be created on the following port on localhost by default. - * Notary -> 20002 - * Alice -> 20004 - * Bob -> 20006 + * Notary -> 20001 + * Alice -> 20003 + * Bob -> 20005 * UK Bank Plc -> 20008 (*Issuer node*) - * USA Bank Corp -> 20010 (*Issuer node*) + * USA Bank Corp -> 20009 (*Issuer node*) Explorer login credentials to the Issuer nodes are defaulted to ``manager`` and ``test``. Explorer login credentials to the Participants nodes are defaulted to ``user1`` and ``test``. diff --git a/tools/explorer/README.md b/tools/explorer/README.md index 6c769ed181..dfd952c4e6 100644 --- a/tools/explorer/README.md +++ b/tools/explorer/README.md @@ -34,11 +34,11 @@ The Participant nodes are only able to spend cash (eg. move cash). **These Corda nodes will be created on the following port on localhost.** - Notary -> 20002 - Alice -> 20004 - Bob -> 20006 - UK Bank Plc -> 20008 - USA Bank Corp -> 20010 + * Notary -> 20001 + * Alice -> 20003 + * Bob -> 20005 + * UK Bank Plc -> 20008 (*Issuer node*) + * USA Bank Corp -> 20009 (*Issuer node*) Explorer login credentials to the Issuer nodes are 'manager'/'test'. Explorer login credentials to the Participants nodes are 'user1'/'test'. From e5d1b26a972308aca170016ef89e58623d17874e Mon Sep 17 00:00:00 2001 From: Gary Rowe Date: Mon, 6 Feb 2017 16:23:11 +0000 Subject: [PATCH 15/33] Fix the port numbers in the documentation to match actual values (build) --- docs/build/html/_sources/node-explorer.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/build/html/_sources/node-explorer.txt b/docs/build/html/_sources/node-explorer.txt index 53c1fee715..293d90987c 100644 --- a/docs/build/html/_sources/node-explorer.txt +++ b/docs/build/html/_sources/node-explorer.txt @@ -63,11 +63,11 @@ The Demo Nodes can be started in one of two modes: .. note:: 5 Corda nodes will be created on the following port on localhost by default. - * Notary -> 20002 - * Alice -> 20004 - * Bob -> 20006 + * Notary -> 20001 + * Alice -> 20003 + * Bob -> 20005 * UK Bank Plc -> 20008 (*Issuer node*) - * USA Bank Corp -> 20010 (*Issuer node*) + * USA Bank Corp -> 20009 (*Issuer node*) Explorer login credentials to the Issuer nodes are defaulted to ``manager`` and ``test``. Explorer login credentials to the Participants nodes are defaulted to ``user1`` and ``test``. From e82e1e3d0d88a98c13abb6245fda0cb097f3e95e Mon Sep 17 00:00:00 2001 From: Andrius Dagys Date: Thu, 2 Feb 2017 16:41:57 +0000 Subject: [PATCH 16/33] Update version to 0.8 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index add0898e90..47af28a831 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ buildscript { file("publish.properties").withInputStream { props.load(it) } // Our version: bump this on release. - ext.corda_version = "0.8-SNAPSHOT" + ext.corda_version = "0.8" ext.gradle_plugins_version = props.getProperty("gradlePluginsVersion") // Dependency versions. Can run 'gradle dependencyUpdates' to find new versions of things. From bbcaf5d98cd5251820f981ac0e7207fead9cde90 Mon Sep 17 00:00:00 2001 From: Andrius Dagys Date: Mon, 6 Feb 2017 15:57:19 +0000 Subject: [PATCH 17/33] Demo bug fixes (#217) * Add webAddress back to NMS as it shifts the port allocation for all subsequent nodes and causes all demos to break. * Attachment demo: fix node names * Notary demo: fix certificate paths & ports * IRS demo: role decider fixed to allocate roles properly. Previously it used to pick current node as the Fixer, causing both nodes to initiate the trade flow, resulting in double spend exceptions.. --- .../Raft_Notary_Demo__Run_Notarisation.xml | 2 +- .../kotlin/net/corda/node/driver/Driver.kt | 5 +- .../corda/attachmentdemo/AttachmentDemo.kt | 4 +- .../kotlin/net/corda/irs/flows/FixingFlow.kt | 7 +-- samples/raft-notary-demo/build.gradle | 48 ++++++++++--------- .../kotlin/net/corda/notarydemo/NotaryDemo.kt | 17 ++++++- 6 files changed, 53 insertions(+), 30 deletions(-) diff --git a/.idea/runConfigurations/Raft_Notary_Demo__Run_Notarisation.xml b/.idea/runConfigurations/Raft_Notary_Demo__Run_Notarisation.xml index 0cf5567128..23512d7425 100644 --- a/.idea/runConfigurations/Raft_Notary_Demo__Run_Notarisation.xml +++ b/.idea/runConfigurations/Raft_Notary_Demo__Run_Notarisation.xml @@ -3,7 +3,7 @@

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 AH2?qr literal 25838 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 GE&Lx3)d?>E diff --git a/docs/build/doctrees/codestyle.doctree b/docs/build/doctrees/codestyle.doctree index d6f1ad5343e88f23171712c4a40ca69af183e61c..40f364b520d7a85a499e1a9944626d02322f36c7 100644 GIT binary patch delta 110 zcmccpiRscOrVW#sWGomM81zGnQ;UlA6Z2AvGE0k764NV-^_}xmQa5j4`nZ)f!?3m} zYVx`r0m9KN3=FkJF+egyE5j^9r?x0|vfxfFg*c!{Y*9Rr3}q`yP0LIvE=m9^O$3sq GNqPX0jU%N1 delta 119 zcmccgiRtzyrVW#sWGxvO81zGnQ;UlAv+`4OQc6>DQY-acQj4=o@(VVvXZpC6HDQY-acQj4=o@(VU|GoAJ24Q0+u zDK7fU$iPrr^l$QAe^cTAU^W9214D*NhCzl}Z4u*S)c`F8CZI@c5i^hsWh+We18HLc Na%ziMfn;ft9srJ7BfbCt diff --git a/docs/build/doctrees/contract-irs.doctree b/docs/build/doctrees/contract-irs.doctree index 8dd966511d06cf4401b842d711f76ffc143efac7..b3c4f260dc990b2e7b1068b03ea8e90ea00ac86e 100644 GIT binary patch delta 110 zcmZ2=opIrH#tpj}Wvm$(81zGnQ;UlA6Z2AvGE0k764NV-^_}xmQa9gVbjoDSP^~R0 zo2;I#CS1iTSC|gl#T4qXdQ4LsWEs!it G(gOej_96%X delta 119 zcmZ2@opIH5#tpj}Wo;N381zGnQ;UlAv+`4OQc6>DQY-acQj4=o@(VU!XLQQs4Q0+u zDK08wVqmB(DxWNuttMOnW>*5q47m)g429aFs>$KmS_;)bk=UXdAQ{S5l$r+8Rtr{I J2P8|A^Z-YHBz^z@ diff --git a/docs/build/doctrees/corda-configuration-file.doctree b/docs/build/doctrees/corda-configuration-file.doctree index 39d48630b5b8fb67a2f09f50b8302f9426a0ccb9..fb7e50e16ce1b3dfe4747cf58ad32538e0c2512a 100644 GIT binary patch delta 7377 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 delta 6526 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 GZ1@kiC;v+T diff --git a/docs/build/doctrees/creating-a-cordapp.doctree b/docs/build/doctrees/creating-a-cordapp.doctree index 1720e5bc6463f161cbeae5da4f7f51efb48b7796..9863eb4ee5439196cba9a2b7f22e80ffc14cb33f 100644 GIT binary patch delta 244 zcmbQeg=yCorVYg`GL8%k4EmwPsYS*5iFqkSnWe=kiRqQa`p)?&shcOTT;OC3nw-ez z%@GvftdN|TlQVfUUnQE*=6Ze|M#hlIg@SIZc_}%mDU*K)RG{$p3K}z(PyQ&FDx#29 zl%K0ml98%Vo|>cpw6-j@XmXfPE*|O4n!-O@Su>n#i+CpM&+HfGWno~bE#d=`88#Un o8FsZr{F5)v)KU-tio_NP0?AOeqSUm^l;R>Guu@?lS(>B=0DxgmO8@`> delta 211 zcmdnBg=zK{rVYg`vQ7*P4EmwPsYS*5S^23sDWxensg?RJsm0kP`30N%SuSug22M`k z^JXtkO;T_S@SMDvuM$;ca|6E)BV*{~LP0mS%$yS4%)H4z1S(Jk_6Qm?CQtq#m^wLA zC>O%o93cF&l{b_*Go`qQhlPQmwupDK-^_ktJ}{dfNM_h%cx2es770xLFjGrG5GWE` XBm^Ww*@{xrK-z@CN=1NVX_6iQ5%xis diff --git a/docs/build/doctrees/environment.pickle b/docs/build/doctrees/environment.pickle index 9004233c1d4f5eedf77df1abd20891cef44beedc..cb5f92675c1e212750d5967f21d20d65af4f7b08 100644 GIT binary patch literal 155306 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�fPZ4^!imU@npaRKL21Jd|2LgbhXH%5 z@nmY8^51I2q@X&^f9A&rxNsN5UpjgU)RK==A#r?zkJFHHd7DNKPv>sU-De;*!sT_x zC^gR=3h zc~z7*s#JFl)p06-iFBNAr8^tz6sMJdH_T5N#RmsAuSwRF{uxEWD0|zp?OoDdg~x%K}pt6^%pnc61#+Bn&!n}fp?n@JIP&y7yU zc;?NMpu$_AkgdNJQZ9dN{cXsMaEEahhoD*hPi8pY&+^-)oKHmVOl}&u;Q*h@*8?sG zzg#|pxvzQXJDB0+lju8{;m{`!&byf5ix-yMjZEP5^SR<#RoUH3u{r){;QdA0{B+;| z$@46*r{6u$OJn!a7~kvA*nP;1a9823HMrquxVsKhy}22{O^%x_xS7w*5N;YsNl2OMsZ*_woxK*}8P8(hcylV6sSDN5y^B~l-0T0n8ZxLwoVcHxWWm7JX zrEb%nzC0XEhxv%7?@{WL`S#HF7&0T=k=(T}H{-EkLmy{G=DMTO6U>aphVDGcjLgeL z$-j{KFWq^{)Auy>@g*0V_YC!I7u&pwK3Hfp6JKX^HU-&x)>Ho+WHGsvceg#qTQMrH zp2vQzUcfeU#%%Q>GK52#bhga25udo)Mh%wM5 zi;zL9S)D|^$|8;*j4ORP@*4MflQ20hCTqE=*SR--g*WvE%PW>E;M-~M6TmkkEASjL z>lvuGSb>cR&hzBbAi-sp)Z47ZQGswRoNS5Gx6|*i5(gzhmC%;*kJsO2MLutaD$1aX zdN0zF%x*7z*!aFx5b?#s2P}*H!sJ7ia44wBPSaK&*?`i(aaOR4nZbbqUk0nMS+rtQk-s*=Hx+31y7H~vw=Ck3;VUlh)X-h2?^vsw zN$}sZoFfOm7MWWGXlT6;^#kjXVRr3h3ks=!vydl;6w*VQ{*ikbX?up*W&YGpEa5Or z*%z8WbALbV_trO4ziUh?x6GL zMVeXAL;bdz9+ zO_p&oeyBgd?(t{0*I-XNk6Gp3Qh;h8cHmNiE7c&RlD*OM=ha{&wHksghEd9=Z#Nd( z+R~Utg;h;z)RL%!$rVcpV5k7hQjuzD$wYj#F$@LeI;m_9W~H^)sAW(Ljmtu4wVWvN zG%hcha*d8l?raz9FWENjX7E>g}aB&OpRI*6=7l}2(5+_<*je2 zR+dbq33@{lt3a0f?muYNs8vx6#j8PR_hqR>s+UV}1n6;M@+BFtD`6GE%Cu!Y^sYQWMH`HBULm)hq+ zwYI-gzQPERqt=l^*Nf{2@m{##)Dqb)TWf?liqRW z!@s=R4Eqp>%^|ef0$b1~r=+ccn9wbWiR%Z#HLPRV)8qjER8U*miphb2b53m~yVIG~ zUB7~B_GM~q+_pv?e2svuAGd8KQ_dXPu^kF*z{U!0`yg&yB+hYZf;5bWv;mudv{n-Z z;W0i*GUa9+mzD_M0n!F+GSXPzLl7Rko|#aAmgFYEG#iW|IW3v^#SGa;^*t6hL^G83)%%O@}kp8~fPeqYr?1n45| zDoV3Tg85?8eCCPoYw@)w^r<{5APNNtt%}&P*ID zxoJmHNS@~RDjxsQR z1%y^tV#{-aPcr2-5e)j;eK4*PHCG!oCK%U9CZ3FIS#E=Io#3wz;%|t-(-a$bBczSR zO-O5XvmiV&Z;?!;d0Ha;R!AF*+mP1kpMvnZa|0?+Y%kC z%1gmLqWfN>+eGa?$yCy2S-&6Umh}e&{$LRPPz;=w*!G7ZE$fdUt<|G~@K}G0nGoy! zYVmybH%O*WH1s&7S(#?^s12Q|qC`D`z2Njo2rPesEji_IW~mM+q+>l%7+ z{%ND$(E5yIDrvPn%d;rAv_2>B=Y#MUV&JsI*1ia7X?+Q4tzH&{N9!xhglOf17QSW0 zj|NnG^wKMudX>_wfV$x*e7$6}sMoL?%)Snx)f?E7Sq}LGDuG%$*Aumt#y3URTSk|m z@omY()A$a`EsgIA{JkLj{TMhcv27nfS{gq@TC0x);nDapGa(vlYVmy?KH~fv2Poa5 ztxqV;O79zua%NdI>Qn3ok)J_m^*OdAl4EeeT40j?Rm5AY&W?Y_kp3vi++l{>>;hZ2vBqc((sQ zxn=uLf&UeR_rmw>l}jc&E-kUui=o`Iy*ScZEg=Yx?cU6U*dADmIj$ItFJN*^wH*Nc zqOm^E28ubfI%X8V0rm8#z9;~%{UEgJPn+Piq8iAgi`9}jK(y5uZHCN&l8GmC5Xvo? zg9Sb$2wyS=PD^axQjnI+p-5}Bv>-e(hcOc(b7}Uaom`DD!QVPUUr;rtbdNTdp)`wu zZ6ckjsB^43wJgd(?Q#%WEsrg!<=}r*Z7@u~dtx~13dUQ6tq|v8V`dwBpS^+@UC|gd z5m-qwHblM&d|a-l;(z-kK(~!@lhjCh8V32fz_9>MT|1|x-t5Mw1~vA(?Up;Mgb>SmNshw?Pm$Iuhr&G{JUl$a2g4M#yNju|PcP z#z>~zuH(`a@tZ(e<~Kze3o;ABgKy4E4D*w^XP(Z`!WNWf)XG~twDh}2YD*M?`mG?e z+8SF@kKZYB=}R>AmgH>&v#r4xlDCsgd}GI=+;Y9Wz{dsQ<742o#Fk8ev{X+-8Vj=s z!sBWO$y8dWCBi2|TB>(MTB~|Nc<`N=2~jL0rAL#}i4Zx$GTp{)XE8X#7&LL4DVcKS;QuTX z*nlMkw@VPWYb4HbX@bq?@>BlFu^Td4?Jf|H@;xL|Zr5>XiugStZNz3Ht<_$F@ZfWp z2}P{bEluzK&T{EYbUZA}&4NiAjA6M& zGV!gQ%W}(hM)0jcyc>h3DYj)Eq&+>_kk+bQ5FT3{lBqOLON3`3E!mw&Yn2m(2UpC5 z$X*^}x|o`oC}b0z#X@2cJ}Z}LgZ@dGX+)PNWj2c7T>5_@3?hKS$>dqASSwZ;O zF>qR9i_U?x)SZj8R_6)AqwXKfgs3wkD0m4}HF@-krp~9dud3UzJWg|7U4VU{??MQz zF2a`dnU(EK4G>7TswMDZQFMt>WC*-eGVugnhH^{bIMeB8=q;;JQ>{?X_?l;+l=a?Lq)FG|7heGppRk1hG-)Ue9B zpqEZpOYZ}s@!id@cAI#+B}W(BBfS*Dw`{S@VJneaHy(&q#PD^CvCrBHh zpOMz;7eROd`VTXq0Bv2%lL9};U1-IfG`^||%}-9?7solX8|x9`w`Q=)0Vl3tmUTxS zD-Uw%!76XK*%G?>x4~T;X^gcC!i!Gt7&t8v-iPp2F~o|Q zseJ|BF9`3?OenauwOFz|!IvY21b*=wuj~-Qd^^I-pvr9dsxRvFmre|z94@PxOs!Dv zh;o1UAg^jr8-W@Kq17O48K^Z7{+_W22OC*!I0lP}A;yFW$C8qXKi8H*xedoqfiE3| z4~v1*5}8;A(uQMMq%p}^5MDHwXC@Sm^=jKw-X)&{{fUgMhK^rhNAD;rI5icqcx+97zN|nwT-HOGA~tXfKpT#+fuCtd_gJ#w(1uzOAOvS62+W?wmcdyU!KqpW zV#JnL8>5xQ(kjN1iP5T(iI350D7P_k1ipF@zD5k3mdHyjq>a&>nisPZ0&3I<><829LSTF!TQbcTv%y**lP*?E=K7*+ zq)}$bOh_i4%uy(}WY!6MgCKl#44jtOx(y*MnHwREfqp@FWR77bL}ve5?`x21d8AXc zvx^%TKO zH5fznG|9v_c{~^biU;<9K z9Bg@}@I#~+0D{CebRVR>MO(^fGeK&UOgu?VEVn^w7JNF0Z;8Rv6q`C1(#9x*G=9oa z5FW{{WGc)Ufc<>HpLNQuV29>agV?uuR2~R1Q=#av5dg(IILy+ht zO=l_1OcD+jL8T)qosvq`i8_c<4g$Xdi7lhVnIv%tgo(|F4pZfreqIz8jA9e8qGT!= zvxLt_xg~soz!wJLi(=rk#8&SEX$jvKX|47Xgh#k$CPes}cHR!24|zY@+EL6F^KFX~ z^YQyKd}!nsz15x|beLZ3Pie;Vy(v5$bLEEAYIi*Cj;v;V0IDMl2SR9d5Vi~h$MmZJ zBO+{PwGla3Y#d^2n1~!InfQnthH@K`E`c8&gdY(DrzLW6B&3bVQAlfbv>?2Q9K%c~ zA|q-ut@5}o4_jt6WQhX4ch0uUP?hOrs*MVrrYFZznjbLTK`aEH_aqYd`RHuB3|tut z>Nr3Und2d}IsscoW*tPPN(G1x+gxpQP82&Q89OFACrc(iI;WuAM(0$4pB99l9s{Q( za&iWwjn0`!Yju_&yy%?GOei|b)^?^AB`{?wfuH$X^mnfy^pIxHp)~V_rU%sdmydH% z4&Kj$z;9w=OWrwOD5^F{rt3YC9Cg=auMFplp$m*5L;Qu3sU+TBzAs|AW&UEpUlPP$ z8iS`PQg9ihW&U!cwYowO9`jc+6Jmao+Ey;i#7VC*nAPEtpWqK)|KIyAHi3R!MLE1- z49K1wu!rFfFFNLjwu60TxHr2R3J|+%Ahfy`TgL9cR)^q{o#^1&ySMAa*7e4g3EvHp zsSKZ`|3;SE@ZTi(n}hgUV(>IYnr?-((Z3C8OurX|7rxsiQ)!--2)_f;M*mKv@h(IV z9{g@*LeU>yioW;qnWJKS;avT#0sW-$dnnDXz55~d-Z^v3%P3X%q88$K9|YcwV9Pl2 zd-r$@g2l!}2dnb--~mznpiynY_K;*Md9$=XjB-o+BLaUk2!AXFPD^b0TF z5;(hMx7%S>&zz~>cAn+aqTLxx*1mg zGVzgm5#=^gFA4nRApDgWI4zNzS0QbrUPBshRs`Wi>J4T>k=mG3g6Eq%2eZmZB42Dw z$Z|!AmaIzTu!gGO@@s< zYw9h)5xKV^@HPfpM()2V1H68`Td5{!tMA zaSWW6$loWBHmaW@jdwSK@S^%TGoh$1<-Gz<*{fZ(5uRRSnqcF9Vz~|1&&c3aj6giT|09`lyZBlF`-%S*(uV6dq_z585FY#wW4ot%tro);;mNoN20e)mhNXCM!7O1ghT`6m ziEnBjmRqX(3cg)t0{9?tyUnL_Yp5gjUO7%hLc9_cG-moDM}3UU^Ml zR@5wK)EMfQmrP~bEp;oP+)}rqz*h>whsVHai7i?g(o(ky(ps%52#>nemc9it$~=3_ zuPFxCG6oItYfGk_c=*2#3hc2yLU8K_aqC6m@MZw}+5GicZX-4l8Lbim@hBf9nR2_1 zOH;(xLE4CIfHYQR5rhZdkeN`#O5Mu5?z{{{&2)&68h^2W`!E9zQhUU#B6W`n|SZ?XwQt(>^@mt5>X^M^62GX*< zEz(+TCkT(Ov687YPfLVv4{6yRhqPAX1>wObFcV_Ce=Qd5=dZ8(*V-Ofr&F{vk| z*~w^7ldua+?*O6IWNdjhK=kq|fOGm3&3R?-vZLs!H+l^FJ4vRp`IfyYD7WlQ75KCu ze0mI=me{79AuW3|kk)FZAUyVFF%x2MsalTd@i!Y2sV2O>D|IeCut?`ZZ$B8k40FPoaXNT)?ReONaLz-=-G{a6)e064i z4%MkN%E507gjRF0CBGbYimDBg>3X#!XGCeMQEEtbB@<8bJd|6K+XUVogm=WiX^E}P zLRykLk;bP4g78RI%!Ei@p|(BUo>hwy#XNrP&djsHPit4-5zt9m&QqEfL{mhgBO1*V z8quf-i;bKbjox?Ot%%6{64pNt3AA)o#gjSbf ziy&q8LlEdfPeBOWwrflH<)Y~dqsb6{rDV!m4u`HnfhGKE!Ce!?T^otR_&N5oJ=d|^ zGJZWWTHPQJkFpyjQ*IYu6<|N{H$hs)Z$?_HTLj_3Z)GNiaos)RbcPmgqYO{E`6qUP z@Y^A@x&vDhei#U+2hoIEYVQ=xT?S*Qy<0NzO}vNYmg0K_e_s%Pe+-_c*nkHhEyE8Y zt<^(<@F;p%GL`0OiSS1tEyIr@t<__K@ZgU#6JmJzS~E?+OmV^@OPnHGRHYlE9*C!p zH2egm`S@@9RKB%|F9EQEE|yyI6sjjt19A8lgjP>s%if6}|3%kFfY^ZO09D@CKP_sX zF=|byo|Q}`SC;DMSZ=v~Uhppj@h`^UX^KsL3DR=?GSXVTA_$M`SD6WMy^JiAz#paK z^l?K_>E^x%qUj*5zD8*tOtJKg{KOr!d35L1>nH}xZ$N1ECbndm-}^*V2F3I{nqqqn zyd|36Hku5v??|SSSWC>iEVt*tdxC#Ii2oo4Pg88-hmbZdA0e&P$Aa*P{X{aA=4pxW zPa$nwK0_Ld$OyuNf5A*BE`4k9@SS02#cik9z;7Q_4ZlBsOCd4nJMS3V^Q_I(IwjXjnd<9s^#r3(b5ZF z4nm9JZ86Ej^R_t3EpJO8tyS+JyiW|Ame`)YgnJX(`w6^%5I%sJ5O4i4e28DTtDZSJ zMN2i5=IS<)8o=E^>;iX#Aha5cExChZ7%Y?uV2?ia#9q|hojrqxi0&ngZo}wOlBs0W zcCABMZYf<_@WX=mWn%C&#fB~mX(?R}X)O672rr;3FcYG5`PwYrtzyeQMrqVnu5k3Oa254QRF&|tI z9(;XfLIGN)R=&P87d`n%wKc7(?Q!WKt&XHL*S<;omUCR`XWpSrB~XmejDpar4qJwX z*S?6#hztFWj!R{4yn*N(ZFHIlZ77*aiY&t$q1-aOvB1X!;hV(3X^Cy!6w)%h8Pb?8 zE(nj|Etm;0ynJn{k>k@%1%7jcr;T*k`<)&xYxI$Zx1=xWs!%rD*7qX5M21fkUwY)LHF4+~WTpY*a? zKBtPdX-1pjbGl^W`P>=hmd_aipBaSDihic5)N29w@n$NVSW_O3OnN&8-C{w$m6wK}cq1B$)l39MHU0E0O z(&=jHoh>T&GAa$db0iZ_@7^f4^ri&f7=$;)z-fssZHBb;rjgdFMGzjnbD0Spt^;tt z(S~8Dz~TZu^ab>arZSXf0Ar%4nAV|Mu@6+b5L(T{mQ+IEj)O*~b$~#+)f0hHw;WOX z0%IOs_JY|a#@mf?Lwbi~%1K8XvM8_@%1*)Mf;bh4!z^{|Ck1(y+h`S#!FuEZ@#vl} znR2@rYsP-!7eLx*Eks(YMS}3)`!ExVR%w)}tNSqzIztQlQku`TcEV_|e8i0*VYMIj zBTyPbtNpP>pfblHI&>pCI+ou91aqLl7=90uOnf^JX1V405WycB#2*%erzy6g3)0ej zIMVn&n!ryF!q13-(-L_(6Vk@$ETpwM zTM%B1&S54LqvdPuuS11GQ@S?v5D@xE!{<_(Tbdc>2i?MP$gA^E1ML3;LaXz!CHuUq zkFF1@*??-PzChGoXw(|2FOp0=)fc1OQhkZQFAc&ki-FS;TYNdBrTPk_vB0??JgTo^ zCPei*m8SzIlwvw$5o@peXGPW2(`PzzHRbSzwWAK?l7Z4GkyqCMflyovq1AQRG8EP0 z5gInQ+R$7tW^OQMOlWSDOnhi=Lb(mi%>utA2){K3PD^CuHb@(qec2d8>DbN=y*;yCiiN>VW>cA+)*&Thh-j zy5bNZoXzNo@E$Jh$JddK3&Mjx#Y`xYrAzzq-Cx@23@toOY1VM( z1PyOq<1^Tc5IqZ_)pOV)M48hO2RacQ2g~mBf_cGU47)E%Ccc#~vD~u!vfy6{;$Mxy z(-hnA8l)xpb)>O4x*$B3-jqzGd0Ha;El5l9+el;DvmiY9yUc`09#EV0-nIFsM-Ob% zE1G(bvg~!;``8DrKY-BcLu`3EK=iUN^guh^il)8ts{4^B`q(Hk0r*5Rl?+${KSjAE z@H2sb9)y1p1E(dn>PtvV;8#dvrm`SB0>5DLG-?cWKS?H@x}Q;QsryCX{|Ul>je*k=Tl5>GrS5m6 zu}X^|JnH^rCPZBgucBoulJvkH-J-3(D9z9I;EvDeP`&UIJs@x~2(1>!mIOlZrqEOY zhxDvk4wn#3y^SWrVIRrFbJ&;Vmc)L7?;peuh{4ko8&(5pNgRkYR!|XyN8(^+LL?5Z zMbkR+=DW?(4Mz_=(leSHLTR3cW(Cx!C9xk=E(M|0P;5yh7q1A`0-JO(noZk>E-fmC z85M@ZWh7I{q2*v%mfJpbIl(U<#IF#8rztjSMMxWhm5|0lCxY-eTv;-e=4pxWRUmB$ zRz+H?)db;Td;?1JSzeI786l-=G-`qJ4I#AJ2wPIl z&+_6ipq-8BiT0>_yr_MFA)PbqS+%jaGsd`MLbZux%0q>AZps3CI&CJv&4a)#B7yj+ zOYA34TSD3xZ-q3LOc#U~q-`WqZWp82*iZPjkT%BKA+6O|L3r@(nF+uQ}!5htrFkdnZT9>S{cyBcc-^@N<{gBBGh|5j1+& zQ_w7rlLWnkL7MNe(56(&!9BZOUDPP1ihHA2ZdXxnWzFzXF+I{#Fl3Xr-0t4Hki|klUQzBx5_QNC^*CN9@C@wlo3yZJhUsl(HGdf_O% zL{@tNjh}+;=NVOVm|t3}y&*>=`*&cWDa>(fu7^D=&IS51XC!M1t%bI9KHJf@=*VRM z_SC}WbY~$`zj(4Ye*3xc$nw*mA5d7@Ek9eOsC26P(h|LTb*V;Vrn)anx=GTnNV-|l zuSz;C>DMIPf;3*oVEKpUbjOj&eod)PUbfsZi-U|o-j7UUFr0?wqV5Q>BL-Y*cB#^( zu5@y+SKU)qO!nrlpQ#LB^&@Z)6&qcT{8sGJ%B4P;a$v}JNxEyeb1h}_Sm}RFSsRs3 zbzc_>+L4*+z9H!jNxv!Stfb$Pbf=`>mUK?i??_rn`dvxqCHH2`V>k3An8*j{clO1Cg~p~eY&K7lJpsp{#nvz zO8OT`pC#%4NcwC^|0?Nokd6w_MhFnEYrSR_`N2)9Ew9c+7MIiWAg~?_wvFZe@%h*} zLK-S9blEhQZF1Qdm#uK=zDvJdI_%O@moB>W&81UuQB8)TdV#ocAuaY4)r(l^e;w6} zsdTFQ8yxOZmmo9M{awegVJX}$bu%(k-Nht*i=-Eq^sSO!LejTMy0@hNDd|3vzFpFNC4Gma`$_sv zN%xoZU6LLk>AR7RVs>%_v-hCx2=P&zbLo{!cU=16(gBy2U7B=h%cYUH2+R*f;9e-# z>OPw2DFXMi(*HUF4?yWuw+8-psRxn9GHn&Nj?*GYc?fj{ma4c*G`A~R&9kPi#*i zqt(*_@gBLJkxaQ=$E7LapM|tfY|kOB)$@Yz;4d%}dSWX*`d(0e&);9ZVd_Y=9Z|&d z3Z0>a7b(r;s9o{C3$NiFS%F2pgaTYaUWUL-du%~g<_aL`NB56iuL|ZhgE5a?uS+Jr zp>MF<68)y&-wNX2j=|FuoAC~$<@sHtwR%qw9#QX0rqVnu5&i+B<@rOT@jI-7@ZcXa z6XJPrXlYLW%|{QU(=(d;gwhO}2A9`VpJG2a{|o}N=&=RoGH4pCg%Hri=nzzn$$cTp zzBI~AFusyZB^#E^uTgHv{6^s42I1euz-fuC`ySGg`2*7UDON#vWd6uZh|GRmLld8| zR!bv&qM@HC%^Q$eqCowOJs|KG2u!EPmIU$*h$#nkbf{YDeib#p88wEw-z5`I-5)5o z)cq;&zk={y`03}U(Fa;$ixxw})e=5H6xSHVhVX%s zi6?vz$}Qo81wJGQUor+xOKkO0ke2YFNaMFx1>q4sjF}MO%hl$K`Ob7lbE>foADDW- zB2*d?>!Amri?q889OKL2-w@@iRB0M*MuU^YIsq&l`bc&7K&^1Om*UD0SY zJg+2~c%Fx&-15A#z*h;vSB-(w65G2Pq~+N`8b7ou2#@DAm}0v{QKCt~2V#FmbNwDi^?t z0^c$S-zo-9OKkJjke2Ojkk)EjL3nI$$4rRrVYTUnO&E~ncZeAb24iHiv{p+GJqG=w z(Xo`~V4h%=;fETGGPONQ!SOf>&^t*o@$~M1a!c=I zf$tcE*T=wVi7nj;($YHxX|1LT!lQQ@Ga-6w&?kEf2UdId(kj}?EYXxSnhb}#NG6`cT~Tg1Y!LWvLHO=5a9U!!_JFh; z?uoQkvjyRCxEC`a4wtX&5E_e%s_zfzBMr}?G_RojWk-4cz?W&FQ0-aF^{t4Q*DZq**PbdNSWD9w*kV_8el#XB|8rLrgl!JQCTK?YkAJQM_1 zR0X&6xLR(NXv`aphTDQ<;<+uN+;Tf#;0uEAg)wkiVmlW>T5k72TC05p;c>ekGa+sV z)?zYR9{ud!=way>jcH0V`)?OtiP|4~!R7%FSRn>mvI)_vR0lNDxoT-VNK_qcR2do% zkxV>|hoaolc$mPug7Cv*;Izb+9RX=+JQ8WGjuM1Ne=q2t5u0OS@o8Lb)c^#BfEhN?&_owKT%R)Rq{kF^H`smATT6 z`kWy4PBium>nBO3oOO7AG79Wq#3_P1HHbSc66d%y!N#A?avQEQkkRT)fp~nMC7E)& zj!RR-pABilbq>;6oht|rejYQSaFs@VuIzr)htAN#KPXNA5u9<~jJ2Qg>Uw@ zjTUSXpv;X32YrbShb8$U!CY)GhU7~m6W`cNS#HU`Oz@Wn@mIv)X^Ks`64G*g71CN= zEeMaSYa~-?o|Xu|7SeKk9nxA|F9;8Q12ZA62XO)smL3cLuze4_(=l4Rk#cy$KpgF} zM2q=N`OMK=@m`gPibZjPo6Q;aQFcBfx`zO zu!sw`cmErYWl!4dxAhdcPTk^`)X3J}WSh`y+u^))S z4~;@Y>_?J`C-!5MTVg*E_@_bmXEAVEVk)B{riJ*c*C}!cjn|N zQ)J1)>DI0@9`SGz4lK)~-(+LinIe{*vDUKGQ-4Ag;`SGWR=sfHW8D4+iVga==enb483I?lYNd0Y_$%T{vfN;y#QKG6RuIR62(hZ`AsOBa@+ z9Nyr_xn)($At1*>@O_mUin@sI(hyn=!t35O5D6Nm8G|PudALwg!Mo^v8xCo2% zr90PEb*P9aYyg4v)Ujn0xO`~0FtE=y^~8SEQ*qS3z^4H>*$#0-@n|FCk%`#Gk|~cE zS~~^>wjRrmnKNo=8!hhTOh5~mV)p?wUuPb%{neE5xzB~jr2B1V<27- z9(+4yLXj>#DBslmgEF0=g|U?0Cm#Oi0On_X@Y{2#_Vj|Rny0o$ErfC$1V-PnMJO|O zB2;v$r%(k#aF-3i1kp6nXfh#~B$;w9;NlJ_upyW%xE+JI`beDP(ga($6U%K3rXYji zc7b>#PLoWzUB{&<;-^E}80?I+Rxtia`7>5LopFTN3{eh^Hsf#9NB_e67`P24g7RT{7`a-Gk+p>OBQNJBZ&a22WFL z$Q($^^xjBol@f$URik7o&C?R$O^}x9W~8-B3&Ml9FcV^WSZzD!-WReR>4ZwRrLn|) zX&|o$^64Lq&ZRUr+*7PF$0}19l!E_O2+YXGmVFp+xGU=-D0DhHD3urUd7`q-s5Iee zmrNx;mfjAQTYj^G?+oH|F?gC{Qx&A;H;=Sd1wnZH7MTh0JE+!8%}*s{QL3tmrDL=< zpVABk?FcQ7(V`Y$HyB+Afu(D(C8H3%0+m1|{fnm39^dL}DfWR8Zw zYB$(2GMxMphd`LvjOZ{`9`VPD;^T~B6R_hYQ^}Ym`~;L+!cP?VNkRC@F>qR9t51Qn zgrADER;LNVBm8t`LWHkeTkOEgfNa}*P_EJ~_zVd@c%R@|(6Z3KQR<;*p`)~Z2IcUE zRl(pINnb7c7EkRK__+q^T|=FTnqdAc2&`d)Et&5b2maZrp7@WtEwU%UIb!l$W75Rr zJjqnX#P&k}V7U#-`GUV7h`%rfPgA7jB1jvQi;>pq5p+F_jOaG$jwY|_)qTytLkym#*rXdFE&n$mt<}wf@Cdv`GL`0OiSSz?E&sP6jo%3sga^N!nGpXg zV>P{m`G^lcIDqSI0w3iiyzh#uJt^oYt=~a8ykR&_im6%0XvNPBK&u0-j;B@KiE4@y6-i*P2}#AOeJ-e`TJ3BnSVgw4+h~6#lUHaZGRZj zGXDtDn3gRFkNL-#2{FGK*Q?@3siif)4EgQ2md?F9feJ6AHnart`rk)A)7i)(+6$h--494Z}?w=*6!<=9}kLdlJxL zdhsfy`5asN8(+I4+8t`=;%@kb4@h%tHP=}FNkjisV4?ktgQCIvBIDcUbR|ZVH#3;F_@o<<9En~iL+7YMMP(Q;B945a&U9l?Sz;o4#sEH`81c9ZCuw|6^z|=hs0b`4z16I02WXjC0;u&LR zTt%HbrFxl%ZMat!msT+@nQ*TvnR3F>-qlcGF&vMUOnh56WVz*fBf)PR#E*%= z(-d2>38bZZQ>3-pOb{Mdn@gtBJS`Ev1*D~VOQf~hN)R4=Yi2@JFJ0T1#*en+G0W%8 zKbv|WpYGA-Hk4)x-1ef&DaAl-i$bu!9RyYz!j>lxr_feZMMUUvbVN$$jOBKF(Kya% zG_e^knM!gjw-Zoqxt%ERNkRAyF>qR9J10Y0Zg)glt9n6r-0s9oh}&VcB~r2WX;bKx zWDn%hKN_7vX-17ptU5axWojx)!R|B&EJ1`V+2yElWnIuqr>muRXHhxBs5JD>luSIm zvsiBVO$vUOAb!{XN84A&$x%FS2Zulik_5Rx77ht=NN^{_2#}C(967?}Zj-&u8GUyV zU~qSLcXxMpcXxMpd7r1MYjZit~I|WZy>?;4yG=6tNJ#ae< z!t=Wel?cE6!u;Z*GGC9uctRiAm!X&;((kU6`UhEvHeB*;r}kVeRshSpK?H6JO0vv9 z$P!lv(TqNsXgjj(F1G5_meM;_lsLUcPd(dh>u(TzHjJN^f~PBXb2_ADCx?3A8U^9$ z&5IIuPfvu;fVAv1p&qzqL3nrzl}L6Lt)8Ck;Jc-o_H0LI@$GM!tS~hCYo*lNrx9u= zGmds#8yb*}Js<+-P%<05eTuAxEHKLCEX0o{?P9G%t!X|wMTrw)e9lC>@i|N2v%~N? zDR6pX|MrA5KKDXBaC-~F^BGWy@VRhkYp?VW&A8}nA4>fozqrl1eX$fw?gtUL{ZW!h zeB~3`u0bP%D@S9}MT>2!2Z;Ft)x1)BkSK9#?Ld7n+l|{p1b=84e^?5huGrnfA&uK3 zP!HUZg7DlPMJ2**{}8t|a(g;6i|1h++pDgrQnDE+y&p}fPacb8^A>Vc9js=Cs8x3i zRs;LTLImzOlw_Yz9=iY`9qdnXI_%hTyjVOzEh^zBiV`Q>2s;Vwmamfqeo7dAY6_g5 z*yGb6EnTOh9=J0E;rTvOl(=_#BK#~!OV`<`V>(npc=)+gBI%kJ&&t-VG%XB>Ue2S8 z?E~jyDY9?@MBpw&nYa%ys$|lOhmzt&dc_y>&sfSX689IYdrjFTqLh+`eq4$M%hhFq zyF84$A`yo-3|LMYu4KC<>nbRLyILTg?Q29S^^2)gv7Gp8AuUCd~ zcrpJ>*BA2)h8}LDteU)N=#Y*xNCt=go6v$}-3$@9TTmidxmU1LFp%W@7{j*;<~GGB z!?%l)-qSnSZcN`P_`AaRyHoIV#eUqwc4PWpC>SwDAfBrGMTz^TE8-u3G^QU!9UtQh z!owe?5@8yD)VEISn8lYSF1tr(qmxfki?49Y@XrwG_Yq3}N4>X)2UkUV?oq6OG&}|o zxW`d)pOHW6lU7H17=732c|vSGskSsdPl=LF&(mzT^gJW@XT$jCQt))eZaxob*?9qV ze4H-`Pwz{j#NE>q;V(m4c3wdpL%RsV!(XEk$q!jJ+@L55n*d zQ{eQ(zI+5}jD3tcW=9o-XY5ld5ylqq58x{$jWN;DXOudci9S+ypJNGl`vM|xU!o*$ z9L+@AK^+6Cl)A6P%-3p0sryEhbn3oEyHWR@z`qZ}e@KDT6MOU{q*3=1>Vf-N5T3eU zs6?pa84@F9;S+#P*O)7_u`wWe`IS;PHoWk0zd;3Qze5D>50tjCp%IKRj!GH(Q*8XD zHk7fyMM-DuAG8}|{|dYZF7gqA!sikt4yPyfWp1<^WAmVnsZqo5`KXjIHodW)9c}@rU~EB%z%4`~+QCg0XnN*ZILqrQ~7d+Hky*AGj;+fopL zTNAOGMjnCx-zkC=!AO%lX>}Cei_*?;X zd>}3e&u2B22%k$}4hH_s>*pPN`9{2HNfXv!=jn!tk|H;Pk}atqo}jSqF7| z>@5h-=pa$z-sy?(^&l-F>!Xe#R0QGS8&ZiRWI%N*#wX$v3{8xbZEfXz*64*8{^;%i&RMQ6h)^(JsMjK~iJ?QR5?g6?f00yh#R>E?rw;yR#~!Ih&n=@?X` zJNK&XJllz@?bVgiyn`sEG$ZCwXt4B*7Tk_u+?Yfhp7vrnyZk@4TYknu!AL9u@dS?- zrPOaGPglfGfVBKfL>-@p3&O+s=q;L`;tk)cUElCA7<$-=Qs3ST!xIu@r9PL%X93vr z+|Fo2YIcFZF!3mnn%uj{217~ChH+dgnB5ek98VD?y|25o-MFq3{M0bMJ_S!#>`4Qp zQJqB{Gn@*-b2VL*xO;jcJO^o1H=>R&!3E*rGpIy%g_OY)%ka*~=&p$}VerIeEC=T; z5P@q&$=v~0JUzlcqag(hF*yarV~vs7CdT$qW10*nN}LTNvmNb5W{1E#!|<6YaC&0z zWMS>?EwU)Jw-{{D}o{y>|v$3*jGI4ryevH`-_sEiv!SZxj0bZ2ZiAW zr@-lnJRAaPxi}Pc%#kVxpNqq(L~^lkH9mOD&aUIQW`)yi8PXXSogG1`$N0f58E?cL ziKSroCfl;-0^DWw@PACCsxRZbAxiDBGH ziMULjF4*OhAuTyNUO_Wl%nLIraembP3=M2>GZMYyj{46Sw^b`;A?{$5M zXE5||Hf7c1`LH8Qtm|y*aOYqF(s3>X<}F3ZNf>u&A}*7s3wGu*wj14-L&2Bb0`YuZDN3o|OrEZYzY5amz8dww zT_Xq&zm`f0-Jf?&H-n*v>nQaR-Zq_$O)~B%US$;KCUe(g1<-#3MBr{jN&3GB{fsA> zek1xO!Q8AECHfXo(mQ-B+l}zs1b=%Ne@6Vdmo5FY*jl?dM{r`0m#Gcvk+kTT)4`Vf|b^M@fYXf{e7ff7!u3^6$c@zd&~ zV(c+Brpb6*lsFqk<`ZZ)GM^OqQ(^eiDR6pX@1B7)GM_~~aL)0`ZD>8SgIVWb78n(%xVgWG z)j|DB5P^FcC8_6!%@u&LQ?Q?vX5jZkQ2u{+s2l*&d_yD8TuI=UA|ALSL`FqRA!`@avz`# zTz?3GiAPbAYmUoOx+aKaxRnz7u^9YB4Jxspijq$3XJ|KKKNt8HVfdFRaC%}dzk)Pk zzeXJskP5;R`z@6Sv3;tiXEDFq@& zLho|bQ~l+Fd{sXSuMk5==}HgMjFj#drL3CVALJFULU6R61hb*Tv+IrZK>1=2nBf#9 zDKCct`Rr1q9}#G#vxl z*_lddUq?)@tEQFqL87G7z8>0*_Voq6K^VSa3Y?zU^Nk>l_Ki^w+$MtXv~Nl!Li>Pf zPLzOAwVLMC%xr9L!g9)0S;_J7OskH3lMZ|3isH<^Dh(7({X&jNP$<8K)R!cf2U+y_~>yV|k+BCx!9+ zL@DXNBf4TAc7imLcSb#My9mOww5up__w+<~Eu@jW8|wJ>SP&k*JCz8@eL2%ZM^^rR zEByRl+-=G*&j{(Zj7vA0GLmy>HKky={UtlABQvT#Fz)$*oi(B(G52g29R! zrq0RLwdaKD&X&eKI5SnsvHuDVD~CbM29%&R0o=fnWCg8Viwvh5wit8Ck)>+1x`<7VJ}Ea z#NMa}E)axI#6DCaiRd4hf4ul)L5>uKOVu(tV4(EAFQtC78#*s%3ReB`XFse4`uB$j z+yN*_Kfl@S0tDvSpGuiOP;4Khww3vVMM-D=5VRZfhYI|#F#PZoI6blNM?f0$N1~1~ zSp?ykKblH}`K9DUjlXO04<4?R+FIKiJF+vf#o_kKkj@zC_!vr^;eaPv{Q26_z#CmP zxP5kxI~Hqz@8ci>cRWh+%^41o*9XBqc0qWq&!Q6HdgLSq@`a+rNj8!$V!NGpFBbeI zVf>{jc)DU&FN3rkU5+{)&kMqne5ELH_w+>gRgjjWt5L_}c|myiwNxTG>Mb{JvKQ1~ zH>miG%h>4fI!gWExv=$Tu=%&U>(PRY+yH^c^eCAT2)QW}hq4|L!9bG}5kJe`B<5~b zbDEM{M2T}^l-`PVqx3d`-yVkFkpibD_V7+fqx3G+@c>^Cp3-}$L@4dW*(Y!|t;e&p z*5V)hWezNijPCBG)F<$mTcTjb-G}9%^L~iHJ%EyQ@(Fx+Es)6&%aNIMRd3tugW}*J zb)W=4EJ~cm1f&uCBtF)&XvK?!*`VW?lpW>*paPsct94k@AI#0H_m?({O@7>A1QdcVvqiWG|K-% z9Z%^6;W_(9l(>6(BK%)Sqr3;ErwQC#DA8$+er_re%KKF}XWa~W`jf>VU>Jc%zPv14 z@svpfL!{q%VAv;Ol-R?>PO!(1Eb&O8q0Y^V6_AMeAObf(!@$nN|5y@NM|K!}a(3b; z*#*Svf@)QJx{xSwqKxOBXg8i07Wg7zc&`*VJ+Z%wLK@G#Q4ic=g77>qP9?(gBGs5Q zny;#GDky%;T83Q)MsG_{>UekCij@qlxFxX|oc4hTTwj#r6vK`52(1Jr8DFJL_7hu6 zsV!x4X;IRdTn6pNl?P`*{-d+pBl zy6MG_mden{=;(39agd?h-J9ti0%5Yo}U+o zB0JiwEIwCJpUVBJqLgxvE(}D29c5M%-0ET68i}|}o-WA1nryeE)j+{$9Rl&JuPsWc zUpxiJa^ly4w4|+zdf)~L!o%025=mO&$SytZ`ryuZ=wy9L-Rj41W-|;xj&VEP23U*? zZ3q##jZh*(`9<`Q&RCK&VkB=YuuT-EByTE8dS^FdyOF)Q;I|0lw@ks)75lLjq;b79 z>KL0t5T2}UM2WknC&Gt78rMTn58N<8c=&KC5v~`k=BJd+b%lGQ3OHw6bT)#rYVrcu z;K!*Ew=EWd?~xFJ+YTl7h|mhy5g1l7?eSyv_F`uTwWA3bB}$wDBXBg@jldlRJ|+zR zUkaR_*r&0OM&LNq12#cM(jCRDj%FriG18fsb(63XNS+LV;k{9ko@dAcAcb!@kkPK6SB5_7tgn`ocJuHrF0tV zftxM}56@AFq_lYaVUN2${xBXoX{6L=#giPSpus3dbsTyQ@5$=%i!{gT%+xp4bz*#S zm&dxu-wX)Mq=}LTrM`MlVt~nMvV&5yz*-ch%(se?&OjU6EdzT9-i7h)DR{bK=Q&g7BiEZo9@Kz;#H z_+K|)K1Ga}VeCy=HF-tsTQUm>N1OHL}GNr;|IC@#Kr#VLKAv`C~-zDAqS$}5^|8h4-Uf*NrBT7nK%^E5^@;ofje9fJ|Ra? zi6o?te1YH4T1W@ygeV-|%BO%a((#d$`U;Dm-8Zxr5!=&#sDD@FOKUGkh8L>&u+uPllSOZ+21%cT& zQIcyu!cSfwY_kuQvVD%2Jy*>t+vkar&i46eH?}Vj_=REkMJaH4VvjF|G`256J#d!_ z!n1uDl?dCtIhh!~y|InD8{0F(qtDAJ^#SoXv6UI(kMUQa1?*l4f$2I?l3m>Y_K2b0Vzvw9ucjn(S~enS|3V+x#}*u$G3jn$h`$M7D4@T}fSCBkYi z{CwQn+2%>@2B!>;9&e-6N0=jM$sZ!z?N|;*?|=y0ohZpDpAm=G0-ubsQa?Z)SQ0>3{De;@@;Pwd@;kjCdjs0Z$0L3lnNp%UQ}7wDb%!qgRB;#F|Q zV_bChD5bwZS0nB*ECP#*#lw?sZ&~*h6$gnCU@JX@rl-f}OpB5#Zz-Q2I1U@V9 z=fd#kQ{eQ(KD_{G1ipxR;9e4hC-7w|5dwQ+>Z_@p(=i)h@q)bkag>qK-7Az;lNZ8v zHq^|xSFsQzz6KGv*HMzh$SRK7l4V>$63Lt2VHK|OGv3c|xbqY_C` z@q(K@?)rk8@zBZVly-t^Y0tK_cVYqoyr;(CvvsZ!m)T!n4P@y{2u$3G5?RVGub0^j zD>*rKnf$CGMV{ z2>%VzX#X8`j13|P5C4-&g!aX7x#5|s!Qk21!hmY|@@Zgvbov*i&RjLbjAg`_`x{N* z{~w6J{fm-&2?Q=MEMKxB_7#SkoR0YAat}OU!;@;1u&0TcTa-96M(jLnH)iJ*{Cr{j z{3&?4VkZ}XG-ek>9blRLb`(AEa@< z6zUj2L=c{|WkiX)rzgUfg*48qP!C*xL3sFbR3e-&p&w-Mg3b;B-JqWl((Uq;I#7pv zTmf^%Bgz0YA`=;iz^#CinczSju~m^22A!Og_%^+wSgclynx2(JiSuLhu8el0cNKxJ z8io%{fzuQFxf-O=yE^KDTSE|@-ZiO|&|9CYYvEb+ztGDF>9&T_kAvdP73p0Iji7gJ zh`_Cb(&!yhx+>^p(Bo}q+XQr^+btNZikWe(QcG)An*;t@QqU7^u)ez z3~7{af;t8e5rn6FGb$0v7p|UJ*VKr&H=!>rDmXMVH2T||Qoq!lSg_-^z*3OBB?RV@ zL`jl4q(*Tau*>+$v1?3jEv5#mDP?jSQPP< z2*NYD9hC@^y{bDJn=wrwUIm3O1Ir(k85})sPpLO0<3pC*4pHSC2)Mjg?_5vokS`1i|5T)PW;Z0maAP*$6z6X@bFqHkz5ro2HE4TF9sP8o$N-b zV-kJ_HlZ4f2ByIHmy z-O~g=J&ez#;OUAzX@oSk^QZ@Ih9Ep$O`^oz(-Yy%kj8ck>KGk3RRH)Q2FL8;Z8%H<}3}okI)QZ->B4lPI}&@F7TaJ?tNhH8~gY zlVzuvo2lkBE3-t2(_*a7M!T^(N8o#g;d`aP>4`nu8`4+}P{$}Bg7B>FOC`eUk_A>} z+T|8(lf{R4<(XxO^t&IW{t#)5(H_p2u;=ziE7&~%0@F~UB)j|}GQKVtX55uBe2|zt zSWPO!hlrBS@S$ioh7S|?;bHg@DR6pXPmhE&hL1uWBY_CQGkgq{2*W+AF}HixO{=Rf zywR5$2pT|Q4?gW(NlXvxnRX`(yD@S9Q1Np$vf&4^q zc9J?%rcV~7lxYNg3L5Ola;o4?3*$~t#AWhy!9Je>X&E{b^}wAa2v70ZqLjMDLtiW> z{2WNj(7CANLu5gC`1w>K87dyf+2OA9!g%Q90!lrU3~#~uWIGn{fc37tsS4e@`8*t=BiDgT#=Qc47ZyBrP1{}qC}GK{+_5r^lySkAs(4Qc#e zgL>eu6@(}7I#Ej9X7cnz`1O#+{|%_)vtvPc_)Sz&_-BW^=AZG<$<35{z_GWO)0l@2 zTsyV9ThNLe+zNpyBT+I3n`jOgQa5t2X($J`i@iJ4p61|AQA)``fOnz6a&Wic?g``W zO~hsLbiw}J$97A?{ZR0=u|PbF4~kOiHI+I8V@ft?_azp9!LJ|!_ccl~$RVht8PqYLa@3VM%MJ-0VZISZ->M^J_d8Ka z*+sD5qrtZF9|ZSf823{mE|aGV_Vs7BTUvgB61ZOl;(7f|lv2N$JY5n0JEW!M57Yzq zryxB1FDj9=6i>74ao0x}#zQB6Q&vr02aHd`dv{*3&*DJHxCPKJa5F=Bnc3Qs8N6pF zzLFSK=VoL(F#RdMsQU+45RyT0080Iqcc@vDjUFTTXV3;_SAf8P&?w0)wr9Nd^M3uB;Fb|r z%5Ak6TuBWow=0X1&h08_H*QxI_`ooHwG=o#v6rhu8n#2QB#QLJ7Ct?G%TOu|T_(oy)#wl=mA_tp5S|T<@ zJ#d=|!Y5*LDv?C=jU=McwRe|&21(CbQ0jM9VfIIk9jBCUiFQ!F6-3~+MoG%~omJA> z;F-}^%JX0`x{VrDo`;B%&ht>T8_&Z8K0FK`kpibD_I6uH<9Q_N`0`i~p6BhUM0oCB z;JK-FIwtgPm|2I9#T)o>q3h1^nz1r~9Vn|NFBc+^hBE`rGQTTy?W?&_SP{IBh6vn_ zD9L+S7!ts4Rhob?V*P(=T@x@?l=K9QL%Stlyuc@f;S*Ef^u+#8g0uwieHgw<7KBg0 z&Qu}^NE#`;g5x+tqrY7!LxY8n>&UjXyIrvqxBgmKwKTqaK!?DaIZTb8Cn30zJfp5{hTO8sW? zbVYm~(y}xIb$oj)2oGzRU|6~@m_!P6DHF$dD9-V^n}?Ij4$ z)!w4S-P04{0i;pA59;`WSP&k*AC(Bz3stvg>oFrtNAZ(^@|-g;dfT6}YVv|O{EYKf z+yPhy#t(!D+(9V0GlbW`uE5BWnU7y09xR3qQA3)8Lq&;`U>qKXcH{7HfgcfuADIHD zC-&+nNaOHm)bT;EAUuc1Qi*W52>!&tVRj}bhA$q)%hSl%=HKk16 zBuYAyH>2H{yhY%*hT*rR!0CxSyB*S)yaRQ7%qs}b%?vlE_;8{; z&5W2~d_k$Re~c}f*Z*QL4uL!i#bs+|dzg1$Vr5YO6$Bnuqa^h!U~?`DMLO8Ya_J~@ zw=p4fxABbx@vR1-8T(F@(u|>#-=o2Go)qu7u4|_TM#}~ zzll=n7SFMye-^cdxZpUTPG zN*vVOKWIkg{)ND!YJ3@i%;jtKu7fd^OHAmU@ou3c%mqt$hOPEA3G;|j$_65w7Y&w# z`2;tA7`H$oE|aGVc5p$qTNW0Af```v@iZr1k$q53w1oa7KDfQrjn8c z_PFaTFdjNtj8YF;W3x@!I{ZS34{-5;%Hn7M|4TsNVKqwfKTY{(G|BwiU0)x8^;MYC z+)tGB?k>f4qkCz=FB8Tun}Vk+_M{5Z*zS)yo=OYC)3v-Parg8@_y9;_JA*pD5f+4p zuSg}r_9E5Ijks6oXl=>XY+N`8muH@_(P1^E-m#1_Lz#`;N>~iuSB41ODkyox;vGwP zrB#W|x+rl#o#7tP#N7+ zlypWnL%T7$xxlvw!?#R<(-S+m6{In`HR>2&LJ*$OZK$L&x?wjMWo&dfgtC;;4c$;I z2BX6u0yi9GoY4*42x2pN##t$&+ls-FYET*7PLy;;w@14%x`V(+h2f)9;Pk`}?g(j& zjzJyc9}B`WI+jW*qZ@RCQN~7x<0wlR-N22cHVoe_1x`=w;1oz>ba&M8<*pz+qf@D*GP-^@7-ej9SWj8X z==!b!i@|6X0`mo;j5E5vn@(&d&p0b(G$#fd)u1w(7bTt18E7{~n*`n*hPR}^>4_a| zg)~OnP{%`9L3ljtBYjSkx>OBr3ybzm_V?S#M>5-8)0uIFYEo5?fIN*SFk z2Ir_jWpqzb(izIS2XjSdf_ zEM;_%I|z%x=)n+yI|OB%(LwG|Vl#QhSt+B3iNV9wpfY-dDCvwIiFRZ3D1jdxh98px zrzdvsSV&{^IMgw&upm66Cs0Xcblq++%Gl`eM9NY|*L5dhF&I4=B5 zo^e*n=xJi`bTz1qo*_y)qi3Ss7(GkiXNTeEq`>Kk9XuD(7(Ea5z@0A$&*%kIQW;&R z8;mkGI=qmwl+ktEMOX|*FNO%*B`D*JuH!BxHj`(ZKN!(5FY+Gm6Qaq$6Y6Y@zBW=lvR^g#m(3@_(^>l#=Pustqq;^ z`rx8fK9b?@9T~pKYOKdy^pk)fGfzPT?rD_F%xujJ<4n$s-9>I>KNo#5FY*(l}H|z z!MjuCN*)YiR8oE*MiL8$u<{9Fp!EJWW!2=Rk)Uzjsyq*D#A79V9Z9S19jt?lybFP` zeNpmw))fNBHTEPqQ}O%k_r>rBYFKmjp(t_EjPsA!Zlr%K_)o(4PgC%8#cqEFX{3LS zItK3*geUz=DiP9GuEv1s80fAALu&G)bQz#ar`qV4Q)3C~MgkZ#Bl(K5YVt}*07hEJ zn0Mwu26r$I#ogm;tdC@T0};4yQ8F2oqLCQ(HaRi23w>!|Dh7e=F<3^ zs+r&7%`t*~2D_0!#!2V@QtEsLBU?s^QJp8HV~*dWTn|i(h@8y@fd{E5nKRC3kODxO z*p1{g#rL0i#O}OmR}(g$C~?M&@cGehgfAfQ1;g-#QsDH&KKFz)!WTvz^Z5zF6W)tT zgz&AZF}RnGQrdwXskoJU-eq^n4$AV!o22$`K9dZSzSp7D0geW%%|b%C zqv8erx>y5g8w3%!^-wZx9KkPnedLIJNX}9GD7wCw-9XK1wl)+cPM5L05!#LIjRn3* z7`|x=oSxX@%^;2K%~22B7J~3>Z%HM>b{`D0gHOn9JFk}y4!dz^WQ=sY6{WsM91Vj7 zo`;A*w>6r<^I(X;ZG)0LLtp@&*vcT8p;t=s5V1K_Z7RvbL`f%kINFWm5dz;f3?G>S zrziGxJ4hpWd(<&QpddWSqo_nkE?yh>BNc`ruCK#*&)p!Janku{%ILMhXgw~Cs%slU zqi#p60Xl>38q_>_S}_@&)Q1$)4-YALHGuN%1>D00g~ z3~oQ=)Dc_ib^{nmngS8H-BB`0|H%~6M^ehAud9=OokTHJqtKMrixN+%o%9>nZaK{g zep(nmJq1r!BrgYPIc-EeaCt%aoX(&U$?0mC0kYNMUP_O%nkLGs$pewfaq30V7V@H_h-dLZoA=_Hfk6gaATUMVcah2%nlgMTxtoC&KrFw9M{} zI%Yc*gop1#C6d`CEwi3l4g=eb95O`u-Ir4Ty!Scud*DdebNitc+1eih(;K2>ws1#e z`3|j%yfE(Myu{D)2a3sq)TCzUU{T@}8N-L5-55Sp;D?3bho`{li9J06(ilDxbc*C=%W?vs$W-W2WH-{pUNZEv zDXS(=5avS@HQ@?@gLnCK$q~*T7szzDqco(kKBQEnI|mMs=yM@3hzUw2`v03dY${AZ zrJKt664eD7m2N5*ijuymT!ePpR4x|yC1LobDR6os-% z8{Jg8ze6%edcKNM|56;fO(hDiQ-?1No#{=Mqeq<*NM^V)u{4( zgDB}d--veO`6hwi9ERVL0;ebT_Et#a`8L!8ce@}w&v#IX@Z3-CZt6NZuwnBNt3SbX zW0zu-bbTkK&V0sOmca#+{=DJt!U|yeZiv9$gOW^h!mY&BK{Y#2j_R(i+3poj_o*kP z|9(;8^xHMt18g_`9~AsUVf@1>c)B79k3bs#kD`wEJA&~1KTajWe@!*VzNsmUK_o}P z>`XrF=A1bVo&0kCzg)L5ct-RDW!2<0!Edo`rsqV7r^#r3p6z!1_JZJF4C7x)!P6B- zrq@J?yQe3@Ux&0Tzkxd59tpz3-=Y%9avzG*9*y}AgWjz+0L z_YRtovv(oz&Il!Q2BA~A`*W9H8L46D$*GB7!o4pxKTw;Rqz^@jvt%THgmxqOV}XAX zhJTs@rziIHGe{%(bJX#+ND!XnFR4UG?kk5fzb)gzx88+xgJlLu&tFmMDT9Y5PCJGD zFzf6<_BGl;^EVK98-&tM8A)q{XGUL+=dO-p--)B|)sb@lgD45y`}ZS1vfar4N$@|1 z@xP?t>53Hm3Tfp3hC1F23Br^A2bBoq6LCMrq2u7yZ)#Oas!RlYJ+yfT~u&lY5OO$vnjLW&% zZU?J*pagE-Fn+!iJYA83`O$8vTtMIphT#jP!0Czbo{*Nxg;B?ABSHA+dr^s`a$M-q zP-jcy9-Y}1Jp9C8LNoE+&S64MeTkRQ#5WDDZdymYsT+GCyU4f~rL3Af4w)~$N}5oJ zXN-?$&5T{3$J^u-Hx>cKn_O?0$Ck1f1l}*9C8Z#1ZT92Z|@hb$zfr9 zP$doAOi~(GbIZdCHkJVpfy}lGVCRE%#MruOOi3OjN}OaPX+5^v`Cxs) zZxF_Bn1ZJ(c61|1%hATD2W}HVc#=02CGMV{2;U6SacmXB|58skXBu9(Ob(Q4F z@7mqiO&K7)Zbhl1V(}_T823A++Zt`i%U}q+`a;RPa8#_)HIWfUoSc#Pade0n9I6I2 zH^W4UlVjWtN4s%5Lg3qm;UiPv^u%6n2Wi}Hk2>Ca3Bq$bib{mrfrV>U%#NxTta1mK zYn+;OEqG?HqfK<{-7e#1Frz8;GeEmAZLag2%b9UobE1Px;AQWQfFKiNAn;xcB{RYA z2rD#z1hL!Y64cdEYpnPlr@l35<3))l&5l|V&~8baDDX*PIG^SuzB|Km^0X7AC2eQa z@$O6zK54sBi6m_?Nm|XU>{Pk3?N)LaADz}x>XbI*HZv(ZHN)H>3A>>QNtgnG_g*NO z1WsvFvLeW4xc`N0?kj%8|2d%#Y3s!0RCTG`*NalhJvz{U20Msl1vf2>o1TcvWNf zDHCLJ)jFL=WRBf%xIM52a^)Zb*Nzgo%I~k=%`&XyQ@&@4lHTuGY&YI# z3w}-*zh?@buGpo$AdU9DQOBz%L3rNw5hd=Po(SI;(rDigb^MVc2oFDiN`&?$t1%5^ z<8&GPzfLE0DULo=J`)U)eh;M7H&=tr9_GH)3rlwpT9Ji=A@F|+O71aybCs~}p|phG zR3MU*6F-j}CUy^3yPBpWM2YicG#`m}qxmR-A037tlLDtFcK29Fqxm@0@vcY^p5_y% zL}*?{ug4p?mDbeNgkG`~&ei3~W}x(bBBg$wEEmaQ6>NvBx|6UDC_fnjKd_)A<@`K3 z6>%!9;%^p+a>OT{A3}$$144(a($ojPcNy9}+!+T{><1A~%>t0VMq#gLK{V~49N1$LFflMD zY&XuY75sH!{Pih#x?*>3fHcZ)L_Kgf3Bq%BvnX-*^hEeAkVg5fsAEKVL3sG>R3elw zT0IT_xYsnb*2^dlg`KB-0vH`#-a)AY6%2=|jG1zGq5<6B1rfNrQF4#rFhG&ju!k_v z52V&7}6+x1ogl@DhN;MV^kuP zE>JzK)iu|3bc0KVMPH9o>NIu3#fEzVOF-h25P^FNB}wEob=nU07*nO}JuPOQQ8UWk zv!bN4_Z-@dz2^n~LKyyH3Y?zUqn99!y_ZoB+$)0c?7d1Q!rnsF+1Z#-Dm>U+`E8Mb z(c5d3I%eN6Z^gZiWnl0P2)wpHNd`G)pREB78Cj(qz9oj_%7Ow!}kRK zei;5i3Y?zUs}CWK!;er8+{c3O9DYJ2!XdW6#%xnV@k{6O3^FYG`jpadfnvjbh9%(d za|pbVKv~!Vr5)@srgH3+Il~UV_p1x8~O7PdBloE_^zd?f?ZNC-VcVXQ3iMULj zF4)^2*lwBm5lY~G5{RevXHiQ1X7Y4J{4bD}nO{*4+;4*L@ZYIKGE+RmvBzDX;TR8{ z{6VRociQwJbs3!IaCK7OA;a>xKd}mO^cMvFNJ* z-uog{BE0vn=06|uW*G%ec%e(X;%-ttCybQ=^rEbqT!q63f9QbC46j6S`U@L&i()n8 zr8h+27DLH>ryOW;+Ro(JujIVN&x%WkgC*60X0VSa@lDq<&=>8NfqnvCDhyvb1x`;S zU>Qiuz_O_00lFZ32KrNpWT0O)X1Z+DInjz=M0JOIMoHJpQR;UWn8H#_Mp<7TD}eO@ z5O{cvlB`4YNM3yfG=XpSq8#64j$$W;j$$jqT;Qrv!n>wqB~eOKf*!4m2HTld5!|X_ z+`vR!CQlb6WHq*1E?0+wX-5U({jMoWsozYVu86OJv|O%*I-V5^!o%0063J!pD8?Rl zeH3Fnbh0j`|60cXG=ooR@lS^z&C?CS3dq`e5P@4CC68fe=`oB^CFjPDVH*f+Lxm~b z8;O$M?Ty)Pv~ME#O~d%jQt))e9&HY3tZ#vO;Inl}bqL7ZpX^ps4&*BA?K4ai?JU9Z?bapg0g$Ft=pBcu?K!#H48|NWK2RNRI z1H4rb2O00c4a4fl({PBujX=r0i*KAO0An{}SCdm2KdfylK1Qk!P3m@{#96hZY>#$J z$_@e_6^4&afzuPY*b&l_G6r=#6c&U}%2+Cqr1aJKdw6Ey|Iyvg0)wRIag_QEMr3{} zqkTNuLHh&<3`B&IwBu~5v-|J_#6PM1+TfYdSIYAwG0H<^;aIhkDCs=!jCSLB7lH2@ zhS#RR>50AF4bpg?f;yi23c~YTMsce*)lCYB*VvmgRD8zmByzgW)_45VB(LQmB$2{AuM?Cq)cl=;0xDWw2m z?TrRwJ`mhKVcfonxJ;fd*sJ{@jrsji$FB#1@YEeBN~v4SG>YYf9|UR4AB;Ml{|dsx z52cdAJUiSq^Nfd14x`jtj^UjS+q~nG=WIJCuiCz~1D|NR!?6kyaRfx*jzq~sT%(C# zT-`{-wV^~DCH9V1dzy%2L@8wiQ67s1OT=-4J3fp%ArXhkMzNfoJdy2|iIboN?qq>@ zDo+um)Gr?BVma}rLRuzHLp^Y(3&O+Cppuda_PFazFdjNNlhV)pu*1mA%=XO4p~Ku+ zSPJsbh6vm_C`taUNWPc%}v)U5Tyj+_h){_t!ySFd~#ZMQ|YQ=z2IiFw*2q#4mMj5OX)GInBvU zqQprtPH$$rk$Q{ZZw=#bOTp6>yLdaKk$MN}7&2ZEp47Xjl#p8A+Kg{`8)|R>DE_Eg zo>T@$k9Sk*+>b-lQf3GK?{W{8gVK8;0(T!uQp&j>!)t+1Mwv{gZQA#Xi3ik#()ge# zaT<+=huChL_QQgIB#eJF1y5J()MJpAg~w6HF!6%$G(IUx+&w)J{uHET;c3(Z_lzJs z{8=iIEcC&6=q(Mcv)XHBwqtmM`Wk$EIJ+BLIAf&a=P31tY?2z}(FNa3XV%W(^TFBf zd8~k}yZ{ln7f~`R5IquCM|v23a(d$1`%7Z=Wwok_dPS5tQ%3ZwXg8u?6Zq?4_!}v3 zdSZXygfybxLOpPA3&Ioq4wVSe%T-U4d!Lq$ra7F%s-Xr$VK?yEQC<6t;)9Fwn?HkP z1n*K-P3{j0hZihoCctuLgjmjur)BpZ)&ueHLj>*vlq9|!3jDKI<@is!8nuo8Lvi?# zI@FweEJ{2lb`1K2?Us~J1^-zX|9J|Yu1Lujkd~A$Q4ic#g78WCno1-oJuze9)XwP~ z=c60jJR_sKZzy$!@}XwNeT#*l`#XrheUFlKbB6N5D&UsEC39 z*B76RhfexX>Ni_920gxt$MAXWt}mL9w0;nQTM8wTmcLK0Kp9VRrfgqXT42j4Oo?7r zl=Kc)q22iIFYx8U@a0qB^u(?VfHb-@sACj)L3qAa6eaGRo(QjoG`d$pJ#Z@v!oydg z5}|u3`~ZdN^J+R;Yw9~OjvGJt}j@Arp;`tknPACgnl_0AO9aqbW8IBSUKHPy4`vqqFsM$w(M&|ryN zTX5@yaqA}HFexdPlZ`=aw@j`F1rLh_;#0AKD5ZWgdAcHgLrBZyMyLmFV?lWMCR8Gs zEbch$ao0Nz8$RP@5PMMS1kpAJJ&k7y#_gQZ?i^M{&e|aY*MX8b;{?&=fSvS_$+M5iIgIZj zGsVd)b)wmvElQkD%f=kETQ>F-_+DZ7-YIZ;A`t?J?DA<~p!B{!rG8Lq-%*bnJ$THxZFd}R32+Bs9q@l31m+S&N&fjk zX)5AiTEzsT5S0>th*&>Vtt;_|iIPtI;b=GFj}Z8gVfaxgaC&0bkA^hjk3l_f#|pv| ze;kzv@oQAKwq^CZ0Nhz{E(2^TMEw*_?cn&St)ROB4uYoS_;oWJ#gm=!l&>&Dv=Z}AAJd0n!|3KYZxsMc$JBAM(Ip8Nv0G`p7E$x-^!C z8?YYIa3ci1SVqY-@R3!QsGDg$lV{hGvtU;Pw}{Vdmg5T5({M2WknC&KTCwA4L-df*-ugoi&wC6c=Jx=fv3BJj~m z;v@L-heLLOaXm~~HF;2()MVtUflp|>zYHJwyGMXVnjeM0Krbkn=KpBxaYmBKlbqz_ z$1fwE5Wi2VU)>Cz5+$AoOXJgMw=_N@@MpvD=ThMGM7o}bv^2heIv#`z!l&^iDv>m< z7D=Q3l(}$L{;C zb$ZR@+5K{f>gqi9hD7kDMxe=iOO$x>w#0Jw_ieUY_TGUKxOWBO>3>g@IG(PEe;?Aa z_W|mG`%n-b{t=Z(_Ey1&?YKSXXl=MGmkCjIpNn3UbmN4^s2R$~lvR^g2JyVe@GkVK zgS(mKu5e=e1OVjiQwYrGijsM&9R4}|W%BHGa?6(BK&7a%jz$vV-8h8c=&HrB3WHXo?GWS zI@-FCI0i;Uv@w5WO%2MsYz& zqKo%P35Z^_n#r>}l@hwO`O_L#Qev@8-?UtDp1z#P;uattP zEAp~3q-ACm)C0GwAbe&9Qi)_{0Df2M$hI`_e8KGeAFjC>E@N1YvTE}3V0oC?j@+{r z&Jn9)O=M>ch`_ChlG&*MS3?i@{u?4WKX!6hODwOgmNf(Gh!W3$F}N<@au)~ z>!;x9ioM?e(h|5K>Vexx5IzGNixPKFPlRs*X$jmE^}uZ=2oK+!N+f~R)uk!pRP*_4 zJ;o#KaF{}>({<gY(bRKAxU>`)*6DjYMt*5xA{UGLaQx z2h&p~&(0<%Gk&VsM*Iv>KbqE|qQrT%vK z07{aNm(4wrSN|XF;SB*qrF@SS)8o{%@;zRZbiOB`-T0m;@JV4f$L>$MGN31RdM8NZ zduP<~ffa~ZBFBc#x&CFDBRIiRSGYz7oXC{kw%gi)^PY=U$DR6os zA&rohnLO%v%OD7!nI$OCz&~|old4wK!q)`lfP2sfz8Ht7G#gHw zw5t=%Mu#Zr+2};OWn-qmXNBRjQ{ePOBIZC^Hugk4aC-^DXJc>4@-g56G=E6((-Tw>iDEw5Izq_QHkVX zsp5BFx=Z-8csEWE43oZ(rqu5%3SWF>xSQEcxjP1Hfcaw~0(TrrGLI|H;um7k^^d2; zOr9MnM|slqZ_+ZJ#Qgw9PlP_aI6*=>QA5&9og_+WrqIum(O?&5rwH!UFz&QOTqaK! zr0I0FTZ+$sg3<2<;&XJCD5ZWgdAcJ0Y)DJ-IjG~Uf*?HnJSveC7eBmUkGuZxg7MJF z`IP#5k343BQa7EGt2-+WKY*3YRAU4xZR3qxicH&OblVQ(J;vSFH5 zwJ(FSH8pzs?q;lwEZqVTxLZ+jcay8(vRLeO>}PTw;}^oWiHqCSg=X{)QR0+ZM(#wr zW#le_-yMeElLDtFGI1}YW#m5819!h5d`2Fi63NIC_;bBJ*Mgrun{XA-QPg!+`8qP7a=7yQS_~D1m!UAfEf@MJe^0$73Z?#c;_n+XQ|sCr>)YL{XhD`KPjyeom>MClAKQdft%x z0*k@>mk{_m9VPb;ex4j!3Ht>@Oin@ku=BOp`bKSOGQJfh&W4fs9omh|?*;xt82)1l zoSxXXpCFCQpHUCoFM{x7{z@f6=0bKq*c~Pr7`^>Qsn5*)eOtTx9m_!D9}xIX9VKbx zGjm%595S*>Is8iu{jG+S!+%6c=kQ;&8;3pc6ghBnp+p=CpIekToSxXLdC+bg&MWZw z!tnX2L^$ltNf7YIK2D}`vrxD;Ex%1NJo;RK(oZe#ZQ)N$+<3SJ(E>gff(Tqsl;o4Y zp^b~I2UZztrK~P2<`z+NN=q+M;f1x`=w;S!L>>XN7ju8$ym zQuKkeOv+3h+PqN3`QadPwYxmBE)je zHNUwQ9x`-elVynXyE3KCxu*8??ugs1TLrD4cU6eM4Ma(LIdWxTvz0q9t_y}4ccl!k zCMH)`lgjWKqNFptCfbeR8iB7BhOeChrziGw9Y|w%UDN|NND!Xk^{7M`#++;R*HQ5~ zPB$oKjC8y{rJr-n42C$~0L|cdLkK)QM@f!3h(XEittXkGS4#56VsjI4|;a3erg48uh>p7KA5x8!8c!SH|1kEPj!kUSm@=Vj9Q}4w=$A z?LV>3pc%;!%BsmLfyjyKAye?cFQIXl**YzhhM`y=X&43(xZx<7hDy=c_}SY^^D;u5 zY^zQ*FC#@s&&zgbx4djG@EyYNQ7LeGA{(P2EiXHwjz{N$@Ok+kl}KKeDt;tbH@%L> zaD7?UjqRUd()U{*~df=uA!qdGwl?dJatNq`q{yMe> zgHqbt$?lvo87l**qtp@4{LiZ1a0Z6$Nm;v_iq$}TJw)IdP?C6#c-937?6XVB?Ar}Y zRxD0ai^}Rza#}LIiFWN~Q|ey2X7Y z3P76JjpQ`NZ*pdf-8pJk6Sk))amI}Bz0hui?=A2k4BsaOPEYLfzK}-veyC%tZb5j$ z51IV#=qu&d_0v1&v=>ZKeLa#(e1`& z%_!;m1WNxh*S_2jztMFkVg)dL5(I{GK}n|NWp2{ypqd@1lZxi~sXk4VbgEBB zyHS0Hz|RcB&q{&Q6Z?BMq)~ki>Ud}_2v7BSR3cO_DxWjpkc+7h85-;?aJk^F2;;6y#AWhyK|ZcxyQT1ID0l`h5TAo5ARC7t$!d4|O~x7lh~R z0a4=a>51?MA&v5fP!HV0g7EN1s6;5Aue!djJy+OS%Ja^k=;=|)s>%3kiSX7FN1Nv6)`sxFljX@{WOVlmrH;nIfquk{dld`8;A;?g%#D%^ zax{*@Dxi_URZ8O52V%AJS<20Chb07KEqq zBPtOZ7Z)0{uD%g3dD`l5SJ{nCkpa@{$CNtZ6sb~c8L{R*K^sW@6apWUqa>-EaH@1o zaLb4*<@R$i_=Or&Zod>Io!hU_Zrpw?@NdHKZ&Tp(#9n>}Y21E~df21;4*Q;A?c0GI$)CVm1DBZRmI1ltBM80+k)y% zyStDmrDP-Qo@lT$+`@ueB#i5oh|A>Zg1ugp?Utq9P%u8YKs?Qhi&E+r(`sTl@k>Bj zmX<^vkIe<);eDw@vQ)gPV2``Ls$e{H(vQ;5i=$&US#tD)_}mb;3&Dn@S$(Q%Gh%ldU9&w7a}!cb1k*0Nm^T!I7>$I zI%qeN*A@7nFnqlfI6bki>q8pJ8=xMz4F%yz-iS(sEueN&2z*YClGO55TXa3J%2+F9b#pPdg_=`Vw-hCv)veHOtZpsv z!D09|DR6pX4~IY+t3y!_+%Q3SR)U8$QK55r>2O+phGoeUAUolufdzOF1; z5yUdwa>SN7S$-2bS?(+@cTtzh{jQ>va*qzwqQMT?y9sVe7`J;O4qtL(Is0G7c1zk+ zD1oaNh-bY)lv2NVs*L5tXCWrvtm@?ifN_x-R*lx`4 zA$S+Yx2NFgik<3!G~zo^58O;ac;;q_5_eBegwKXF;^&|qxIG2o;d@bu5I=u4XS**R zzRT0ksOV~M%BsopVbdQ@6E464aJ>%%27f`xJ)_W!{eb}`6COVW?k86ES1U^W0iwkF zZqyx!cBAeffgc=(ACdy6C-&!1NTcpB)B|_8AUt(PP>E2-dvSg8(;fO48QmR8Y4_sZ zj5`VoLE+I5fjb5zDb#y$zY1t%aOG$$b6EK`bXYl7oE@jmlf^XgA_75%{HH_+=?@dSah0XS)%91(d*DDG<-xRieb*(-rYo zLmKhdppJ1-1mWS=QHc=W9~Uw@{8?w4egn`ttEI;CSGZOzpA^Q*0IsLhm!aeQP-vZP z`syEsEivu}tcJYY2!T;iP;&p_%g`=B*rV8`u2XiiSiD6oYRYaEC7rX|*lszyUGR5= z@pq=+>55&x3(`_{H|l}AM-ZO#dqs)6rzgVigS3?0k9y!95QK+6NF|c8Ug6npibu5a zIbv}1_zQU+QnrLT&$*VLL)`no9Tl)iy>qx4OIzZHhRodTyP z_U|1?qx4~{{8UXU!=H(g&hY1GH-^6u_?Kb$S1E9MVo$$@G={%HJ#gO& z!ZZ9Gl?cNNR^tU$WUTM<`# zTy8&GWr%|AZl{cs&U-8?gz^g!ykqo6Ik<3P19Wp?6%af(1jZskNrJlofN*xB9N}GG zKC)GZ`sRVz|0LIAZZOpwZ{9Gr$-ENId>W4CX?{^k^Mp<=fCf8DE-1K#!nmG^IDBJ` z<>Y8#wp)T1ffBf00`VDIRFqP`nLJ$)-y6~rycp_%TU-zxz66y>f{T}w>~YtZl#GW? zmZa2ggN8IUW?MRB#E-#aMrJxXJ6auHLb*Oz1&Qnn5x9ORk;wdl^pMFjuH=jv;Y$f@ zX@x1_%ZQTR@nzX=#8(Nve;B`93ZAamr{y7y_W`J5;zvPv;#LqP?w+0qUlG!HuSPv^ zD+$8GSEdr-eSQ3uJ-rcQd^_%0^-Xo{?f4s526B~;r{xMAzoW<)QXHyfhMUt`I60Kh z75l)zR-vq#ydHMCu|8b0cbVV`_6d)#j$w=4RC9I%;!4ZSIiT+_AN}(`s|) z*XFLM&D~g=yQ?<$aBc3H+T5$Px%X;wpV#JosLlOZo1Yi=khS?$b#0zg?bhZwNo8%GGs4y8IXhWxp0lac%A^dnd5&jL zo99oCwR!$BQ=8{o#o9cdLD%N_Xs9;N>w(%lvsT+VVL|*AGNqvvKg(?8WQWbO~`O~z4lGlUVGN8S!=b;>BzOV ztkvqKuicQHxi;2rU)v4iYKvm;4Eq@__7)YEf?8WT0IHT!W za>?3rlCCvQR_f`t#ag(!8wr7zNhk+Smzx|$mW#P&T7 z8S6$9x*+45*4a|;c7!^*bLxb7vMn>+7$~{9CoJNo)fd_L9|8T1jgHpVruMZOvmMif zja)}_)7ow{CoGKA1BhWJXLq(mY#ll7qjC|;}I&nSNkK7<`1Ya|xN!$#6 zCAWxM!QKpM6SspeINc%c1V50w#NFT@a*wzdd`IpR_k&-^1L8sO6M0BH489_dh)2N| z-g`_u4nF4egm@C{#px;WG}xa!Bc266Gh|LY556QXh!?@X=<=hgJR9vyt?Qdv_z<>ja{>oZw<6X bhC8Ff?GZNf`|~KndkD0Im^X1BfnmY_0~$A= literal 153771 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 diff --git a/docs/build/doctrees/event-scheduling.doctree b/docs/build/doctrees/event-scheduling.doctree index c8aa842d11a1f69422f9be9b627e3de64f5dffbd..1ad744ee92fdf270f397431beea4c7b08dc673cd 100644 GIT binary patch delta 110 zcmaF-p7GXu#toMlW$YOk81zGnQ;UlA6Z2AvGE0k764NV-^_}xmQa68Kj45T!P^m3? zIytgjSNItd14C`mb0C?akfD{KR9p07^2~BAg_l5)*rHcJGL)?-H7zrxxac)l=^G$f HnxqE+_{t{< delta 119 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 bGFf-HukhClH_L^(`zkLj_ci`DM+W{sdhXvP literal 137579 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 HIg4@hRnWT<7x)fUa4%;Br0umC6$ aTeJ{JhO!l;i}BJd#tqqwvNjA14EmwPsYS*5S^23sDWxensg?RJsm0kP`30NX8A~N(Gw>;y ztgjcmIa_LlFn(p5_4Ovo@rE*IrW6;=VPs&aEt)&|sE?}fJTQAckj#+DP|J|3Em|=7 guaB0(LZC=&(IOxj%2t$`2GX_|taJ&GEKSk_0N3R|JOBUy diff --git a/docs/build/doctrees/further-notes-on-kotlin.doctree b/docs/build/doctrees/further-notes-on-kotlin.doctree index ad69f01acd463a71d2472538b85e5a0d91b19005..e80f63852a0b03233eb3b3f40d7be88bfdef95d9 100644 GIT binary patch delta 90 zcmbPa++)1qH=~Rj0|SG8XmM&$v3_D+N>OHMaY|x(WwE|V-qSUm^l;XnYwS_NAlk@0dO0|SG8XmM&$v3^#5YEDXNN=|B}zDsIxc1eE0W^pD~ajsD2%#`B7 zhqZ-|CM!xR^FFREe3BuTp_QRfTljQxprpFUv)IDtp=?E|X&`kkY71YMCg}kHjG`p) diff --git a/docs/build/doctrees/getting-set-up-fault-finding.doctree b/docs/build/doctrees/getting-set-up-fault-finding.doctree index 2959cff02f09b15039143cd808ab3fe21cd287b0..646de559700730d8d01ad488fd5288005b725472 100644 GIT binary patch delta 118 zcmcb1p7GLo#toLtGTsaf4EmwPsYS*5iFqkSnWe=kiRqQa`p)?&shh)?-zFIqX)rS| zgo>qQ=A_1F<^fffWaj6^r{*Ol<)o$*X#yoXLb;0)%i%&=lMB*B8MP<3rO9#V0HwVd MG7L6vNmF730Gu`_L;wH) delta 138 zcmca~p7Gjw#toLtvOWw94EmwPsYS*5S^23sDWxensg?RJsm0kP`30LpncpTkhl-_T z=A_1F<^ffeWaj6^r{*Ol<)o$*X)rS|bcAvjC6>d5G=W0ijG??KrMU(1#i=DFnR)5O dMOu@)(&PlRL2?YC%$X_0MLIzC<_&2|i~wHME(!nu diff --git a/docs/build/doctrees/getting-set-up.doctree b/docs/build/doctrees/getting-set-up.doctree index 623f9465c39ec17b93587f7716bfed0f33863462..e626c7b4ab5235c32898b096ac89b6be5474f3dd 100644 GIT binary patch delta 192 zcmbRAjIrez delta 202 zcmZp9#yII22K~_D)S_bjto+oRl+u)()JlDq)Z*-t{DRH3On34;iu#xt z7(&I;GILVnGxLB-OEUBG;#2bylX6m1iu!?)9iiMsiREyi2|yul#!%jr(%gdh;?$Co z%)IpCqKT8|6v_!t0?9FiGH0d~7flATYm25#K3e!lcq*7Z4M=9_WLReC)fP>kysJn{ dVFpknwrD1h3}q`yO#^A01y(v6NR}q)0RZOBLs|d; diff --git a/docs/build/doctrees/glossary.doctree b/docs/build/doctrees/glossary.doctree index 523ac838643817a4492e17bf4e68ea39ab9c7168..ddb9bc102d294c5628363b6abc1678faa0f9c3ac 100644 GIT binary patch delta 134 zcmeDE&e-yuaf2eGj5z}XgMMgnYEiL%VqQv7W@&LsVtQqSjB}6P2bJinT?r zm>C!{1TsX5LxqYMX6~ZZ6Co( KKLN?oBs~C|_b1l? diff --git a/docs/build/doctrees/index.doctree b/docs/build/doctrees/index.doctree index 0b1d734ddfb4229b1b4785e551272d594e6b2920..79cf04e569570587357324ce98f0a59e036e18a2 100644 GIT binary patch literal 25452 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 Bj4c2F diff --git a/docs/build/doctrees/inthebox.doctree b/docs/build/doctrees/inthebox.doctree index 18d18f334579baea7f111df9a7dccf331dcb6831..2880e343c7c7ad7504c656e433db89b90a85db7a 100644 GIT binary patch delta 108 zcmaFpdc$>t0i%pL0|SG8XmM&$v3_D+N>OHMaY|x(WwE|Ern*FNNiCHkPKxjN=?g5DK2USD{TXkrAc}K DF6%#`Ay zdPW9@+Mv HnxqE+l*}e4 delta 119 zcmZ2?k!kxyrVXh~vi=MV4EmwPsYS*5S^23sDWxensg?RJsm0kP`30LBnVOdJhB9ZS z6c;^aW?-l-dNP?~g{SaSF#8#h%+Sa%$krOHMaY|x(WwE|8NY6p1bR2qZ(ph<|QWOq^1<91BJX9LwQq5a|_~&Q%g!R^U{lpG=QRhrAeWp#g(~9 n`8n}v`S~Sz`6a3G#U+VFB}JMbO$?#TnJL9ZT0r*XlYSEb;TA2$ diff --git a/docs/build/doctrees/key-concepts-flow-framework.doctree b/docs/build/doctrees/key-concepts-flow-framework.doctree index 1872daf41d542107339ca4ed77c1217759ee41b0..12a6371d96ad62decd27d335337c18d26c69c4ae 100644 GIT binary patch delta 108 zcmcZ>bv9~4I-`si0|SG8XmM&$v3_D+N>OHMaY|x(WwE|bbuDT`I-{&N0|SG8XmM&$v3^#5YEDXNN=|B}zDsIxc1eE0=4M7`ZQfAk%#`Ay zdPW9@+Ms diff --git a/docs/build/doctrees/key-concepts-security-model.doctree b/docs/build/doctrees/key-concepts-security-model.doctree index 839ccc4725c3b211ce3ba71ed6ce3c8af0b3f771..b8793968a5fc0bcf26878b0bfb2aaa5edb6c4434 100644 GIT binary patch delta 108 zcmZ2hJ-2#8I-`si0|SG8XmM&$v3_D+N>OHMaY|x(WwE| zY*mFj85tOAi@JbhhD?S=hFon?_v9E`ErlMSNNiCrkPKxjN=?g5DK6>*EA0o8rAc}K DgU=xD delta 117 zcmbPRy{vjeI-{&N0|SG8XmM&$v3^#5YEDXNN=|B}zDsIxc1eE0=4Qsp*1Vz2nJL9Z z9gGYNwMCtirEOJ(yTI&jAekYPp^+h1Thuc-*j7uS7bp^2)CVL(*@{xrK-&7jN+$rx H(j+|q!l5H~ diff --git a/docs/build/doctrees/key-concepts-vault.doctree b/docs/build/doctrees/key-concepts-vault.doctree index e7154c30f202662cd78055ed3a0fff56428f69d7..020851b4834b9378b54b813ebe843eea731d3252 100644 GIT binary patch delta 108 zcmaD*dA)K&D5H!c0|SG8XmM&$v3_D+N>OHMaY|x(WwE|;Q_y7VQL*p=?E|X&`O8z)E)m I$JV!}OVH;2+wrD$$3}q`yO#^A$0am&b JNR}q)0RTOLCBOgx diff --git a/docs/build/doctrees/loadtesting.doctree b/docs/build/doctrees/loadtesting.doctree index 31f3b639f9f5970605680e5a48d385ac0f9c56d9..f1afe92e2ce159813ad840a16fedc58aa8ad2423 100644 GIT binary patch delta 414 zcmX^9opIZD#tpGdGFA)>4EmwPsYS*5iFqkSnWe=kiRqQa`p)?&shg{qM1*A`@Tizv zmny&cl;~;!nHc=4JT~7_yTc(9hhLTDW*&o$>;zR!<}nc5tYWd6m5|#kH>=tevlDjP zU)OycGUj^hS#jkb*ZaGSu-?ii}WX(RhtMKFf%aJ78wG`45bXc43*jg0#tpGdvepa?4EmwPsYS*5S^23sDWxensg?RJsm0kP`30LRnM8zTBk?Jj ze8EqC^9j+_0DQY-acQj4=o@(VWqWaJ9t4Q0+u zDK1iAVqmB(Qk={Yp(m^aW-9~945bXc43*j+g=yCmrVac|G8POB4EmwPsYS*5iFqkSnWe=kiRqQa`p)?&shf3}GTT`*v}=pZ zCNJu=5H@FKV5lv!0FoIh83q|@wMCYb-*#&0SOG<1i>!fUC|gl#T4qXdkqua>El8^#^u1_p3P0|AZ5LqK? delta 131 zcmdlrh3W7VrVac|vX%@C4EmwPsYS*5S^23sDWxensg?RJsm0kP`30M`nKIjXLzy#E zii^yc85nAd%qP$6v=Fucvn_#ShDwG(hFWcr)#N9gS~}K1k=P;|AQ{S5l$r+8W(!to S2U02;TVxNS>l2Ghlk@;k#wDBp diff --git a/docs/build/doctrees/network-simulator.doctree b/docs/build/doctrees/network-simulator.doctree index 91f6bb5fddd58a60cbd30bf7787c08740644d98a..863a1b55f538b9fca5bd99ed1f511cba34b0cc58 100644 GIT binary patch delta 108 zcmX?7zq@`zFQbeD0|SG8XmM&$v3_D+N>OHMaY|x(WwE|@|gzm>3vpimBDNkAekYTp_QRfTckR<&|XVH4JZ;@qz)uQ*@{xrK-x6GN;QFG HX_6iQcE}*1 diff --git a/docs/build/doctrees/node-administration.doctree b/docs/build/doctrees/node-administration.doctree index ea48bac3073c75f7ad6ab46f2891cc8ec7d0fa64..09447ca7ec7ed22491fe3f45473cd4c5b21b0c0e 100644 GIT binary patch delta 665 zcmcJKzfTi!7{>3pvxhAz8bU;E@Iok&8YzgNXo&rRNE@g{TA^UYEB7r2NK5b9LPM&H zKX6j>b#Y;FAVde_I}kNd*_^}}5(kZgi-S6tn3xcQ9xna`E}tiPp7(u{=f?&Xf8&u$ za{2{9@Wf1Jm>xB)8RL0VQ^$&?Cy>z?`K7zS8h>MJ*nTz=P{z|aW~9_n#+z&xy^2ps z=F{3Gra3|^mn$kWEU8#U1!gF0b~C=!~M&_OG`ZotRCh9}{p!80il0eaC_At6YsQ5EQ+=5tOUOyL2J@`&zA80DfM z=mGw1AkBy3GwA1U<3;pS&(ItYqgTT_L=4iqM1_c9`aE(F7@@{U?y+BNM++;O8f^DA4Q4Az+porXGu!qYs%ZP@-_w2VCX1jeEGx z-R82zPv&>rptYO~%+vdP1#pwT6jsV?dTYrD@F$lqRCY>&P%=(g)Eo8VdQ-{h;_fSM a<+SA_jBblD*RU)6U#Mo1~aSHx3hxOxy@on&Gc4Q-=-3C5;?A^L*FQZMvPaxy-DK zuqAX6e1$0JrY^#Zpn4&pJE6ORuDk7`Zi)z^Xh?OG=pX3j^SnIo`@r)){*7s0j|NyS#Wam+il!FTlxi}?3N16E zOHmhkr zxesWfckY*fn>Jfc0xk5WmG4Q?yDq>>ACxVijo4uqB~~ZjV$&^igHJDB?8jPILl;{75u|LE_Q0fMKdmx$e;|)PDeZet%&XC4M(kK#82$I8Y`n_guggI-D;6S81a# z1l-`SjeA(<%-pueSpS|9xj9SjDF=jC)87#dQ8{a>TSS+Qw{{UFjz)b)E diff --git a/docs/build/doctrees/node-explorer.doctree b/docs/build/doctrees/node-explorer.doctree index bb03e25d0fa899f8be64273c7d3249a7b4eae2c1..1dab0280386294329dc3ea62a9379165cfee87bc 100644 GIT binary patch delta 110 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 PanTg8+NnUYG)WHtDgtTx delta 318 zcmccjisj8KmJR7FvgQm74EmwPsYS*5S^23sDWxensg?RJsm0kP`30MsS<=_YrsGpG zdEK?p&CwgpRq-p^yzbf`9oZCoCQa|tWVD%HBEcxOU4n&?MT7{|+kvY83CJelGj==B zSOIR{Q0B~(;-Wq_28PSMT#{H+QZxgki6KM1wrJ+$WFS(>B=0Cws=i~s-t delta 202 zcmZpg$2eggK!i%-o;Ft}U89xzx` diff --git a/docs/build/doctrees/persistence.doctree b/docs/build/doctrees/persistence.doctree index 8bc5f38a34d624a0d36d846a145cca62f9aa1c52..5e8f0c9b67623eb246a276b17931884ba3424d69 100644 GIT binary patch delta 264 zcmaFd&UCGvX~S+t87l?`2K~_D)S_bj#JrTE%+lhN#PrHyedqj?)Xg^-w@S;z;#09o z_O*ao0v;9m$@xVoiTZi@DUKbEvK6JK RWu_Dt<$;yv1If}PJpjzpJG}q^ delta 205 zcmW-Yy$ZrG6h>1;7jY5?5kVXU?Id<|5EsEMlSpaF?Qhz&H!0GgyL%r*!C9ZcS@3O4 zyBrRO?|bK;{P8koJ3@#_C7?7T0h|?#Luu|o#!6(*pYh%FkaY;D@7u{4wA|2x&ckQGU0OHe9IeTlxVr^2OUSthRFwkL#2g#ueD2Ned*iO_DyB!=26jOwX% k7{#q~&0rp^f<=W%t*qrd)#ZXhllBq3=9ab7T(fZ3e~L#x%m4rY diff --git a/docs/build/doctrees/release-notes.doctree b/docs/build/doctrees/release-notes.doctree index 00dda1b451fa4ccfaa42a1581a0f8cd0e9e21e94..0ddd190fa04f84d6e299c276a332df87168acc6a 100644 GIT binary patch literal 155583 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 E0M-^G!2kdN delta 117 zcmbPQG_PnwHlwUP0|SG8XmM&$v3^#5YEDXNN=|B}zDsIxc1eE0=5|IdbKX$q%#`Ay zJB$nrwMBO)PqR=Gz6WOC2a*{w85$XKwM7pmpSI9acnB1UEqVkbL)nT_(?HrDgOxr3 IlBG#{040Sco&W#< diff --git a/docs/build/doctrees/running-a-notary.doctree b/docs/build/doctrees/running-a-notary.doctree index acbf9b1a6f054c98b978f9315f0775dd3903f1d8..c0bad30b17ea22995668c870e68267f375501372 100644 GIT binary patch delta 108 zcmbR2-{rp{o>9i0fq_9kv^ce>SU)i@r6{wsI3+Q?vRL0aKP7c@4P&<|Yld=dQNv^r zbtU0OMh1r3q9!1jA(NqzAy-?}JlRuSOQ8iQ5?j;?BtzMXQqwY1ii_I7O51^CX_6iQ DC9@x; delta 117 zcmeD3pX|ROo>A6;fq_9kv^ce>SU)R2H7BJsB`38~-zBv;yClD0b2VePDsL!rW=e5U z10w@NZBgT7ZgnN$CNR4hNM^`nXk^IM7PU-vP}fpu1&YKLwE@XcwxZNDkhXTP(heY5 HnxqE+TpS`M diff --git a/docs/build/doctrees/running-the-demos.doctree b/docs/build/doctrees/running-the-demos.doctree index 55c450d797256001f7699fd22c5d532db2327d6a..b8609f49f5627fc9b687a1516e99b09fff389933 100644 GIT binary patch delta 140 zcmX@Vnf>%;_6<7BG7bz34EmwPsYS*5iFqkSnWe=kiRqQa`p)?&sm-3u+dY{X_h0cS z%Hd&P2o+1q%t?*U%mb<}$;{7-Pt8kA%1KQr$^}YxgmM=pmcxbefI{Akp}Z-jxdrjX gsU;pF delta 124 zcmX@Tnf?4`_6<7BvW^T44EmwPsYS*5S^23sDWxensg?RJsm0kP`321$%-cPf8TVhA z&U1rNQY(jtfuSRmyC|_dJ~b~fDJM0hC>JQ?%^1p?Qkq*3Uz}P}l9`uYT$DH6{|2L+ YKt4#4A(S~YrMRd7$lhLhgE5Q|07zOWfdBvi diff --git a/docs/build/doctrees/secure-coding-guidelines.doctree b/docs/build/doctrees/secure-coding-guidelines.doctree index fc763af6626eb959465e7171412d417f3c6e2a0a..22a8c86b9adf9ccc75454fc537dcb5b775549c0b 100644 GIT binary patch delta 108 zcmeCpY{}eE%_!r}z`&p%TAW%`te=>dQj}R*oRXMcS*-7zpOU(H24kubYldoVQRZYW z6E)#1Mh1r3qHG|UA(x?*p-@|tGuhchOCc915?ho9BtzMXQqwY1ii`5WN(+EwX_6iQ DFcTkA delta 117 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 M66oDnv*CIF1>EED_y7O^ diff --git a/docs/build/doctrees/tutorial-attachments.doctree b/docs/build/doctrees/tutorial-attachments.doctree index 3e5423aa7d7ae5f96ac987b5a1d44b7a6d80516a..c6ac1d5929dfd207a220b70485dc119bdf949746 100644 GIT binary patch delta 188 zcmeC3$M}CPY8FEjj}vGh{Ni_@% delta 186 zcmexAm$7#qF)yVkv$QxRF}<=_-#I@eb@IlE!kcF^J15JO z;8XSSaLnfLbXzT%DmTA;w@K!phuL8S7+NGmLAC4o$!0$QUksn3aK{w&)0u%+SfO$k3}TIy&9PiBU`8 e7*Hs-=s1uJWh+We%SY&vD?c?Sr8FfcwNl?DwK%&ZzhHAab6B!$DLy5W z*G;sataC(mb7;D)mTWaXrJL7HR5l`P+Gd?2f#Ud00$Q56ndy!j4`I`QZd2KO{Drh8 zeiOI<6J*>YgkKHF*6sGHjCC@+q0E^n#YKl$85nAd4o^Si$QUks1k5=KBr|j}EHd85cDyQpZVKBRr5V6MSe2|%mN;QmzdV2N5muEN zxlUDkGB6Z8^OAE)Q&JVuGILTDO4V@&oqhcjQq*t$U!Tdznjv3XBs96S(?&{|nSr6U zNCZe`NMxvHNYxgJ0@)fFGO?5Q)rskrhH|Fm=a=N=m!uXKi2-F|i^PFsC|gl#T4qXd Pkpz%aTOQsGREn diff --git a/docs/build/doctrees/tutorial-contract-clauses.doctree b/docs/build/doctrees/tutorial-contract-clauses.doctree index 2c33eccac648607ee1a35a9094ccb58fadfb7eda..77a3f6feb1278494959e0438fa28b4d2e2accefe 100644 GIT binary patch delta 125 zcmaEQh561E<_#yAWIPxc81zGnQ;UlA6Z2AvGE0k764NV-^_}xmQa3+i+V+e!L$9`o zd-BSc0m3}23=FkJyg)KTE5js1r?!Z1GS4e5eSV-wY>@zv3}q`yP0LIvE)oPQ6#^-h Tk1Y}g(pk$G85k0aOOx~fb($qK delta 134 zcmca}h56|f<_#yAWIY)e81zGnQ;UlAv+`4OQc6>DQY-acQj4=o@(VUUW!mL}|Qch}0Q5jIkn=zC(r8Ku7zBsj{Br`9) zxTt)3K@*dla0N(`A(S~YrMRdP$gVA_nm)6MsY9w7%&7sA8CDrC88)>=wLrE;hC}Rh z{c0vLo6=CuwEX;%y!?{X;-WgBRBTZ_kPKxjN=*Y9)&S(x7BvFN4E@-mCLo@tjNi&}wfjSSP+=^GC*iA^uK h!o;i41{8`dY6p^`Y(=SQAVWHUoZ6yJAX%EE2LLNsEcXBa diff --git a/docs/build/doctrees/tutorial-integration-testing.doctree b/docs/build/doctrees/tutorial-integration-testing.doctree index 1e69431b52e7db0eddaf2bdb8176c7d00fa8dfd9..aa2021d93cf3b9f669299cfa835ba8b2ba45c480 100644 GIT binary patch delta 394 zcmcb2nDNgc#tr6-GTsaf4EmwPsYS*5iFqkSnWe=kiRqQa`p)?&shdL>%eZA4@TizP zUp8a2Kd-R>UR9gt%T}`BRRJ_7XY)d(Kz6*UHuGz(7h??Eyx+l&adN$zI8SoBtzMXQqw@j*@2bX1If}PJpgu{ux0=N diff --git a/docs/build/doctrees/tutorial-test-dsl.doctree b/docs/build/doctrees/tutorial-test-dsl.doctree index cc5538bfb142c2a686fc2605b86bb14b876b6cc2..c20be1d0455148b30ea8b99f194a8a356dd05366 100644 GIT binary patch delta 116 zcmccil;!MGmJLT4WgHk781zGnQ;UlA6Z2AvGE0k764NV-^_}xmQkx$!Zhyqcm}tP7 zp;TMsF+ISDQB&BHg@K{A$O}kj$Yp3`DAX2tPwz2e)Kc&P3dI)r0?AOeqSUm^l;R>k Muv&j0S(>B=0NDv5a{vGU delta 125 zcmX^6l;zq}mJLT4WgQt981zGnQ;UlAv+`4OQc6>DQY-acQj4=o@(Y?DGH!p!$e3ur z8_JxSQe5Q0!oW~l5lh*4A63(WBbk{NOt8W{?;MLyG;jTp5Qe1Sr-MSegsl&vT= Q4W!W@tTq5hmL}-|04S{_zW@LL diff --git a/docs/build/doctrees/using-a-notary.doctree b/docs/build/doctrees/using-a-notary.doctree index 236787ed2b777879937d7a3de77713f851b1abc9..942e23e75983087a2d9c9c0ede755c22382569f1 100644 GIT binary patch delta 110 zcmeC&&DgM;al?8>8CwPh2K~_D)S_bj#JrTE%+lhN#PrHyedqj?)XirYwW3)wRBMYe zCNsxs3THAgFw_=h0m%%x46O`>+M?{q_OV(DIY5!vqFf*u%2t$`mYGsqlm}Lt4Svv*>2K~_D)S_bjto+oRl+u)()JlDq)Z*-t{DRG=8MUH$Lzy#E zii - diff --git a/docs/build/html/_images/network-simulator.png b/docs/build/html/_images/network-simulator.png index 37060643389de7d042439947bf4d2ed8d0b1ce54..b87420e5049822e9662bbbdb8e8fb0661cc0e1ad 100644 GIT binary patch literal 424048 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

F_^kueA| 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

%9`Td67uL)t@tr%zNFI(K-hXxViVxso_ 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 z zH!CR}xKXgKVeg-InrePI4=#q{iT}Of|2HkIo#o(l*|S-5!k7^8uAZV(?P6kXiR@z$ zn6<10WO!{(I|Q>NO&>=1LVv#Ot*Egnm?Ami<-u!vbR4#7A0)G=#-+~xg(@Yyknzc< zUz%WB?JbzQ$Sl)kio+(wS+^1o1WBMy^KU~Di)*`p_Bsd@b!7(1Y!oA@;SYP29PjbV zI+J2AdLSJ_j-(W2>_d)(Lg@}f@L`pa595Ii9f(Z9g%U_+W`CEUk<`}s<K zR!}Gy(Tg=+2PI*wCfndhR8g7x+&Q6hORlSIHHxmHdEbl0&Nie)Lr*XVRxf4&gfCjA zGU5jF#GhsiijHa*?#QV?ZpVz9i4aq&A&9s{?x;~539NtP20|l!nOE&`mC7)Q(2eS) z5Z~iSF)AwZ+f36h-X1t4*kDJTI~N(y2bKlM;pcB�dmv8uU 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 z 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∾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ˉYp|r8PVOI_gOgmv^ zo2Cf~ZYoeG>kNZQ;(*2#V=$@iCggEWZ#)@4$lz0TUGeqm-cx39;1LO3Alx{jhS^YFaBIe|#%7+|nv$1MGF%%P zc>K;Wv!L)TT3?Hlv(lj(kS!jH$7yu2rS5E*->f#&MKSeUjcgNx#0o55xXTPnJde*F z2#}G1b&FU~pE}`VRrbDK^phtlD@rY5vBdDC#&cs@DHo5%oqFHqP-oxWIXqh0sJ|Ya zUFyo4-uwp%enf37#y>zQ!B1Kr{Nw4M1Tk|Ijm?J^vDLDC70l%e8q4bDb=yu@ty!f$ z5ROR1Xf6R0Mtyz#qDSXWjn`BDc>iC+L7nMRh6PbekJ2*?1CI@yd)`6$y^KLwCozlDgU5pUQctzehw;)(A2v9Rco54|R|*gtJHL-aSaK9;f~;;<#Ic5hAh zTa?~?>mC`PMgzIVb*4m#{R@^iB8i&E9$u`$Tsa zI(#WP1BaTXT6528urUp3lc+L~@o0n59LYMMsyd0BD1NC_mC8}DsXI3Z^Yx7wdxT-5 z#01?`9f`Gxh{r3=+br8xhj*wC4Yyk~{%==(4&stU25~dgu1i0cl)fQXTcZ?gx=2V= zmg9gH9mj*iL|SCfv_`4Sx+z)&6Ymoc-cSE51%vDu@mNF-~B{ z2XSjGj9?m8cW@loHqm|<6?bmB7F074j(y%QUPpxqlYexb)OECqn@dV;!hmSE6$hBU z#!o20qTfZ$;nPn*@h|8k^>Re;(M#~4Q|hcjUeIUWx9SBiD)L>BLi+v*ZsInq~ z7m;GHCC8;6U7sy=9>SZRYBO%N8cGQr!vv#KxW?38J)JV-%{H8r^}l~}@}LBnIWTG@ zS<9yD9WprvHhTja(8x*GfU0bz7<@_6v9Uw^xXS7IOOO1AX(BXfw5X*25Hn;v!5n7_ zjjY^^In{%%kwYsrIXOLthkSn5i+A{o7|U$-!b}ShnL=WW18DYDVDI#Ik0cjH#HFm~ zAog3mDu4lPyZ^!UUdDCz@E&(p93(9R~|fa|n+^~7tZb_Gnj zwhg8p-ZshFO9u(u)pk=z0p-oJ5AqzLK?ot8tD>iie{bD?W`jLXj~`W4?7H_B(wKAO z>tlIi-WMX1`w%DVxH_i|Uxn=Q)8w#tJE+Sv_H)juH>$REOD4YA_1cP?K1+3i9l`ls zrmkKl*wuG9K0uf>UUoTJ@m?yi8knG6oU%}>b9KPI-NrH@m#Zd{1& zgr%g!hTY#G_dCH4(TvCFyJlhbV0lm(;?yY9 zGkGzJz^ea|y;vjLwVFm1Ahh?L0^#2K*IJ!C)lG$jZnGZX7`IQ^pINGZg~b*Wp%}!i zBNb89FmO`VvW^hkjgGgUh7>BN+>VIRk+^IJl?9Vk+N100Y^GeXtn~xoHg9R^vplbH zdrox!eT(>zo<(N(6R#~=qN!aCi4?#7>zEbnkJ?{Y0s+8FD?Q&nsB;B~SH zvI8L&+40T8XpuSI{;z3lH0rfBte3^APXRML=;Mkq#qH`^O7@wJy)qFL)rw~atChY{ z068S}X9}o*9`Tb5vShEOFplNQd-_SoBcN*jzTZ6A-{>TwhpL74bo>O<;{Dc~SkJ zW{;y9c1(Hl^Qfe+%-{TbC$0EW7(nja(pt;D0Qi^kCoF%u!=(dM>KWUEPYh;o?1B!` zf9ZHQu~)xpz!~lMXf2jGYj17Z{qcxIIi4R2lw41Z4=fgiA|tFc+eKFU!wU;SQXCWH z=%sdC!pn5;)HAzBx|4oC?}%?=V{OOD)phpr0u$Pwq9)}$tv`B$!nZp2aOm(Qf6%Cy zBz^~jHMdUvKE@jG+f9>dUd`_9asSCZmIfryADc3$ z&9HZH08wn-m4Vs@y5hOxPjPeGloPJs}a0<=%DW{|snYi)`mkYKO1AbpDlgu#XYN2cp=V+&Lds;ROGje2y7?-Q_G-^vHA+pF zopj7KEsBvb7OW8#cf+&1Az##z#VDF_|1%#xn2@uG7CFx4x)Hq4&?}h~@9hnDR=0K8 zta~xMb&tMhZ%?BtU!@1;8Wh)XqcG(@$#fMUPzfdF$Zp!L!Ga=ikoyZ@pe<`|AI-3;2LK9K zj|1?_<4mWL*dm~`K6cx3XB{tcgDqfMiBuhAB$nNh>{)T~u-~!4z-31V&KUvNMnSL^ zF`Pa}Ub396zfn&%2AOXGRCuV7nhzm4IH7X*7{~X)Z6X<)+S`eTRV(}3uZ%9Y9oQZ0 zPmWfUEJi63+}ln$M5qzOjarCD?a~z2)c?6%_|HaUb`ralQccU`MzDy(jAIB};%VOO zr&w}6Iw>@>%+n3U2@RGq7|7-$?i_;ALh@X+V`l{~>RDIJQFgLhBl$pM*K62f1GRKlmG@(|-P-n76H|MYkaIxaXP~J=B6lD| zFu&IL1VLTNkg?rBA@T4(-*4cXC9aza3Jf`djn6p^YL+4apE-@B@06ExpANy-%CQlV zCb=^P4MfD>f8?sN23ZO~SWkZANVQXvkI`Gfp(A6HRL&tUH+@d9rah2kBJET^RZ<~d z;4Hdx14NiBg2(-TMV+go6wzd$ffU>xH^4ouKDLo9fBXLHSI2y~sBSu`J!)u!vz}nK zV*Qk(t5Y|Cufeik-Uy1MMCF*7$2!cJ5{tFh6BGZtp%U@s6r>camODIO+X1lch&udvhm_m7zH5q_yYiU zcdK|)@$0J|XRXh9WVOQ_etlwGHhm;n7HO1|yP+GQCLdTs66#Rc!owCuFAH0C))b(B;@G;tAIWW&$aH z7BgUG`eFCRQp9KSlK0(q3H|8wly!ww8wZz^33zXVrGku%tiksn@etO1P(fr- zv98|d4iQA}EjiA`@P=7^Yv-pkPU87Lgx|-uKa_4%>y3^X3>Y?X zYXa80x%rx&+TV3ZK&?c-TQ8u#pr@;@MD{x5cELAUg{k$4`m(6`Eu6p&0e6K%#eUJOl_64yV znTgY9Cmg)_!Mj;IwN3f*k+4`Fk9HG1IAJVdMCoIhsv;5{GK|OZ5eN9!A+6usPOROQ z_6F!UMV=)Y6g0g(_%Ywo7Nsw?lHvc~qgQjoS+{sS3>tn#Ba(F^rxEf!zg~_c@7^5! zO#(-SJ)BAp&52>~W--P(=j7!7-r>tlL@cCr9n0X;kSsMN9vJU;zOmGpX%+y=E)q0N zTz3Gl?EPsI{27Yh>eyLHjD5}=hSM0(oq)Zmd$i3;(IZA{R(;#9<5AmFagW*>vOwOZ z=x|yxe5WZR!vs!j)^1KyZUh}d4gOV7U%htrQbG0@LNb)YSU2Fi&;3s2pLaRjZ)4Jd zK|02XBNHdPQW<23F?<-?wD4MiB_Ge*OtPF$3WYD%eU!fm`)0X;J-PNYz3;#>NrsoD zewn`s@;gnuT!Km4_qD3%J2jt_?{#WTa}iJH(eF=oH*v2w78B1kosn2-e zllAam`ohQYpI^?(d}9@E*DLycfK}~hqD5*A9a!WmGX%P}n&qDoSDmwmd@M|)a`zDj z6i{fwS$Gy@$d5VdWw8W4lyUIC|Hgj8v{Z)&LoXp8Yc$+kf04Aq{c|`|=a?8ncJ7+L z+eF?N5CVV%=&%9c1QLk^6CNnJ)rMAS?_jG#q;f_b=agQscM1|$b`lt(w#8SR`2qH} zc6P0s1mj#$TK{wi?5aQ(6NfS_?8$B+k|MA3cb|ZqvUiyu6a9_kKcqiMELk&av#zBjr;t+e-YK89yHh7OQ1Uqq z09_jh4FZtnEwirHx<{+uFMW=OkJ*lC2qoV7uw=X>@|<^wKllH+2N!#AI_}FB{)M}~ z{Yz-67&5qfvk+_)Pj*CD7&i)ANy@xNdA|%*+L87OCK=kAAJ;YQ2QNR#9m1BJh8^y3 zWIg~-GZ^I0Uyws<|A&>WfYJdgWjH8JuAje*l(>qzZr33x+YGJ{x<<`k3+&k2pX@pK zq1CQ0uN_@|Rd7!a($mwOyskcyftZGBzmr>|r?~L!Fm5?7RF6;AL%G<@rWkci0?m*o zIqWCkrG;m^MV{s?9&Lp7hA9~}pM`|ElL6o&k~EA?){VMUEVAt?cNqHrdoj5Z=So(G zU{iDp-vsXyE1CC?*J(ZrjYTw~aS!QY=9Os&-#8)2+JIjAFHj*47=bZpf=In0_tRWy zGRZP|H>onG3+EAO)|W5pZ%#D@10EG+X;^=RdJiM|M^##gPx4VdGEqtB zS1IhO<(*+=UFF{wZ>dP0-{2Qc;y1ku(o`rTTuUf)O7Ckg9>nShqD zc4k5dBz@~Wp_3%L`8fDsAwXsNf%7uLTAqaSL9Dt8g z)+W+rQPCnI&~DrDIn4{GE~f1(OiPF?R3h5h(-m0EV?qb*Ij4s-MCkrXMXrFj1Wp%f z3GYr!(|KeCdQcBeZ8;oTy65rh>tcVZz{T#d-|kr#?c_HqBcF2)OG``k$f*20=Z(|w zx6fp-UvBa(i6N=;I-3$>b_YeU~^a;|TpYx>kLmtcUG86(`CopdJ*Sia4fr!9o z#(f3M4^lMUo@ODX?nlbIG9&9D4yi&o_yub zlmgTMNi$sHM=%bE2fDZag|(twG5vJjL=$m~67NFeM7h^Lf5&FGt%)ukGPD*&ZOTz| zka%QGu$T+=YJuK`MyJ22#>WlLjr@%JA{Zt1=#fCX$YF($$;$TlsBA!l9th0|X)1r4 z<^XdfIx@1J`g^0(mMLmFisBaLp_@e2r_AFcZqgB4Zk58vq1j2)5$}><4F&EWnI5m! zg%yRSatUSSNAc{>Y3V>oc@tKt(A1Ia?M`!aEMaQxB7d|Ta?@_M)1<}|k0tX$e!BUC z{UrPw-DAj~d$Qud+34Lt?37Pr5$wVRCuS1+Wf6(Q#i2uk=V1!@&E{(qEr{)=0{YYB zK8vvm3f9OQF5CoKJ*rO`Q-u8h1V9<5$`_NYam6CUFBv-0HHn-jjeg5%!|o)e+|}W0B67g=am_ zCz?dHNj00@IyrfSsM0fEm2%;9l3PzFuDb}^PPo!==hDTA1bhenoqI3*!y=ArH;aRv z&y)}LY^VU^1V8W0p5Qy0?PBT=7^<|wJ*mr_wROa)Bw|gvKa+DObm5<|zL{Dl02fTf zf)RgeqcwiA>$B`2L?*~)BPh;m?ME7ABSqz)zmPH?a(c#e-s9IjpAOuL9&vT)g%YIV zKn;1UnesJf?1-R@ztib5MxMabnmEo{_I4UuFs98Tmpa14ftywf>^BugIAinOH#snJ zrjd0oGY0e6niC+;)mUP*hnL!y3_^riE8lYlYz=A6_&x_$S=!?Ppkx9HYY+rzH&G_2 zk8f&HKRePXZ}rMV`J`^Oqk0~8)h_@S6Uk=f3yy{{=uB7HzO+G>B2T*JuR7f-7FVk0 zcm1vguR-SuLty@09Vix5Q#sh#L*R+|Cr|0?>ZJKslml_WQh_bQHP_^DXP{uI(02lK z()2{B0v*iDt;d$1k%ZZdf--!c=kSZTNrbF1|Gx>vCaX_KPDKs$*T*^5Iyt*6BDl{% zAk}%k;)e|Z?HobkazXSiq?U~x>sPGQT$e!stAGHIP#s5tIBjCkS6Ep1S(!;{&f6i0 zMw1gF$qDhqxZCr3%~$;bH>mR*(UA1kO*}`a$~GH6cllIt$aEwqq#Q3IVZmnTU~lC; z{71}0)`ov;M!+QAA`(aoR_fi`$-#FD;AC|^k^vGHDOP814h`XK-PJ24lAT0>;vIVh z?q@>6kc9lq>3R{9aL}Bz-p$<%7_^6)ir|wErS&`c(@K&q;U_K_GS);nW8ck{N*L9d z{eN13K>EU*n2O%?&9DY{hTfo+B@Alu^{96#%lQsZTP^GGi!42>M;g2<$C{^and3vO z(OB96Ox2)mJ5dRUtH2!zC@MjM@lDr|>U|f(J9s|OMLL1)ocPTPj3tw{ z`and=%*+gLKDk{W7Q?Q8Z`qf34uyTQ^`(xCcEa=WdKI3u<<7#K=zyPYx8~@ZT7}fM zeMwJT-kgYN%)BsESnnl^?f2Y2Wv8{p{V?PTGBS6QnlG@OBG(&a8E9>|kQ80!VO#AA z^%GxDemQ{lItN~8Z>zK?w_UDR}Q4L(cNc7k5Y`T6RW(@`Sxx>{E$V5%XiuP@1bX2n3nCq zIy$=EiixgsX0mMdTmHR)37p8yO{&O9vOe^vKXs58<^0I&9+!0XKu+wy@xJVs9vs$ZnF7 z86qt~{Gcu@J~0Xj->N!Mj~&&0+BP}tj_Gl z2}8lsW(uGH-YUtxj8lmRNwQr{o%ky~Z=7mnehFs?{aI9v?CE8GsROp-niAe5O# z*$13B1zvcn$rGpuu_}h$v#J2-gr|&Hax`ydbgI|KSZQ_U6U4y0%@x&s77OlhoUCXQ z$lICoRHu$%-Qz1JIaOH}n6GQc^n}A?aUz_Wh9`MUk6laJ_~FmYIUV$~CeeT6SQi^x zB=;YkG>U#TygsQBWMs4`z`U1aATw`h)(QAwDE&}0W4==oEw&f45v{-p0f^E1x^<+< zFWX@5a$R;oA)&>!wctWxTq&GBi;5TTdA80!Y@K!)O@jklVKg5~J|dL4eRD!5>EcxF z`hFb__mZY$8ej*xxeUKLH8ku}aB499`2c_n*TcvDnj3{6CmIkc>_JiMeHq67Rb?t{ z3>e%3*1+{M_EZGiU4=7vU}VvFA4h5pdl$Jcoa}-%H0QPsS^`A zAU&vDuheNf5oz;+I^kH^Ofop8-@-r3#qdiyuc-Il$BsSjeiuc)2ZDQJ&`2}=k_jQg zxUp590-R(gb#7MJYIZLvXCEf!6SIW}(4F^KC=SFG4-j#6| z#|e*FSY+z@KlO&W172+@jcuoa51Ai*c6sQR;cvSC!*@0FSIFLfLHmr>L4rYC?1-`z zm}cxM7n))E`sLw5&a*8wte?EBFPC$6f|k;oemNUS%OYLutVigwy1fUxyYE&^vAds@ zvEd7WywbP9PH$5_)gk3(bvfPPBuU9-j@EEChntjO#}sI^y4@Y)V_0wQT5aZAy}WXI zKay0A7Ye<%Y$lho0{eO_@Hh8)rGToE+xQE`Ax%A}6UuK!l%d`XP4C(`r%0{=eZgRsZ_@JFUBxNm2v-V#5B3qYj z*}_yGa2MIooC$1p66OtO#;$SSfx3(pH!Z8U36$pjTL*+Pnpx0iT2IYB)SylaJ4CdjAr0 z{e7iFCG-l1ws0E--skt6k_<6_DavBeYaABv9uP7gT_F(Vcni*ji_&piq!< zmla=K6ZZts$s(^D%$jKz=KP=!K~%T>hmWgiTAT*`)MCkBAJFt3rW9J|GZSqTcG`)U z1fO1>T^#cu4dY`+jV@ep|5Dc`%G|7}t64Z(igl}B{Jo52+%7xkEe(8O>OV6r%BPPx z)4SVwjK%-`7+)1E3rFH&r*Q9oKlbI-;w)VGsAb%zj)gwA&j^iYgPxa8kg>rpR@rZM zwkE*;DwT@C`2uWfIHT?g5%fs_sB02D^S}i4?UWt#NvQ(E3VHMHMn{nC8(x-FxBl7f z2b(M9!OVX}r#>nk|TC$4gCGgQuZJt^yKc7UE1K-Lxd<@%+9 zDwcqRS4~eNs0Ynf8c>j8AN*K#Nb}Yj3RZ`2RgXuoIDdVD0l#r0)ql za%Lt*Ht{#d{60Ze99S7!Eqc{J@ofsBWnLbytICSlM|`QsuN!IJUUwM8@{_`;!o#`9 z{*9tv6FySfonyNhVwOj|ZD=vFhL)ZkQ)bdiK{QoIHNB=o;bKa|otWc}#oc8ScD^=^ z7GQ$oMn3Vs8xYhonhY^A3Ae49&P;uHRG&Q(z1X<<?F0SfhriD`D*;TdBTVL?49EW-|yxwXsaym>4!+f z0D+cUQ1`i0TZ1MP7zL%281R?!H-L6_&$S8}!BEyE4 zJ`W`duUV|rq&;WBqi)x2Cx)mCrA!fHjc<||kr-zMXa)z9H5~K0_S^Ee)y|g1^Kc8c zO7~w|1f}fP;QX*x6|0&2eHdlrqd{rB+)}9Ua&~Q3ynM#gQSGnx?uGC;P1e#o5F{7w z4M|B|yO*{CuON>5TNGSP=ZR=8BS#k><)8Kn?+=i?Tr8Q?uWtH`I%?|(*|W$-zGO?8 zivI}<6a?Ak=;h^rbz9Y+yia0nL?AUjtovn!%ckylBs6!!_G^DtaU=m%)C3h`bp2`Y zaT72od{Df?Ww`$_)*>dnaH%&BBJ=zk1_n2l@0r&KCE&P8$=v$3e&uZcBk&uVJu@Ex zNy$#C(M!L0t}rZOyYruF_r+=c^I(rsgx;ntD{;ottoo^wQD?SU=!# z>Q$lchg9%mKmSLliyiKP0z>a4!z%U=_f_oRVAprjH$rlr={@6p)u1BwU!lznaLNHHFC=R-@XF~YYv*#SP^kXdT(^8`pv5ADEvunqZ zy+6^SnQtq8n9^{TwV;@oX3W(RjAX5EoM@Et4KcZb=VkmIm?9Pilz7hD zdR(4aN=_5}vJkd-_DbPIpQ_tSEk65f028rS!~Jg^iWP+nwMW#$^y1v$Sj{qHdmW_| zWSann)4}}FZ!!BQSZdGtK`ZU~)s076`$RF_))p@56x+z8Uh{QC5q6*F&e6pwYLHtN zqzMX%h-7aHgNKy6bKUnu--Vd@p&QeqM&qJ~6rc8n8cyHU?FVm3yk73$+mu`qtm~+6`vATBU@Dy7u zT@;9w%hrUC>K_%@XzfMTsNqVnw;0V&;)mDuX$Fvjw)b1eiv^~Y|I{O{oeAU~$ zyPxV{{n2!o!%E6u3P{9O&iyX#kfG5AaO1B=8ADhPsRgRzYfw_*>fuiMT0u-hd>tK3 zE8(R!drl7|I#?#^K8;Iut|9WDC?YY<_e|9d>>!d@5h0nOiIP^1$T2O=zR?Dcc}#6n z%@;jRAx~Im1=*lpIx=P)&xv_7tz-!oxZY&J zNSG5+w4l;VtEWE_rBo%)n7EybN%&mfD%5XRoO7;Tx1O%5nPLZTqWW9nr5dcjoUW2jRkuFQLS;0GPg%PStY`Gt=& zkaTLH>|*_5wDJTWal#BQ;$)D~<_-mwAE7eoALWVOg~}>X>dt2AYz4c-oE?hbWdD`d$MQ*}z6DWa2U7-A4wRyV0FkhT!`t{w$8 z*y$oAN;Ig18m!+>Hj%(T_AU4jjDO&CFi?Y0=jd{;(<)q4zbsT#jOh$o@*$!xOddPV znT@olWb*KH#4a3Ye0X_9p27L=aqMo4jV)&mV6M2>x6L!5>49iBi%upHrFW!EJED97{HZR4~X-xVV_$wn&GhKKn*W&vX z_C_+yA2PDy5$L7wD;5N9|KM+Xl+I17sin-AQd(NVJAE|ra>ox!oWBD9V&TZcTfXxZ z81Hh{u#S&Rya9-n^)O3O&wb+g+s_!yb;Hu`J!V%MZ#dbo;hz>0&`FxHtC9|M8_q1? z4g4+D9`ya}cRbp-*~}HDiN%StBwO~0luVKXNhc$S>dK+L0S8AYkkT4nkp&H2l6qaM zKU|WyRsHHnD(WB-vHgPuN))?+n|=D#_{)F>%jQ9`nMwzr6TBN?FayK-=zyc5mGy~1 zrNRvQT?3mhXv+Cz&yk4<`R%3XCwqv<%b_?;iyt95$wOE^(`Di!sG`zli(371-4ZJ@ z8imKX$|DfoSjsepte=@Oh|8Cll2)SRckj>_`OfYMkQygG$bBd^^4+Tdo+epl1;sC| z+doNk(C8d;JL_&texHk3)kKiw>L zT60Fv6)xYe63#9g5)62t$u(2n$tm+5oc_mq^blq-oh7E$GOpO z+b%7?m1g|1Av#^AVjMU zDYEfYRG7cQBQMGcALx!x7z3pG=HxCCZeXKn=mIo}OUYhH=Lp)az}}bz$GDAi*!+F- zcMR5B5Ga4wkd8in=hYW9?vFY~NidtIr8_g-+BV^~6G8Xk(@)RhL05nq)ZuEMBhOMz zms1BW<}0ZjGW$+#{x|@U79es%ic-+`EdKhO%Wv_2U3gIv7hsQL%-sCZb_2pbn7*ra zeK9ENdlcRQQ2zPMt1)v9CM zyu3A~RrfQtSpP^VjpvwePC?qSB}s@cx%kvkR6EANG^eMy0q6B<+!;#Gdv@R?gPQs^ zLZ~5@ZzK>~H9%0>t(t1U__A+hx|+QX`Of}M7CR}8dlH!~5?Nc{)F!|Y@em6muc|nv z9kEMEpDTMz`%|>{2=kTSD#xFb{Y!O?#!uXHNPiEs(+<~;3SE+?} z1^t@_m4JI@KA3aW6f#pIqcR{U;2y~hjxk|~Ivvk+Az7ci8|X8BZZ~6mFuil%y3_Xe zUKPN_rg^PcJBHqngAOU%>Q|hcoIh9q!tJrYe3y)j4CL)MU9F~$5a`rD>vtJ5I7jWe8J&V*_mQ}K}UCnPB^OUP!bNp=ew`&pQyV*A^X6mvT#s}&4 zmMFoVNAvUWIgSNGbZ8}zBue{{FlXmBld^?V&@^$rU0tlI3J{q<5a9@-sC15rWwao< z($kf^Vc4-edI?F!e*O<1fXNv7-zQmg`hL%Fi8QG1gQX=HdlQ$F+V+fqgp^d zyy6EvotC)Pgd1Gkw-fY!6s-`VY3gT@yglrs#j4}QYO3l4XPINrkDnmaF@*lYb%H(Q zN&(DKe5u7yTkWiGxdXjX19u}k=+(2zw0o`|ZHk#UBPdUEI@0oWWn<68Bz&*M$Q%tmaS05=w&exs?88EHj_C|0d=j-@qEqk zmCg5?f~{gns|kNpf~(uQ1=Vz(A~DM_e59^aax2@m>gkso!*0+I;Ay&%?n36q-vfG_aE3zFZu_; zClAG>nz{BQ3gvg<@M6!i3!zO{f{Jfpc=+H`08v~uwY7A)0mpBCT??^zk`Fa8+sGDq zeAXa-3WCMO1K` z=V19}G=9(K*ttw@r}BE=%8HS}VKD;oq$xBGj??ld=kfBLF&3XNlJQ%*6il9=lv6Z2 zsQ*bn0pMq0|M?8QV zC0g^wLzVBRBg3h0iPNaAjh20$`jfT9`}{p@JX9{SkR*H3PYjHwS}19p4^?83Dk*Zu zb5TB&6A^{NB_dj^Hfoq#AQhvOAIFAVEItBY5RJv{A#7}0H6Gfk0bq$U^ylYJJ7Pu-AbPpIe zSUkF_{VpRBHW~y-F3zd>xmYbp()+4vs@5>6kv?F(DZ}gylnIKhbXVkou?AZ$LyYZw z)Z2#$&?s(|Ps$YA-m?m#iyS+lEumT51kS?69X84=nn!XtZ$iHS)b?{|MVPQ0Z4f2x ziq*6mtQZ;^eY>QK(Pk>iHT4-8NoGxUt*h8WK^zO0y2hHNCo))!g4AcK;W2MzwU&X1 zR{$vP|3r{k>z2F(qTI74u1MJd0-w(&MvQERR`RNooxzHq`y9G(xWDn53-#2!wmld= zBOeYwBlO?Kmj=C6L&v@$oTL8ED&rTb+Xca{E=;7)#AW`2Xe^2@tHZ9ZG)`hnv6%CJ zm{H8~KLDFr=G}gVh3GQWI?udAc3a=cLBo5YIf>9$H$dWHi1Du-@L0@aoc?g4f80Lc zQs&@Rt^6uP+V{zez-!BvD$Szv=1jxWGw!ZQusLLR)d?s1mRKF6L=8`NdFx!`hV{u=$pp)vt}jxhO7Z=YSk$GKA9V%sy>F*0jG=>q~Dv_0oa>-nD^YtHDT z6}6@orhIM}vk&Jj)Wky%QJ%+>{9w#tm47U#c2sf5pB-ic!4u2ex%FP$T$%^a8Gcuo zYsmwNTh%%ff4oK0)o24_=hP1B*}u9yEvKFOhJ>{hURi*ME=UoZ!t8> zl&J|}H_YKGB4(=#`#ZSaxTYzqzhS}cFyh5fA~ABww-#$eZGcTZ6-q)otV_PGG$>ya zZgBp6C`yENcV!aKcW_XmacSD`jLm*H(HHe>BlLNvw=pW|Nh?|M>0mx&?!-mAl< zp<)naQeNB0nD?Q>xZ7@PLH#LPX2D>^B*1!|GpSb+LG^cElh%#tOez}W16#A znn;Zo$@Yy4Qx#}I=5}~D4k7h^%(htWjpKEar>iCjr{YwByeL!Iy}lWvSBdvO9%$`- zwR`ol2ujeg9R8gF-Yw++gQ1BcERQaLFd|p6?{1-^<<%LA8$MTRn9Glgs;0bUi8^|U zdvQ5`ofcM&?kK-r4#1Zz`yCYnC$#^TrB>z=d2jNo+21qjuD-Lugb*5VV3`>2qjNFe z`BAXzERaulXD^t9YdxY8OzdT(!}|2*bIEz7U{%0A*Vt!-DCbZS4ueMvw$Avq{&=n` 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%0AA84 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�lSow!(p)qy>pOzELIo$(&S|NVLFbvk{>P83vO0@NrPc3nvDtR741$xuW0ul zG`zX8m_{ytidodPtGN$;C9i1)pzDTIMmdBOb|2G%N_sK#-z0WZ2z%GGX(i(zn`0L3 zU{k1NZWn`r5zl%+wiI5a~|kdwNQz)+9ro&yeJ<|Vcx%_!pvK*RRter_&H&2 zSV1*=NE2l66`dNvcposrUfk~_OKW~5-^=kwu1V!F zOF`ehF4EvzKUOTCP^3iW-R|=2%6OX&B%e8t&v|O=4xA#3D*)qO9@nQ*PSJJ12slA~ zFmu;9DNQG#X9j=a-A6{nebHSl(^LM~@L<605L*^SDA-iAuH*eod%hhe#82`*FL*L% z`)RQ4pKA=l@_(pO*IUAjAMAPC?@iO#Uyr`Mv?)I|_`gFdXtmaqyxE%;U{lQ#5drFe?M-JTq z(#I>Izz0+|hyJ(ED{oH?<81Vk@P4dV@mm8lZXVZ9CC_}8;epR>2Qr0pai?h}ByU&9 zOnp;-mEnK)n}^Y-8--bGfElI*Yo}A1WrX-ELUD+baKguf`Hyj9TC!BR50^}$UMZv! zy?@}URin@9>3tI84!A|`0A5!$dWTno+WI0b>!x*RfK$7PsXi(0Jfx(T%w`!jsyJYH z?5X*cc0=N#J=VDvPg5&+{GnQZz9O7Xexyn2#~lCGS=kaV?Rs!*Ri*HoG*1T`Mmt3f zK|%UCZeh^BPt9z%?B_ zTb8{-nEiixXTQ!?`2Qp8E2E+c+jbQ}x;uw10Rg3Z=!PK#q=%GlB&EB%C54fYZjcrb z5Rj5)2+5&4&i4D(IqO~T*+2NrnwkAP_kCq~Bis9z4{IbT)&k${`Qb6IyCkDCX(3>G z_dP!p=b#bo&rsJ{g|J2vJJd=y%`~9xDcSEJ-Zg*4V-x4kpf*}kNvM3(`X{si6>uCv zE$ZN}dRGR^oIx4Oz&yFg%_*`d-K%9h%bXJ$YtF&Ua`%+V!X>=EEgxGK}bMOdcvnFLOG2uV%G8zd^6k)s`!CbSB?od+4Yp zYng`Z9Og6w()+V7fe(n>{DS)2F?6swBm;Kw+zEb_#25qPn6{_px<*AV=HC7Cv#&p6 z>0OV+iTwy6`r(WH7&aMpo`{y-+E*MW1MONDz>jXjd znjx7uQc#dQ?6*xiA=KzOD_t=dZBorfNhO1KFq8fPJC>aW6$5X!C|L}H zj#iqim1X0v9EF^t0vU)9@N;CdzPrTFmmvj0h=-hD3dee{%C--!|x)w&9=xPrT!<0vX9+v)j-6jYM6Aeqi_b5zQqhBffMIv#IC;Hl?vnXrK{7kyZ8~@ZfHXOGgqr+Z|*;5t?Pm_s}&ykE%eqb!oo=b;b zJhS9)mLkcW-mBQ!`P2jc2O(XZTl}v_!Ro{b5-#^aNx$kqaGvm{S>A#%J--J&abzF6 z*7nZzquZBNjBU0pevi3;Qngl8zbK8Y23Nw?5q*5>aA}>2iwW|s82jr*fOa&&r(+jG z#i|V-lacb4{!NO1&%s04)ZX#&5Hb zEOz!2Z*m>y6a#GutRG$SrE*2^)-QNg7~*{YO;Lb?Ic%vR@{oRUx_$re2Fi;U3Z;5^ z)c`pvG*wlKIhgr9gq)UwPE zAf(jpef3IL@f7jmSbEB|R`yLW3@V`mSRR6C=Rx zx=?vd%F8w29sAx7MwcU_3CCt2>ngj9yv8dn<(wYR@4Ha@yO~p$qwJ<8(zO2pSWTqt z{k1o*gyd8=UFeEA<#Y>%*=d!OHtqS7DJ|;kFlOIe2LP4hixWyw8^`g)H1~ECU)~Is z2+_nZDo=#lkpJ=UkBw-Q+ZRI@BP1^S@B-TN*8g285m+hLqj*C~R~ir1m`NUk0c8A* ziW<&huSQcFd|U4Ac`MGd+yl>`a^wJ|*bjpf;m|&Apqv>H6k74aZ%9p!H%4FU=jA~= zV=%jPWH zgwuVqH5rwhU263H*{>$S9ddhh5kc_kdS0oMm!WvzI8eW?8@~3^Ih~FThV}5t!;_JP zqRKX#+{37tJwzd0ZCpeKk_!RLST01NoV#;KkPpVF3zXsfxI_YHd!LbctrUlucIi2L z2B@_!@}B?m{UOBa%c9~m;GWDdD>_kFu)fA|h30=xQG#eE-?S7$Yx|tPr8n8>b7TO- znX{*-++6cKUX?;7BjWiIH=dy+Qs>pu>Wb^dqu9H5?+)5H#l2Ibbmd5`Npq{!iVa=& z(A-zvAQwbqRlHEKErBRlsH7rka`_iP;%76%MmNDN^akpsj?+tH3h4^gCJmXM zM^-r*hOx&h(-&fAH=>TCLWYRU8EiQqLk|df>|Q^*%m=Io-T^ncH?E3&cINU-Db>U7 zTp?H9;Jx6OsE;|ntzDa41_3-WOj}FC8BOR=g&BXAfCsP&|BpWR&DR`-y%eN8doCH+ zGr0|wT-1Sb=HqWV-Tw$j00BBGyf6#mK~7K?#R77Pj3^K9o)r^AF#hzIMLbW@=FM(< zzVj`l^sucwJQJgC#Wxf;DbYD}2>jONTx3;#lZ+u;^JAZZ^4!IwlJ%3akO=d{JswS?4n~3>3v;>#C=v?NDqDE3DElU@QpD|Zq_nqW z<_tRwDh&GZq*#H6bbAPVcatN>Gjk?q2V2T}3$XzGP}#>=cW2dJ>S)F4keFq|*SM(E zJ@7n?;UKVA)2)YLeBBFZYKth8mVYX9p&`MZa7>`;o}a`iG14 zTmwrbCU~% zk(k%Us`B!(tKP0{=uJ^n5RaqSfAAR|sj(%w(MO2D1#vW&1rqexP{6Vqxs;;b>JD$e z))V`$@?gE#Zx?A=bkI(nvMP{IoJ?mo!Ms!`wH00kzGU|QX4zhcaI03T(FFDv2s3U( zHj>b-ou7xEooR(e%9@cEeNaw6WR6hx}j-nmnitxJzVYf8LhcpEP7Zyu_L6P|zwgnAv}RCZhKs zh;B&GUlH+CQw&B!M&Lb9O=iW{F}0tYbo5$UUOGM$SpBA71Lx7>Oj6YOG8LWiy6ZE- zx3ZD7%7y>7=vAp))}}3K336~Ml!vJVEUmT@omyTEW4|q>ZeKn*8Uyy5oACOb*WQnN#3p_xC}q+4i06Ov;`+&$enB=^uc?yt|i03}g$!hRr0;@$`ITm?5NX77Yw6>uuxB|w;ig-LA&Us=adLT=Ko~ye;HKOg+qT)fSJ#&UGt}9%;!T+-G)*5G+eAf?*l!z1(pYNk~jOE^07ucR+t08)fmS zi#l1yiT)}46E%ltGyGzIuH)h8J-@L{+zLE@f;2qU``s$41p8QwO5!iP}kTlZAr71WEJ>6ZbnjZ z4NR+25f*9bl2aTWPvs&bRWS|9SW=V{ot2rbytQwl1jgXifHUlOh!uzqF+`~;2iuWs z<3=~S&GDBK;isnMAP=AlZ+GjBai`zF!VQY*G`C(1E=|Gg`NyA_bOEPIH$$x7Y03jj z;ohd4ub3rxlV5Zu%ubmE+@Js*gFqX1eOJ5n-`k{EBJ{Kq!&oJ?l$&jrDGRBd)r9|6 z8w{LC!%%om_K#Q0*!zGeAHW1!y>CtsreN;k`CVTb_=WiThB$~AO04CU9{T!FDpHOP z9 zAn(-n;VHhUfa|b@scmMdWR4Ex%r76}Vt~y!xc--exV#FF0*4j!8$A31?!f%-H(PJi zbYE@9pct?<@S_3vIlzC30g9eV1fsRGGlbA)kAm$t*`2Hh)<=yWRKycy1C!^w&uKJ@ zh5}g@sqGvXWmpFQ;X@5z%mT!dOfy8&Z}CKXh8jaICO_LlhcVbf2PE-y`$5 zrfhmwgOc!XzyINbMdP53p^Hn-U7Q=KOPp&;v3Zvy`#oGBY_hYPmQTh60s%*%6KZIq zCfnO2Yu9@Z6&zOntfw_Ul!O#Snao**>Rjque(I~xc@DT1&1ZfJo}5DM*v`C0WVU3K zdMQ|mcaC-}7>$exzTdHP1mqw(2(`DapWa}mj}kUadS9}uvL{i%& z@=?L5EU4SiuCwKZ&?X5YXs;ERQ<4v@sEI%RA>k`1)^0F7>nToEi-u|v?+0;GB?xa3 z6Wv?<_eHc56xHB|Mzasyfijl-{ADnG#dEWI1^9|4k34~RUdLuQkTvMoIfyH*GGeDX z^ZRXmxD`Jo;VyHMK*yONrH(^em$eN*a``S2BJ_N5>6vRnAq;c_cbP4d2AVT`V}5eJ zKy{VR$f<>5XJ(=6oeg~n8m{<`WoLp6G5H(i9-+3bFUyAj3do08H3EDnSz{F2svO8F zocSGBSmSERZUN?TsqJi9bVehZ+4?Gk{cy8{ywX<0q_4!K$#$qCS9+-SlJmHx4xg&g z5S#*O5m=spRzWK)A5iQMsF6O)_7a>}y#-eq{3A zn+YezTl4^L;_BA6lG}eG!X7{W&v?Y;7NY0m>RL!*->okqIs}ZC3c;F{%jXShI-EZ; zFgyk@hLf$YHQtv81J|n_UTR2KrmtaSYX)P~LR)lSa-5r>q%E95K%(aU})KJ$RlxXODNj}j!9v;f^mr;g(pfrl*>lrIuQCnv8{zp4% zqq*8;2V1Z9q-SiUGNB4cBkaNn6MPYKp1_?H^Z(yTw3C&;#ZPFExR76pm@a?6836bM zXGcl9;jyu7MAsbKFyb70=wC%I6HTCe3oBqw9xc%#q%_}}k204kW^fN#flEC-B z4A8e*fWIMg3558pqYW=Q;tuK-jj8v}DS0Qz;M7o*0n zCVu$Ui>K#{}HcP2jvh9oX zayrkv&u&F3sWZoN$~U(zjiwCtYo+-oNF%29e04s3!Po}y`hvg?rc#x3)H^*nJO5wg z5-`baC|2Rl+3R+oPI-U&=x6gN(lxYmC{6-LqZ<@D znxnw9c%MjCT-*GlGGqrM;eS;4HtXi=HMGV7xX1$Urwf3V406sm3&=(!dw4pm`s2wK z>2KAsu`%rSrU7l@uLH>jwzq}WbB$zBg597J^YoD{*P1pw@MjoIMkawh8Nyx?ITCfp zBl+(>e0T_NMpU=>1dcsD20nr+)h6(UA&oG*(9kZ#px$H>rwrdXPKW$jzIdVgh4yDp?fwOJo>ec;^z1s;k~ebcrS1^n)`o`Q4l>9 z?>|eOp{$f;1wN8kO~`lT;}6C;h4 z*zUR4I%6itL*%$~#*)k>UNRJVJI!oHHGQKU^dEJLzQQTJ*z_Tsq|rlbGy5(QF`K>M z7w;9+1)6UJv>1~f)H+&cdnR4mfZ-1)e2R@i&NurDZ{59n$VMJ?Yk7x-f!dUX(tRu{ z66ZTz$sDlObwbqYE>S(u<1O(h%0|=%@y%&*>7#L)?&O^O3$9zwnZa(X_?sPnVKpic zc=sBxVBVaLzHaq<3?BGE92HJCjw`45l5}p7v50z?CjaoN4$OJ~*6z#D57!%SZ&G4s z*N(zQ@U7%u;cOqdRUp)Txpu++?;kFHMGxvhvW9r2@8hjDvT4;hqE7Mr4O_`<*Zmq# zw>3|doW`W12Hif@L(($3A;Za7@w>*tEDv$85rgm*al zSt;VJpBRY^*x8|(V-&ihOyj};VhbFDG^IqUI@8*G{)=>xC@+&v_ml>EFSi56u2wtO z$C_7N0ebJoZ+!SPw5(#9>&E2?S*zkaA$Lxk|HY*S>Eo~)3(M)ojo{D*MP)h*nFG)O zw7B^Gws6R1tkTxJc3{X+86m2p#2$fHRome)T=eQ7EszAVyvFR~4yv<`c#b^I!m zIPmv9n~ZiH1Tyv8Lwo$gdl|H!R&UUPfEbIehs8iCwBI_i4lqG4741CNr0q-#f#p)y z3nHTXwmJUUKPTd_RHZ$dSjLEZcqa&Re0px@hOXO@!er}8Me#+#f}W_Z#?J&*lQ&GK zvPf%>{?KNhTO5P^kU6Rp%hN73AhS05#J8-4m9XIS>P(y+AIRUB$~OB}DL`4-m}?>m z2Lew3?&P~R9~dTM9Iwmw@4X^$CE_>{C+KVM`U1le*9B`D1er2wdi3Ergd~UAFxHX5 zU=*C0MZM3b$7h)&MQw*wx2wl!Gcvv0{L?#$ z`=I(WOm`iY-pKj)wqj`41(z20>#yYQkH7ZISBu1Zv6;+4Xj7xH@rJ|s6W&x2Ig+)s zcE#`cM7$O?D*icSiolVLIH5A+W7Q5x zO0~jb@UMY4+4|Fx5L(UQ?7hdwe8l6W2~ZuEHL>$sM=ZHYE?6Ua?6f6!{7Yda^pUQx zeJ1uv#(8G93(!%0o23smUHO^FPH<6Yl!d36hH>I77Wl2n z+aCKki7f)o=QI9w+i$Si;beuO6V;A9oGt*DP5-C$zY;G%$o0Nq3UD1#GSl^!_nr|= zUPjn|2T*6M=>Kvuy^bIH4UR8}$kgzAdKBv!i0=iiXyY1uFknXnYzC=nWeVfeiB@Ik zsV9h~ijU_)(+`?>?82*o%7~^#5@bz2 z*%6)-hrBHSkjdG%Yg)usLfftf09AQ?YedR>rObngFAQT;M92XLLMp>86%=u5dD%i0 zK(Yp+>xl*(8ByesqD>3XfPRoPO{COk83dt9!!|L*H1Scnk%ZuMWc?nA(O4nlLR@=f z1?r88Gm}w4Wnk^Pc^soeHf@l5B~~l1yqGhOBg$VBIn@KeuQ}g&Y&V05F(Wq9hP0t& zC8_WhwxXTX>ejusQQi@W3L3BKY(zpwhL zm!6%Fh}c#P>Fbu3j(%;vSPW^G*^E!>AJBO5G1)1)yl;}neEJSAeA{}8z>+x%+OD(A zrwWWwtQCp$jz9E8VEhMgXBR>7-nZLov#K&-6zZQTeX3VFp&#oux4QjQSFZ%^iVY%T zc>*1_-~O!ij9h%Nx8TPJHth5rTDDTPRH0XvIqjIFD8{C>S>!)*Li?>6!fRF2OUS&< zG@Q)3%3rUO;BoX9XH22jWth2oo)5byeW{gFTaz9W!*edqJ7tDKR zeLamL5THl ze$JYZ$239|9XjKk{F#!28Zo9Qx(Q0C8MTl6*?xo387LJg&-KjZyk8rA)Hh)^`^Fwe za?S%V7^Sa?O>|!e-|1{;#;I4HQ4jaW22 z1AFhmz$4xhe?2+p5H$;jO~V9t8nr_apF}Sm#M=bY_siC_ivEj~4bW6kOIIX+C5{^d*3+Z6FvUIuYQ z`3Wi;{;?xJ``aFdmhMTAmMZGGPEhaTLj~8~g)o|qG$a@CLk3bkHRi^Cr@~mM6EyC+Wxu`Vnlv@b zJ|xnw9ezI?<8$ir9qXvDfl=^zT86)%yF|TIk?@iGCr`*tB8IxwiV>=n%_>fJH_j?* z_RtXhl^03E?RV+prXs3!6}aY6+-dnm%aXRUYiQ>V>?Y zIbj8CDhkLsW9b(U)Loz!?-PKY2%>*=!%b3-;@e&*Nj4Ed9bR%z2=&+zW5(wQH;eqh zBU2ZnlKyIVb5|->n7SMO2Zbz`T4y^L^PmloNAnuJ0(R#ngyx^)EkwWsa2~upBVTL+ z{v)hmn67B8Af80}+dFtoK~lr3Ykc0!J6UzwPopsM$#HhZJE6)xZ9X81xTWyRvOPC5 zfhBU1AVb)*0*;mvNfeLrV5TC=OfN2eDB3pwdW%R-X6F;ZvNe`bNK6I*hNDLsI>rn8 zL3^Hr***eEx>8eTlG3+2)87Qe0FMG#uRe2v=g)zTXu|A|gesF@*3fMeUe+fIFAV$u z0(5Jigt+}R>G$9rDm1BS?YF997h~AX0s@tDcB%2vob>~|D;Z&+9do)%U59Bs+L~8u zL#wYq^IY+Jmh@v2$z?F;(V%{+7poTC@lv&b-`$wN{f@~aA)te`#fjT9ac#I8UG>Ut z&tjhxOGmJ=URV6Lli7qw%QnD!eiEw|>egz=TQK3$Gu_C^KkPbTeO8OcQ6l++QESDc z*hDm#aUzf4ARkrfEgjQckY*F5tE&)mt0AEN%hZc*lG*r-_PdEwN5{pp$=s!GZPBTF z>*x}P?X!Lrw-Q4rSYcrKaM^~=6c&BsI%v<|M<%`MwVUaz@%waTD1N0Nl1+0P@iFg{ z<^oHBJd>rU{Hz&!$RshHcV$Xuy&EuYdOsXCFV)NeA%b9OXkEf z1N+u5PCrSq_9k#R68}>&pADoQ_^7bw8@&Dq5N{A2od&5%p9V8wE{$RBmH?$;=0!OR z-k-m51VXtDwx|{*tiV50%L$3KZ~cE3{$3e0BZyFirc@mMhJFz0*0m^tpU*3>F)UO# z?1n!tEvkyerAkbExi43z64}EARxF8>eQY|UMUI`)))_dx&%N;(v#K9(c&SjpXYvyo ztNIN8I0xIH;;rMkF?Fc@0Qq5oJ3R(o(XuA<3zX*&yW5_rOX~dZ8}4DY6rM&g+7yLw zPb20vM%RygImNL(BFau;V}3oOK-+nMYwz+QU;EfgCqSfJzgXGY-MT&|u=**Iu@>e? zRuUUZT{D|PA6|S1ssu>yVt_mhHxU+;}i{8cbxfzge8>-X~kiUH5y$I@5TeB_JxmGA#K$UWN_F zo&pqy2prVVkHxG^*um?+VK#``YGHZhtUyowYL@`P_638>-FFK z(ev^m)T=be)hL3c$2z#;a4o;iE(qwIlP%t@`a9v_6Q!=c0{|p zoK;@%U%BV3sjtZ@PfO5tYmE*X=X&)*xZWBND-exmt>0)WO?rq0oA&LO7MI6wwm&@L z{Z4c5aTnfN-;I)9{2Y^!TayVH|*YTqZf*Egk%dWR%I|VY=XE|LH0aa0$0n z_nh05YSyA{E+HXGzRARHms=o>$=iK-%!r$LD&N|zRi)Cgf-L?rz#ZTKqwTfz`pUc6 z+$=V)ZixBa%)AS-A;*ldV7zT5!ySYp*>NiU=zj7mAcy{_`)q3v>PFNCR9!VR_H2yn zrKZ0f3+h{cwoY)fseWojHuP)PzHT-f3L>e*3-fb+}?kz&bA0-8+(`NI* zW7idzrB2oUNWpHxM1t$`+>Sq|u%y4$^bKDHi;a|2LQE()-W6PDJ)tk26o&=aajpoZLgc@G@;1V#(gZYBvi!+?0TWlN{_=}WhN~;i zAN^l^;^8;`f`pI`{wXA+y%awo%IO-hiNtdFw-Y)RV?$nm7Z9J*Blx^Bjl$eelSt1F zTBp8NDQ56H@2-HS4h>I2AbQ986$3ma@|E>)t=nQ5&qt<*Jo}{asT-Z{*HbinDJH9<`46jO!~SmYlU`^+W?S1RH0aua3Vvw#yQukP6H#b@&YfUiuHRPT2f^ekt`f3h=Yq z82@vZI;~F9WS1AMyXYyDunX3Y35nOQt>ipfo&rG{q7shd`2~Ex)Lvor8HAGwRh0&q z(#Fd4+7 z{^w&typsl=Sbv+f!GLE6+SxS~d1B zp?EAMNmn>mq}t)f5<9*OidG1*abH*+)xnD?^9*f_b*gDwjcI)+{)1*fNj^l@XI_gH z`XzJe9b1irF&TqTP6CHzu9pj)(5q34`<`I9x=k-csbBKtxn{*M_VdH_^`tQ$YLX!> zh^TH-nYTys67wMbi58B=J+&qS0|Q(D^Obda+5}U^cz23@cCxuLlRYK;@WX$S(Ysby+j7{v>$`r8K=@EZ#IN*}w5ebGAyXwF z4-avi))cKskN75s7n8l0=gf(lqjfT9Qoi%hqB`)Z7c1Q)Y9%}npbs|_ z_}l@i(e~f+Hai(odGy8GmP0x-K1o?N2!t20w{~=a*KRIf2U>QoPB#JhP(((lL1a2F z_c>lR7Q;J!8ANcsoy{~|Ai|`A_-YwUQYue3RSLWxsk8X#(sMYP@iQZa`{~3~mNqZy zykoc|9iFAaY-T*~p$BD!`FO98B@qvu@XUuqS))c~iJqZzcw$W?T`y3Q#UAvR|FX7U zcAuRnMM^Ki1Ab4J?P5+{Px-(RWoc9l?ckY3-iILr zH~Anfiw*+zG&C)~SMe9OQC$uiXw1{-mimJ`lQc7bQz>p^a4#aVxKmD)83?U;|MLmZ zijAUIbe#8<;JD4u!GDEO;ea2~OW}@mlA)dGA!ffR|xBf_-V%JsK~$3zxXcXwEG5xhZc}VHys4Y2Wi5 zP9?<>cDkdXKeT4K+HR1>6JI=NLWKzqXen2s(@VMtL+yZeLv=tlrmCnq2~xXK3Dhce z>0PVc$iVMZ6xGH$C8#v>$NZ6M}SCVu?5Hu~qt&#vBo z**hw9Wp{wex1LTvkVl7X_OE6NU!(vMRN+ue-GlAW0 zU0{0myt8XD;YSQOmr@FakW0@MiZkV^N6??aHRh5vgVyTaFMHkltP=K?-R%a-{ zDxtzW{f(M@m@etlMjmztGM$vtrK($pIx>AYB)W*B;uiSYT<*Zr9;%G~pWZO*g$s@b zw6EvXbgu(w*`ep?%$8-#Yc2yCwy?$|zvBk-BVvNY+XfY+a@ygC)8YYwrcY-DR86*YzfYI0!Qi{GWrH;c}O-EjC|Y|gFJb6kiyW3btHMq zyr&ZOcQM|n`w=)eP-pj9xL#KSA>64RVU0mQHXWkz%_Av2bUsI$4xrGyfm}L|y9rVS zTc)`Aoy@%J@P5c%aE)Rxh*S(>_wXJslFexLyapjyM=@{@a8c7^ELqWZ@2(E4)P9Uj zu*F;5JDxn=>vvpHJ>ad|(hkam%@AFswCR0#HQc3PH)hWd)QAGPSwa&4Gz8SAdU*|v z4zW}_V!&*}5*DSD8g#u$&C!FUb}eZwZb8fwv8#ksQB^@ppzZTc9)O`3Df&*<2L#yN z1U@~ih8WRs7pS&&beQw!Y#dIO`H(R<8xjf?pfa_%8x{G#mm7Q?q>?-Q<3FBj9iTr! zG^2=S^zw@=T}5wi7bM6JScBQ5rkf5Wqfh9$@>yO5{T(JMnLq)DVk~OUkv+QQ?r03I zoG30^2pSh@c*4}&`8nDmcsYTNaRCe#(Yvy!ouW*YFH$h^qi_2L2CJU|anPu@STDFk zeVB1c5)1v#O(OUFM#yz!qVm;)#Y!BSPX3BeWEUKaR>_m;{nUUnial$Pnp()KucuU{ z|8wWr0WS9H{e@lE{i$+wbxlZr2llMC>f$K~2*o$;l(&u3PWGW-=liOts*^@!8MO9W zZKG3q%pxmRf-F4DHvW>`fE~DvyjBAznx9TcLy3Ya%lN`@NIVB$zQXa)oe>St^$RfM z<$ZK^9><237Y2(YbF@{%odtir9W&+8vKh1IEv#g3n0+C&w!0oQB;b@RV8vJ$U8uAy z7yR|Ar;fnx#Yqvzq%3~2$)G92q*>w-9#WNu%I}X&>gwxW1`L)8=75_dM}w(`p_b(P z`Gcu^1Rjx&tkIkbbBbBzwY)}=2>I)w{xTXP&<<5ZUr?W;eEn+i7sBdlfZE&hAPXER z9(eJqA_38+@I=lLSQoakE_m!5}({9%WB zmS)k7)&Z1JLrLB*%#{@Ji8a(RH%k!hd4+uf)OIKv7B zE5-;fYnh>8HIT+$SIx%Ehoi1flqwsP$j&_af~O4O`<)@JC|~7eaujN!X)aUbWF#mL z6N^2^dKw*HsPR$2_G*3g?F#ue4cAXTFi)_laNY(mGdH0jZZ=|Gx9D*J>3l;1tA24; z`O ze7pJj^ePSEAqyMtozpfJ*E@Qhg?wi5co_2}$T${uRzem)s$Hd{ zZHZPwN*BM!YG!tK6Gl=XP9Zw*Fb_vouk?xsWRI4ezmEm!m2_t0MByfmUvvJm$~14!bs%Okpq~ zFZ%aA^z|iv$5iB1C3m0?jkKVy6Vn>BrcxiM?X7oszXE{lIf!l`$~ z7zS!KJKp3_l^gt$P@BD~mu0EZ^4B-I2q;P6&Qr-$W45V6^=00n0*Zt$rU}O!Nq>vG zcUYJH`oFmV8ueuFc^bzx)tP~PIz9Qw`B^FJel`#j6@^Sgm@+*aEHxNPhD;B{`xd^j zD(58yLI(N5AhgIhFBe}{T}Y1b^Q_PEW0&n~$bK7AA<^2Il`EKfP@da2j4QIG_*2$H z9`Yh}7MM`q7;)+w8P~S8phZJnmVC5tK1y6JmRI8wz-m*H2>dko@p&1aIul5QTtqoa zd!v30{ZIfLid{VvZ}6H*h*EvPJUN=G%qmuH>7&FRMhx1tPe4+lz4({>-!3?KgHN+L zztjk%2HS%+lOs`Rk#?7aXp?`I_Q!COc-T@E9CY3PSYb`(F|?OZ95cH=AcJ%JtFK-J z(Ut)(L7gF2YgemTt%1fYalXPlOJX7nrbG!IHWgR|X3&A~1wi&BxK<@g!ept#lc%a* zoh~XSwvM7ubqt|Gagxz6RD@-*^5NxG#_SM_cuTN9^R6C~kk7`K@D)6MRM=pN)OpOE z1##4mS8h)6Ss5;I1ILL9v$kv$QSz9T^kP$C93Qra5$e~~@(m(_<8=yZ9PGh<-vfJE z8flv+q;%3(j*ceI{&&Ge)nLlF!%0HzG+{f9;rySzsi{(Qzdn{|11SuiIh;8c*~^Xs z{qL=pxdT;)2Ax-0L3bCZ3y-AC6OkbMory<2-7wK7wT2dk!N&7fC@RX0s*zQsoCs_m_Od7wN^FZg_^TnUbR3kpJh?jWN|`NB^_rieS9-t}mwtX3e3x zbj3_0I%Tn9W;w%OH1pdme-X4J?;tWem7rg z%9#m6lX=V-oHtk(0t{T3U(y2_W)KTl^vP1fM|eQpJG{8&g|+S_qWxZme&%}N$rnE8 zog&YlBe5`4-;Isx_d)U8i)Qr3cuM%<=5neCkvY%Qe|;M_0q4NE-GOf3;N#8|o!q>a z5c?;o=Fb5<=*fykVb`QroT13O3B#FWpi;Dx$s~eW>#T+jjJy-n_%yiW-=|6Jcxnvk zTfb{ND*XpH2_XjQ+@bgQ!@z61%F&zeL>Gbb8 zJjDJw6Ws>;drM>bP1nH4sCMxXsCcLIjE%(d|F>w}J>Mi6)Zo?HbS}S?L7 zPrQgP63?arFFEMfW-g_I(%^zrQ2)nZY*;FpwM(8f`|#K(sfv{rpjcL&e%W3#oC=gA zx%0+F2k|Dpdseauv8(hV+yARVIXJJ$S;dMOn%a{-BcxOn60A%=#nL$JE*6FcOGBo_ z-4UBbnRyA~l&NwHvM=n-?0EBX!6WD#57BsqvoG4o0|-c0J?2-OFE+w+-o0+==qSlo z(J;Us!5e3Cjlgg)LQB;(dxB`rNR938ZC}pQgbMO2u-V+^m+f=Ut{c)i>f!eK7&b`O zu4oZ${o?x56}K3J%z}USgpY4y6Y}`*JpNjw=x^--xlitB-Opzx;C>owEt4fKq+_kWL%SV>_e-0 zyW!ck$QS@y4YjWRichIiW5kY@V!MC?)?1~oLsC~e?KUU)@*s(Z`rpN%A%e$H9tk8XR%8v7^M+)+Ddg;|_82dis}nw(;#tISZ@Knk?-vA4FoEm1iqN#*VoD!#pGw40=v>CX`TO+hOKTFj7_qQNpi8ZKxx_KDW-Hcg7|P0RsSq}^ zsH4TZTJ)*vW{+KmCH{X$j~a<#zuWHGRp)Y_9lG(F{k00V_%T)UdIUCAGx0+@V~>}3 zS)v*N%LYpw)}RnO{=4vwW;ERB#7~mtrkIv}8%Y)Lv`(0lcUb#|_^VGu zNu0WG{9LcUq4|#qy2;2S$Gf%8BSXQqzi()cq^{#Hq?%e;dwD~faiV0=)$3R5Oln%& zT9EfEJjP}Q_&kK9zw&A?noIroc6{`G9=;(|?0c4wJN*SK=@0D}3{ft8eq`x^I)w=$ zHZ~#xbtUB9cgel#BgaD)shAk*(tM_RKe3u{YawC;OM{Gpq_0|s3Ycnc*M&ey)8JFy zT%GcAQC+f8R_j1Nafs>35Q=fq@3{DW7$f4ab4XUXxgh~sbbhlL7keOT&8f!A_)bUr z{V|&&iHYxy2KeQBl;;l9{m53rWu_7=(5}d_kQw_uMnuOHWUVHIGHF<#$wOx`-4s z{#$&ZS;05B&;u*sQT;Zo2y@>kcbAV=TzNq^u7{{yDK707R$sgnb!ehRCY=-LxII+{ zVuK}>d_I#BM4y&)d+Ee+0Vz>2ld@PlM!pk2eYuQiRaq;z!5XQ=vavi>sVs{6sOMnQ z!9@s?Kpsy8i}t%Y!@IY}ge;r8yqB_yS?W>F{?_AeH^PZdG$2q5Fe4wG1T9}Vu`+9w zO{0706y^2{QF1~UjaJt?a6fo^s4jZR4-mdC7PI_Tcg$GltfA@R@>7>Mr~`WYSr-^# zdR%*jOMZJ>qlVimq=N2xxtK8<<1xe;!pQggx^i8pveTu3-UiMUJwJWktce!?li-*b z}Qta9aT+_fQLApw22|4x(xmA|weP z8lqakRg&+ZMpiZE_PscFx;4UKJ_F0^u*11?u2ybQ3P0mZydhv?2 zssdx|1JBOmGNs`vZN0Z8$)LKjGPi-p8-kc zEE=OPopim1CF{sH5^CbtCG`rZBN(aAVu#xEk%E#bY@r}Cj$Yqr7{(z%0*41J=>~q( z?=3MT(){PwHY0E7lOHPG1fkr6SV~4AjjmLIU&N0(Kvdn2C25j@&(pGYa?U5HCGH4) zvIVnzBPQJ0$z0dMGpXg?KwdFotiB*?T9lvN7kX_)+(Hv7Ieh+W@MC1G+eeoMG-WvH zPEq#EUyiAzUVV|DamlUPnWR1?&a8~H9t{!LIS~RXBhdr);fz10{Tc$b_Y{7g8)NNI zZYzrSyRxk?kT2GrIsn*2=zn7qdD8bkRzaVh7P_xLdOO{1gcN|fSy!HHD#K5r_Fe9* z$Imjg-SsGcTQh2~4t!|+j1Zwg0M-~Fq-5qrtu#B|{Bx|2-)%4x^#~uKE34{9y&%$e zfeJI3fNcE!1AYI2?T$n*4J!sOJdB+E3d3| z(O4!l7}KLP7tt*^Tp$h-R0WCBz21f&xk3diQq`ZBkrrPht^AdC zI;uEPh7itvh(Gj+s|VQ0)MPfwh*Tt~dV#du+(#-WUTS8zz~Q=9u=ah3*>R=B@x;Ms zfoHq?%Hf;Evx$5D0gyx;CWS)qxMup+=a&ONJWW*?0ZRxY{s+_?Ii%-26>Zos4K`a* zJf|X`{IifcqsUhC@Pg$;CNH@?)qw6-UEQg|L#R<2YQBc!9R`Lj%A#|?1Wr1*q$VIBd7p1IEL8hAG&lZS;^U7-^1*7Q2x}p6 zsQ;XNV_HoV$yS9M}wi|L)fTqW1*Bv~n24zO)> z5eBjhsm@o%qz=&b8>{pCce2EhSmPV9viO5jdH~}*Z=dh&MWd?+NQEVJj7YybqG6Hd$<9u6D&37>FAtFPap0 z(5q&&z00q^3S0gi?iyN>K_>TsA3cOj@vB2CclO*ElNXffVPM zJh(twrl#c@$A7MF713*542}kUke?WsT`J=Z;QTMnT25|IzVF-GVFHOd(yumC@z>to z-W#?L{XU&mtr-7@t+$S9EAG~WDNx*{1b26BaCeuqK!M`!PH`(vaF^n4E$$wiQYcc2 zyBBx(&O2+}nQ!jgtdKu}B~%XB&;&U{&A>a8VWNl#DA;u{E_m2|1K%(K|rc@8#FM^a6MrD#gxpM zV{qy!hfx@W%i8Lovum4;Ft6K*vX-o*xepi^#B(btsnCIh&K8|+sZCg=2=DC$q}M|$ zSHP?C*M#)agzX+2x`Lokf+Qeow&3Vo$<+l&mS3m?)=Z_fN8Wz<)>>ov`cew?neVjG z4A(h6TscTTuaKUetu`z>E>ec95UduU`zK)t43pvam_^H{{6cxof*Ph$65u@6QXa>; zYdSBUZ9QYsDTl$7>!*G=eaf{nt$)6FCO=EhY>9)3$7BW0(fr=iBEvg-zz zktH9*x@u|bK&U3D>WdJ|UM10`Uk|FJo{j}v8=aM2h3zzzG}GvZhTi^IV*49N$`+KO z6T1184EJyRR#m>5i0X|Yv)Tx6|C4ST3$As0E&B5_a`HsJG`x?wO{V=3NG~Uf%d=_z z7sZV|W&WaQ4eqLTYB2cnX5~{ORxxjhhmI=7F%fPm_ZPE&^B0>#=o}x2QY@nI;Y(=y zsFL3N+qACX*V5-3hTEVZf`qqtQYn<2o34?0w+F7DzK|bXf3fyeswg_#)XPS>BzT3)G!HoTklkes00Od?+8oV1)r-bUc}1vL>X>_vTL!L0ul=Un#pIcX3hV?$L`|}g znCX+pl^s8KZ31M9ogrC2$No(>r8%UFjA9283Q7v^+g;4b7YW0!M|DkDo;v3bce)T! zBb{l&KH{Eb-871qz~bq9iR2sc#_4<)zo?wFkh(bYm|}`I!PQnZB}^<>5eN~xK}~5V z1Ay6iD8V|Jg{Vop?sxr~cz;8>hYiumf(@s&08)F5=#T^ZF+YlwKYyCzn#HpUE19E1 zq>z58EqL&CqyhI{z>kgkm0&lW82XQOpD#II55(R4-Qrl#{?ry7Je1cLxb!@}oL@#LGAiRD1<^gGs%y8jtNq8~C z=Cf~{bb|dGb%ztRYE)W9CEK`!=oLrt1kN{}s-g2)*~|ZH33AvTf1?Ej0%dUkUQ>Hs zy+KWeS{bnUNI)x~Gm;tlp#W`USnR;4blgHbWZH!iT8R-|OgOI=xv7~^A8QiUF)0H& zg1qH#o$i$~dtGH`2$D*+9=7E7_xJ+bnSWr*)K%J?orm482Y&HT0V^@IJHey+sU(7~u!KGmrNI}fKg%QF z8_{EU!MbXePLIY%a_B9#-*b9T{YuS@{tx{crg2v)&m$?y)GAZIL|Q_b*TiAl3I~8G zjT4fcP5N@O_7ZpfWpZna_V)I+)8`foFi;o@x%UgW@DnBa%oC6u;PTW%el4%W?3`!W zvb79k;-&*0WxtDub=3_&dgI!+f0-?Er!xH_{QV-1uCDfoix~+kj1#JmHkW8nUK|_E zOW}kG^eLmO0nz`5dpbOdg<)PdT4voDiPYetB2SWRTV@HJO!Ou8SL9Wn)lZwzz zb=WCUIe035ts`raa7Mx`|4o@ZNGxW4HZXmlSdMTI#>KWf1_)iD(XmQ<1>>3*{nR zm(^#vesRcBehrpizWwX}DhdE##cX=jQs2woBiUhURhAcTxpWnX^SMVL)zCvAg)#7? zXEh)_!`Nh!USIUzduJBrPinL)>W^u6_iuFktOKY0xYR-zAuPcXs8R1&n8tJ?yy{ng zK=Kw4pf<94S_YP$8B+|A)+<0wAcsPse?>*=^=mS8AR62Uz5tB|3^V86d)P%f`p;o~ z*8RfzPC_ZV5CwHZ7xlDyXvrAaqGm{F+SH>@{JHE^#c*N2vNU5Z1){i2Dx(sQyJbQp z@JGE8(yGf0B|ym^!NRx+o);EkttiC@xRA<5-QIm2@15ELAHSA8`eqFTw^vqFMz`1E zUMNTrGSX#AP>}yw7@^UyBgbC{+WiooycCd~&!1}P)NXE+y$nMG*T=)R3kx4r%CxJS z=4AU~mSSVNNgrSm(JVOnCMBSx{nd`5_D^I4arg;lqzw&CCJ)Cs68G|QG?m4dP4g6^ ztPOSQGQ@)I0xXqs^i{arx{(#e1Mk?G1NFTH<9ogaED65sy*}mJw=7FmFyRUpYXOv0 z+orx zH=UT=6xP{a>v~?Y0O?zNtxd+{E`e;uvb!PC@U)b(b+(B?-f$RobyWV$UkXCKJ$$D{7R6n5ias7_Rq2GNxHU24|pKDD{U%hDOs{|#n}VTI}M)_Z)* zR_lbsxK;~-34BA}*M zBLlPwroNTKDj&qkgdbEm>%rWdLW(zeB%g+c9Le$I2SPgC5PW1x-)hn);^0+AQW51> z{>?=``|3bPm|pBcyA^No$Eh)xhGl||KS)E=K4Lp1);yi+kv)F2;=G$SN(t{IC1>Eq zu>PY$lo}-o;Q7uRKU(P=Pa%I7{}1bohMSRo*zb@q#F+!PI?|swRyj-N8iwI;Akjn97Ydz!8($<_&9=d zlzW>`X2amgDI<4sE;pvooC=>)(t>1|77S;LDWy>P-IzDK!43<^!fHzU&XQOjY>?Pm z9{Nkge7ksoxh*$oq%V!tdWSsgYwgiNO-UsyLyX{$FZ~yX(L+PgUj$^C2&)_aSuKFt)Sz`KZ0mCKKrg5)_OrvDB!?oVQ~8qfewyD}=f;IO5ZC&W2)BW|L97CU0c*)4 zyfSzY@9w|TsKlG)2FWR+06nLRTL;2VmzXSM1_4(5_=iH}3iQ7t8@`y4T>4|(x^Sso zis?5|C~8C<>!i?E#VDguH+)=BA#ww{oWomL@-rW**Ja!S7Ti4b zycsK_z?40@)0VTxZwa1Yu1uBw*6(a>e}E{m4j>?Uid>OBhJYdG+2ox5%%{ z4U3*$UrDAqntvXt1VogCN#m$~AaTbvznLqm7_P%ZmlTeoh-entC0Tv-0Wc-(To*C| zUyI>Xbw-XFQ&xJ1=IZD)XtFE{K;HTT)}qH5Ivxf&nC7Hb4t(En7^7G>T}qD9jFg%G zvFLn5#*6E{VJM#(q>FSj=@C|D3x5D?ZvhWCV*mtbbvfBV) z_zo!>cL49WcIm8{Pc?=cNm7J?63-B#_g$9_klD%D#6|tylu{Idw+Y3INq{HDzcpOj zip8`==`j-_8do#@NGC8-u0q}U?F@ULr~JOrA7;;O)n>2`c&eQBJd&WTw3gWDD3WZiXCOc+HT}=%q(Bt0C&2XaxbJ%LFr{o z^YwkRr_u>3XqfQa`OQx8e{li&vFPIS@s^8Gw%%E>19A1clca#P&*;t$ee$Te#vQ^> z+V3iqsbwLmfb_p{aLenIw>5YZd~<X7-cyJt6#pwTYlNyQ5yQ~-$R1bX-vd?| zfD?V`4`Lzx^wR0%-%D;|;d_T4d{pj_uA`V=^4C6EVTAl#9V?Vj9$M>uA*ta1!c&l^ z0!*%wdLtxbm2%AFyL#bdBVUxpj3YoWP8n0c6$Y=!M~g0Whz5ne-|4sUQqDuc?Xr9` zbn;G=`oA$bd3eM~I#C8O%`kwjX~=Jij^Ux_`BZqUa`$)o=ZlN+It@s8t*yDJAI*2G>XC6LP%1i<&IW4f9K0T_q+gCSm902c-Ze+T_5Uh#65*jM$#E`#}Klanw(cGg&!kI#U=03iLSK+ zn!e*3U#fC^RYv^iN*QHxme?+IMNF&uQu#D`4+sx4dTbNlqiDxU-bw&$@+%=Wkq{F_*LV;p%`}r| zm&v#927O3cGVgD!TykphChEpd;@%KrDv_em@lK(mkdFHRZ}+A9@y4zZulk)EU=UaS z!AV~Lik(qg#0CU*=V%czMzz$dCZci^_k4QNDV)H5wlug4ybygAQQVb23#6)~xIIvZ z_G6>c0+HU)UGw@`r5ny*=gUL-_neNI6IQxbOZ?=K63qv>L+E{g%hBu2+N<#E}RkHvuJLErpd5b?m$PLIgqIy{rjQdIULbaN1t@a_kAP6`IBIA+7mGy(`=K1 zg5s-*!8SauF05P7u&iO|cZMIGT(h8f)5j(bCV3m8x$8!(=bM!ka@E;?0KUVJJZgOV z+hfJKT2?dXZ_gBo${I2{C9`_`2~@B-&fEquV31j{`GZNo`a#^A5_l6i*2C|cLscKI z{9ywFq7luQ@A7ySX)^(OeP~l!)iSA(|9RF?wjGu~wiHbXk~!#Hwn^HIO&{q~=V}|( z-S%v~P<$0GN=2{lyt-ZY{SDw4S`eL9s&CiH-{&|<&MqU(b_#9wouVX^+3fOs*_!Z9 z3i;zFR>p(|Kt2EAzH#0}Ak-Q404_NHSv&#iC$`)G>zBlH(%6!`sK1BB4DIuvi=v}Z0FNrbouu8aN(T|2n&PC>GES>sJ4;u1VA?K%ChXAfRYv za;rq~2UcP;-;7D3LbWt?2xSdtJ<0Kce+?b@_(|ZhKFTXlRf|6FdF*4&Fw= zkWuj8(Xxo zs0I6aqIc&tnSdR|YS&Pv*q?-J6td)YGJ0^RmgLB=eA}hM8#fN}Dl4r8GA!hmo5>cS z4YANOsW$0Z`w`$rhN1w`>t>wckVoy^V@Y#^I1f`+1PaQ#qk{c812jdJ=ZBD2eP24X zP{?LhIsQ;YZ7hY9p6u5Yu$dp+p}gap&WBBOU{SGBAPJV| zuE?C)WBbV386>^DZnh~Z`b*2U_+mzigKi2win}sH7k^4tNyw~s(fVZjoF~a%rx77q zfG%Gt?-0~tx+blWDH(*X`F6O>+^BwOK(Nzmt{ue;ch=4NQ&#f;h&O>G%9D_ z*pui{ljsDFI0yOpXFdfMvbkP;XXp0K(0GDMx}*#HHD_dk2w9jtqP%S8V!l!h4esG$ zcT(3koZv+ggY0coO&e@Gn8ag>4{HK`7eP_N|s9Fw6v5u5UFIOQ%b#!nu?$GE!YWq@5# zQ_&oW9)SYkLnU8&1Kh8oR8xW627{VK#})!D&A3S3t!6&QWMbkTdL9=BK#lYNdu$a^ zx1M;XBmg&`uQkwCs8W%~R&_`dmJaFRc4aQzh}V=Q1c0jT_?FDmS7o`NSVG>%QKtT#hSp|y-0g^o??6D0S=Z{n#(=^VO4EKS z$Yu;RDk$kYH8*QXF;h&!HZ4xspXWSAB0NHqzW09vP1sfejKCh-xA}+>`0Qr^nT?kA z0>7+gVM?)`@SjqXmX-6HNm9>jOn=HGyml7p@Zw(*8sRSUUvEC+h~p{Q8kp|Q#>S~BlVT}TrPofOF7 zBqM5%7-R)DA@%e1YXC#9g)I&Ji`o94wC`7K7#Pw!v{c{M<{h5f$~T<0(W{t746Oa{$~Gif@)Mp={`(sDNwJSveb~ zOVCCizRbvfNNErn-IGZZX`v;%Z8_+s*NToQh9nMiZ+UZHl^vW|MS4)K|B14G%dguZ zJCxa8>*MEV{$s_}-=7?nCfJWU48^QAxR)OI?V5zlOa0G%PV2_Vv|(UP4CNaesUQs& zBU(yDD$#HjUAB);ZV(r*+xW6;{D^@!)by9usy{L~bq%Wjd1I;KN5%C`P2I~-iR=6L z>^UD0?V+LO0;yv5`B6|4!T_CZ@!smZVJ502VMC1uV)89+Lpa!Wj(YeB51%zoO&G zpRsqf3^>geHvPcDW#vY%LGGW#mh@xT&RnND5AZ1aS77-E9b0iyMxikUAX={a-IA{b zUb1ILAmuZk}G1%w(^%X|8Ea_<*@%Tv><;b4m19NeU$KTNWXOSu?y z>=lg2K-N1q=S)!`)3=M(RRug)ItKD09+6j{PJ}zX_A5<+ByR%_pqF=dfC2jwFE2o? zmZ?_8mdz(v7<1Eb#4}*youmMACPmm@l4i3 zn|CrD+XNVY2CzvgsjU52t+wfiUm&Wx2kK$r0cMujX62D|Qvhz&k2r2H5u~eFidA%x zL)VVmuzoUIr3?kvUhd(}pZ>RIoMbQ_bwI1;8dKOH?#qYpc$r|F!0INDRl_h=gR~NH zYNJ>M1s9IlW|xZ@O#x0K9X_F_hIPTg0|oOpCIF57G72Q4-C{#UL_}PDd=w2?{b+I` zCEYArJvnalqB_4d4toM#;qjB608F&JPzSU;fDkbf?OmyjM!1|Z;e!L|XmUd!78tM#(A%$t+!W@)x=4CLM@}RBr%B?UQYB{V&;ds)h?NHT1U2A){Ww)*d1X8&OBA7XBHxkI`O47t1in%<_1ICKs zt>5%hiLB{0mE`%;>)B;gNH8E5Xip98hU;dge_%~>&f?)f0wwYgXel=_*S2aE8{YTf|WM}~C~VJzH=xp>CoLm^UCx|w8C2!WLd+sUSqT6k~?@X|UB z#N^2w=%tBw15AnU9kEw2zr2+;byU$2YOz!T2YT{|P2c7G`PIfFP2*I27Kh&)_4ho7 zFiUMvZf{k&el#)nQ}i08RwzzE*sFEu_S2;;ZVtmf9c=Loxg)Ne42MuGi9JS#=Z3e_ zO7c9%Hd*~K4l!kwgo1*C%OCnHdenZ3D6o5TcQ?&epa_Z)xuK^`ji*PMT)$Z!pF}|a zD^r0vVxfy0){1*_GnJe)&?Kfge;(Q&Ov}U&#_|u8HnkabNpT-_3%yWzHg0`28hq*9 zGV3R;aGt*yN(Y2UYI=1GBCFy+$P}QsZLeh-m%xHl_UaKi_`d|+tlFzO(vHp>?w-P# zPDF+3KswsJyw-A0Zv(UayJtI;>7xiTwN>E$PELhmOHk1!D=HEw&b&P6(9zPG^%|cB zv42)pQZZh*wO*#^g2H-Z(m7qOFW%M~bq~7wr^V-QXIWwN!f97uD{SRXa!B&TD#C5v zF%1!*fX;4#&F=^a$3=+Xa$tG*?d?eCZ3F(9P_F`vX#IRmx0Xf-ghluRk zg?%h!Ktl>%P|bG}v9v63&$G+N6TtR(f_8lvhXsnIsZWxs|HdX9dwTO|bKynobUXUj zBJy=J5q)BYLODjeaKP>#1&%RycG1J>Bgl82;^!^J>)PwR_)v|bSpLS7JtjO(#tbs_ zz4&Wvi_=njf9*lRKs9iEM(vjGICAlIiyH`l{()pn6S?rypiBKLDIoZ0EZ>Jl zjId`P?Z#6PP6d?#<=7sN?3Wd7_2mWRz0uG^-?Jw$C_(zTcKgpCn-YEmq%&1mdq@yR z08RY6m_TNfBn;*06j#O4QmXPpCPI}mgmB4}`?;@BXN87uEMu`rPvGPBeINu_U)l>c z;X>)dR}J@fI0)3TW4sT>C98e0!Ino-YvWAfr7(#DG1n-Ox4yp`}jodxT1o1U1dOGpFQOZW{@o~PEkSp zeHVAcVNjAmY&AcT*dtabRKOu^G0tl#zk=K2`w|;0Igu)7Gn)w&#GZDUpf8`sX9KcX~R21(ZLbK}TUE;TM!)ee{Cy-W-BBA!-^J#?{SQlSmAs(I<| zf78Fblj=3ZThGhSr)--Py}54+jzv!NEwiOk4;u@nSHD1$l!Lc58*59i1DU%^?c9IL zGqSvnqdHZ#!x$Xg{MCfq`MSe?)4@&^+n#5__B{!If&KH?z2J+;R>MQvUhDg!4uhGX2-nk7xM(l_>&`SVlPK zJOriR`*xhu`WJ+ollahIjC&=Vz%NfN%K(g{%1|aXgn; zp?=DaaCOnwlznNY0Lt`1-YG$20bzZQd~ya?H<187=2{HC4^E=r4b}YtVnbFb^ZeB; zQ>A^ex}|k{c4DN>;%6T-+{kT7jM$uqAjZ?!S^T~9!l$e+NpCr}AUkG^g=EVKl&>1w z>5&8xld=StkufR?4Z;dDOaeoev7b46N+(bCBPWl|gHmNsOXq-q%&5rm zEtHsE-OwRZRI_qx66;?oP4jXv63b(3VSBGnSF2mcoA5w@Qvc8n;k$8*d%rI1pda#B zR0`*zvtJk$)C3u)&S;S{tB;b+Dh987dJhy>=oUyu@*A1y)iLFy-MCI^rPc|aQNA&R z-n)iZRk3#ZTq3<*02bKuJS zyf$>Ftz=o`6XTAcZ5R*D%C{92-xEoLQu?N@X}q@(qTIUEt<>H^d2d&gjf)dL0l23+ zd^!X$xjxsnLDx2!S-$;8imuxrf!O>e?7Z$>kojLJn7HDw_Kr*DJ`O#MJ~x9%&MRJ5 zF$Bt;Ii;7N>%C^yv9b=Me2rT7)tTzkbL0C=i7v^{qJ6(__DWmZLiv0jW#-7@JoO5( zIhQbmpj1J~n&b}Er0|yJ_*Gn|OijEg*F)vkZtpfIUwglFAqCg3I2LJFL|qmh!)5H5 z?vPxPM&apn+v|Xf{`V!xG{#7~Wqm z3#alA^#|mHVh!#N>dwJYwfoVr_k+J~+R?plfW60uaWhNLp&G}jsv(^VUg{xm6`ctI zke$wauzzpI=hbhb$C_>41Ndwb#vr@(N;)|1dw&C0_4_ML>@uD+Vi*UPK+Udz4=JMB zIW2P*i)@kz7)iall-z0U;1ZT!ATw8-J**OI-0H`W{1;Jzn}h+at8_|O=dYD1Z$$i4 zf-7&?lkh9nzuqP(%>Zb7&e7PF0VtnRP>KfK^x_`B$c~~GYbtQJwUkU+6Om&+Eelez znA8CGHJE0*O3T3t*Ew4H4N4vYSf&nJS}(`!4PC=GXq*ktxu`_gjdQPMN8IE=w={~F zp!Co!-O)O620v!?51VC~0u>9Up+`7i>D;nr_G1}-c>Q=2ude$M3%F#XC#mh$rDIL{ zHLqaKdC=(bM5DD`Wjpz0MTo$XPJN8Og6l zw0nPX4uqo`%q?3hL#kNdB=*ci?XZ!buAqVIac(1GhChbjArMT*fJpAC;S3(w#O4Q& zWi2sAmYo0H4QLYVBuff9(!39LO@^2zXc-JmF8*EHT3K${|ML!_4SPLAvbMCgbmKy& zlbM0nBEwaa<(rwE;r~o(iKoo7T02XcG1Uf|PASy-v%V3jp@%Gw^mu~RvarzF(Ivf8 zxk$$l0*Y#&4>p-aTQadY-b!T4KeS}9Sa!yE@9C4|EB<$i9Mwc?OZx8I`YZOcZ>IyV zYz|^9ndfG6;+zH%7A(~TcKWa#_gG)ks{tKW~RjnwTA3yP&V`2HfdBO|;V9DtIHj%**4z2&(|Rlc--c$STC_R8Z0No#r!!GG;_ z!xK+>v$HV|Uz=$H5$20|JH^q?6fHq!byO;6__jX`A%-i#AcBECF__I<`0#|Gm9M=9L78%B=qmzr5FS?b3dp377SUJ~q z$d9d1LoBfQp2@gk02S4fCpGD9Pfm9GZf_$k# z4>1kE`O)2r9&u-@&YKd37?=8~{r98Kj+4SXO+70b4|My!1$=y4KX2Nt+Y2EC6h*a0 zogo!02?f@1`9t8|#A~0?-2}4+*n*$i7m}G2O5q1J_@FmiC{l<>Zz_C*vXaie%!nzc>+}%qFV$*LBq>LPb~ZL`%NWKK;hH(ADZ#H(W(J&Oq?&H5;>$NFv>`O`YgxFiu)9e zdI!d5EnN-H`}}z$<;29AUpk-jpy!!EyfCi?9k%*a{z295LzJyj93HRh0q9i>J>8|q zoFR1~YKD<2+EOoA`ARF+kr!oRzf=AUfn@LJ1j$4iI`FLiPz6f-t{W8FXW227-QraL zx`FJzO3O6>BqN@U-}OzPOayTQyen`A7&iW~?%(E)GH8zq=cZ~bl`hDG(6V;e zzJbl`TgqaWHAhH8kGc9Ql8roI*hC)qc-~W>ozz{ntbHtZtGxwjhRI! zX;umslLQ?p{fiHn44C{H*3MkOWPk=AAk6@j)1q+Gwjo(}F; zB2z0>8dd+r1=#yz?x-*XP+NY7pkO4BsTbjY<3@sL0|1EZo2ikSgjtZVrv~OI#F>Rh z`~RJ6K+)Vpy-XiaT`X!e;3Uco!mn*nvEFn%Vs_r%o&Uq;LjPc8b+-_BcK-0#W87Tc zyObF;VC*11CQG!Q{llwt&U>^$7O_`9VvM*Rd(pwm`}UIb>1h_)+R^bAx1fS`Zj>WC zHfZ+dido=ow*fn?e{m{@tE*m=Oa+YT#`S6Es=BBikaalc!tD2%e^;? zIN^2Bjg6l+MOG`a6qk#0O1Uk0YNZC5na#@LIFYC$!V3m`m2=9j&|N^z^&WuMeDe0b=cdy#R*p}W}lorda82C zB}#X)jYe;eW6-ZT{tV*B=k7T*nh@lF`lp$Tc+$y!uA`u@1tC>?wHPr)N_=}PHW6uDtv zcQUAMnR{7pBpd(Kj}emfw4}bi5>hj?`hTxUu5ryRe((6SDT0rC`tXO9{ib5lYaS@8 z2spZrcr9MHfIJ@X92qigKpdglBS!cn$TuaM{)TGkN~SDz!adc%VCm7rp~psK_U_!3 zR?NW+i&{<^M-skBxUsdTV}MiqIkrXo2_K^muve?Dm87~`H^JhDW5wJWk=ZiCk<@v3fI1d&4Wu;u93uMX>>nsIyjX@YwMRca$UAQjS;iC98JV^jm^SGa+LA1`$8Un{X1>C0kyWFFaAhFSU6tpAI@lU? zeF?YZmS4EW!QxT~K`}F#pbFt0P63CkJ~CA+G-%E1Y2eO{A^?epH5S_eQtElbvnUKn zHg0k8B0We>$@nv}TMMbMs>y{9s@BJ=sbTcrD!eVN{X&6~j}i%EDKk?-G&jVxEzPC4 z?QoOdLyh@HiRu-F!WBAzQ606X?8<>o7HvneqwpQSR)X^7`+ZB}n^#3Bv!K7@cA!;y zCJwv+;M}9Oqfk0&8CrW(Z@_W>aBZgpfn@dj)beFd_R;_r2;7#JOf=ep{8o%UPb1<& zYvRrUIn^=h22?-2#hBpnq7&`mI?o!~dgT9!=EQ6vct>KFjCRKLaGUg8_{O@ZLpPul zv(QcwRVa)tjN>)_2TIz^^@5Co;Z&5n$$%o2erbRr3a_25dxSI@D}8($k`_(g1^f~78wic8*0~9_Y^a(2< zVEkhiANAl`lYrAFisMdLE$4-^Fhz;L49sa?KHtc(u#n9Mu+cYvqw*py_#&zz!%L$c zmJ!>0e#fdpx@!J?D~>Ma;?7n(J^t>CrEZsC)bFt>Fl>Vq3gaK0so+xs%v?zgHJz1y zCdSt!9?2Qe=a4ccA@Z(1(s+(;%1RR)MY_#+(DUm*bW@_@vsH8BC~anIPC8ot*xybR zi%@mMm}=YR8Ac)N4W_2fH5(4fk=C9Dnr}d<0qk~6auHOjam7%{GT_WG5ob^b-QZ$^ zdEeDmG`Q}K(no9Pk=kMLhG63;L|;ZN4@AHzt_jW~CI4;PF2_uafKSV4 zS{yFJ{ZUI+-z=Uihz|Bj&ChU9z=~r-{2CHpRz`_V-J1Z&-|xC3&P3ar2P}UCV|SyN ze5fLP7bE-RRY`Qeh*t46_NYN1I`Alrn6iLbxIou$^LDcQ`yh$bzwQCgjy@Bjm9Ld! zsV;8bJK&pbvMQkYVVe|>q6^(dNU`E{I#Q{xl5-Pe5rTrqvgjC8D|0=x)5hhr7-PxtrU zlCMs!Yl;BEK!uk`>wE5MFnaJTDEe-A`DD(sRI_?)HXk$eNCj_tWSifdj(|2}Lpb)M z%~(|GT$wrroDK~l3Rr7--@#(%c3pulO_oxy)`1QMeS+JRF3RE}pFRmb$emouwR=pJ zFfvFAE(%UDA!J+4tP<_VJz2~S{P=G)4?`kYc4Z~N%m2yu1FwnzJg7@Iwdd0~#Db+x zuwo3Zn5lMio*FJEH%Vx!$OCa9QfM++gS$Ssrkn6k$#`YuiH5zM5&{uriw18!?%egc zz97rp;0gW)iB=*M^_wCxk||Iueclq%KnoY4DG)xe`>hbu=bDa+cQj9@QV^7*llrJ<)AWmMz!%!= zU}B#$Yk5vh>~>65@^~@&Oh+m79+0f?2)!x8uaf@^Nm^CyWpkeYb|m!IU=4T$AN`!; zw?4Mdpb?^+XCRzp>RI5wsRQRkdou`mr}v^0Yve4g4}p2l68QV@T-V5kx)Z0(!N z?9C2r1o`lWHevOLbYoK~&+s?fY<6-)WkcVAts65hGBr11{|_+8lpmW>K;bm9lWn$R zHQx(QwJ{eN$?D3En>H#6XZ~+@rK7R1CA@+)p@DlC!BclhFrEWm$#^J~)G16;WjMWS zp`;swST{gs?dqnC*c9xx)*`u3kuZz_vj~dm&+c=C)R3id&&9T=AY)RXp2ouxsidfT=;5FJmP|COIl7GO`ds=8M+5H#@_RcR%7@ zMQqJgoA;QN!X~|YKnT16Cv$jF@dTO^bYwW&G6!egLNw|yms zL*YJzqRcOD^T=7Oat-ovFW$O{gOdMRfrrI#Wnr{3Fq$*b5EPWr(NPi<)xsI6)coDj&(aR2}?&lnNdF(gU1vE*xg4DHK?(Ia}E~iYJ7;j?9#NUFl zbS{3b7V|+ciFK`#BWYK0_{R9UpD2OGg_*8*5 z?Q5x{h9J?$PR2bX_@a)Ufyw0-@7K%e#T7%?-n8vp>RUJWj5lwjLZ~+Oh1FIp#uf&^ zr2Ao)sPSfz0d|~cBQB+#(tlctrU|mKn1yT_Bg$Nm^{5hFpV(PJ`Q72d0frRu_+R$v zB#WlgP@#StKF&O%dq0>0`P2pVX563^`09QtSE+_P(I~8hTv>UwZK#O>3E2dL4W9G0 z{lG$gqh5YbbVR=%ddlXERhnngrP~J~jE#d2uB?rr0=Ct?zdb}+cF`AqlUxs3R7cEz zt7Mt;KsaJksXTAHr=h8*DLOOl-Aa8Za-b;+Q7z)k45tkp35vIMzwctRXLeL~d7_$X z(jB8YHu(JY?E+$gVDz)FP(+j*mM+gPn{99lKELs1hyZgDrN{^H(Cf&E)ULOEp{B}a z1XR3WkF4hNVVgYTtI^Gz=B28!3Yl}sldsMv8+)XICC<7|9gJ*(jKB61(?nl!nYZX& zNKz4<&ByFgOeFW+k2eOi08N0>{mRkZ6#=*{(+B55Q^ya6^!*2w-5ZVQ?P&Qy-HGhC zgj*z14B^!WVxkQvj5oR$Wd1WQ^u`oMqk6~;RNLS#o{a4bslgEm8j0391d=vQVj7Kq z`!~L1&7^$uy_y6CNp3SW(M*PGvE8v4Q`wZXXg}SaN!yJAcAH?{oq_Y`k}x*}7TV&R zPKGFT(%R)M@cU@Tq#40s9>FQ-S_=JGrU}jp+${f!b_}r&Uy+~Vf5&;0NtKq}T4x2W ze$er2zvY_xCh#uz*1F>z7e&l9vF9=-R)lEhS?{rls)swRZ?QJ0>wU>7qX|hrFN)m1 z>cz10GnJl#;&PmVnfGespky+y!dwqH9AmfLX{LEt@mW8$Tq59#{C9N~DE%$gx5&C? z06_-Givx;>?Z<-3%Kc4aOi*t?%fRE2-QTsfP_Xd_LB7;b?x5QOKlQ@CK59ndCM(<>hT)OR|IE~Jql5Jjj6cmK47m^_Q^Ws|fTz8RmEHq@k(syH)FENII5kzq zL~hj!d%CqBGuYp8P4)i)X=+0tQ36NFVKkd@w=1?+BCGiMEwTwV3@xc!0fUH6$l z_uHRW5q`((e9vv`i>SNci?ahLfSExH+%{NBU2v9fKsQl@;<_g0x8VA0yVWGFFqG*^29o^{PRZH$x4*B%ca{JGsKz217t* zrpePX3+c5-#x+CLmGx^)D0o9YPJu6|*RE0H|BJXl56=tig8>q87|P`k9%OdVvYuG* zeH_h2JndB8#VXJl-#@rarCKL8I{^P=d+h)~gX+8m{+V6a&mgq+R*iZ4zJ}S{>c#um}Nl0i9=>FB++@!P@>KWv0!&lRf z@c+NAzB``kKYaVxC-V?GWQVM9Y_c~|A%(~|W=1yIdmcwt*>aR5nMpR`7|F;i8Cgfj z&awU8p4aodo?qWy{p;oUocnW+>$>ji9z=aTC5=7h#8S$|HlPh6pX#xMqN{4K{4c0L z*;%5viu1Yr|2e9J9iBF)=sE=HxY=k8lj@XB&G)&TE{5?n@q0c=1Nh&?dzEt1-GR2c z_eS`RaQxc0J4Kf!FxNv0VtRN|+BJBeR$YISbs)Q1O32|zb3^a3Fc~{5d--f@_vs&2 z@bU+-=Lmpi5&UTx@2o}=77v4{sR^_r^7>?np+_*QIIzN2+7MIwQNkrGlf8nkkNpeM zLrCm2i&7Zg&3nD5cGZ*~+7{8)to2C!Nl&^A?5@jaW@nY2ZM~=#{G==XQ)_)p74>cx z;rX`ZIgPMzMWy)-gE4*YXap}g(opRgDoIjw?4C6#LMcwe2t0bmp50Qo#)E~O9l8u3 z0B3CiLT+Y$TBNltFu9?;%0y`Bx(ZmjbSgJV2#WVIL?hS{O+D9cOAL3#D%+;I^M;u! z)05o&Oho8aM_bTrx%Wv6{wFbn69Wi=2CUREk~ta)f~rmP$4 zy@&6%nMJSf?v@^M_k58gef#^d(Lle96YupNSl0YYc2$Y)Cyi{!r_{S+Yw z%|fdx^Ur1!jBPSkinP>~v7PV++d&aHi-#?jAqN+19yn(rZR9haS0qZvFll6!u+~y`~?MHxwS?-`6n14?eM3tx4oPL-JF!yAlDQp zm@ku*aL!dKS=D{F@@iG_lX>a<&^tK!qe2_}bC9Bz@x<^FRov(O%LTx;PvbD)?!Qw2 zIg&3h~$byznC1=h~#NB3^ zBM%^JLaR$GKE~Ek&Z0Sz+j7^MuK>HqQ728-A3#>rg7J7H9sa+EF7m^;{89w(%qPYe zTv(s!J!4?=kd%}2Q0Ts3)7jZgxU)6kwYXQs8r~V4$oW+RwJ=V2)sm*9b)~1$Zw z>BWMR5T0!Qu2QJhnxD4WQx}dn>ABE@ZYB5AFAssy5AkeAJ$cP{mKV4yFPrA!{0H&# z7D3cO^mX^XALKRR?R;u#7_mPlW$w@l49Jf9STNrVo_*n3mI6uG@uAma4A)84k`^Fx zprVAf2k!L_w;3Cw94II^i3q#w^I+keU>jhPow_n3F(T_Jkq2pP8yJ8APH_m)F)&ak zjaeV^=1yRD3EX$ zdr2=n*i5N*eKWz}(L|@6{l=l4&kK?g%@ZL$%v9}612V_2qv^ntgAN*i>c)y*pidVB zu<=pzioes2j~3nA7+6AOUtj?SqenZiqIe$!`Od$it|hdC%I;y!Dl=<7{GFP>KCvt$yj+cXO$Jd8T={NCPPiWT?SDqOx! z*&i_{V1mB;c*HsOB^$)&rKN-kOZ}P;4JQhUlPq}=HV}Bh86xW+EsU)_@IO7pmt-?z z>-oOjA_P#=Tp0HJ!?w|&x8-gNfX_PoFXE?!nm2KucQB>5>3OBiNf_iJ)}PI^|A#>7?BLqj z(L}4wGE0woAv94rij(r0BrLvSkc%VDoQ}I(H(27i(@Es@o!8ni?CeT{vXbC&uJ;%~C6Mu!r|Jsg^h_9%qL%hljE z&>MxE{3`H29!UnBA29Fj{Qfv;C=lw!^nyq{f^wm}mb8t-a4-VDJ=?wOdC|4~Cpb@j zQyP*WtveC?$;?dx|L+# z7BWdUCn3VL6Le`oPw>OvD5Q02et(}CUnjlwhfVCARVn#6+(b;HN9^ND9e;?^Pj{x! zzGP) zB~i84imbu=>oFQKbU#6Vdh#7USc5`9w6@i0JLd{Zo~e27dJX_Mr^73*Jb^O|74Gv9 z`YNLv_cK+PLmQ1-8MaHEmyz^!pdffA1Oz;LLu8^9rG14;fFx^a|I=vc?&}-VP&!9h zxJf;{lmuB;fg-8Gd%#tDSWw8j14XC)5ceQuWcEch$RbaY$zZ88|I$uu^3{LCPYjHXqS}3-C$#Tkc%@7^zu|u`H5`jb`b(LY(^d0`z zVQC9VfYE90^7Tpv0;4`-r`Ky7C|Wjk@vbiGJ^o8H4@z%Ov)_Jin|EgZ`JsU+XOCZ z_vrQd+|?`>52jPWWs86VTHbE^D_sx;-=r|4^-Wr;YnK&vRC_Pc!Ave|;DIdi*Zw}K zdeor{se`LtupQH*&<~dUI%=lXGRvK~o3u#(RUD9J_PvPzS9x5fm-D`!puL|%%`q1^ z&~tS1b}XN?)5#v2`<9g{MchElgQF?Ye6!k5Z|Q}dGRPU&$)!ZNj+^$M4a?jh;Na0#J-}x z8eJ4){Wd>>OxWbmPgmsuc*bdBzO>f%@XjB>+_{Kib^CzLg&;)NV>as8dB}3EAVO83 zBop=aj)nA4Bmw+h?qJD@ltF@%ekk4|xlc~US((fKc-g^4>T22ZTQUyT@m8>F$mCq4 zW(5;_TH5Z0k(-Mg&Bd>2_)o*jN?OgX8qZg{%8ZrswjkRKUY{i2+W-2H81^V}u50bV zYuS_&YpdS2`{}v#HvP~j&pYsuvGxVhI%Sx@V+fd`B|b`MW4Co7$^#LE^MQ~|X{sou zsjrM++-0(u!j!Ud6iO5p-0~O(=_%3fr|3<()7Q&y<2Wis(8j^D9cE&2#T^$Z{N#o&G*)5x9Yf3c)a*7s^f1sPozpojORp@DQxc}ZO@2uEP4_S* zvA@SV@x#zXCMf+;U_re5a|oUm#R#q+11#I*{e8!5(zdxrP%dKo+TTY$56}HugwjsA z=tP**mAO1}^^k%D(BR}#>*P5FN&>85y<*%8=AaMBX{q<58$n!3hy5FuHgUXUVlr*O z(E>rLKhkEF_{TSK4Zj&qzcAYGAUdv^Ib6#M2Gv{dLXQ>C+>DK3_M%z@Uk>*1+qwpF zbYqJJ;=7T>+VqF+v@?}>Ws8MMrMVZHdJ4E%4;q=)BA1pgT~ zhcY3uvA%l>j8mb0iDQqWO-I7Oxn{N}5^G6*8i#$WHL0q2+~VNa*3n$BG# zMVw9|QNV|zo)!M&vFmj2EkFlDBzdm3ee?1!zX>036B!&9n(vDr(##J~SdxBZ+&TOe z#u1}T$Lio#UI7Fo@1rH9&g5xk5tE{pDJ+}im#@7Um5zgl`%ohf?j3?;UhdXDcoC#b4w z*Fx}DwY#DS#Jl544*GjH$<+yEL`zE}ycqML;R@iwfSa2em}I32kcv5Pdic)WU+-Mn zTW-VzSwIO$z3J{HNyn zaA?OELm8qQ6CnG%FAnVn3dAhszsO)>7d)btkqcE$vo%vxDj;-)A`Ch;%_u!F0fcb? zB2-@q09q%mO53?c#TmUfoX>4PRVg+gZqvUgB7{BP@v@KcqLwoKjnjlig^z{}80Z@> zxgVb?Na68e(D8SY0=PEC5MEgD)_9}TUHT=#X!LX`=F@G%W{Bz*jIn=}bljAf5nu{x z6YZOLpx_InAtzX584wY<^|dES4se5lMD zRTZool~C@PTY{h-`W6?&#~6$Ut+PlkzvMrwY-?i;O`jx*s~LkQ!sD#+5^4Fl-aZX- zNfPOmRSF@MJCetCYG?c;mR1*4=Ws~-LOd548$EY)DhbvN%MgyM6aR5+fE_dTQCGM%)|dlFclV`=HJ`-YClp5_2hgR0zJ-Z8)qR|6DE9d4D=H^YnpeN4thmLgRmWI;^UACr zEpJ(aK&JjM0?*3}*xRPQEvUXTAQ)Zhba%|SjB}UC3S6<+Qs|JSfQAzlQLv5w7>!z@ z6MrCNn;I75`ChOBO99tF?tsokO+fsLrE4-XS} zulrOYd%Z@6F$nD7! z519`fTtfC#0=R^m`bz@qYDzM{-@Mr*Q-n#q=ejl!#nw$`0 zqV-w!Py6|;wyx2|Dk$I5Z|9h_-9-b5$F$O~$z+I$*~5wuyZ*D!50w;*KJGe8Dqb|d zS7QHdGK8M#BEo$q&$DjjQM05D#tR6uegEN9u6Mor6>j~V7~`8m zC5p&2Scts+l1Jbt&A82+g5ARHJKc()#ZV&qw-nIW1$kvH{?d1*4VRRXy2ghULx@MX zKc(b<)N7Jh{I>lwfZP4?`&T%+&`|LWznk8{WNK}Phv23yr8+`2-t(T(LOrdgGqu^N{Gac~?;aMy9b=y2zv&I&}$6bo{i)5mL6mDQH z!lWRK>&_bM3R_9l(fFI3k6 z6#u{f)9-Y@dU(1>CHLH0Ee8`E%oPQ}wqv`1Y*Our?UOeN55JX&cq7btZGy<#Kq~6N8 z$ueVEH2rg-HS{UP0?TScj2A;m`LFlU?*vV7%I;x!4%(qjtBwk3Sq7eM+G&m3)78H# zhTh6adeZxEJ^$Uh!=lDPw3ipFzwOc=0fWa-cAD(dow{QKmXdH(lR%eO+hi_iN@jm|Dd_7 z>GOIq+UY$9o9e_kmh56sxRg$|h~#D$mfk&(X>C%T@>^-vveL}RW*_#|wBpw+dWHzA zbyu&1eK;oK?#y{+3;i1Os0`ouF&a_a^oCOvN)T{vV9*klO+aa&yHj|ybF$A93$fUN`XYP#uU>wt-LZXm z@K(#oaXJt!k<){Ky%AL%X1o45n?zWhSChbjzz1q&572rva#O(yDy5N@S88#%DKCpP z7A@kV{dWX07H1f=MIlP&l&OZ8BBye$!kxi(!hHv4m|>CJd#pHz2?jpVNkFLj$m=oW zZo^Y2y#^1RsK-)?g2~5hv6Uj9vr0<=TGfxR5YQ+EVUe{OwRrGh7@4Ld&ORasgM5ap z5AE67N5O`CS*cxPyKKUjjwsi5#mj^T5IG_Sl9H%esC=hLQW5uu;6m{8ODPK(p1aI( zRJb;Ct}u0C;9k;?`um+}wSkn9>hoI4TBOvw0_g!o_{g^CDnlj|d^>^?MXrjBJbL)Z zgcs?9V$!Uv>teK%OU!A(L^YYAPc6N>)^`@UgNR8AKpK6(lAX` zjfSWRZi~@EzU%+?$(F3!F_vZ-(vQti{7J4ztFkUoDL}ajIoj50I{baT>F5g{;6~2o z=8se}7pT;cDj6z&ShV5KCZQ@;%EU3xIwgxGbj?RzI%PX%{4wvx;MrKeTB@q^`4Yg}Ao!{RvNr`$U+mKAeK6c>rp`>9j$nitS@&}Ha z&T+3Yc?qo`>My7X3&D6a;p{!r;bY;w2KUuGnbz9x8s&`ge!<_0Gf--H{?)@;h!9B` zK?4dsP{t5JK%?s-1ysL)B~}5@cf|yBCh~h&KSy89`16S+`VonwB%=u)jrjirSn~X5 z;pFm6LFr~D2(7&jk+V>PV);-b81)+)Z=RS>C|e-w&1`&p(LjGi-)%zSOcgW{sjmFH zcs|6hEu@hs7E(6%r%$kM4XUw`*=K=W7)oT(>d^5DqqvXPU7;!lwi) zig%bLwj_Q$R3wJ4xqCc~Z$0@_;b>2#PCP^Qj0f(_p~~}(zk+VyHc8P70D2j;y!!2s z?L|jRc*{e&cOg8EBPtBAAf@CGv_%)ToaQnaGsA$q^H4Xxfj+8ErwG5ozc9&bAM-5w z-Ngz$aLgc${g`B6R)kwdJi^E9#EvmMHF3bgkwdpEi6>@5&lLs?Da~i`fDQy3Kwv5V zMs{(#i&SFD%jL;n-ig9kgo8k)K|1Q+KCd+8^1J1En)!1(4?tCwmx2v2aHr(>D=B{J z;m=seTj%~46uGV+!PkRZZwQ&~Z+~VYqgA=s2I>w7jsfP*fRpEf z!ZK;22&luDm@Bvt%e{IwS?Z9#Ll;0{bq{7m?7WksxEGW4(bd41p|n)MCYx^^Ztk?R z@T2T3xSR+})C5g^c}c@ugiw@X5()xmEb#>>y~BaY<(me^)KLxzFT8{9D|URiuih3n z-w4>w2NjRN<$%xdNZ=-SaYJj?o*AJB+*yfF^qAac+*O=3ws1_Iy$=70~^L>a!yGgNTwZTZE9%F}-m zr2tC(_#{Bh0^kvBzju-Jz(Aek}spHh--fDJa$9;UxR#Pd3eS zrliV6Pu5AUq&7@G&o#;OEFIsgS);wxMCi9&;u^-G_Gxpg<1-HrS`QfXP{s5tFZZU08`Bzn3iB?S6?~K zPi9y8_VLE`>(@=3ow8$UYQ({^F&G7kH_3j`@kmSg$3d~nfxlug3apXzcFF%ls;nwD zqU)?mTR6$#jW6dW$X?B1=SC4NB#iK);17CEBsI>*$ znfj3XD9gEY9M|6 zmd7cL$yyWScTU4FCw(3o_V}zgj@JmFgegOGW*+<=p#mp~>n@gN165Ib7FxjK*pIcP z95D_~h%cg7n?uEB4z_+WqVoIur2l=hWo@Vvsg6}it*}&k>#8Y+0;JT%>s1snE=wDE z(Z$6()G0m7yV-@_#{{DT!=sWJ71VNj-^!5wLNC?O4!WtLOQ$jpDR9Yh9RoDwE``O? zF?y~OM#$g({k!ZRoABLyPR-O;=4J5MBL0S=1BQMJC>zrRNOI{Fwqvr11d`Yd4MuS- zuwVpG-Mqk24|lc^3BQ*HexEIC_6sgOZ^@Lzf4h>xQt(*U_FZTC!o6l3uv0CYC^-Cm z6d>{_V9TbJJOAmC0$<+~b3a8o5@|HeK;RFJTN6H=oWRb2)(RR9BXoj0Ubz9kP^EQ< zf_BPvYI))Yd-A1yRMwF`{ZfwRKO8v=yWL=rfLPCreZZr*m~XU?t9!bv5ZH)lI2S** ziadfd(UK)*clQdMXq=5v!3IT^7siS0z42L=%oZ2F4Klst{Y1`$9W6?tJM?U!#$>H| z!J9-6vVZ?&qa8#ICbja!+g9cIfSPP5>4T2F%39JlNuMaLpT2Iml-rTv!JAQTbK~U& z1>L+ma8QvaJAiUlalXMBRedH-=G7JSD0{qQRc8058*#qLWxc^{r=(;AoFY}3yYXD; z&V683l`Gi^uNq&ZK^DmKE?=3A-f^&qMV<_uk7WP0PM`9BBB$9-@WC}FT6F1zEhhYr z?-#eaYckzk_}R;7$Z502_O!XmsXC#1L_y&MIHp5Y^5}m%9y?{c_HZm{hqbc&Z593;(P;ZHh&_! zc-Q^f%Fi>h_vflm@CDeQye*_PXp_))2I_T!JYD2{^YuLPYXX0idGvbdb%@U87Cn9p zwvC;po&%E+8x&x{6oZdC|0XN#0ITILPuaYQ-Qzj#>LfAHdnELQKGgTDcf1;T#w*I19XKqZDN*oZb0mP)KunV<$i_0SDo`lJ3dIXR}BkiVjW z;Nb^gjN!*rY_}y)tS0)>m`x<79 z8Q!HCJ)$Ja`O13g)_n>bmn~8ZJDHB7-}N5Iye8(?Cp58lPA#~(xGK6QZ{keTIYdKp zn}(!U%WFW%(~X;U9XWgRNWe6)LSEQE##&k3M2ImrH&>LB=*^oqx%v5q#tc(`q`IXg zsf>+>CG^3zbs?q8(vNROdWSLpMt66&i`E@=>V$q|)#nqvH@FXPADM%=dwdmwctx*6 z2v78(?u&7Wi-%pahQn<-O>WI@TEUo|<9U#Zdql6)#}>_>O8dTEwXes>UoEP%Ys$xU zr8SobPfb4fnElh%cN*QY>6wydZsoX2x~U*`{QYV87qeReUDfguwkoJagQ)bVu4=n_ zvtLcuGg4zvNsTe4L7gLUSxFvp<`+@zLowte%OC69KipjAIwcbIqVEY(I3H27bk3a) zXmfe@to~h@nw1mByB_1_NQv)I%H8C$7c) znT2ND;vW42t? z@Y3A(a2t@NQ=RbH3%;Wr?^~rzxu?d#V_hq^w6`vQ#jWYO4p-+h<Z?J+xmC5}If-L9hyE(y8*hBI=>^_f<`x#cdNPPK{c!{zHU zrwcd6kLf5b!`40|-7(1bg2OBPCbd3hY`4LooYl><9(6O77Eh`n#ijn+t2{VdXb1ej zeK+N}@gh1pGaYky{RH2r!$03skK@^RTkgDCoP~{TYz%bU+;IBwd}LRg@g0xF?1;Y> zp{lMCfiYh+&5dII1PsgdniAfdeKxu(fqe68T{Z~WT>jAY!k#+9>SVnDm%O`*egh1@ zP#pZv;oU;c7DD%P^Ygqy1HU9soG<@f+bk(1S7Wp>NlV`66NYapmGQf=-nC&W@Rfba zw`veF)gXe^p70^V`?*fBV`zb9Vd_|ALPxqjBgMEHl3QH`lEVjPCth@&t1 z`X*s#{hCVe?u;}_l zLx$uMbWkToklqv=N+wxb@_cKcA38tW`A>M|0JwDT zVFDcZPw3%YcPWmZbsO`VQ?}@MnPdImOW(d^cWunTWLU-%9P#4 g4+oSB%!-~9)Qt?IW4W&ELBKy9joa$ws#X#I165)t8vp) : Exception("Unacceptable price: $givenPrice") - class AssetMismatchException(val expectedTypeName: String, val typeName: String) : Exception() { + class UnacceptablePriceException(val givenPrice: Amount) : FlowException("Unacceptable price: $givenPrice") + class AssetMismatchException(val expectedTypeName: String, val typeName: String) : FlowException() { override fun toString() = "The submitted asset didn't match the expected type: $expectedTypeName vs $typeName" } @@ -241,17 +241,11 @@ Let's implement the ``Seller.call`` method. This will be run when the flow is in .. container:: codeset - .. sourcecode:: kotlin - - @Suspendable - override fun call(): SignedTransaction { - val partialTX: SignedTransaction = receiveAndCheckProposedTransaction() - val ourSignature: DigitalSignature.WithKey = computeOurSignature(partialTX) - val allPartySignedTx = partialTX + ourSignature - val notarySignature = getNotarySignature(allPartySignedTx) - val result: SignedTransaction = sendSignatures(allPartySignedTx, ourSignature, notarySignature) - return result - } + .. literalinclude:: ../../finance/src/main/kotlin/net/corda/flows/TwoPartyTradeFlow.kt + :language: kotlin + :start-after: DOCSTART 4 + :end-before: DOCEND 4 + :dedent: 4 Here we see the outline of the procedure. We receive a proposed trade transaction from the buyer and check that it's valid. The buyer has already attached their signature before sending it. Then we calculate and attach our own signature so that the transaction is @@ -265,31 +259,11 @@ Let's fill out the ``receiveAndCheckProposedTransaction()`` method. .. container:: codeset - .. sourcecode:: kotlin - - @Suspendable - private fun receiveAndCheckProposedTransaction(): SignedTransaction { - // Make the first message we'll send to kick off the flow. - val myPublicKey = myKeyPair.public.composite - val hello = SellerTradeInfo(assetToSell, price, myPublicKey) - - val maybeSTX = sendAndReceive(otherSide, hello) - - maybeSTX.unwrap { - // Check that the tx proposed by the buyer is valid. - 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, otherParty)) - - if (wtx.outputs.map { it.data }.sumCashBy(myPublicKey).withoutIssuer() != price) - throw IllegalArgumentException("Transaction is not sending us the right amount of cash") - - return it - } - } + .. literalinclude:: ../../finance/src/main/kotlin/net/corda/flows/TwoPartyTradeFlow.kt + :language: kotlin + :start-after: DOCSTART 5 + :end-before: DOCEND 5 + :dedent: 4 Let's break this down. We fill out the initial flow message with the trade info, and then call ``sendAndReceive``. This function takes a few arguments: @@ -333,6 +307,26 @@ Our "scrubbing" has three parts: 2. We resolve the transaction, which we will cover below. 3. We verify that the transaction is paying us the demanded price. +Exception handling +------------------ + +Flows can throw exceptions to prematurely terminate their execution. The flow framework gives special treatment to +``FlowException`` and its subtypes. These exceptions are treated as error responses of the flow and are propagated +to all counterparties it is communicating with. The receiving flows will throw the same exception the next time they do +a ``receive`` or ``sendAndReceive`` and thus end the flow session. If the receiver was invoked via ``subFlow`` (details below) +then the exception can be caught there enabling re-invocation of the sub-flow. + +If the exception thrown by the erroring flow is not a ``FlowException`` it will still terminate but will not propagate to +the other counterparties. Instead they will be informed the flow has terminated and will themselves be terminated with a +generic exception. + +.. note:: A future version will extend this to give the node administrator more control on what to do with such erroring + flows. + +Throwing a ``FlowException`` enables a flow to reject a piece of data it has received back to the sender. This is typically +done in the ``unwrap`` method of the received ``UntrustworthyData``. In the above example the seller checks the price +and throws ``FlowException`` if it's invalid. It's then up to the buyer to either try again with a better price or give up. + Sub-flows --------- @@ -340,13 +334,11 @@ Flows can be composed via nesting. Invoking a sub-flow looks similar to an ordin .. container:: codeset - .. sourcecode:: kotlin - - @Suspendable - private fun getNotarySignature(stx: SignedTransaction): DigitalSignature.LegallyIdentifiable { - progressTracker.currentStep = NOTARY - return subFlow(NotaryFlow.Client(stx)) - } + .. literalinclude:: ../../finance/src/main/kotlin/net/corda/flows/TwoPartyTradeFlow.kt + :language: kotlin + :start-after: DOCSTART 6 + :end-before: DOCEND 6 + :dedent: 4 In this code snippet we are using the ``NotaryFlow.Client`` to request notarisation of the transaction. We simply create the flow object via its constructor, and then pass it to the ``subFlow`` method which @@ -372,18 +364,11 @@ Here's the rest of the code: .. container:: codeset - .. sourcecode:: kotlin - - open fun calculateOurSignature(partialTX: SignedTransaction) = myKeyPair.signWithECDSA(partialTX.id) - - @Suspendable - private fun sendSignatures(allPartySignedTX: SignedTransaction, ourSignature: DigitalSignature.WithKey, - notarySignature: DigitalSignature.WithKey): SignedTransaction { - val fullySigned = allPartySignedTX + notarySignature - logger.trace { "Built finished transaction, sending back to secondary!" } - send(otherSide, SignaturesFromSeller(ourSignature, notarySignature)) - return fullySigned - } + .. literalinclude:: ../../finance/src/main/kotlin/net/corda/flows/TwoPartyTradeFlow.kt + :language: kotlin + :start-after: DOCSTART 7 + :end-before: DOCEND 7 + :dedent: 4 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 @@ -413,7 +398,7 @@ OK, let's do the same for the buyer side: :language: kotlin :start-after: DOCSTART 1 :end-before: DOCEND 1 - :dedent: 8 + :dedent: 4 This code is longer but no more complicated. Here are some things to pay attention to: @@ -453,7 +438,6 @@ A flow might declare some steps with code inside the flow class like this: :end-before: DOCSTART 1 :dedent: 4 - .. sourcecode:: java private final ProgressTracker progressTracker = new ProgressTracker( @@ -547,7 +531,7 @@ 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 -* Exception propagation and management, with a "flow hospital" tool to manually provide solutions to unavoidable +* Exception 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 RPC * Being able to interact with people, either via some sort of external ticketing system, or email, or a custom UI. diff --git a/docs/build/html/_sources/index.txt b/docs/build/html/_sources/index.txt index e198c2450b..fdcb8a43a2 100644 --- a/docs/build/html/_sources/index.txt +++ b/docs/build/html/_sources/index.txt @@ -2,33 +2,33 @@ Welcome to the Corda documentation! =================================== .. warning:: This build of the docs is from the "|version|" branch, not a milestone release. It may not reflect the - current state of the code. `Read the docs for milestone release M7 `_. + current state of the code. `Read the docs for milestone release M8 `_. -`Corda `_ is an open-source distributed ledger platform. The latest *milestone* (i.e. stable) -release is M7. The codebase is on `GitHub `_, and our community can be found on +`Corda `_ is an open-source distributed ledger platform. The latest *milestone* (i.e. stable) +release is M8. The codebase is on `GitHub `_, and our community can be found on `Slack `_ and in our `forum `_. -If you're new to Corda, you should start by learning about its motivating vision and architecture. A good introduction -is the `Introduction to Corda webinar `_ and the `Introductory white paper`_. As -they become more familiar with Corda, readers with a technical background will also want to dive into the `Technical white paper`_, +If you're new to Corda, you should start by learning about its motivating vision and architecture. A good introduction +is the `Introduction to Corda webinar `_ and the `Introductory white paper`_. As +they become more familiar with Corda, readers with a technical background will also want to dive into the `Technical white paper`_, which describes the platform's envisioned end-state. -Corda is designed so that developers can easily extend its functionality by writing CorDapps -(**Cor**\ da **D**\ istributed **App**\ lication\ **s**\ ). Some example CorDapps are available in the Corda repo's -`samples `_ directory. To run these yourself, make -sure you follow the instructions in :doc:`getting-set-up`, then go to +Corda is designed so that developers can easily extend its functionality by writing CorDapps +(**Cor**\ da **D**\ istributed **App**\ lication\ **s**\ ). Some example CorDapps are available in the Corda repo's +`samples `_ directory. To run these yourself, make +sure you follow the instructions in :doc:`getting-set-up`, then go to :doc:`running-the-demos`. -If, after running the demos, you're interested in writing your own CorDapps, a template CorDapp is available on -`Github `_. To get it running, follow the instructions in the -`readme `_, or watch the +If, after running the demos, you're interested in writing your own CorDapps, a template CorDapp is available on +`Github `_. To get it running, follow the instructions in the +`readme `_, or watch the `Corda Developers Tutorial `_. -From there, you'll be in a position to start extending the example CorDapp yourself (e.g. by writing new states, contracts, -and/or flows). For this, you'll want to refer to this docsite, and to the `tutorials `_ +From there, you'll be in a position to start extending the example CorDapp yourself (e.g. by writing new states, contracts, +and/or flows). For this, you'll want to refer to this docsite, and to the `tutorials `_ in particular. If you get stuck, get in touch on `Slack `_ or the `forum `_. -Once you're familiar with Corda and CorDapp development, we'd encourage you to get involved in the development of the +Once you're familiar with Corda and CorDapp development, we'd encourage you to get involved in the development of the platform itself. Find out more about `contributing to Corda `_. .. _`Introductory white paper`: _static/corda-introductory-whitepaper.pdf diff --git a/docs/build/html/_sources/node-administration.txt b/docs/build/html/_sources/node-administration.txt index aa5f61a233..04aea26784 100644 --- a/docs/build/html/_sources/node-administration.txt +++ b/docs/build/html/_sources/node-administration.txt @@ -1,8 +1,9 @@ Node administration =================== -When a node is running, it exposes an embedded database server, an embedded web server that lets you monitor it, -you can upload and download attachments, access a REST API and so on. +When a node is running, it exposes an RPC interface that lets you monitor it, +you can upload and download attachments, access a REST API and so on. A bundled +Jetty web server exposes the same interface over HTTP. Logging ------- diff --git a/docs/build/html/_sources/node-services.txt b/docs/build/html/_sources/node-services.txt index 6fded8143a..c08e17ddda 100644 --- a/docs/build/html/_sources/node-services.txt +++ b/docs/build/html/_sources/node-services.txt @@ -346,3 +346,11 @@ external legacy systems by insertion of unpacked data into existing tables. To enable these features the contract state must implement the ``QueryableState`` interface to define the mappings. +Node Web Server +--------------- + +A web server comes bundled with the node by default, but is not started +automatically. This web server exposes both RPC backed API calls and +static content serving. The web server is not automatically started, +you must explicitly start it in the node driver or define a web port +in your `Cordformation`_ configuration. diff --git a/docs/build/html/_sources/release-notes.txt b/docs/build/html/_sources/release-notes.txt index 5d2d25e9e7..7d0af253a8 100644 --- a/docs/build/html/_sources/release-notes.txt +++ b/docs/build/html/_sources/release-notes.txt @@ -6,10 +6,33 @@ Here are brief summaries of what's changed between each snapshot release. Milestone 8 ----------- -* API: +* Node memory usage and performance improvements, demo nodes now only require 200 MB heap space to run. - * ``Party`` equality is now based on the owning key, rather than the owning key and name. This is important for - party anonymisation to work, as each key must identify exactly one party. +* The Corda node no longer runs an internal web server, it's now run in a separate process. Driver and Cordformation have + been updated to reflect this change. + Existing CorDapps should be updated with additional calls to the new ``startWebserver()`` interface in their Driver logic (if they use the driver e.g. in integration tests). + See the IRS demo for an example. + +* Data model: ``Party`` equality is now based on the owning key, rather than the owning key and name. This is important for + party anonymisation to work, as each key must identify exactly one party. + +* Contracts: created new composite clauses called ``AllOf``, ``AnyOf`` and ``FirstOf`` to replace ``AllComposition``, ``AnyComposition`` + and ``FirstComposition``, as this is significantly clearer in intent. ``AnyOf`` also enforces that at least one subclause + must match, whereas ``AnyComposition`` would accept no matches. + +* Explorer: the user can now configure certificate path and keystore/truststore password on the login screen. + +* Documentation: + + * Key Concepts section revamped with new structure and content. + * Added more details to :doc:`getting-set-up` page. + +* Flow framework: improved exception handling with the introduction of ``FlowException``. If this or a subtype is thrown + inside a flow it will propagate to all counterparty flows and subsequently be thrown by them as well. Existing flows such as + ``NotaryFlow.Client/Service`` and others have been modified to throw a ``FlowException`` (in this particular case a + ``NotaryException``) instead of sending back error responses. + +* Notary flow: provide complete details of underlying error when contract validation fails. Milestone 7 ----------- diff --git a/docs/build/html/_sources/setting-up-a-corda-network.txt b/docs/build/html/_sources/setting-up-a-corda-network.txt index 657b4b2e49..f45bd6b7ca 100644 --- a/docs/build/html/_sources/setting-up-a-corda-network.txt +++ b/docs/build/html/_sources/setting-up-a-corda-network.txt @@ -45,7 +45,8 @@ The most important fields regarding network configuration are: * ``artemisAddress``: This specifies a host and port. Note that the address bound will **NOT** be ``my-corda-node``, but rather ``::`` (all addresses on all interfaces). The hostname specified is the hostname *that must be externally resolvable by other nodes in the network*. In the above configuration this is the resolvable name of a machine in a vpn. -* ``webAddress``: The address the webserver should bind. Note that the port should be distinct from that of ``artemisAddress``. +* ``webAddress``: The address the webserver should bind. Note that the port should be distinct from that of ``artemisAddress`` + if they are on the same machine. * ``networkMapService``: Details of the node running the network map service. If it's this node that's running the service then this field must not be specified. diff --git a/docs/build/html/_static/basic.css b/docs/build/html/_static/basic.css index 0b79414a16..2b513f0c96 100644 --- a/docs/build/html/_static/basic.css +++ b/docs/build/html/_static/basic.css @@ -494,13 +494,6 @@ pre { overflow-y: hidden; /* fixes display issues on Chrome browsers */ } -span.pre { - -moz-hyphens: none; - -ms-hyphens: none; - -webkit-hyphens: none; - hyphens: none; -} - td.linenos pre { padding: 5px 0px; border: 0; diff --git a/docs/build/html/_static/searchtools.js b/docs/build/html/_static/searchtools.js index ba82ad4877..066857ce21 100644 --- a/docs/build/html/_static/searchtools.js +++ b/docs/build/html/_static/searchtools.js @@ -226,106 +226,6 @@ var Scorer = { }; - - - -var splitChars = (function() { - var result = {}; - var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648, - 1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702, - 2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971, - 2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345, - 3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761, - 3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823, - 4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125, - 8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695, - 11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587, - 43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141]; - var i, j, start, end; - for (i = 0; i < singles.length; i++) { - result[singles[i]] = true; - } - var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709], - [722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161], - [1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568], - [1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807], - [1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047], - [2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383], - [2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450], - [2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547], - [2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673], - [2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820], - [2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946], - [2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023], - [3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173], - [3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332], - [3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481], - [3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718], - [3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791], - [3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095], - [4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205], - [4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687], - [4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968], - [4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869], - [5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102], - [6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271], - [6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592], - [6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822], - [6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167], - [7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959], - [7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143], - [8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318], - [8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483], - [8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101], - [10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567], - [11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292], - [12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444], - [12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783], - [12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311], - [19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511], - [42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774], - [42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071], - [43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263], - [43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519], - [43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647], - [43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967], - [44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295], - [57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274], - [64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007], - [65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381], - [65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]]; - for (i = 0; i < ranges.length; i++) { - start = ranges[i][0]; - end = ranges[i][1]; - for (j = start; j <= end; j++) { - result[j] = true; - } - } - return result; -})(); - -function splitQuery(query) { - var result = []; - var start = -1; - for (var i = 0; i < query.length; i++) { - if (splitChars[query.charCodeAt(i)]) { - if (start !== -1) { - result.push(query.slice(start, i)); - start = -1; - } - } else if (start === -1) { - start = i; - } - } - if (start !== -1) { - result.push(query.slice(start)); - } - return result; -} - - - - /** * Search Module */ @@ -424,7 +324,7 @@ var Search = { var searchterms = []; var excluded = []; var hlterms = []; - var tmp = splitQuery(query); + var tmp = query.split(/\s+/); var objectterms = []; for (i = 0; i < tmp.length; i++) { if (tmp[i] !== "") { diff --git a/docs/build/html/api/javadoc/allclasses-frame.html b/docs/build/html/api/javadoc/allclasses-frame.html index bf39d4802e..bdadcd7c4a 100644 --- a/docs/build/html/api/javadoc/allclasses-frame.html +++ b/docs/build/html/api/javadoc/allclasses-frame.html @@ -2,10 +2,10 @@ - + All Classes - + @@ -26,10 +26,10 @@

  • AbstractStateReplacementFlow
  • AbstractStateReplacementFlow.Acceptor
  • AbstractStateReplacementFlow.Instigator
  • -
  • AbstractStateReplacementFlow.Proposal
  • -
  • AbstractStateReplacementFlow.Result
  • +
  • AbstractStateReplacementFlow.Proposal
  • Acceptor.Companion
  • AcceptsFileUpload
  • +
  • AcceptsFileUpload.DefaultImpls
  • AccrualAdjustment
  • Ack
  • AddOrRemove
  • @@ -49,8 +49,8 @@
  • ANSIProgressRenderer
  • AnyComposition
  • AnyOf
  • -
  • APIServer
  • -
  • APIServerImpl
  • +
  • APIServer
  • +
  • APIServerImpl
  • ApiUtils
  • AppContext
  • ArgsParser
  • @@ -64,10 +64,11 @@
  • ArtemisMessagingComponent.ServiceAddress
  • ArtemisMessagingServer
  • ArtemisMessagingServer.Companion
  • +
  • ArtemisTestKt
  • AssociatedList
  • Attachment
  • Attachment.DefaultImpls
  • -
  • AttachmentDownloadServlet
  • +
  • AttachmentDownloadServlet
  • AttachmentsClassLoader
  • AttachmentsClassLoader.OverlappingAttachments
  • AttachmentStorage
  • @@ -94,11 +95,9 @@
  • CashCommand.ExitCash
  • CashCommand.IssueCash
  • CashCommand.PayCash
  • +
  • CashException
  • CashFlow
  • CashFlow.Companion
  • -
  • CashFlowResult
  • -
  • CashFlowResult.Failed
  • -
  • CashFlowResult.Success
  • CashKt
  • CashSchema
  • CashSchemaV1
  • @@ -137,6 +136,7 @@
  • Clauses.Settle
  • Clauses.VerifyLifecycle
  • ClauseVerifier
  • +
  • Client
  • Client.Companion
  • ClientRPCRequestMessage
  • ClientRPCRequestMessage.Companion
  • @@ -209,7 +209,6 @@
  • Companion.RECEIVING
  • Companion.RECORDING
  • Companion.RECORDING
  • -
  • Companion.REJECTING
  • Companion.REQUESTING
  • Companion.RUNNING
  • Companion.SENDING_CONFIRM
  • @@ -238,16 +237,16 @@
  • CompositeKeyLeafSerializer
  • CompositeKeyNodeSerializer
  • ConcatenatedList
  • -
  • Config
  • ConfigHelper
  • ConfigurationException
  • ConfigUtilities
  • +
  • ConfigUtilsKt
  • +
  • ConnectionDirection
  • +
  • ConnectionDirection.Inbound
  • ConnectionDirection.Inbound
  • +
  • ConnectionDirection.Outbound
  • ConnectionDirection.Outbound
  • Contract
  • -
  • ContractClassRef
  • -
  • ContractDefRef
  • -
  • ContractLedgerRef
  • ContractsDSL
  • ContractState
  • ContractStateGenerator
  • @@ -262,15 +261,15 @@
  • CordaRPCOpsImpl
  • CordaRPCOpsImpl.Companion
  • CordaRPCOpsKt
  • -
  • Criteria.AllDeals
  • -
  • Criteria.Deal
  • +
  • Criteria.AllDeals
  • +
  • Criteria.Deal
  • CryptoUtilities
  • CubicSplineInterpolator
  • CubicSplineInterpolator.Factory
  • CurrencyGenerator
  • CurrencyGenerator.Companion
  • DatabaseSupportKt
  • -
  • DataUploadServlet
  • +
  • DataUploadServlet
  • DataVending
  • DataVending.Plugin
  • DataVending.Service
  • @@ -330,13 +329,14 @@
  • ExpressionSerializer
  • FetchAttachmentsFlow
  • FetchDataFlow
  • -
  • FetchDataFlow.BadAnswer
  • FetchDataFlow.DownloadedVsRequestedDataMismatch
  • +
  • FetchDataFlow.DownloadedVsRequestedSizeMismatch
  • FetchDataFlow.HashNotFound
  • FetchDataFlow.Request
  • FetchDataFlow.Result
  • FetchTransactionsFlow
  • FiberBox
  • +
  • FileUploader
  • FilteredLeaves
  • FilteredTransaction
  • FilteredTransaction.Companion
  • @@ -354,16 +354,13 @@
  • FixOf
  • FlattenedList
  • FlattenedList.WrappedObservableValue
  • -
  • FlowClassRef
  • FlowException
  • FlowHandle
  • -
  • FlowInstanceRef
  • FlowIORequest
  • FlowLogic
  • FlowLogicRef
  • FlowLogicRefFactory
  • -
  • FlowRef
  • -
  • FlowRequiringAttention
  • +
  • FlowSessionException
  • FlowSessionState.Initiated
  • FlowSessionState.Initiating
  • FlowStateMachine
  • @@ -406,7 +403,6 @@
  • InMemoryUniquenessProvider
  • InputResolution.Resolved
  • InputResolution.Unresolved
  • -
  • InputStateRefResolveFailed
  • InputStreamSerializer
  • InstantColumnType
  • InstantGenerator
  • @@ -435,17 +431,20 @@
  • JsonSupport.CalendarDeserializer
  • JsonSupport.CompositeKeyDeserializer
  • JsonSupport.CompositeKeySerializer
  • +
  • JsonSupport.IdentityObjectMapper
  • JsonSupport.LocalDateDeserializer
  • JsonSupport.LocalDateKeyDeserializer
  • JsonSupport.NodeInfoDeserializer
  • JsonSupport.NodeInfoSerializer
  • +
  • JsonSupport.NoPartyObjectMapper
  • JsonSupport.PartyDeserializer
  • +
  • JsonSupport.PartyObjectMapper
  • JsonSupport.PartySerializer
  • JsonSupport.PublicKeyDeserializer
  • JsonSupport.PublicKeySerializer
  • +
  • JsonSupport.RpcObjectMapper
  • JsonSupport.SecureHashDeserializer
  • JsonSupport.SecureHashSerializer
  • -
  • JsonSupport.ServiceHubObjectMapper
  • JsonSupport.ToStringSerializer
  • KeyManagementService
  • KeyManagementService.DefaultImpls
  • @@ -485,6 +484,7 @@
  • MessagingService
  • MessagingServiceBuilder
  • MessagingServiceInternal
  • +
  • MetricsKt
  • MissingAttachmentsException
  • Models
  • ModelsKt
  • @@ -556,7 +556,6 @@
  • NotaryChangeFlow
  • NotaryChangeFlow.Acceptor
  • NotaryChangeFlow.Instigator
  • -
  • NotaryChangeFlow.Proposal
  • NotaryError
  • NotaryError.Conflict
  • NotaryError.SignaturesInvalid
  • @@ -566,13 +565,13 @@
  • NotaryException
  • NotaryFlow
  • NotaryFlow.Client
  • -
  • NotaryFlow.Result
  • NotaryFlow.Service
  • NotaryFlow.SignRequest
  • NotaryService
  • NoZeroSizedOutputs
  • NullPublicKey
  • NullSignature
  • +
  • ObjectMapperConfig
  • Obligation
  • Obligation.Clauses
  • Obligation.Commands
  • @@ -650,10 +649,7 @@
  • ResolveTransactionsFlow
  • ResolveTransactionsFlow.Companion
  • ResolveTransactionsFlow.ExcessivelyLargeTransactionGraph
  • -
  • ResponseFilter
  • -
  • Result.Companion
  • -
  • Result.Error
  • -
  • Result.Success
  • +
  • ResponseFilter
  • RetryableException
  • RPCDispatcher
  • RPCException
  • @@ -692,7 +688,7 @@
  • SerializeAsTokenSerializer.Companion
  • SerializedBytes
  • SerializedBytesSerializer
  • -
  • Service.Companion
  • +
  • Server
  • Service.NotifyTransactionHandler
  • ServiceAffinityExecutor.Companion
  • ServiceEntry
  • @@ -755,21 +751,23 @@
  • StateRefColumns
  • StateRefGenerator
  • StateReplacementException
  • -
  • StateReplacementRefused
  • -
  • StatesQuery
  • -
  • StatesQuery.Companion
  • -
  • StatesQuery.Criteria
  • -
  • StatesQuery.Selection
  • +
  • StatesQuery
  • +
  • StatesQuery.Companion
  • +
  • StatesQuery.Criteria
  • +
  • StatesQuery.Selection
  • StorageService
  • StorageServiceImpl
  • StrandLocalTransactionManager
  • StrandLocalTransactionManager.Boundary
  • StrandLocalTransactionManager.Companion
  • StructuresKt
  • +
  • TContract
  • Tenor
  • Tenor.TimeUnit
  • TestClock
  • TestConstants
  • +
  • TGenesisCommand
  • +
  • TGenesisFlow
  • ThreadBox
  • Timestamp
  • TimestampChecker
  • @@ -789,7 +787,6 @@
  • TrackedDelegate.SubjectDelegate
  • TrackedDelegate.WritableValueDelegate
  • TransactionBuilder
  • -
  • TransactionBuildStep
  • TransactionConflictException
  • TransactionCreateStatus
  • TransactionCreateStatus.Failed
  • @@ -816,6 +813,9 @@
  • TransactionVerificationException.SignersMissing
  • TransactionVerificationException.TransactionMissingEncumbranceException
  • TransientProperty
  • +
  • TTxCommand
  • +
  • TTxFlow
  • +
  • TTxState
  • TwoPartyDealFlow
  • TwoPartyDealFlow.Acceptor
  • TwoPartyDealFlow.AutoOffer
  • @@ -857,6 +857,7 @@
  • VaultService
  • VaultService.DefaultImpls
  • VerifyingNettyConnectorFactory
  • +
  • WebServer
  • WiredTransactionGenerator
  • WireNodeRegistration
  • WireTransaction
  • diff --git a/docs/build/html/api/javadoc/allclasses-noframe.html b/docs/build/html/api/javadoc/allclasses-noframe.html index 073848467a..728de47ec3 100644 --- a/docs/build/html/api/javadoc/allclasses-noframe.html +++ b/docs/build/html/api/javadoc/allclasses-noframe.html @@ -2,10 +2,10 @@ - + All Classes - + @@ -26,10 +26,10 @@
  • AbstractStateReplacementFlow
  • AbstractStateReplacementFlow.Acceptor
  • AbstractStateReplacementFlow.Instigator
  • -
  • AbstractStateReplacementFlow.Proposal
  • -
  • AbstractStateReplacementFlow.Result
  • +
  • AbstractStateReplacementFlow.Proposal
  • Acceptor.Companion
  • AcceptsFileUpload
  • +
  • AcceptsFileUpload.DefaultImpls
  • AccrualAdjustment
  • Ack
  • AddOrRemove
  • @@ -49,8 +49,8 @@
  • ANSIProgressRenderer
  • AnyComposition
  • AnyOf
  • -
  • APIServer
  • -
  • APIServerImpl
  • +
  • APIServer
  • +
  • APIServerImpl
  • ApiUtils
  • AppContext
  • ArgsParser
  • @@ -64,10 +64,11 @@
  • ArtemisMessagingComponent.ServiceAddress
  • ArtemisMessagingServer
  • ArtemisMessagingServer.Companion
  • +
  • ArtemisTestKt
  • AssociatedList
  • Attachment
  • Attachment.DefaultImpls
  • -
  • AttachmentDownloadServlet
  • +
  • AttachmentDownloadServlet
  • AttachmentsClassLoader
  • AttachmentsClassLoader.OverlappingAttachments
  • AttachmentStorage
  • @@ -94,11 +95,9 @@
  • CashCommand.ExitCash
  • CashCommand.IssueCash
  • CashCommand.PayCash
  • +
  • CashException
  • CashFlow
  • CashFlow.Companion
  • -
  • CashFlowResult
  • -
  • CashFlowResult.Failed
  • -
  • CashFlowResult.Success
  • CashKt
  • CashSchema
  • CashSchemaV1
  • @@ -137,6 +136,7 @@
  • Clauses.Settle
  • Clauses.VerifyLifecycle
  • ClauseVerifier
  • +
  • Client
  • Client.Companion
  • ClientRPCRequestMessage
  • ClientRPCRequestMessage.Companion
  • @@ -209,7 +209,6 @@
  • Companion.RECEIVING
  • Companion.RECORDING
  • Companion.RECORDING
  • -
  • Companion.REJECTING
  • Companion.REQUESTING
  • Companion.RUNNING
  • Companion.SENDING_CONFIRM
  • @@ -238,16 +237,16 @@
  • CompositeKeyLeafSerializer
  • CompositeKeyNodeSerializer
  • ConcatenatedList
  • -
  • Config
  • ConfigHelper
  • ConfigurationException
  • ConfigUtilities
  • +
  • ConfigUtilsKt
  • +
  • ConnectionDirection
  • +
  • ConnectionDirection.Inbound
  • ConnectionDirection.Inbound
  • +
  • ConnectionDirection.Outbound
  • ConnectionDirection.Outbound
  • Contract
  • -
  • ContractClassRef
  • -
  • ContractDefRef
  • -
  • ContractLedgerRef
  • ContractsDSL
  • ContractState
  • ContractStateGenerator
  • @@ -262,15 +261,15 @@
  • CordaRPCOpsImpl
  • CordaRPCOpsImpl.Companion
  • CordaRPCOpsKt
  • -
  • Criteria.AllDeals
  • -
  • Criteria.Deal
  • +
  • Criteria.AllDeals
  • +
  • Criteria.Deal
  • CryptoUtilities
  • CubicSplineInterpolator
  • CubicSplineInterpolator.Factory
  • CurrencyGenerator
  • CurrencyGenerator.Companion
  • DatabaseSupportKt
  • -
  • DataUploadServlet
  • +
  • DataUploadServlet
  • DataVending
  • DataVending.Plugin
  • DataVending.Service
  • @@ -330,13 +329,14 @@
  • ExpressionSerializer
  • FetchAttachmentsFlow
  • FetchDataFlow
  • -
  • FetchDataFlow.BadAnswer
  • FetchDataFlow.DownloadedVsRequestedDataMismatch
  • +
  • FetchDataFlow.DownloadedVsRequestedSizeMismatch
  • FetchDataFlow.HashNotFound
  • FetchDataFlow.Request
  • FetchDataFlow.Result
  • FetchTransactionsFlow
  • FiberBox
  • +
  • FileUploader
  • FilteredLeaves
  • FilteredTransaction
  • FilteredTransaction.Companion
  • @@ -354,16 +354,13 @@
  • FixOf
  • FlattenedList
  • FlattenedList.WrappedObservableValue
  • -
  • FlowClassRef
  • FlowException
  • FlowHandle
  • -
  • FlowInstanceRef
  • FlowIORequest
  • FlowLogic
  • FlowLogicRef
  • FlowLogicRefFactory
  • -
  • FlowRef
  • -
  • FlowRequiringAttention
  • +
  • FlowSessionException
  • FlowSessionState.Initiated
  • FlowSessionState.Initiating
  • FlowStateMachine
  • @@ -406,7 +403,6 @@
  • InMemoryUniquenessProvider
  • InputResolution.Resolved
  • InputResolution.Unresolved
  • -
  • InputStateRefResolveFailed
  • InputStreamSerializer
  • InstantColumnType
  • InstantGenerator
  • @@ -435,17 +431,20 @@
  • JsonSupport.CalendarDeserializer
  • JsonSupport.CompositeKeyDeserializer
  • JsonSupport.CompositeKeySerializer
  • +
  • JsonSupport.IdentityObjectMapper
  • JsonSupport.LocalDateDeserializer
  • JsonSupport.LocalDateKeyDeserializer
  • JsonSupport.NodeInfoDeserializer
  • JsonSupport.NodeInfoSerializer
  • +
  • JsonSupport.NoPartyObjectMapper
  • JsonSupport.PartyDeserializer
  • +
  • JsonSupport.PartyObjectMapper
  • JsonSupport.PartySerializer
  • JsonSupport.PublicKeyDeserializer
  • JsonSupport.PublicKeySerializer
  • +
  • JsonSupport.RpcObjectMapper
  • JsonSupport.SecureHashDeserializer
  • JsonSupport.SecureHashSerializer
  • -
  • JsonSupport.ServiceHubObjectMapper
  • JsonSupport.ToStringSerializer
  • KeyManagementService
  • KeyManagementService.DefaultImpls
  • @@ -485,6 +484,7 @@
  • MessagingService
  • MessagingServiceBuilder
  • MessagingServiceInternal
  • +
  • MetricsKt
  • MissingAttachmentsException
  • Models
  • ModelsKt
  • @@ -556,7 +556,6 @@
  • NotaryChangeFlow
  • NotaryChangeFlow.Acceptor
  • NotaryChangeFlow.Instigator
  • -
  • NotaryChangeFlow.Proposal
  • NotaryError
  • NotaryError.Conflict
  • NotaryError.SignaturesInvalid
  • @@ -566,13 +565,13 @@
  • NotaryException
  • NotaryFlow
  • NotaryFlow.Client
  • -
  • NotaryFlow.Result
  • NotaryFlow.Service
  • NotaryFlow.SignRequest
  • NotaryService
  • NoZeroSizedOutputs
  • NullPublicKey
  • NullSignature
  • +
  • ObjectMapperConfig
  • Obligation
  • Obligation.Clauses
  • Obligation.Commands
  • @@ -650,10 +649,7 @@
  • ResolveTransactionsFlow
  • ResolveTransactionsFlow.Companion
  • ResolveTransactionsFlow.ExcessivelyLargeTransactionGraph
  • -
  • ResponseFilter
  • -
  • Result.Companion
  • -
  • Result.Error
  • -
  • Result.Success
  • +
  • ResponseFilter
  • RetryableException
  • RPCDispatcher
  • RPCException
  • @@ -692,7 +688,7 @@
  • SerializeAsTokenSerializer.Companion
  • SerializedBytes
  • SerializedBytesSerializer
  • -
  • Service.Companion
  • +
  • Server
  • Service.NotifyTransactionHandler
  • ServiceAffinityExecutor.Companion
  • ServiceEntry
  • @@ -755,21 +751,23 @@
  • StateRefColumns
  • StateRefGenerator
  • StateReplacementException
  • -
  • StateReplacementRefused
  • -
  • StatesQuery
  • -
  • StatesQuery.Companion
  • -
  • StatesQuery.Criteria
  • -
  • StatesQuery.Selection
  • +
  • StatesQuery
  • +
  • StatesQuery.Companion
  • +
  • StatesQuery.Criteria
  • +
  • StatesQuery.Selection
  • StorageService
  • StorageServiceImpl
  • StrandLocalTransactionManager
  • StrandLocalTransactionManager.Boundary
  • StrandLocalTransactionManager.Companion
  • StructuresKt
  • +
  • TContract
  • Tenor
  • Tenor.TimeUnit
  • TestClock
  • TestConstants
  • +
  • TGenesisCommand
  • +
  • TGenesisFlow
  • ThreadBox
  • Timestamp
  • TimestampChecker
  • @@ -789,7 +787,6 @@
  • TrackedDelegate.SubjectDelegate
  • TrackedDelegate.WritableValueDelegate
  • TransactionBuilder
  • -
  • TransactionBuildStep
  • TransactionConflictException
  • TransactionCreateStatus
  • TransactionCreateStatus.Failed
  • @@ -816,6 +813,9 @@
  • TransactionVerificationException.SignersMissing
  • TransactionVerificationException.TransactionMissingEncumbranceException
  • TransientProperty
  • +
  • TTxCommand
  • +
  • TTxFlow
  • +
  • TTxState
  • TwoPartyDealFlow
  • TwoPartyDealFlow.Acceptor
  • TwoPartyDealFlow.AutoOffer
  • @@ -857,6 +857,7 @@
  • VaultService
  • VaultService.DefaultImpls
  • VerifyingNettyConnectorFactory
  • +
  • WebServer
  • WiredTransactionGenerator
  • WireNodeRegistration
  • WireTransaction
  • diff --git a/docs/build/html/api/javadoc/com/cordatest/TContract.html b/docs/build/html/api/javadoc/com/cordatest/TContract.html new file mode 100644 index 0000000000..d2d225c11f --- /dev/null +++ b/docs/build/html/api/javadoc/com/cordatest/TContract.html @@ -0,0 +1,299 @@ + + + + + + +TContract + + + + + + + + + + + + + + + +
    +
    com.cordatest
    +

    Class TContract

    +
    +
    +
      +
    • com.cordatest.TContract
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Contract
      +
      +
      +
      +
      public class TContract
      +implements Contract
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        TContract() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        SecureHashgetLegalContractReference() +
        Unparsed reference to the natural language contract that this code is supposed to express (usually a hash of +the contract's contents).
        +
        voidverify(TransactionForContract tx) +
        Takes an object that represents a state transition, and ensures the inputs/outputs/commands make sense. +Must throw an exception if there's a problem that should prevent state transition. Takes a single object +rather than an argument so that additional data can be added without breaking binary compatibility with +existing contract code.
        +
        + +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TContract

          +
          public TContract()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getLegalContractReference

          +
          public SecureHash getLegalContractReference()
          +

          Unparsed reference to the natural language contract that this code is supposed to express (usually a hash of +the contract's contents).

          +
        • +
        + + + +
          +
        • +

          verify

          +
          public void verify(TransactionForContract tx)
          +

          Takes an object that represents a state transition, and ensures the inputs/outputs/commands make sense. +Must throw an exception if there's a problem that should prevent state transition. Takes a single object +rather than an argument so that additional data can be added without breaking binary compatibility with +existing contract code.

          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/docs/build/html/api/javadoc/net/corda/flows/FetchDataFlow.BadAnswer.html b/docs/build/html/api/javadoc/com/cordatest/TGenesisCommand.html similarity index 60% rename from docs/build/html/api/javadoc/net/corda/flows/FetchDataFlow.BadAnswer.html rename to docs/build/html/api/javadoc/com/cordatest/TGenesisCommand.html index 86731b49c3..d89da1b744 100644 --- a/docs/build/html/api/javadoc/net/corda/flows/FetchDataFlow.BadAnswer.html +++ b/docs/build/html/api/javadoc/com/cordatest/TGenesisCommand.html @@ -2,19 +2,19 @@ - + -FetchDataFlow.BadAnswer - - - - +TGenesisCommand + + + + + + + + + + + + + +
    +
    com.cordatest
    +

    Class TGenesisFlow

    +
    +
    +
      +
    • FlowLogic
    • +
    • +
        +
      • com.cordatest.TGenesisFlow
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class TGenesisFlow
      +extends FlowLogic
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TGenesisFlow

          +
          public TGenesisFlow(java.util.Set<net.corda.core.crypto.Party> participants)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          call

          +
          public SignedTransaction call()
          +

          This is where you fill out your business logic. The returned object will usually be ignored, but can be +helpful if this flow is meant to be used as a subflow.

          +
        • +
        + + + +
          +
        • +

          getParticipants

          +
          public java.util.Set<net.corda.core.crypto.Party> getParticipants()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/docs/build/html/api/javadoc/com/cordatest/TTxCommand.html b/docs/build/html/api/javadoc/com/cordatest/TTxCommand.html new file mode 100644 index 0000000000..4c8b2850df --- /dev/null +++ b/docs/build/html/api/javadoc/com/cordatest/TTxCommand.html @@ -0,0 +1,221 @@ + + + + + + +TTxCommand + + + + + + + + + + + + + +
    +
    com.cordatest
    +

    Class TTxCommand

    +
    +
    +
      +
    • com.cordatest.TTxCommand
    • +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        TTxCommand() 
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TTxCommand

          +
          public TTxCommand()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/docs/build/html/api/javadoc/com/cordatest/TTxFlow.html b/docs/build/html/api/javadoc/com/cordatest/TTxFlow.html new file mode 100644 index 0000000000..36be6a0191 --- /dev/null +++ b/docs/build/html/api/javadoc/com/cordatest/TTxFlow.html @@ -0,0 +1,307 @@ + + + + + + +TTxFlow + + + + + + + + + + + + + + + + +
    +
    com.cordatest
    +

    Class TTxFlow

    +
    +
    +
      +
    • FlowLogic
    • +
    • +
        +
      • com.cordatest.TTxFlow
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class TTxFlow
      +extends FlowLogic
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TTxFlow

          +
          public TTxFlow(byte[] txContent,
          +               java.util.Set<net.corda.core.crypto.Party> participants)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          call

          +
          public SecureHash call()
          +

          This is where you fill out your business logic. The returned object will usually be ignored, but can be +helpful if this flow is meant to be used as a subflow.

          +
        • +
        + + + +
          +
        • +

          getTxContent

          +
          public byte[] getTxContent()
          +
        • +
        + + + +
          +
        • +

          getParticipants

          +
          public java.util.Set<net.corda.core.crypto.Party> getParticipants()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/docs/build/html/api/javadoc/com/cordatest/TTxState.html b/docs/build/html/api/javadoc/com/cordatest/TTxState.html new file mode 100644 index 0000000000..3481bb2e6d --- /dev/null +++ b/docs/build/html/api/javadoc/com/cordatest/TTxState.html @@ -0,0 +1,344 @@ + + + + + + +TTxState + + + + + + + + + + + + + + + + + +
    +
    com.cordatest
    +

    Class TTxState

    +
    +
    +
      +
    • com.cordatest.TTxState
    • +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TTxState

          +
          public TTxState(CompositeKey owner,
          +                byte[] txContent)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getParticipants

          +
          public java.util.List<net.corda.core.crypto.CompositeKey> getParticipants()
          +

          A participant is any party that is able to consume this state in a valid transaction.

          The list of participants is required for certain types of transactions. For example, when changing the notary +for this state (TransactionType.NotaryChange), every participant has to be involved and approve the transaction +so that they receive the updated state, and don't end up in a situation where they can no longer use a state +they possess, since someone consumed that state during the notary change process.

          The participants list should normally be derived from the contents of the state. E.g. for Cash the participants +list should just contain the owner.

          +
          +
          See Also:
          +
          TransactionType.NotaryChange, +Cash
          +
          +
        • +
        + + + +
          +
        • +

          getContract

          +
          public Contract getContract()
          +

          An instance of the contract class that will verify this state.

          Discussion

          This field is not the final design, it's just a piece of temporary scaffolding. Once the contract sandbox is +further along, this field will become a description of which attachments are acceptable for defining the +contract.

          Recall that an attachment is a zip file that can be referenced from any transaction. The contents of the +attachments are merged together and cannot define any overlapping files, thus for any given transaction there +is a miniature file system in which each file can be precisely mapped to the defining attachment.

          Attachments may contain many things (data files, legal documents, etc) but mostly they contain JVM bytecode. +The class files inside define not only interface Contract implementations but also the classes that define the states. +Within the rest of a transaction, user-providable components are referenced by name only.

          This means that a smart contract in Corda does two things:

          1. Define the data structures that compose the ledger (the states)

          2. Define the rules for updating those structures

          The first is merely a utility role ... in theory contract code could manually parse byte streams by hand. +The second is vital to the integrity of the ledger. So this field needs to be able to express constraints like:

          • Only attachment 733c350f396a727655be1363c06635ba355036bd54a5ed6e594fd0b5d05f42f6 may be used with this state.

          • Any attachment signed by public key 2d1ce0e330c52b8055258d776c40 may be used with this state.

          • Attachments (1, 2, 3) may all be used with this state.

          and so on. In this way it becomes possible for the business logic governing a state to be evolved, if the +constraints are flexible enough.

          Because contract classes often also define utilities that generate relevant transactions, and because attachments +cannot know their own hashes, we will have to provide various utilities to assist with obtaining the right +code constraints from within the contract code itself.

          TODO: Implement the above description. See COR-226

          +
          +
          See Also:
          +
          interface Contract
          +
          +
        • +
        + + + + + + + +
          +
        • +

          getTxContent

          +
          public byte[] getTxContent()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/docs/build/html/api/javadoc/com/cordatest/package-frame.html b/docs/build/html/api/javadoc/com/cordatest/package-frame.html new file mode 100644 index 0000000000..ff6df826a1 --- /dev/null +++ b/docs/build/html/api/javadoc/com/cordatest/package-frame.html @@ -0,0 +1,27 @@ + + + + + + +com.cordatest + + + + + + +

    com.cordatest

    + + + diff --git a/docs/build/html/api/javadoc/com/cordatest/package-summary.html b/docs/build/html/api/javadoc/com/cordatest/package-summary.html new file mode 100644 index 0000000000..159a5e709a --- /dev/null +++ b/docs/build/html/api/javadoc/com/cordatest/package-summary.html @@ -0,0 +1,162 @@ + + + + + + +com.cordatest + + + + + + + + + + + + +
    +

    Package com.cordatest

    +
    +
    + +
    + + + + + + diff --git a/docs/build/html/api/javadoc/com/cordatest/package-tree.html b/docs/build/html/api/javadoc/com/cordatest/package-tree.html new file mode 100644 index 0000000000..6c5315431d --- /dev/null +++ b/docs/build/html/api/javadoc/com/cordatest/package-tree.html @@ -0,0 +1,141 @@ + + + + + + +com.cordatest Class Hierarchy + + + + + + + + + + + +
    +

    Hierarchy For Package com.cordatest

    +Package Hierarchies: + +
    +
    +

    Class Hierarchy

    + +
    + + + + + + diff --git a/docs/build/html/api/javadoc/constant-values.html b/docs/build/html/api/javadoc/constant-values.html index 86909405bc..6a1d94866c 100644 --- a/docs/build/html/api/javadoc/constant-values.html +++ b/docs/build/html/api/javadoc/constant-values.html @@ -2,10 +2,10 @@ - + Constant Field Values - + diff --git a/docs/build/html/api/javadoc/deprecated-list.html b/docs/build/html/api/javadoc/deprecated-list.html index 081ba0ffeb..22bda67fca 100644 --- a/docs/build/html/api/javadoc/deprecated-list.html +++ b/docs/build/html/api/javadoc/deprecated-list.html @@ -2,10 +2,10 @@ - + Deprecated List - + @@ -116,8 +116,14 @@ net.corda.core.utilities.UntrustworthyData.getData()  +net.corda.core.node.services.StorageService.getUploaders()  + + net.corda.core.contracts.TransactionForContract.groupStatesInternal(inGroups, outGroups)  + +net.corda.core.messaging.CordaRPCOps.uploadFile(dataType, name, file)  + net.corda.core.utilities.UntrustworthyData.validate(validator)  diff --git a/docs/build/html/api/javadoc/help-doc.html b/docs/build/html/api/javadoc/help-doc.html index 4ba73a3a67..f3736dcbab 100644 --- a/docs/build/html/api/javadoc/help-doc.html +++ b/docs/build/html/api/javadoc/help-doc.html @@ -2,10 +2,10 @@ - + API Help - + diff --git a/docs/build/html/api/javadoc/index-all.html b/docs/build/html/api/javadoc/index-all.html index d4a2b9b1c8..9892a51f22 100644 --- a/docs/build/html/api/javadoc/index-all.html +++ b/docs/build/html/api/javadoc/index-all.html @@ -2,10 +2,10 @@ - + Index - + @@ -152,7 +152,7 @@ I/O), or a mock implementation suitable for unit test environments.
    Abstract superclass for services that a node can host, which provides helper functions.
    -
    AbstractStateReplacementFlow<T> - Class in net.corda.flows
    +
    AbstractStateReplacementFlow - Class in net.corda.flows
    Abstract flow to be used for replacing one state with another, for example when changing the notary of a state. Notably this requires a one to one replacement of states, states cannot be split, merged or issued as part of these @@ -168,9 +168,7 @@ flows.
     
    AbstractStateReplacementFlow.Instigator<S extends ContractState,T> - Class in net.corda.flows
     
    -
    AbstractStateReplacementFlow.Proposal<T> - Interface in net.corda.flows
    -
     
    -
    AbstractStateReplacementFlow.Result - Class in net.corda.flows
    +
    AbstractStateReplacementFlow.Proposal<T> - Class in net.corda.flows
     
    acceptableLiveFiberCountOnStop() - Method in class net.corda.node.internal.AbstractNode
     
    @@ -184,10 +182,34 @@ flows.
    Acceptor.Companion - Class in net.corda.flows
     
    +
    accepts(type) - Method in interface net.corda.core.node.services.FileUploader
    +
    +
    Check if this service accepts this type of upload. For example if you are uploading interest rates this could +be "my-service-interest-rates". Type here does not refer to file extentions or MIME types.
    +
    +
    accepts(prefix) - Method in interface net.corda.node.services.api.AcceptsFileUpload
    +
    +
    Check if this service accepts this type of upload. For example if you are uploading interest rates this could +be "my-service-interest-rates". Type here does not refer to file extentions or MIME types.
    +
    +
    accepts($this, prefix) - Static method in class net.corda.node.services.api.AcceptsFileUpload.DefaultImpls
    +
    +
    Check if this service accepts this type of upload. For example if you are uploading interest rates this could +be "my-service-interest-rates". Type here does not refer to file extentions or MIME types.
    +
    +
    accepts(prefix) - Method in class net.corda.node.services.persistence.NodeAttachmentService
    +
    +
    Check if this service accepts this type of upload. For example if you are uploading interest rates this could +be "my-service-interest-rates". Type here does not refer to file extentions or MIME types.
    +
    AcceptsFileUpload - Interface in net.corda.node.services.api
    A service that implements AcceptsFileUpload can have new binary data provided to it via an HTTP upload.
    +
    AcceptsFileUpload.DefaultImpls - Class in net.corda.node.services.api
    +
    +
    A service that implements AcceptsFileUpload can have new binary data provided to it via an HTTP upload.
    +
    AccrualAdjustment - Enum in net.corda.core.contracts
    Simple enum for returning accurals adjusted or unadjusted. @@ -514,15 +536,13 @@ if the terminal supports it. Otherwise it just prints out the name of the step w
    Compose a number of clauses, such that one or more of the clauses can run.
    -
    api - Variable in class net.corda.node.internal.AbstractNode
    -
     
    -
    APIServer - Interface in net.corda.node.api
    +
    APIServer - Interface in net.corda.node.webserver.api
    Top level interface to external interaction with the distributed ledger.
    -
    APIServerImpl - Class in net.corda.node.internal
    +
    APIServerImpl - Class in net.corda.node.webserver.internal
     
    -
    APIServerImpl(node) - Constructor for class net.corda.node.internal.APIServerImpl
    +
    APIServerImpl(rpcOps) - Constructor for class net.corda.node.webserver.internal.APIServerImpl
     
    ApiUtils - Class in net.corda.core.utilities
    @@ -587,12 +607,10 @@ zero or more nodes. Each advertising node has an associated consumer.
    ArtemisMessagingServer.Companion - Class in net.corda.node.services.messaging
     
    +
    ArtemisTestKt - Class in net.corda.node
    +
     
    asPeer(peerIdentity, hostAndPort) - Method in class net.corda.node.services.messaging.NodeAddress.Companion
     
    -
    assembleProposal(stateRef, modification, stx) - Method in class net.corda.flows.AbstractStateReplacementFlow.Instigator
    -
     
    -
    assembleProposal(stateRef, modification, stx) - Method in class net.corda.flows.NotaryChangeFlow.Instigator
    -
     
    assembleSharedTX(handshake) - Method in class net.corda.flows.TwoPartyDealFlow.Acceptor
     
    assembleSharedTX(handshake) - Method in class net.corda.flows.TwoPartyDealFlow.Secondary
    @@ -650,11 +668,11 @@ of how attachments are meant to be used include: contain public static data which can be referenced from transactions and utilised from contracts. Good examples of how attachments are meant to be used include: -
    AttachmentDownloadServlet - Class in net.corda.node.servlets
    +
    AttachmentDownloadServlet - Class in net.corda.node.webserver.servlets
    Allows the node administrator to either download full attachment zips, or individual files within those zips.
    -
    AttachmentDownloadServlet() - Constructor for class net.corda.node.servlets.AttachmentDownloadServlet
    +
    AttachmentDownloadServlet() - Constructor for class net.corda.node.webserver.servlets.AttachmentDownloadServlet
    Allows the node administrator to either download full attachment zips, or individual files within those zips.
    @@ -709,8 +727,6 @@ used in demos or testing. This will substitute a Fiber compatible Future so the

    B

    -
    BadAnswer() - Constructor for exception net.corda.flows.FetchDataFlow.BadAnswer
    -
     
    BaseTransaction - Class in net.corda.core.transactions
    An abstract class defining fields shared by all transaction types in the system.
    @@ -827,18 +843,6 @@ and adds the list of participants to the signers set for every input state.
    Construction of filtered transaction with Partial Merkle Tree.
    -
    buildTransaction(type, steps) - Method in interface net.corda.node.api.APIServer
    -
    -
    TransactionBuildSteps would be invocations of contract.generateXXX() methods that all share a common TransactionBuilder -and a common contract type (e.g. Cash or CommercialPaper) -which would automatically be passed as the first argument (we'd need that to be a criteria/pattern of the generateXXX methods).
    -
    -
    buildTransaction(type, steps) - Method in class net.corda.node.internal.APIServerImpl
    -
    -
    TransactionBuildSteps would be invocations of contract.generateXXX() methods that all share a common TransactionBuilder -and a common contract type (e.g. Cash or CommercialPaper) -which would automatically be passed as the first argument (we'd need that to be a criteria/pattern of the generateXXX methods).
    -
    BusinessCalendar - Class in net.corda.core.contracts
    A business calendar performs date calculations that take into account national holidays and weekends. This is a @@ -893,6 +897,16 @@ no staff are around to handle problems.
     
    calculateRandomlySizedAmounts(howMuch, min, max, rng) - Static method in class net.corda.contracts.testing.VaultFiller
     
    +
    call() - Method in class com.cordatest.TGenesisFlow
    +
    +
    This is where you fill out your business logic. The returned object will usually be ignored, but can be +helpful if this flow is meant to be used as a subflow.
    +
    +
    call() - Method in class com.cordatest.TTxFlow
    +
    +
    This is where you fill out your business logic. The returned object will usually be ignored, but can be +helpful if this flow is meant to be used as a subflow.
    +
    call() - Method in class net.corda.core.contracts.TransactionGraphSearch
     
    call() - Method in class net.corda.core.flows.FlowLogic
    @@ -1031,6 +1045,10 @@ the same transaction.
    Pay cash to someone else.
    +
    CashException - Exception in net.corda.flows
    +
     
    +
    CashException(message, cause) - Constructor for exception net.corda.flows.CashException
    +
     
    CashFlow - Class in net.corda.flows
    Initiates a flow that produces an Issue/Move or Exit Cash transaction.
    @@ -1043,15 +1061,6 @@ the same transaction.
     
    CashFlow.Companion - Class in net.corda.flows
     
    -
    CashFlowResult - Class in net.corda.flows
    -
     
    -
    CashFlowResult.Failed - Class in net.corda.flows
    -
    -
    State indicating the action undertaken failed, either directly (it is not something which requires a -state machine), or before a state machine was started.
    -
    -
    CashFlowResult.Success - Class in net.corda.flows
    -
     
    CashKt - Class in net.corda.contracts.asset
     
    CashSchema - Class in net.corda.schemas
    @@ -1290,6 +1299,10 @@ timestamp is correct and none of its inputs have been used in another completed
    Client(stx) - Constructor for class net.corda.flows.NotaryFlow.Client
     
    +
    Client - Class in net.corda.node
    +
     
    +
    Client(serverHostAndPort) - Constructor for class net.corda.node.Client
    +
     
    Client.Companion - Class in net.corda.flows
     
    ClientRPCRequestMessage - Class in net.corda.node.services.messaging
    @@ -1314,7 +1327,7 @@ timestamp is correct and none of its inputs have been used in another completed
     
    CmdLineOptions - Class in net.corda.node
     
    -
    CmdLineOptions(baseDirectory, configFile, help, logToConsole) - Constructor for class net.corda.node.CmdLineOptions
    +
    CmdLineOptions(baseDirectory, configFile, help, logToConsole, isWebserver) - Constructor for class net.corda.node.CmdLineOptions
     
    CODE_BAG_OF_CASH - Static variable in class net.corda.core.utilities.Emoji
     
    @@ -1334,6 +1347,8 @@ timestamp is correct and none of its inputs have been used in another completed
     
    CODE_SANTA_CLAUS - Static variable in class net.corda.core.utilities.Emoji
     
    +
    com.cordatest - package com.cordatest
    +
     
    combine(other1, function) - Method in class net.corda.client.mock.Generator
     
    combine(other1, other2, function) - Method in class net.corda.client.mock.Generator
    @@ -1512,16 +1527,6 @@ as it stood at the time of writing.
    Commits all input states of the given transaction
    -
    commitTransaction(tx, signatures) - Method in interface net.corda.node.api.APIServer
    -
    -
    Attempt to commit transaction (returned from build transaction) with the necessary signatures for that to be -successful, otherwise exception is thrown.
    -
    -
    commitTransaction(tx, signatures) - Method in class net.corda.node.internal.APIServerImpl
    -
    -
    Attempt to commit transaction (returned from build transaction) with the necessary signatures for that to be -successful, otherwise exception is thrown.
    -
    Commodity - Class in net.corda.core.contracts
    Class representing a commodity, as an equivalent to the Currency class. This exists purely to enable the @@ -1628,8 +1633,6 @@ internal accounting by the issuer (it might be, for example, a warehouse and/or
     
    Companion - Static variable in class net.corda.flows.AbstractStateReplacementFlow.Instigator
     
    -
    Companion - Static variable in class net.corda.flows.AbstractStateReplacementFlow.Result
    -
     
    Companion - Static variable in class net.corda.flows.CashFlow
     
    Companion - Static variable in class net.corda.flows.FinalityFlow
    @@ -1646,8 +1649,6 @@ internal accounting by the issuer (it might be, for example, a warehouse and/or
     
    Companion - Static variable in class net.corda.flows.TwoPartyTradeFlow.Seller
     
    -
    Companion - Static variable in interface net.corda.node.api.StatesQuery
    -
     
    Companion - Static variable in class net.corda.node.driver.DriverDSL
     
    Companion - Static variable in class net.corda.node.internal.AbstractNode
    @@ -1678,8 +1679,6 @@ internal accounting by the issuer (it might be, for example, a warehouse and/or
     
    Companion - Static variable in interface net.corda.node.services.network.NetworkMapService
     
    -
    Companion - Static variable in class net.corda.node.services.persistence.DataVending.Service
    -
     
    Companion - Static variable in class net.corda.node.services.schema.HibernateObserver
     
    Companion - Static variable in class net.corda.node.services.statemachine.FlowStateMachineImpl
    @@ -1710,6 +1709,10 @@ internal accounting by the issuer (it might be, for example, a warehouse and/or
     
    Companion - Static variable in class net.corda.node.utilities.StrandLocalTransactionManager
     
    +
    Companion - Static variable in interface net.corda.node.webserver.api.StatesQuery
    +
     
    +
    Companion - Static variable in class net.corda.node.webserver.WebServer
    +
     
    Companion.APPROVING - Class in net.corda.flows
     
    Companion.AWAITING_PROPOSAL - Class in net.corda.flows
    @@ -1744,8 +1747,6 @@ internal accounting by the issuer (it might be, for example, a warehouse and/or
     
    Companion.RECORDING - Class in net.corda.flows
     
    -
    Companion.REJECTING - Class in net.corda.flows
    -
     
    Companion.REQUESTING - Class in net.corda.flows
     
    Companion.RUNNING - Class in net.corda.node.services.events
    @@ -1908,8 +1909,6 @@ internal accounting by the issuer (it might be, for example, a warehouse and/or
     
    component1($receiver) - Static method in class net.corda.core.crypto.CryptoUtilities
     
    -
    component1() - Method in class net.corda.core.crypto.Party
    -
     
    component1() - Method in class net.corda.core.crypto.X509Utilities.CACertAndKey
     
    component1() - Method in class net.corda.core.ErrorOr
    @@ -1950,7 +1949,7 @@ internal accounting by the issuer (it might be, for example, a warehouse and/or
     
    component1() - Method in class net.corda.core.utilities.TimeWindow
     
    -
    component1() - Method in class net.corda.flows.AbstractStateReplacementFlow.Result
    +
    component1() - Method in class net.corda.flows.AbstractStateReplacementFlow.Proposal
     
    component1() - Method in class net.corda.flows.BroadcastTransactionFlow.NotifyTxRequest
     
    @@ -1960,8 +1959,6 @@ internal accounting by the issuer (it might be, for example, a warehouse and/or
     
    component1() - Method in class net.corda.flows.IssuerFlow.IssuanceRequestState
     
    -
    component1() - Method in class net.corda.flows.NotaryChangeFlow.Proposal
    -
     
    component1() - Method in class net.corda.flows.NotaryFlow.SignRequest
     
    component1() - Method in class net.corda.flows.TwoPartyDealFlow.AutoOffer
    @@ -1972,22 +1969,6 @@ internal accounting by the issuer (it might be, for example, a warehouse and/or
     
    component1() - Method in class net.corda.flows.TwoPartyTradeFlow.SignaturesFromSeller
     
    -
    component1() - Method in class net.corda.node.api.ContractClassRef
    -
     
    -
    component1() - Method in class net.corda.node.api.ContractLedgerRef
    -
     
    -
    component1() - Method in class net.corda.node.api.FlowClassRef
    -
     
    -
    component1() - Method in class net.corda.node.api.FlowInstanceRef
    -
     
    -
    component1() - Method in class net.corda.node.api.FlowRequiringAttention
    -
     
    -
    component1() - Method in class net.corda.node.api.Criteria.Deal
    -
     
    -
    component1() - Method in class net.corda.node.api.StatesQuery.Selection
    -
     
    -
    component1() - Method in class net.corda.node.api.TransactionBuildStep
    -
     
    component1() - Method in class net.corda.node.CmdLineOptions
     
    component1() - Method in class net.corda.node.driver.NodeHandle
    @@ -2056,6 +2037,10 @@ internal accounting by the issuer (it might be, for example, a warehouse and/or
     
    component1() - Method in class net.corda.node.utilities.TxnNoteColumns
     
    +
    component1() - Method in class net.corda.node.webserver.api.Criteria.Deal
    +
     
    +
    component1() - Method in class net.corda.node.webserver.api.StatesQuery.Selection
    +
     
    component2() - Method in class net.corda.client.model.Diff
     
    component2() - Method in class net.corda.client.model.GatheredTransactionData
    @@ -2140,8 +2125,6 @@ internal accounting by the issuer (it might be, for example, a warehouse and/or
     
    component2($receiver) - Static method in class net.corda.core.crypto.CryptoUtilities
     
    -
    component2() - Method in class net.corda.core.crypto.Party
    -
     
    component2() - Method in class net.corda.core.crypto.X509Utilities.CACertAndKey
     
    component2() - Method in class net.corda.core.ErrorOr
    @@ -2176,14 +2159,12 @@ internal accounting by the issuer (it might be, for example, a warehouse and/or
     
    component2() - Method in class net.corda.core.utilities.TimeWindow
     
    -
    component2() - Method in class net.corda.flows.AbstractStateReplacementFlow.Result
    +
    component2() - Method in class net.corda.flows.AbstractStateReplacementFlow.Proposal
     
    component2() - Method in class net.corda.flows.FetchDataFlow.Result
     
    component2() - Method in class net.corda.flows.IssuerFlow.IssuanceRequestState
     
    -
    component2() - Method in class net.corda.flows.NotaryChangeFlow.Proposal
    -
     
    component2() - Method in class net.corda.flows.TwoPartyDealFlow.AutoOffer
     
    component2() - Method in class net.corda.flows.TwoPartyDealFlow.Handshake
    @@ -2192,12 +2173,6 @@ internal accounting by the issuer (it might be, for example, a warehouse and/or
     
    component2() - Method in class net.corda.flows.TwoPartyTradeFlow.SignaturesFromSeller
     
    -
    component2() - Method in class net.corda.node.api.FlowInstanceRef
    -
     
    -
    component2() - Method in class net.corda.node.api.FlowRequiringAttention
    -
     
    -
    component2() - Method in class net.corda.node.api.TransactionBuildStep
    -
     
    component2() - Method in class net.corda.node.CmdLineOptions
     
    component2() - Method in class net.corda.node.driver.NodeHandle
    @@ -2234,6 +2209,8 @@ internal accounting by the issuer (it might be, for example, a warehouse and/or
     
    component2() - Method in class net.corda.node.services.statemachine.SessionData
     
    +
    component2() - Method in class net.corda.node.services.statemachine.SessionEnd
    +
     
    component2() - Method in class net.corda.node.services.statemachine.SessionInit
     
    component2() - Method in class net.corda.node.services.statemachine.SessionReject
    @@ -2288,16 +2265,12 @@ internal accounting by the issuer (it might be, for example, a warehouse and/or
     
    component3() - Method in class net.corda.core.transactions.SignedTransaction
     
    +
    component3() - Method in class net.corda.flows.AbstractStateReplacementFlow.Proposal
    +
     
    component3() - Method in class net.corda.flows.IssuerFlow.IssuanceRequestState
     
    -
    component3() - Method in class net.corda.flows.NotaryChangeFlow.Proposal
    -
     
    component3() - Method in class net.corda.flows.TwoPartyTradeFlow.SellerTradeInfo
     
    -
    component3() - Method in class net.corda.node.api.FlowInstanceRef
    -
     
    -
    component3() - Method in class net.corda.node.api.FlowRequiringAttention
    -
     
    component3() - Method in class net.corda.node.CmdLineOptions
     
    component3() - Method in class net.corda.node.driver.NodeHandle
    @@ -2328,10 +2301,10 @@ internal accounting by the issuer (it might be, for example, a warehouse and/or
     
    component4() - Method in class net.corda.core.node.NodeInfo
     
    -
    component4() - Method in class net.corda.node.api.FlowRequiringAttention
    -
     
    component4() - Method in class net.corda.node.CmdLineOptions
     
    +
    component4() - Method in class net.corda.node.driver.NodeHandle
    +
     
    component4() - Method in class net.corda.node.services.messaging.ClientRPCRequestMessage
     
    component4() - Method in class net.corda.node.services.statemachine.StateMachineManager.FlowSession
    @@ -2342,8 +2315,12 @@ internal accounting by the issuer (it might be, for example, a warehouse and/or
    component5() - Method in class net.corda.core.contracts.TransactionForContract
     
    +
    component5() - Method in class net.corda.node.CmdLineOptions
    +
     
    component5() - Method in class net.corda.node.services.messaging.ClientRPCRequestMessage
     
    +
    component5() - Method in class net.corda.node.services.statemachine.StateMachineManager.FlowSession
    +
     
    component6() - Method in class net.corda.core.contracts.TransactionForContract
     
    component7() - Method in class net.corda.core.contracts.TransactionForContract
    @@ -2410,16 +2387,6 @@ is propagated as expected.
    class ConcatenatedList takes a list of lists and concatenates them. Any change to the underlying lists or the outer list is propagated as expected.
    -
    Config - Class in net.corda.node.servlets
    -
    -
    Primary purpose is to install Kotlin extensions for Jackson ObjectMapper so data classes work -and to organise serializers / deserializers for java.time.* classes as necessary.
    -
    -
    Config(services) - Constructor for class net.corda.node.servlets.Config
    -
    -
    Primary purpose is to install Kotlin extensions for Jackson ObjectMapper so data classes work -and to organise serializers / deserializers for java.time.* classes as necessary.
    -
    ConfigHelper - Class in net.corda.node.services.config
     
    ConfigurationException - Exception in net.corda.node.internal
    @@ -2439,14 +2406,22 @@ the CA certs in Node resources. Then provision KeyStores into certificates folde
    ConfigUtilities - Class in net.corda.node.services.config
     
    +
    ConfigUtilsKt - Class in net.corda.node.utilities
    +
     
    Conflict(stateHistory) - Constructor for class net.corda.core.node.services.UniquenessProvider.Conflict
    Specifies the consuming transaction for every conflicting state
    Conflict(tx, conflict) - Constructor for class net.corda.flows.NotaryError.Conflict
     
    +
    ConnectionDirection - Class in net.corda.node
    +
     
    +
    ConnectionDirection.Inbound - Class in net.corda.node
    +
     
    ConnectionDirection.Inbound - Class in net.corda.node.services.messaging
     
    +
    ConnectionDirection.Outbound - Class in net.corda.node
    +
     
    ConnectionDirection.Outbound - Class in net.corda.node.services.messaging
     
    ConserveAmount() - Constructor for class net.corda.contracts.asset.Clauses.ConserveAmount
    @@ -2497,18 +2472,6 @@ every LedgerTransaction they see on the network, for every input transaction for it to be accepted: failure of any aborts the entire thing. The time is taken from a trusted timestamp attached to the transaction itself i.e. it is NOT necessarily the current time. -
    ContractClassRef - Class in net.corda.node.api
    -
     
    -
    ContractClassRef(className) - Constructor for class net.corda.node.api.ContractClassRef
    -
     
    -
    ContractDefRef - Interface in net.corda.node.api
    -
    -
    Encapsulates the contract type. e.g. Cash or CommercialPaper etc.
    -
    -
    ContractLedgerRef - Class in net.corda.node.api
    -
     
    -
    ContractLedgerRef(hash) - Constructor for class net.corda.node.api.ContractLedgerRef
    -
     
    ContractRejection(tx, contract, cause) - Constructor for exception net.corda.core.contracts.TransactionVerificationException.ContractRejection
     
    ContractsDSL - Class in net.corda.core.contracts
    @@ -2770,13 +2733,6 @@ This is the definitive state that is stored on the ledger and used in transactio external ID. Equality and comparison are based on the unique ID only; if two states somehow have the same UUID but different external IDs, it would indicate a problem with handling of IDs. -
    copy(name, owningKey) - Method in class net.corda.core.crypto.Party
    -
    -
    The class Party class represents an entity on the network, which is typically identified by a legal name and public key -that it can sign transactions under. As parties may use multiple keys for signing and, for example, have offline backup -keys, the "public key" of a party is represented by a composite construct – a class CompositeKey, which combines multiple -cryptographic public key primitives into a tree structure.
    -
    copy(certificate, keyPair) - Method in class net.corda.core.crypto.X509Utilities.CACertAndKey
    Helper data class to pass around public certificate and KeyPair entities when using CA certs.
    @@ -2875,7 +2831,7 @@ A transaction ID should be the hash of the A class representing a window in time from a particular instant, lasting a specified duration.
    -
    copy(sig, error) - Method in class net.corda.flows.AbstractStateReplacementFlow.Result
    +
    copy(stateRef, modification, stx) - Method in class net.corda.flows.AbstractStateReplacementFlow.Proposal
     
    copy(tx) - Method in class net.corda.flows.BroadcastTransactionFlow.NotifyTxRequest
     
    @@ -2885,8 +2841,6 @@ A transaction ID should be the hash of the copy(amount, issueToParty, issuerPartyRef) - Method in class net.corda.flows.IssuerFlow.IssuanceRequestState
     
    -
    copy(stateRef, modification, stx) - Method in class net.corda.flows.NotaryChangeFlow.Proposal
    -
     
    copy(tx) - Method in class net.corda.flows.NotaryFlow.SignRequest
     
    copy(notary, dealBeingOffered) - Method in class net.corda.flows.TwoPartyDealFlow.AutoOffer
    @@ -2897,29 +2851,9 @@ A transaction ID should be the hash of the copy(sellerSig, notarySig) - Method in class net.corda.flows.TwoPartyTradeFlow.SignaturesFromSeller
     
    -
    copy(className) - Method in class net.corda.node.api.ContractClassRef
    +
    copy(baseDirectory, configFile, help, logToConsole, isWebserver) - Method in class net.corda.node.CmdLineOptions
     
    -
    copy(hash) - Method in class net.corda.node.api.ContractLedgerRef
    -
     
    -
    copy(className) - Method in class net.corda.node.api.FlowClassRef
    -
     
    -
    copy(flowInstance, flowClass, flowStepId) - Method in class net.corda.node.api.FlowInstanceRef
    -
     
    -
    copy(ref, prompt, choiceIdsToMessages, dueBy) - Method in class net.corda.node.api.FlowRequiringAttention
    -
    -
    Thinking that Instant is OK for short lived flow deadlines.
    -
    -
    copy(ref) - Method in class net.corda.node.api.Criteria.Deal
    -
     
    -
    copy(criteria) - Method in class net.corda.node.api.StatesQuery.Selection
    -
     
    -
    copy(generateMethodName, args) - Method in class net.corda.node.api.TransactionBuildStep
    -
    -
    Encapsulate a generateXXX method call on a contract.
    -
    -
    copy(baseDirectory, configFile, help, logToConsole) - Method in class net.corda.node.CmdLineOptions
    -
     
    -
    copy(nodeInfo, configuration, process) - Method in class net.corda.node.driver.NodeHandle
    +
    copy(nodeInfo, rpc, configuration, process) - Method in class net.corda.node.driver.NodeHandle
     
    copy(address, legalName) - Method in class net.corda.node.internal.NetworkMapInfo
     
    @@ -2980,7 +2914,7 @@ zero or more nodes. Each advertising node has an associated consumer.
     
    copy(recipientSessionId, payload) - Method in class net.corda.node.services.statemachine.SessionData
     
    -
    copy(recipientSessionId) - Method in class net.corda.node.services.statemachine.SessionEnd
    +
    copy(recipientSessionId, errorResponse) - Method in class net.corda.node.services.statemachine.SessionEnd
     
    copy(initiatorSessionId, flowName, firstPayload) - Method in class net.corda.node.services.statemachine.SessionInit
     
    @@ -2988,7 +2922,7 @@ zero or more nodes. Each advertising node has an associated consumer.
     
    copy(logic, addOrRemove, id) - Method in class net.corda.node.services.statemachine.StateMachineManager.Change
     
    -
    copy(flow, ourSessionId, state, waitingForResponse) - Method in class net.corda.node.services.statemachine.StateMachineManager.FlowSession
    +
    copy(flow, ourSessionId, initiatingParty, state, waitingForResponse) - Method in class net.corda.node.services.statemachine.StateMachineManager.FlowSession
     
    copy(username, password, permissions) - Method in class net.corda.node.services.User
     
    @@ -3000,6 +2934,10 @@ zero or more nodes. Each advertising node has an associated consumer.
     
    copy(txId, note) - Method in class net.corda.node.utilities.TxnNoteColumns
     
    +
    copy(ref) - Method in class net.corda.node.webserver.api.Criteria.Deal
    +
     
    +
    copy(criteria) - Method in class net.corda.node.webserver.api.StatesQuery.Selection
    +
     
    copyTo($receiver, target, options) - Static method in class net.corda.core.Utils
     
    Corda - Class in net.corda.node
    @@ -3024,7 +2962,7 @@ to extend a Corda node with additional application services.
    An RPC client connects to the specified server and allows you to make calls to the server that perform various useful tasks. See the documentation for proxy or review the docsite to learn more about how this API works.
    -
    CordaRPCClient(host, config) - Constructor for class net.corda.node.services.messaging.CordaRPCClient
    +
    CordaRPCClient(host, config, serviceConfigurationOverride) - Constructor for class net.corda.node.services.messaging.CordaRPCClient
    An RPC client connects to the specified server and allows you to make calls to the server that perform various useful tasks. See the documentation for proxy or review the docsite to learn more about how this API works.
    @@ -3087,7 +3025,7 @@ Normally this would be run once and then the outputs would be re-used repeatedly
     
    createDatabaseTransaction(db) - Static method in class net.corda.node.utilities.DatabaseSupportKt
     
    -
    createDefaultMapper(identities) - Method in class net.corda.node.utilities.JsonSupport
    +
    createDefaultMapper(rpc) - Method in class net.corda.node.utilities.JsonSupport
     
    createDirectories($receiver, attrs) - Static method in class net.corda.core.Utils
     
    @@ -3113,6 +3051,8 @@ Normally this would be run once and then the outputs would be re-used repeatedly
    Calculates an event schedule that moves events around to ensure they fall on working days.
    +
    createInMemoryMapper(identityService) - Method in class net.corda.node.utilities.JsonSupport
    +
     
    createIntermediateCert(domain, certificateAuthority) - Method in class net.corda.core.crypto.X509Utilities
    Create a de novo root intermediate X509 v3 CA cert and KeyPair.
    @@ -3149,6 +3089,8 @@ Normally this would be run once and then the outputs would be re-used repeatedly
     
    createNodeDir() - Method in class net.corda.node.internal.AbstractNode
     
    +
    createNonRpcMapper() - Method in class net.corda.node.utilities.JsonSupport
    +
     
    createRandom() - Method in class net.corda.core.flows.StateMachineRunId.Companion
     
    createRPCKryo(observableSerializer) - Static method in class net.corda.node.services.messaging.RPCStructures
    @@ -3163,9 +3105,9 @@ Normally this would be run once and then the outputs would be re-used repeatedly
    createStreamFromStateMachineInfo(stateMachine) - Method in class net.corda.client.model.ProgressTrackingEvent.Companion
     
    -
    Criteria.AllDeals - Class in net.corda.node.api
    +
    Criteria.AllDeals - Class in net.corda.node.webserver.api
     
    -
    Criteria.Deal - Class in net.corda.node.api
    +
    Criteria.Deal - Class in net.corda.node.webserver.api
     
    CryptoUtilities - Class in net.corda.core.crypto
     
    @@ -3196,11 +3138,11 @@ permissions they're entitled to which can be used to control access.
    currentNodeTime() - Method in interface net.corda.core.messaging.CordaRPCOps
    -
    Returns the node-local current time.
    +
    Returns the node's current time.
    currentNodeTime() - Method in class net.corda.node.internal.CordaRPCOpsImpl
    -
    Returns the node-local current time.
    +
    Returns the node's current time.
    currentOrNull() - Method in class net.corda.node.utilities.StrandLocalTransactionManager
     
    @@ -3222,11 +3164,11 @@ permissions they're entitled to which can be used to control access.
     
    databaseTransaction(db, statement) - Static method in class net.corda.node.utilities.DatabaseSupportKt
     
    -
    DataUploadServlet - Class in net.corda.node.servlets
    +
    DataUploadServlet - Class in net.corda.node.webserver.servlets
    Accepts binary streams, finds the right interface AcceptsFileUpload implementor and hands the stream off to it.
    -
    DataUploadServlet() - Constructor for class net.corda.node.servlets.DataUploadServlet
    +
    DataUploadServlet() - Constructor for class net.corda.node.webserver.servlets.DataUploadServlet
    Accepts binary streams, finds the right interface AcceptsFileUpload implementor and hands the stream off to it.
    @@ -3327,7 +3269,7 @@ in the toString lest some people get confused.
     
    DeadlineExceeded(rpcName) - Constructor for exception net.corda.node.services.messaging.RPCException.DeadlineExceeded
     
    -
    Deal(ref) - Constructor for class net.corda.node.api.Criteria.Deal
    +
    Deal(ref) - Constructor for class net.corda.node.webserver.api.Criteria.Deal
     
    DealMismatchException(expectedDeal, actualDeal) - Constructor for exception net.corda.flows.TwoPartyDealFlow.DealMismatchException
     
    @@ -3464,13 +3406,13 @@ across a Copycat Raft cluster.
    Allows you to write code like: Paths.get("someDir") / "subdir" / "filename" but using the Paths API to avoid platform separator problems.
    -
    doGet(req, resp) - Method in class net.corda.node.servlets.AttachmentDownloadServlet
    +
    doGet(req, resp) - Method in class net.corda.node.webserver.servlets.AttachmentDownloadServlet
     
    DOLLARS(amount) - Static method in class net.corda.core.contracts.ContractsDSL
     
    DOLLARS(amount) - Static method in class net.corda.core.contracts.ContractsDSL
     
    -
    doPost(req, resp) - Method in class net.corda.node.servlets.DataUploadServlet
    +
    doPost(req, resp) - Method in class net.corda.node.webserver.servlets.DataUploadServlet
     
    double($receiver) - Static method in class net.corda.client.mock.GeneratorKt
     
    @@ -3478,6 +3420,8 @@ across a Copycat Raft cluster.
     
    DownloadedVsRequestedDataMismatch(requested, got) - Constructor for exception net.corda.flows.FetchDataFlow.DownloadedVsRequestedDataMismatch
     
    +
    DownloadedVsRequestedSizeMismatch(requested, got) - Constructor for exception net.corda.flows.FetchDataFlow.DownloadedVsRequestedSizeMismatch
    +
     
    Driver - Class in net.corda.node.driver
     
    driver(isDebug, driverDirectory, portAllocation, debugPortAllocation, useTestClock, dsl) - Static method in class net.corda.node.driver.Driver
    @@ -3749,8 +3693,10 @@ you want hard-coded private keys.
     
    equals(other) - Method in class net.corda.core.crypto.DummyPublicKey
     
    -
    equals(p) - Method in class net.corda.core.crypto.Party
    -
     
    +
    equals(other) - Method in class net.corda.core.crypto.Party
    +
    +
    Anonymised parties do not include any detail apart from owning key, so equality is dependent solely on the key
    +
    equals(p) - Method in class net.corda.core.crypto.X509Utilities.CACertAndKey
     
    equals(p) - Method in class net.corda.core.ErrorOr
    @@ -3809,7 +3755,7 @@ you want hard-coded private keys.
     
    equals(p) - Method in class net.corda.core.utilities.TimeWindow
     
    -
    equals(p) - Method in class net.corda.flows.AbstractStateReplacementFlow.Result
    +
    equals(p) - Method in class net.corda.flows.AbstractStateReplacementFlow.Proposal
     
    equals(p) - Method in class net.corda.flows.BroadcastTransactionFlow.NotifyTxRequest
     
    @@ -3819,8 +3765,6 @@ you want hard-coded private keys.
     
    equals(p) - Method in class net.corda.flows.IssuerFlow.IssuanceRequestState
     
    -
    equals(p) - Method in class net.corda.flows.NotaryChangeFlow.Proposal
    -
     
    equals(p) - Method in class net.corda.flows.NotaryFlow.SignRequest
     
    equals(p) - Method in class net.corda.flows.TwoPartyDealFlow.AutoOffer
    @@ -3831,22 +3775,6 @@ you want hard-coded private keys.
     
    equals(p) - Method in class net.corda.flows.TwoPartyTradeFlow.SignaturesFromSeller
     
    -
    equals(p) - Method in class net.corda.node.api.ContractClassRef
    -
     
    -
    equals(p) - Method in class net.corda.node.api.ContractLedgerRef
    -
     
    -
    equals(p) - Method in class net.corda.node.api.FlowClassRef
    -
     
    -
    equals(p) - Method in class net.corda.node.api.FlowInstanceRef
    -
     
    -
    equals(p) - Method in class net.corda.node.api.FlowRequiringAttention
    -
     
    -
    equals(p) - Method in class net.corda.node.api.Criteria.Deal
    -
     
    -
    equals(p) - Method in class net.corda.node.api.StatesQuery.Selection
    -
     
    -
    equals(p) - Method in class net.corda.node.api.TransactionBuildStep
    -
     
    equals(p) - Method in class net.corda.node.CmdLineOptions
     
    equals(p) - Method in class net.corda.node.driver.NodeHandle
    @@ -3917,7 +3845,9 @@ you want hard-coded private keys.
     
    equals(p) - Method in class net.corda.node.utilities.TxnNoteColumns
     
    -
    Error(error) - Constructor for class net.corda.flows.Result.Error
    +
    equals(p) - Method in class net.corda.node.webserver.api.Criteria.Deal
    +
     
    +
    equals(p) - Method in class net.corda.node.webserver.api.StatesQuery.Selection
     
    ErrorOr<A> - Class in net.corda.core
    @@ -4062,11 +3992,6 @@ either settlement outside of the ledger, or that the obligor is unable to pay. 
    Failed(message) - Constructor for class net.corda.client.model.TransactionCreateStatus.Failed
     
    -
    Failed(message) - Constructor for class net.corda.flows.CashFlowResult.Failed
    -
    -
    State indicating the action undertaken failed, either directly (it is not something which requires a -state machine), or before a state machine was started.
    -
    failure($receiver, executor, body) - Static method in class net.corda.core.Utils
     
    failure($receiver, body) - Static method in class net.corda.core.Utils
    @@ -4093,24 +4018,16 @@ attachments are saved to local storage automatically.
    An abstract flow for fetching typed data from a remote peer.
    -
    FetchDataFlow.BadAnswer - Exception in net.corda.flows
    -
     
    FetchDataFlow.DownloadedVsRequestedDataMismatch - Exception in net.corda.flows
     
    +
    FetchDataFlow.DownloadedVsRequestedSizeMismatch - Exception in net.corda.flows
    +
     
    FetchDataFlow.HashNotFound - Exception in net.corda.flows
     
    FetchDataFlow.Request - Class in net.corda.flows
     
    FetchDataFlow.Result<T extends NamedByHash> - Class in net.corda.flows
     
    -
    fetchFlowsRequiringAttention(query) - Method in interface net.corda.node.api.APIServer
    -
    -
    Fetch flows that require a response to some prompt/question by a human (on the "bank" side).
    -
    -
    fetchFlowsRequiringAttention(query) - Method in class net.corda.node.internal.APIServerImpl
    -
    -
    Fetch flows that require a response to some prompt/question by a human (on the "bank" side).
    -
    fetchFrom($this, fetcher) - Static method in class net.corda.node.utilities.AffinityExecutor.DefaultImpls
    Runs the given function on the executor, blocking until the result is available. Be careful not to deadlock this @@ -4135,18 +4052,6 @@ way! Make sure the executor can't possibly be waiting for the calling thread. 
    FetchMapResponse(nodes, version) - Constructor for class net.corda.node.services.network.NetworkMapService.FetchMapResponse
     
    -
    fetchStates(states) - Method in interface net.corda.node.api.APIServer
    -
     
    -
    fetchStates(states) - Method in class net.corda.node.internal.APIServerImpl
    -
     
    -
    fetchTransactions(txs) - Method in interface net.corda.node.api.APIServer
    -
    -
    Query for immutable transactions (results can be cached indefinitely by their id/hash).
    -
    -
    fetchTransactions(txs) - Method in class net.corda.node.internal.APIServerImpl
    -
    -
    Query for immutable transactions (results can be cached indefinitely by their id/hash).
    -
    FetchTransactionsFlow - Class in net.corda.flows
    Given a set of tx hashes (IDs), either loads them from local disk or asks the remote peer to provide them.
    @@ -4165,6 +4070,10 @@ way! Make sure the executor can't possibly be waiting for the calling thread.
    FiberScheduler() - Constructor for class net.corda.node.services.statemachine.StateMachineManager.FiberScheduler
     
    +
    FileUploader - Interface in net.corda.core.node.services
    +
    +
    An interface that denotes a service that can accept file uploads.
    +
    fillWithSomeTestCash($receiver, howMuch, outputNotary, atLeastThisManyStates, atMostThisManyStates, rng, ref, ownedBy, issuedBy, issuerKey) - Static method in class net.corda.contracts.testing.VaultFiller
    Creates a random set of between (by default) 3 and 10 cash states that add up to the given amount and adds them @@ -4178,7 +4087,7 @@ val filterCriterion: ObservableValue = (..) val people: ObservableList = (..) fun filterFunction(filterCriterion: FilterCriterion): (Person) -> Boolean { .. }
    -
    filter(requestContext, responseContext) - Method in class net.corda.node.servlets.ResponseFilter
    +
    filter(requestContext, responseContext) - Method in class net.corda.node.webserver.servlets.ResponseFilter
     
    FilteredLeaves - Class in net.corda.core.transactions
    @@ -4332,14 +4241,34 @@ are reflected in the exposed list as expected. propagate a change and if the listener closure captures the index at the time of the call to ObservableValue.addListener it will become incorrect if the indices shift around later.
    -
    FlowClassRef - Class in net.corda.node.api
    -
     
    -
    FlowClassRef(className) - Constructor for class net.corda.node.api.FlowClassRef
    -
     
    FlowException - Exception in net.corda.core.flows
    -
     
    +
    +
    Exception which can be thrown by a class FlowLogic at any point in its logic to unexpectedly bring it to a permanent end. +The exception will propagate to all counterparty flows and will be thrown on their end the next time they wait on a +FlowLogic.receive or FlowLogic.sendAndReceive. Any flow which no longer needs to do a receive, or has already ended, +will not receive the exception (if this is required then have them wait for a confirmation message).
    +
    +
    FlowException(message, cause) - Constructor for exception net.corda.core.flows.FlowException
    +
    +
    Exception which can be thrown by a class FlowLogic at any point in its logic to unexpectedly bring it to a permanent end. +The exception will propagate to all counterparty flows and will be thrown on their end the next time they wait on a +FlowLogic.receive or FlowLogic.sendAndReceive. Any flow which no longer needs to do a receive, or has already ended, +will not receive the exception (if this is required then have them wait for a confirmation message).
    +
    FlowException(message) - Constructor for exception net.corda.core.flows.FlowException
    -
     
    +
    +
    Exception which can be thrown by a class FlowLogic at any point in its logic to unexpectedly bring it to a permanent end. +The exception will propagate to all counterparty flows and will be thrown on their end the next time they wait on a +FlowLogic.receive or FlowLogic.sendAndReceive. Any flow which no longer needs to do a receive, or has already ended, +will not receive the exception (if this is required then have them wait for a confirmation message).
    +
    +
    FlowException() - Constructor for exception net.corda.core.flows.FlowException
    +
    +
    Exception which can be thrown by a class FlowLogic at any point in its logic to unexpectedly bring it to a permanent end. +The exception will propagate to all counterparty flows and will be thrown on their end the next time they wait on a +FlowLogic.receive or FlowLogic.sendAndReceive. Any flow which no longer needs to do a receive, or has already ended, +will not receive the exception (if this is required then have them wait for a confirmation message).
    +
    FlowHandle<A> - Class in net.corda.core.messaging
    class FlowHandle is a serialisable handle for the started flow, parameterised by the type of the flow's return value.
    @@ -4348,10 +4277,6 @@ ObservableValue.addListener it will become incorrect if the indices shift around
    class FlowHandle is a serialisable handle for the started flow, parameterised by the type of the flow's return value.
    -
    FlowInstanceRef - Class in net.corda.node.api
    -
     
    -
    FlowInstanceRef(flowInstance, flowClass, flowStepId) - Constructor for class net.corda.node.api.FlowInstanceRef
    -
     
    FlowIORequest - Interface in net.corda.node.services.statemachine
     
    FlowLogic<T> - Class in net.corda.core.flows
    @@ -4382,19 +4307,11 @@ a node crash, how many instances of your flow there are running and so on.
    FlowLogicRefFactory() - Constructor for class net.corda.core.flows.FlowLogicRefFactory
     
    -
    FlowRef - Interface in net.corda.node.api
    -
    -
    Encapsulates the flow to be instantiated. e.g. TwoPartyTradeFlow.Buyer.
    -
    -
    FlowRequiringAttention - Class in net.corda.node.api
    -
    -
    Thinking that Instant is OK for short lived flow deadlines.
    -
    -
    FlowRequiringAttention(ref, prompt, choiceIdsToMessages, dueBy) - Constructor for class net.corda.node.api.FlowRequiringAttention
    -
    -
    Thinking that Instant is OK for short lived flow deadlines.
    -
    -
    FlowSession(flow, ourSessionId, state, waitingForResponse) - Constructor for class net.corda.node.services.statemachine.StateMachineManager.FlowSession
    +
    FlowSession(flow, ourSessionId, initiatingParty, state, waitingForResponse) - Constructor for class net.corda.node.services.statemachine.StateMachineManager.FlowSession
    +
     
    +
    FlowSessionException - Exception in net.corda.node.services.statemachine
    +
     
    +
    FlowSessionException(message) - Constructor for exception net.corda.node.services.statemachine.FlowSessionException
     
    FlowSessionState.Initiated - Class in net.corda.node.services.statemachine
     
    @@ -4763,14 +4680,6 @@ Note: an generateTransactionSignature(tx) - Method in interface net.corda.node.api.APIServer -
    -
    Generate a signature for this transaction signed by us.
    -
    -
    generateTransactionSignature(tx) - Method in class net.corda.node.internal.APIServerImpl
    -
    -
    Generate a signature for this transaction signed by us.
    -
    Generator<A> - Class in net.corda.client.mock
    This file defines a basic class Generator library for composing random generators of objects.
    @@ -4828,8 +4737,6 @@ class SomeOtherDSL(val driverDSL : DriverDSL) : DriverDSLInternalInterface by dr
     
    get_networkMapRegistrationFuture() - Method in class net.corda.node.internal.AbstractNode
     
    -
    get_servicesThatAcceptUploads() - Method in class net.corda.node.internal.AbstractNode
    -
     
    getAcceptableContracts() - Method in class net.corda.contracts.asset.Obligation.Terms
    The hash of the asset contract we
    @@ -4862,6 +4769,8 @@ class SomeOtherDSL(val driverDSL : DriverDSL) : DriverDSLInternalInterface by dr
     
    getAddress() - Method in class net.corda.node.internal.NetworkMapInfo
     
    +
    getAddress() - Method in class net.corda.node.webserver.WebServer
    +
     
    getAddressOfParty(partyInfo) - Method in interface net.corda.core.messaging.MessagingService
    Given information about either a specific node or a service returns its corresponding address
    @@ -4933,6 +4842,8 @@ Note that UNSTARTED is never counted, and DONE is only counted at the calling le
     
    getAmountMissing() - Method in exception net.corda.core.contracts.InsufficientBalanceException
     
    +
    getAMQ_DELAY() - Method in class net.corda.node.services.messaging.NodeMessagingClient.Companion
    +
     
    getAnnualCompoundCount() - Method in enum net.corda.core.contracts.Frequency
     
    getAnyNotary($this, type) - Static method in class net.corda.core.node.services.NetworkMapCache.DefaultImpls
    @@ -4947,14 +4858,10 @@ Note that UNSTARTED is never counted, and DONE is only counted at the calling le
    Returns a notary identity advertised by any of the nodes on the network (chosen at random)
    -
    getApi() - Method in class net.corda.node.internal.AbstractNode
    -
     
    getAppContext() - Method in class net.corda.core.flows.FlowLogicRef
     
    getArgs() - Method in class net.corda.core.flows.FlowLogicRef
     
    -
    getArgs() - Method in class net.corda.node.api.TransactionBuildStep
    -
     
    getArgs() - Method in class net.corda.node.services.messaging.ClientRPCRequestMessage
     
    getArtemisAddress() - Method in class net.corda.node.services.config.FullNodeConfiguration
    @@ -5009,6 +4916,8 @@ will not have any effect).
     
    getBankOfCordaIssueGenerator() - Method in class net.corda.client.mock.EventGenerator
     
    +
    getBaseDir() - Method in class net.corda.node.Server
    +
     
    getBaseDirectory() - Method in class net.corda.node.CmdLineOptions
     
    getBaseDirectory() - Method in class net.corda.node.services.config.FullNodeConfiguration
    @@ -5121,14 +5030,8 @@ which may change across restarts.
     
    getChildren() - Method in class net.corda.core.crypto.CompositeKey.Node
     
    -
    getChoiceIdsToMessages() - Method in class net.corda.node.api.FlowRequiringAttention
    -
     
    getClassLoader() - Method in class net.corda.core.flows.AppContext
     
    -
    getClassName() - Method in class net.corda.node.api.ContractClassRef
    -
     
    -
    getClassName() - Method in class net.corda.node.api.FlowClassRef
    -
     
    getClause() - Method in class net.corda.core.contracts.clauses.FilterOn
     
    getClause() - Method in class net.corda.core.contracts.clauses.GroupClauseVerifier
    @@ -5214,6 +5117,8 @@ which may change across restarts.
    getConfig() - Method in class net.corda.node.utilities.certsigning.CertificateSigner
     
    +
    getConfig() - Method in class net.corda.node.webserver.WebServer
    +
     
    getConfigFile() - Method in class net.corda.node.CmdLineOptions
     
    getConfiguration() - Method in class net.corda.node.driver.NodeHandle
    @@ -5242,10 +5147,16 @@ which may change across restarts.
     
    getConsumedGenerator() - Method in class net.corda.client.mock.EventGenerator
     
    +
    getConsumer() - Method in class net.corda.node.Client
    +
     
    getContent() - Method in class net.corda.core.ThreadBox
     
    -
    getContext(type) - Method in class net.corda.node.servlets.Config
    +
    getContext(type) - Method in class net.corda.node.webserver.servlets.ObjectMapperConfig
     
    +
    getContract() - Method in class com.cordatest.TTxState
    +
    +
    An instance of the contract class that will verify this state.
    +
    getContract() - Method in class net.corda.contracts.asset.Cash.State
    An instance of the contract class that will verify this state.
    @@ -5350,7 +5261,7 @@ but sells it for less, say $90. The paper can be redeemed for cash at a given da would have a 10% interest rate with a single repayment. Commercial paper is often rolled over (the maturity date is adjusted as if the paper was redeemed and immediately repurchased, but without having to front the cash).
    -
    getCriteria() - Method in class net.corda.node.api.StatesQuery.Selection
    +
    getCriteria() - Method in class net.corda.node.webserver.api.StatesQuery.Selection
     
    getCurrencies() - Method in class net.corda.client.mock.EventGenerator
     
    @@ -5454,14 +5365,12 @@ specific session ID has been established).
     
    getDefaultFractionDigits() - Method in class net.corda.core.contracts.Commodity
     
    -
    getDefaultObjectMapper() - Method in class net.corda.node.servlets.Config
    +
    getDefaultObjectMapper() - Method in class net.corda.node.webserver.servlets.ObjectMapperConfig
     
    getDescription() - Method in class net.corda.core.node.PhysicalLocation
     
    getDescriptions() - Method in exception net.corda.core.transactions.SignedTransaction.SignaturesMissingException
     
    -
    getDetail() - Method in class net.corda.flows.StateReplacementRefused
    -
     
    getDevMode() - Method in class net.corda.node.services.config.FullNodeConfiguration
     
    getDevMode() - Method in interface net.corda.node.services.config.NodeConfiguration
    @@ -5488,8 +5397,6 @@ specific session ID has been established).
    When the contract must be settled by.
    -
    getDueBy() - Method in class net.corda.node.api.FlowRequiringAttention
    -
     
    getDUMMY_CASH_ISSUER() - Static method in class net.corda.contracts.asset.CashKt
    A dummy, randomly generated issuer party by the name of "Snake Oil Issuer"
    @@ -5557,16 +5464,12 @@ sufficiently capable text surface.
     
    getError() - Method in exception net.corda.core.node.services.UniquenessException
     
    -
    getError() - Method in class net.corda.flows.AbstractStateReplacementFlow.Result
    -
     
    getError() - Method in exception net.corda.flows.NotaryException
     
    -
    getError() - Method in class net.corda.flows.Result.Error
    -
     
    -
    getError() - Method in exception net.corda.flows.StateReplacementException
    -
     
    getErrorMessage() - Method in class net.corda.node.services.statemachine.SessionReject
     
    +
    getErrorResponse() - Method in class net.corda.node.services.statemachine.SessionEnd
    +
     
    getEventSinkProperty() - Method in class net.corda.client.model.TrackedDelegate.EventSinkDelegate
     
    getEventStreamProperty() - Method in class net.corda.client.model.TrackedDelegate.EventStreamDelegate
    @@ -5613,6 +5516,8 @@ owner to sign, some (i.e. cash) also require the issuer.
    There must be an ExitCommand signed by these keys to destroy the amount. While all states require their owner to sign, some (i.e. cash) also require the issuer.
    +
    getExpectedCommonName() - Method in class net.corda.node.ConnectionDirection.Outbound
    +
     
    getExpectedCommonName() - Method in class net.corda.node.services.messaging.ConnectionDirection.Outbound
     
    getExpectedDeal() - Method in exception net.corda.flows.TwoPartyDealFlow.DealMismatchException
    @@ -5675,14 +5580,10 @@ owner to sign, some (i.e. cash) also require the issuer.
     
    getFlow() - Method in class net.corda.node.services.statemachine.StateMachineManager.FlowSession
     
    -
    getFlowClass() - Method in class net.corda.node.api.FlowInstanceRef
    -
     
    getFlowFactory(markerClass) - Method in interface net.corda.core.node.PluginServiceHub
    Return the flow factory that has been registered with markerClass, or null if no factory is found.
    -
    getFlowInstance() - Method in class net.corda.node.api.FlowInstanceRef
    -
     
    getFlowLogicClassName() - Method in class net.corda.core.flows.FlowLogicRef
     
    getFlowLogicClassName() - Method in class net.corda.core.messaging.StateMachineInfo
    @@ -5695,8 +5596,6 @@ owner to sign, some (i.e. cash) also require the issuer.
     
    getFlowStatus() - Method in class net.corda.client.model.StateMachineData
     
    -
    getFlowStepId() - Method in class net.corda.node.api.FlowInstanceRef
    -
     
    getFollowInputsOfType() - Method in class net.corda.core.contracts.TransactionGraphSearch.Query
     
    getForDay() - Method in class net.corda.core.contracts.FixOf
    @@ -5713,12 +5612,10 @@ owner to sign, some (i.e. cash) also require the issuer.
     
    getGenerate() - Method in class net.corda.client.mock.Generator
     
    -
    getGenerateMethodName() - Method in class net.corda.node.api.TransactionBuildStep
    -
     
    -
    getGivenPrice() - Method in exception net.corda.flows.TwoPartyTradeFlow.UnacceptablePriceException
    -
     
    getGot() - Method in exception net.corda.flows.FetchDataFlow.DownloadedVsRequestedDataMismatch
     
    +
    getGot() - Method in exception net.corda.flows.FetchDataFlow.DownloadedVsRequestedSizeMismatch
    +
     
    getGroupingKey() - Method in class net.corda.core.contracts.TransactionForContract.InOutGroup
     
    getHasEmojiTerminal() - Method in class net.corda.core.utilities.Emoji
    @@ -5733,8 +5630,6 @@ owner to sign, some (i.e. cash) also require the issuer.
     
    getHash() - Method in class net.corda.core.transactions.MerkleTree
     
    -
    getHash() - Method in class net.corda.node.api.ContractLedgerRef
    -
     
    getHashes() - Method in class net.corda.flows.FetchDataFlow.Request
     
    getHelp() - Method in class net.corda.node.CmdLineOptions
    @@ -5749,6 +5644,8 @@ owner to sign, some (i.e. cash) also require the issuer.
     
    getHostAndPort() - Method in class net.corda.node.services.messaging.ArtemisMessagingComponent.NodeAddress
     
    +
    getHostAndPort($receiver, name) - Static method in class net.corda.node.utilities.ConfigUtilsKt
    +
     
    getHours($receiver) - Static method in class net.corda.core.Utils
     
    getId() - Method in class net.corda.client.model.PartiallyResolvedTransaction
    @@ -5781,20 +5678,14 @@ owner to sign, some (i.e. cash) also require the issuer.
     
    getId() - Method in class net.corda.core.transactions.WireTransaction
     
    -
    getId() - Method in class net.corda.flows.CashFlowResult.Success
    -
     
    getId() - Method in class net.corda.node.services.api.Checkpoint
     
    getId() - Method in class net.corda.node.services.statemachine.FlowStateMachineImpl
     
    getId() - Method in class net.corda.node.services.statemachine.StateMachineManager.Change
     
    -
    getIdentities() - Method in class net.corda.node.utilities.JsonSupport.ServiceHubObjectMapper
    -
     
    getIdentity() - Method in class net.corda.core.node.ServiceEntry
     
    -
    getIdentity() - Method in class net.corda.flows.StateReplacementRefused
    -
     
    getIdentity() - Method in class net.corda.node.internal.AbstractNode
     
    getIdentity() - Method in class net.corda.node.services.messaging.ArtemisMessagingComponent.ServiceAddress
    @@ -5803,6 +5694,8 @@ owner to sign, some (i.e. cash) also require the issuer.
     
    getIdentityService() - Method in interface net.corda.core.node.ServiceHub
     
    +
    getIdentityService() - Method in class net.corda.node.utilities.JsonSupport.IdentityObjectMapper
    +
     
    getIds() - Method in exception net.corda.core.serialization.MissingAttachmentsException
     
    getIfChangedSinceVersion() - Method in class net.corda.node.services.network.NetworkMapService.FetchMapRequest
    @@ -5821,6 +5714,8 @@ owner to sign, some (i.e. cash) also require the issuer.
     
    getInitiatedSessionId() - Method in class net.corda.node.services.statemachine.SessionConfirm
     
    +
    getInitiatingParty() - Method in class net.corda.node.services.statemachine.StateMachineManager.FlowSession
    +
     
    getInitiatorSessionId() - Method in class net.corda.node.services.statemachine.SessionConfirm
     
    getInitiatorSessionId() - Method in class net.corda.node.services.statemachine.SessionInit
    @@ -5995,6 +5890,11 @@ owner to sign, some (i.e. cash) also require the issuer.
     
    getLeftTable() - Method in class net.corda.client.fxutils.LeftOuterJoinedMap
     
    +
    getLegalContractReference() - Method in class com.cordatest.TContract
    +
    +
    Unparsed reference to the natural language contract that this code is supposed to express (usually a hash of +the contract's contents).
    +
    getLegalContractReference() - Method in class net.corda.contracts.asset.Cash
    TODO:
    @@ -6078,6 +5978,8 @@ except at issuance/termination.
     
    getLog() - Method in class net.corda.node.internal.Node
     
    +
    getLog() - Method in class net.corda.node.Server
    +
     
    getLog() - Method in class net.corda.node.services.messaging.NodeLoginModule.Companion
     
    getLog() - Method in class net.corda.node.utilities.AbstractJDBCHashMap.Companion
    @@ -6100,8 +6002,6 @@ except at issuance/termination.
     
    getLogger() - Method in class net.corda.node.services.network.NetworkMapService.Companion
     
    -
    getLogger() - Method in class net.corda.node.services.persistence.Service.Companion
    -
     
    getLogger() - Method in class net.corda.node.services.schema.HibernateObserver.Companion
     
    getLogger() - Method in class net.corda.node.services.statemachine.FlowStateMachineImpl
    @@ -6179,10 +6079,6 @@ except at issuance/termination.
     
    getMessage() - Method in exception net.corda.core.contracts.TransactionVerificationException.TransactionMissingEncumbranceException
     
    -
    getMessage() - Method in class net.corda.flows.CashFlowResult.Failed
    -
     
    -
    getMessage() - Method in class net.corda.flows.CashFlowResult.Success
    -
     
    getMessage() - Method in class net.corda.node.services.statemachine.ReceivedSessionMessage
     
    getMessage() - Method in class net.corda.node.services.statemachine.SendAndReceive
    @@ -6213,9 +6109,7 @@ except at issuance/termination.
     
    getModification() - Method in class net.corda.flows.AbstractStateReplacementFlow.Instigator
     
    -
    getModification() - Method in interface net.corda.flows.AbstractStateReplacementFlow.Proposal
    -
     
    -
    getModification() - Method in class net.corda.flows.NotaryChangeFlow.Proposal
    +
    getModification() - Method in class net.corda.flows.AbstractStateReplacementFlow.Proposal
     
    getMonitoringService() - Method in class net.corda.node.services.api.ServiceHubInternal
     
    @@ -6258,6 +6152,8 @@ the transaction is verified by using Apart from the NetworkMapService this is the only other address accessible to the node outside of lookups against the NetworkMapCache. +
    getMyHostPort() - Method in class net.corda.node.Server
    +
     
    getMyHostPort() - Method in class net.corda.node.services.messaging.ArtemisMessagingServer
     
    getMyIdentity() - Method in class net.corda.client.model.NetworkIdentityModel
    @@ -6290,6 +6186,8 @@ the transaction is verified by using getName() - Method in class net.corda.node.utilities.PartyColumns
     
    +
    getNameToAddress() - Static method in class net.corda.node.ArtemisTestKt
    +
     
    getNearestCity() - Method in class net.corda.node.services.config.FullNodeConfiguration
     
    getNearestCity() - Method in interface net.corda.node.services.config.NodeConfiguration
    @@ -6351,16 +6249,10 @@ non-recoverable error is encountered then the Future will complete with an excep
     
    getNode() - Method in class net.corda.core.node.services.PartyInfo.Node
     
    -
    getNode() - Method in class net.corda.node.internal.APIServerImpl
    -
     
    getNode() - Method in class net.corda.node.services.network.NetworkMapService.QueryIdentityResponse
     
    getNode() - Method in class net.corda.node.services.network.NodeRegistration
     
    -
    getNodeByLegalIdentityKey($this, compositeKey) - Static method in class net.corda.core.node.services.NetworkMapCache.DefaultImpls
    -
    -
    Look up the node info for a specific peer key.
    -
    getNodeByLegalIdentityKey(compositeKey) - Method in interface net.corda.core.node.services.NetworkMapCache
    Look up the node info for a specific peer key.
    @@ -6633,6 +6525,8 @@ logic / roll conventions.
     
    getOutputs() - Method in class net.corda.core.transactions.TransactionBuilder
     
    +
    getOwner() - Method in class com.cordatest.TTxState
    +
     
    getOwner() - Method in class net.corda.contracts.asset.Cash.State
    There must be a MoveCommand signed by this key to claim the amount.
    @@ -6689,6 +6583,14 @@ logic / roll conventions.
     
    getPartialTransaction() - Method in class net.corda.flows.TwoPartyDealFlow.Primary
     
    +
    getParticipants() - Method in class com.cordatest.TGenesisFlow
    +
     
    +
    getParticipants() - Method in class com.cordatest.TTxFlow
    +
     
    +
    getParticipants() - Method in class com.cordatest.TTxState
    +
    +
    A participant is any party that is able to consume this state in a valid transaction.
    +
    getParticipants() - Method in class net.corda.contracts.asset.Cash.State
    A participant is any party that is able to consume this state in a valid transaction.
    @@ -6771,6 +6673,8 @@ logic / roll conventions.
     
    getPath() - Method in exception net.corda.core.node.AttachmentsClassLoader.OverlappingAttachments
     
    +
    getPath($receiver, name) - Static method in class net.corda.node.utilities.ConfigUtilsKt
    +
     
    getPayload() - Method in class net.corda.flows.TwoPartyDealFlow.Handshake
     
    getPayload() - Method in class net.corda.flows.TwoPartyDealFlow.Instigator
    @@ -6801,6 +6705,10 @@ logic / roll conventions.
    Fetch CordaPluginRegistry classes registered in META-INF/services/net.corda.core.node.CordaPluginRegistry files that exist in the classpath
    +
    getPluginRegistries() - Method in class net.corda.node.webserver.WebServer
    +
    +
    Fetch CordaPluginRegistry classes registered in META-INF/services/net.corda.core.node.CordaPluginRegistry files that exist in the classpath
    +
    getPollInterval() - Method in class net.corda.node.utilities.certsigning.CertificateSigner.Companion
     
    getPortAllocation() - Method in class net.corda.node.driver.DriverDSL
    @@ -6823,6 +6731,8 @@ logic / roll conventions.
     
    getProducedGenerator() - Method in class net.corda.client.mock.EventGenerator
     
    +
    getProducer() - Method in class net.corda.node.Client
    +
     
    getProduct() - Method in class net.corda.contracts.asset.Obligation.Terms
     
    getProduct() - Method in class net.corda.core.contracts.Issued
    @@ -6942,8 +6852,6 @@ progress.
     
    getProgressTracking() - Method in class net.corda.client.model.NodeMonitorModel
     
    -
    getPrompt() - Method in class net.corda.node.api.FlowRequiringAttention
    -
     
    getProperties($receiver, path) - Static method in class net.corda.node.services.config.ConfigUtilities
     
    getProps() - Method in class net.corda.core.serialization.ImmutableClassSerializer
    @@ -7048,9 +6956,7 @@ or the appropriate oracle for a contract.
     
    getRef() - Method in class net.corda.core.contracts.StateAndRef
     
    -
    getRef() - Method in class net.corda.node.api.FlowRequiringAttention
    -
     
    -
    getRef() - Method in class net.corda.node.api.Criteria.Deal
    +
    getRef() - Method in class net.corda.node.webserver.api.Criteria.Deal
     
    getReference() - Method in class net.corda.core.contracts.PartyAndReference
     
    @@ -7110,6 +7016,8 @@ elsewhere.
     
    getRequested() - Method in exception net.corda.flows.FetchDataFlow.DownloadedVsRequestedDataMismatch
     
    +
    getRequested() - Method in exception net.corda.flows.FetchDataFlow.DownloadedVsRequestedSizeMismatch
    +
     
    getRequested() - Method in exception net.corda.flows.FetchDataFlow.HashNotFound
     
    getRequestingParty() - Method in class net.corda.core.node.services.UniquenessProvider.ConsumingTx
    @@ -7203,10 +7111,16 @@ Note: the notary key is checked separately for all transactions and need not be
     
    getRpc() - Method in class net.corda.core.utilities.ApiUtils
     
    +
    getRpc() - Method in class net.corda.node.driver.NodeHandle
    +
     
    +
    getRpc() - Method in class net.corda.node.utilities.JsonSupport.RpcObjectMapper
    +
     
    getRpcLog() - Static method in class net.corda.node.services.messaging.RPCStructures
    Global RPC logger
    +
    getRpcOps() - Method in class net.corda.node.webserver.internal.APIServerImpl
    +
     
    getRpcUsers() - Method in class net.corda.node.services.config.FullNodeConfiguration
     
    getRpcUsers($this) - Static method in class net.corda.node.services.config.NodeConfiguration.DefaultImpls
    @@ -7289,6 +7203,8 @@ Note: the notary key is checked separately for all transactions and need not be
     
    getService() - Method in class net.corda.core.node.services.PartyInfo.Service
     
    +
    getServiceConfigurationOverride() - Method in class net.corda.node.services.messaging.CordaRPCClient
    +
     
    getServiceHub() - Method in class net.corda.core.flows.FlowLogic
    Provides access to big, heavy classes that may be reconstructed from time to time, e.g. across restarts. It is @@ -7329,12 +7245,10 @@ allow access to the Flow factory and Flow initiation entry points there.
     
    getServices() - Method in class net.corda.node.services.events.ScheduledActivityObserver
     
    -
    getServices() - Method in class net.corda.node.servlets.Config
    -
     
    -
    getServicesThatAcceptUploads() - Method in class net.corda.node.internal.AbstractNode
    -
     
    getServiceType(namespace, typeId) - Method in class net.corda.core.node.services.ServiceType.Companion
     
    +
    getSession() - Method in class net.corda.node.Client
    +
     
    getSession() - Method in interface net.corda.node.services.statemachine.FlowIORequest
     
    getSession() - Method in class net.corda.node.services.statemachine.ReceiveOnly
    @@ -7359,10 +7273,6 @@ allow access to the Flow factory and Flow initiation entry points there.
     
    getSig() - Method in class net.corda.core.crypto.SignedData
     
    -
    getSig() - Method in class net.corda.flows.AbstractStateReplacementFlow.Result
    -
     
    -
    getSig() - Method in class net.corda.flows.Result.Success
    -
     
    getSIGNATURE_ALGORITHM() - Method in class net.corda.core.crypto.X509Utilities
     
    getSigner() - Method in class net.corda.core.crypto.DigitalSignature.LegallyIdentifiable
    @@ -7455,8 +7365,6 @@ allow access to the Flow factory and Flow initiation entry points there.
    getState() - Method in class net.corda.core.contracts.StateAndRef
     
    -
    getState() - Method in class net.corda.flows.StateReplacementRefused
    -
     
    getState() - Method in class net.corda.node.services.statemachine.StateMachineManager.FlowSession
     
    getStateAndRef() - Method in class net.corda.client.model.InputResolution.Resolved
    @@ -7495,9 +7403,7 @@ across module boundaries.
     
    getStateRef() - Method in class net.corda.core.schemas.PersistentState
     
    -
    getStateRef() - Method in interface net.corda.flows.AbstractStateReplacementFlow.Proposal
    -
     
    -
    getStateRef() - Method in class net.corda.flows.NotaryChangeFlow.Proposal
    +
    getStateRef() - Method in class net.corda.flows.AbstractStateReplacementFlow.Proposal
     
    getStates() - Method in class net.corda.core.node.services.Vault
     
    @@ -7521,9 +7427,7 @@ across module boundaries.
     
    getStorePath() - Method in class net.corda.node.services.persistence.NodeAttachmentService
     
    -
    getStx() - Method in interface net.corda.flows.AbstractStateReplacementFlow.Proposal
    -
     
    -
    getStx() - Method in class net.corda.flows.NotaryChangeFlow.Proposal
    +
    getStx() - Method in class net.corda.flows.AbstractStateReplacementFlow.Proposal
     
    getSubjectProperty() - Method in class net.corda.client.model.TrackedDelegate.SubjectDelegate
     
    @@ -7632,8 +7536,6 @@ simple, totally non-extensible binary (sub)format.
    Return the transaction with the given id, or null if no such transaction exists.
    -
    getTransaction() - Method in class net.corda.flows.CashFlowResult.Success
    -
     
    getTransaction() - Method in class net.corda.flows.FinalityFlow
     
    getTransaction(id) - Method in class net.corda.node.services.persistence.DBTransactionStorage
    @@ -7690,6 +7592,10 @@ simple, totally non-extensible binary (sub)format.
     
    getTxBits() - Method in class net.corda.core.transactions.SignedTransaction
     
    +
    getTxContent() - Method in class com.cordatest.TTxFlow
    +
     
    +
    getTxContent() - Method in class com.cordatest.TTxState
    +
     
    getTxhash() - Method in class net.corda.core.contracts.StateRef
     
    getTxId() - Method in class net.corda.core.schemas.PersistentStateRef
    @@ -7768,6 +7674,12 @@ the update, and the database transaction associated with the update will have be
    getUpdatesPublisher() - Method in class net.corda.node.services.persistence.DBTransactionStorage
     
    +
    getUploaders() - Method in interface net.corda.core.node.services.StorageService
    +
    +
    Deprecated. 
    +
    +
    getUploaders() - Method in class net.corda.node.services.persistence.StorageServiceImpl
    +
     
    getUseHTTPS() - Method in class net.corda.node.services.config.FullNodeConfiguration
     
    getUser() - Method in class net.corda.node.services.messaging.ClientRPCRequestMessage
    @@ -7886,8 +7798,6 @@ the transaction data to other nodes that need it.
    List of lambdas returning JAX-RS objects.
    -
    getWebServer() - Method in class net.corda.node.internal.Node
    -
     
    getWeights() - Method in class net.corda.core.crypto.CompositeKey.Node
     
    getWhat() - Method in class net.corda.node.services.messaging.MarshalledObservation
    @@ -8133,7 +8043,7 @@ equals and hashCode).
     
    hashCode() - Method in class net.corda.core.utilities.TimeWindow
     
    -
    hashCode() - Method in class net.corda.flows.AbstractStateReplacementFlow.Result
    +
    hashCode() - Method in class net.corda.flows.AbstractStateReplacementFlow.Proposal
     
    hashCode() - Method in class net.corda.flows.BroadcastTransactionFlow.NotifyTxRequest
     
    @@ -8143,8 +8053,6 @@ equals and hashCode).
     
    hashCode() - Method in class net.corda.flows.IssuerFlow.IssuanceRequestState
     
    -
    hashCode() - Method in class net.corda.flows.NotaryChangeFlow.Proposal
    -
     
    hashCode() - Method in class net.corda.flows.NotaryFlow.SignRequest
     
    hashCode() - Method in class net.corda.flows.TwoPartyDealFlow.AutoOffer
    @@ -8155,22 +8063,6 @@ equals and hashCode).
     
    hashCode() - Method in class net.corda.flows.TwoPartyTradeFlow.SignaturesFromSeller
     
    -
    hashCode() - Method in class net.corda.node.api.ContractClassRef
    -
     
    -
    hashCode() - Method in class net.corda.node.api.ContractLedgerRef
    -
     
    -
    hashCode() - Method in class net.corda.node.api.FlowClassRef
    -
     
    -
    hashCode() - Method in class net.corda.node.api.FlowInstanceRef
    -
     
    -
    hashCode() - Method in class net.corda.node.api.FlowRequiringAttention
    -
     
    -
    hashCode() - Method in class net.corda.node.api.Criteria.Deal
    -
     
    -
    hashCode() - Method in class net.corda.node.api.StatesQuery.Selection
    -
     
    -
    hashCode() - Method in class net.corda.node.api.TransactionBuildStep
    -
     
    hashCode() - Method in class net.corda.node.CmdLineOptions
     
    hashCode() - Method in class net.corda.node.driver.NodeHandle
    @@ -8241,6 +8133,10 @@ equals and hashCode).
     
    hashCode() - Method in class net.corda.node.utilities.TxnNoteColumns
     
    +
    hashCode() - Method in class net.corda.node.webserver.api.Criteria.Deal
    +
     
    +
    hashCode() - Method in class net.corda.node.webserver.api.StatesQuery.Selection
    +
     
    hashConcat($receiver, other) - Static method in class net.corda.core.transactions.MerkleTransactionKt
     
    hashNodes(right) - Method in class net.corda.core.transactions.MerkleTree
    @@ -8275,6 +8171,8 @@ equals and hashCode).
    identity - Variable in class net.corda.node.internal.AbstractNode
     
    +
    IdentityObjectMapper(identityService) - Constructor for class net.corda.node.utilities.JsonSupport.IdentityObjectMapper
    +
     
    IdentityService - Interface in net.corda.core.node.services
    An identity service maintains an bidirectional map of class Partys to their associated public keys and thus supports @@ -8317,19 +8215,15 @@ operation due to the need to copy the bytes to disk and hash them along the way.
    Returns the index of the given item or throws IllegalArgumentException if not found.
    -
    info() - Method in interface net.corda.node.api.APIServer
    -
    -
    Report this node's configuration and identities. -Currently tunnels the NodeInfo as an encoding of the Kryo serialised form. -TODO this functionality should be available via the RPC
    -
    info - Variable in class net.corda.node.internal.AbstractNode
     
    -
    info() - Method in class net.corda.node.internal.APIServerImpl
    +
    info() - Method in interface net.corda.node.webserver.api.APIServer
    -
    Report this node's configuration and identities. -Currently tunnels the NodeInfo as an encoding of the Kryo serialised form. -TODO this functionality should be available via the RPC
    +
    Report this node's configuration and identities.
    +
    +
    info() - Method in class net.corda.node.webserver.internal.APIServerImpl
    +
    +
    Report this node's configuration and identities.
    initialiseDatabasePersistence(insideTransaction) - Method in class net.corda.node.internal.AbstractNode
     
    @@ -8354,6 +8248,8 @@ on H2 URLs and configuration see: http://www.h2database.com/html/features.html#d
     
    initModel(klass) - Method in class net.corda.client.model.Models
     
    +
    initUploaders(uploadersList) - Method in class net.corda.node.services.persistence.StorageServiceImpl
    +
     
    InMemoryIdentityService - Class in net.corda.node.services.identity
    Simple identity service which caches parties and provides functionality for efficient lookup.
    @@ -8404,10 +8300,6 @@ be used to simplify this logic.
     
    InputResolution.Unresolved - Class in net.corda.client.model
     
    -
    InputStateRefResolveFailed - Exception in net.corda.flows
    -
     
    -
    InputStateRefResolveFailed(stateRefs) - Constructor for exception net.corda.flows.InputStateRefResolveFailed
    -
     
    inputStates() - Method in class net.corda.core.transactions.TransactionBuilder
     
    InputStreamSerializer - Class in net.corda.core.serialization
    @@ -8503,8 +8395,6 @@ trying to construct the set.
     
    INSTANCE - Static variable in class net.corda.flows.Companion.APPROVING
     
    -
    INSTANCE - Static variable in class net.corda.flows.Companion.REJECTING
    -
     
    INSTANCE - Static variable in class net.corda.flows.Companion.VERIFYING
     
    INSTANCE - Static variable in class net.corda.flows.Companion.NOTARY
    @@ -8596,7 +8486,7 @@ and seller) and the following steps:
     
    INSTANCE - Static variable in class net.corda.flows.Companion.VERIFYING
     
    -
    INSTANCE - Static variable in class net.corda.node.api.Criteria.AllDeals
    +
    INSTANCE - Static variable in class net.corda.node.ConnectionDirection.Inbound
     
    INSTANCE - Static variable in class net.corda.node.driver.PortAllocation.RandomFree
     
    @@ -8681,6 +8571,8 @@ the java.time API, some core types, and Kotlin data classes.
    ColumnType for marshalling to/from database on behalf of UUID, always using a string representation.
    +
    INSTANCE - Static variable in class net.corda.node.webserver.api.Criteria.AllDeals
    +
     
    INSTANCE - Static variable in class net.corda.schemas.CashSchema
    An object used to fully qualify the class CashSchema family name (i.e. independent of version).
    @@ -8765,14 +8657,6 @@ Note that you must be on the server thread to call this method.
    Will check logicType and args against a whitelist and if acceptable then construct and initiate the flow. Note that you must be on the server thread to call this method.
    -
    invokeFlowSync(type, args) - Method in interface net.corda.node.api.APIServer
    -
    -
    This method would not return until the flow is finished (hence the "Sync").
    -
    -
    invokeFlowSync(type, args) - Method in class net.corda.node.internal.APIServerImpl
    -
    -
    This method would not return until the flow is finished (hence the "Sync").
    -
    isBlank() - Method in class net.corda.core.messaging.TopicSession
     
    isDebug() - Method in class net.corda.node.driver.DriverDSL
    @@ -8860,7 +8744,7 @@ from which the state object is initialised.
    IssuanceRequester(amount, issueToParty, issueToPartyRef, issuerBankParty) - Constructor for class net.corda.flows.IssuerFlow.IssuanceRequester
    -
    IssuanceRequester should be used by a client to ask a remote note to issue some interface FungibleAsset with the given details. +
    IssuanceRequester should be used by a client to ask a remote node to issue some interface FungibleAsset with the given details. Returns the transaction created by the Issuer to move the cash to the Requester.
    IssuanceRequestState(amount, issueToParty, issuerPartyRef) - Constructor for class net.corda.flows.IssuerFlow.IssuanceRequestState
    @@ -8981,7 +8865,7 @@ server acting as an issuer (see
    IssuerFlow.IssuanceRequester - Class in net.corda.flows
    -
    IssuanceRequester should be used by a client to ask a remote note to issue some interface FungibleAsset with the given details. +
    IssuanceRequester should be used by a client to ask a remote node to issue some interface FungibleAsset with the given details. Returns the transaction created by the Issuer to move the cash to the Requester.
    IssuerFlow.IssuanceRequestState - Class in net.corda.flows
    @@ -8995,6 +8879,8 @@ Returns the generated transaction representing the transfer of the isValid(timestampCommand) - Method in class net.corda.core.node.services.TimestampChecker
     
    +
    isWebserver() - Method in class net.corda.node.CmdLineOptions
    +
     
    isWorkingDay(date) - Method in class net.corda.core.contracts.BusinessCalendar
     
    isWorkingDay($receiver, accordingToCalendar) - Static method in class net.corda.core.contracts.FinanceTypesKt
    @@ -9054,6 +8940,8 @@ the java.time API, some core types, and Kotlin data classes.
     
    JsonSupport.CompositeKeySerializer - Class in net.corda.node.utilities
     
    +
    JsonSupport.IdentityObjectMapper - Class in net.corda.node.utilities
    +
     
    JsonSupport.LocalDateDeserializer - Class in net.corda.node.utilities
     
    JsonSupport.LocalDateKeyDeserializer - Class in net.corda.node.utilities
    @@ -9062,22 +8950,26 @@ the java.time API, some core types, and Kotlin data classes.
     
    JsonSupport.NodeInfoSerializer - Class in net.corda.node.utilities
     
    +
    JsonSupport.NoPartyObjectMapper - Class in net.corda.node.utilities
    +
     
    JsonSupport.PartyDeserializer - Class in net.corda.node.utilities
     
    +
    JsonSupport.PartyObjectMapper - Interface in net.corda.node.utilities
    +
     
    JsonSupport.PartySerializer - Class in net.corda.node.utilities
     
    JsonSupport.PublicKeyDeserializer - Class in net.corda.node.utilities
     
    JsonSupport.PublicKeySerializer - Class in net.corda.node.utilities
     
    +
    JsonSupport.RpcObjectMapper - Class in net.corda.node.utilities
    +
     
    JsonSupport.SecureHashDeserializer<T extends SecureHash> - Class in net.corda.node.utilities
    Implemented as a class so that we can instantiate for T.
    JsonSupport.SecureHashSerializer - Class in net.corda.node.utilities
     
    -
    JsonSupport.ServiceHubObjectMapper - Class in net.corda.node.utilities
    -
     
    JsonSupport.ToStringSerializer - Class in net.corda.node.utilities
     
    @@ -9328,6 +9220,8 @@ create a new pair of keys using the provided function if the keys not exist.

    M

    +
    main(args) - Static method in class net.corda.node.ArtemisTestKt
    +
     
    main(args) - Static method in class net.corda.node.Corda
     
    main(args) - Static method in class net.corda.node.utilities.certsigning.CertificateSignerKt
    @@ -9502,6 +9396,8 @@ may let you cast the returned future to an object that lets you get status info.
     
    METHOD_NAME - Static variable in class net.corda.node.services.messaging.ClientRPCRequestMessage
     
    +
    MetricsKt - Class in net.corda.node.utilities
    +
     
    minus(other) - Method in class net.corda.core.contracts.Amount
     
    MissingAttachmentsException - Exception in net.corda.core.serialization
    @@ -9706,8 +9602,6 @@ bilateralNetState objects are equal).
     
    net.corda.node - package net.corda.node
     
    -
    net.corda.node.api - package net.corda.node.api
    -
     
    net.corda.node.driver - package net.corda.node.driver
     
    net.corda.node.internal - package net.corda.node.internal
    @@ -9740,12 +9634,18 @@ bilateralNetState objects are equal).
     
    net.corda.node.services.vault - package net.corda.node.services.vault
     
    -
    net.corda.node.servlets - package net.corda.node.servlets
    -
     
    net.corda.node.utilities - package net.corda.node.utilities
     
    net.corda.node.utilities.certsigning - package net.corda.node.utilities.certsigning
     
    +
    net.corda.node.webserver - package net.corda.node.webserver
    +
     
    +
    net.corda.node.webserver.api - package net.corda.node.webserver.api
    +
     
    +
    net.corda.node.webserver.internal - package net.corda.node.webserver.internal
    +
     
    +
    net.corda.node.webserver.servlets - package net.corda.node.webserver.servlets
    +
     
    net.corda.schemas - package net.corda.schemas
     
    netAmountsDue(balances) - Static method in class net.corda.contracts.asset.ObligationKt
    @@ -9954,7 +9854,7 @@ For instance it may contain onion routing data.
     
    NodeHandle - Class in net.corda.node.driver
     
    -
    NodeHandle(nodeInfo, configuration, process) - Constructor for class net.corda.node.driver.NodeHandle
    +
    NodeHandle(nodeInfo, rpc, configuration, process) - Constructor for class net.corda.node.driver.NodeHandle
     
    nodeIdentity() - Method in interface net.corda.core.messaging.CordaRPCOps
    @@ -10080,8 +9980,6 @@ we add further functionality as the design for the vault and vault service matur
    Currently, the node vault service is a very simple RDBMS backed implementation. It will change significantly when we add further functionality as the design for the vault and vault service matures.
    -
    noError(sig) - Method in class net.corda.flows.Result.Companion
    -
     
    NonEmptySet<T> - Class in net.corda.core.utilities
    A set which is constrained to ensure it can never be empty. An initial value must be provided at @@ -10124,6 +10022,8 @@ or throws if more than one element was found.
     
    nonNullValueToString(value) - Method in class net.corda.node.utilities.LocalDateTimeColumnType
     
    +
    NoPartyObjectMapper() - Constructor for class net.corda.node.utilities.JsonSupport.NoPartyObjectMapper
    +
     
    NoReferencesSerializer<T> - Class in net.corda.core.serialization
     
    NoReferencesSerializer(baseSerializer) - Constructor for class net.corda.core.serialization.NoReferencesSerializer
    @@ -10156,8 +10056,6 @@ must point to the same notary.
     
    NotaryChangeFlow.Instigator<T extends ContractState> - Class in net.corda.flows
     
    -
    NotaryChangeFlow.Proposal - Class in net.corda.flows
    -
     
    NotaryChangeInWrongTransactionType(tx, outputNotary) - Constructor for exception net.corda.core.contracts.TransactionVerificationException.NotaryChangeInWrongTransactionType
     
    NotaryError - Class in net.corda.flows
    @@ -10185,8 +10083,6 @@ must point to the same notary.
    A flow to be used for obtaining a signature from a NotaryService ascertaining the transaction timestamp is correct and none of its inputs have been used in another completed transaction.
    -
    NotaryFlow.Result - Class in net.corda.flows
    -
     
    NotaryFlow.Service - Class in net.corda.flows
    Checks that the timestamp command is valid (if present) and commits the input state, or returns a conflict @@ -10274,6 +10170,16 @@ a balance of zero.

    O

    +
    ObjectMapperConfig - Class in net.corda.node.webserver.servlets
    +
    +
    Primary purpose is to install Kotlin extensions for Jackson ObjectMapper so data classes work +and to organise serializers / deserializers for java.time.* classes as necessary.
    +
    +
    ObjectMapperConfig(rpc) - Constructor for class net.corda.node.webserver.servlets.ObjectMapperConfig
    +
    +
    Primary purpose is to install Kotlin extensions for Jackson ObjectMapper so data classes work +and to organise serializers / deserializers for java.time.* classes as necessary.
    +
    ObjectPropertyDelegate(klass, objectPropertyProperty) - Constructor for class net.corda.client.model.TrackedDelegate.ObjectPropertyDelegate
     
    Obligation<P> - Class in net.corda.contracts.asset
    @@ -10419,6 +10325,10 @@ a stream for the data, which will be a zip/jar file.
    OrderedSerializer - Class in net.corda.core.serialization
     
    +
    Outbound(expectedCommonName) - Constructor for class net.corda.node.ConnectionDirection.Outbound
    +
     
    +
    Outbound() - Constructor for class net.corda.node.ConnectionDirection.Outbound
    +
     
    Outbound(expectedCommonName) - Constructor for class net.corda.node.services.messaging.ConnectionDirection.Outbound
     
    Outbound() - Constructor for class net.corda.node.services.messaging.ConnectionDirection.Outbound
    @@ -10459,6 +10369,8 @@ a stream for the data, which will be a zip/jar file.

    P

    +
    P2P_QUEUE - Static variable in class net.corda.node.ArtemisTestKt
    +
     
    P2P_QUEUE - Static variable in class net.corda.node.services.messaging.ArtemisMessagingComponent
     
    parse(str) - Method in class net.corda.core.crypto.SecureHash.Companion
    @@ -10585,6 +10497,14 @@ ledger. The reference is intended to be encrypted so it's meaningless to anyone
    partyFromName(name) - Method in class net.corda.node.services.identity.InMemoryIdentityService
     
    +
    partyFromName(partyName) - Method in class net.corda.node.utilities.JsonSupport.IdentityObjectMapper
    +
     
    +
    partyFromName(partyName) - Method in class net.corda.node.utilities.JsonSupport.NoPartyObjectMapper
    +
     
    +
    partyFromName(partyName) - Method in interface net.corda.node.utilities.JsonSupport.PartyObjectMapper
    +
     
    +
    partyFromName(partyName) - Method in class net.corda.node.utilities.JsonSupport.RpcObjectMapper
    +
     
    PartyGenerator - Class in net.corda.core.testing
     
    PartyGenerator() - Constructor for class net.corda.core.testing.PartyGenerator
    @@ -10806,16 +10726,8 @@ a singleton).
    Convert to screen coordinates using the Mercator projection. You should have a world map image that you know the precise extents of for this function to work.
    -
    Proposal(stateRef, modification, stx) - Constructor for class net.corda.flows.NotaryChangeFlow.Proposal
    +
    Proposal(stateRef, modification, stx) - Constructor for class net.corda.flows.AbstractStateReplacementFlow.Proposal
     
    -
    provideFlowResponse(flow, choice, args) - Method in interface net.corda.node.api.APIServer
    -
    -
    Provide the response that a flow is waiting for.
    -
    -
    provideFlowResponse(flow, choice, args) - Method in class net.corda.node.internal.APIServerImpl
    -
    -
    Provide the response that a flow is waiting for.
    -
    proxy(timeout, minVersion) - Method in class net.corda.node.services.messaging.CordaRPCClient
    Returns a fresh proxy that lets you invoke RPCs on the server. Calls on it block, and if the server throws an @@ -10886,18 +10798,6 @@ or filtering of, states.
     
    QueryIdentityResponse(node) - Constructor for class net.corda.node.services.network.NetworkMapService.QueryIdentityResponse
     
    -
    queryStates(query) - Method in interface net.corda.node.api.APIServer
    -
    -
    Query your "local" states (containing only outputs involving you) and return the hashes & indexes associated with them -to probably be later inflated by fetchLedgerTransactions() or fetchStates() although because immutable you can cache them -to avoid calling fetchLedgerTransactions() many times.
    -
    -
    queryStates(query) - Method in class net.corda.node.internal.APIServerImpl
    -
    -
    Query your "local" states (containing only outputs involving you) and return the hashes & indexes associated with them -to probably be later inflated by fetchLedgerTransactions() or fetchStates() although because immutable you can cache them -to avoid calling fetchLedgerTransactions() many times.
    -
    @@ -11060,6 +10960,8 @@ sends them to the vault for further processing.
    Register for updates to/from a given vault. TODO provide an unsubscribe mechanism
    +
    register($receiver, type, read, write) - Static method in class net.corda.core.serialization.KryoKt
    +
     
    registerFlowInitiator(markerClass, flowFactory) - Method in interface net.corda.core.node.PluginServiceHub
    Register the flow factory we wish to use when a initiating party attempts to communicate with us. The @@ -11262,11 +11164,11 @@ checked again.
     
    ResolveTransactionsFlow.ExcessivelyLargeTransactionGraph - Exception in net.corda.flows
     
    -
    ResponseFilter - Class in net.corda.node.servlets
    +
    ResponseFilter - Class in net.corda.node.webserver.servlets
    This adds headers needed for cross site scripting on API clients.
    -
    ResponseFilter() - Constructor for class net.corda.node.servlets.ResponseFilter
    +
    ResponseFilter() - Constructor for class net.corda.node.webserver.servlets.ResponseFilter
    This adds headers needed for cross site scripting on API clients.
    @@ -11274,12 +11176,6 @@ checked again.
     
    Result(fromDisk, downloaded) - Constructor for class net.corda.flows.FetchDataFlow.Result
     
    -
    Result.Companion - Class in net.corda.flows
    -
     
    -
    Result.Error - Class in net.corda.flows
    -
     
    -
    Result.Success - Class in net.corda.flows
    -
     
    retainAll(p0) - Method in class net.corda.client.fxutils.MapValuesList
     
    retainAll(elements) - Method in class net.corda.client.fxutils.MapValuesList
    @@ -11340,6 +11236,8 @@ method.
     
    RPCException.DeadlineExceeded - Exception in net.corda.node.services.messaging
     
    +
    RpcObjectMapper(rpc) - Constructor for class net.corda.node.utilities.JsonSupport.RpcObjectMapper
    +
     
    RPCOps - Interface in net.corda.core.messaging
    Base interface that all RPC servers must implement. Note: in Corda there's only one RPC interface. This base @@ -11369,6 +11267,8 @@ to. These permissions are represented as Strings to allow RPC implementations to
     
    RPCUserServiceKt - Class in net.corda.node.services
     
    +
    run() - Method in class net.corda.node.Client
    +
     
    run() - Method in class net.corda.node.internal.Node
    Starts a blocking event loop for message dispatch.
    @@ -11379,6 +11279,8 @@ to. These permissions are represented as Strings to allow RPC implementations to
    run() - Method in class net.corda.node.services.statemachine.FlowStateMachineImpl
     
    +
    run() - Method in class net.corda.node.webserver.WebServer
    +
     
    runOnNextMessage($receiver, topic, sessionID, callback) - Static method in class net.corda.core.messaging.MessagingKt
    Registers a handler for the given topic and session ID that runs the given callback with the message and then removes @@ -11526,9 +11428,9 @@ Provides utilities for generating a cryptographic hash using different algorithm
     
    SecureHashKt - Class in net.corda.core.crypto
     
    -
    select(criteria) - Method in class net.corda.node.api.StatesQuery.Companion
    +
    select(criteria) - Method in class net.corda.node.webserver.api.StatesQuery.Companion
     
    -
    Selection(criteria) - Constructor for class net.corda.node.api.StatesQuery.Selection
    +
    Selection(criteria) - Constructor for class net.corda.node.webserver.api.StatesQuery.Selection
     
    selectSchemas(state) - Method in interface net.corda.node.services.api.SchemaService
    @@ -11563,6 +11465,8 @@ implementation: the type system provides an opaque high level view, with more fi available via type casting. Once this function returns the message is queued for delivery but not necessarily delivered: if the recipients are offline then the message could be queued hours or days later.
    +
    send(message, queueName) - Method in class net.corda.node.Client
    +
     
    send(message, target) - Method in class net.corda.node.services.messaging.NodeMessagingClient
    Sends a message to the given receiver. The details of how receivers are identified is up to the messaging @@ -11674,11 +11578,15 @@ type safety hack.
     
    serializeToBlob(value, finalizables) - Static method in class net.corda.node.utilities.JDBCHashMapKt
     
    -
    serverTime() - Method in interface net.corda.node.api.APIServer
    +
    Server - Class in net.corda.node
    +
     
    +
    Server(baseDir, myHostPort) - Constructor for class net.corda.node.Server
    +
     
    +
    serverTime() - Method in interface net.corda.node.webserver.api.APIServer
    Report current UTC time as understood by the platform.
    -
    serverTime() - Method in class net.corda.node.internal.APIServerImpl
    +
    serverTime() - Method in class net.corda.node.webserver.internal.APIServerImpl
    Report current UTC time as understood by the platform.
    @@ -11701,8 +11609,6 @@ and immediately runs the This class sets up network message handlers for requests from peers for data keyed by hash. It is a piece of simple glue that sits between the network layer and the database layer. -
    Service.Companion - Class in net.corda.node.services.persistence
    -
     
    Service.NotifyTransactionHandler - Class in net.corda.node.services.persistence
     
    ServiceAddress(identity) - Constructor for class net.corda.node.services.messaging.ArtemisMessagingComponent.ServiceAddress
    @@ -11749,8 +11655,6 @@ functionality and you don't want to hard-code which types in the interface. 
    ServiceHubKt - Class in net.corda.core.node
     
    -
    ServiceHubObjectMapper(identities) - Constructor for class net.corda.node.utilities.JsonSupport.ServiceHubObjectMapper
    -
     
    serviceIdentities(type) - Method in class net.corda.core.node.NodeInfo
     
    ServiceIdentityGenerator - Class in net.corda.node.utilities
    @@ -11799,7 +11703,7 @@ don't need a declared service type.
     
    SessionEnd - Class in net.corda.node.services.statemachine
     
    -
    SessionEnd(recipientSessionId) - Constructor for class net.corda.node.services.statemachine.SessionEnd
    +
    SessionEnd(recipientSessionId, errorResponse) - Constructor for class net.corda.node.services.statemachine.SessionEnd
     
    SessionInit - Class in net.corda.node.services.statemachine
     
    @@ -11823,8 +11727,6 @@ don't need a declared service type.
     
    setAll(p0) - Method in class net.corda.client.fxutils.MapValuesList
     
    -
    setApi(p) - Method in class net.corda.node.internal.AbstractNode
    -
     
    setAttachmentStorage($receiver, value) - Static method in class net.corda.core.serialization.KryoKt
     
    setAutomaticallyExtractAttachments(p) - Method in class net.corda.node.services.persistence.NodeAttachmentService
    @@ -11841,6 +11743,8 @@ will not have any effect).
     
    setChildProgressTracker(step, childProgressTracker) - Method in class net.corda.core.utilities.ProgressTracker
     
    +
    setConsumer(p) - Method in class net.corda.node.Client
    +
     
    setContext(kryo, context) - Method in class net.corda.core.serialization.SerializeAsTokenSerializer.Companion
     
    setCurrency(p) - Method in class net.corda.schemas.CashSchemaV1.PersistentCashState
    @@ -11931,6 +11835,8 @@ by the due date, or resetting a defaulted contract back to the issued state. 
    setPennies(p) - Method in class net.corda.schemas.CashSchemaV1.PersistentCashState
     
    +
    setProducer(p) - Method in class net.corda.node.Client
    +
     
    setProgressTracker(value) - Method in class net.corda.node.utilities.ANSIProgressRenderer
     
    setQuery(p) - Method in class net.corda.core.contracts.TransactionGraphSearch
    @@ -11943,6 +11849,8 @@ by the due date, or resetting a defaulted contract back to the issued state. 
    setServiceHub(p) - Method in class net.corda.node.services.statemachine.FlowStateMachineImpl
     
    +
    setSession(p) - Method in class net.corda.node.Client
    +
     
    setSmm(p) - Method in class net.corda.node.internal.AbstractNode
     
    setState(p) - Method in class net.corda.node.services.statemachine.StateMachineManager.FlowSession
    @@ -11999,12 +11907,12 @@ state object to the beneficiary. If this reduces the balance to zero, the state
    setup() - Method in class net.corda.node.services.network.AbstractNetworkMapService
     
    +
    setUploaders(p) - Method in class net.corda.node.services.persistence.StorageServiceImpl
    +
     
    setVault(p) - Method in class net.corda.node.internal.AbstractNode
     
    setWaitingForResponse(p) - Method in class net.corda.node.services.statemachine.StateMachineManager.FlowSession
     
    -
    setWebServer(p) - Method in class net.corda.node.internal.Node
    -
     
    sha256(bytes) - Method in class net.corda.core.crypto.SecureHash.Companion
     
    sha256(str) - Method in class net.corda.core.crypto.SecureHash.Companion
    @@ -12095,6 +12003,10 @@ A transaction ID should be the hash of the signWithECDSA($receiver, bytesToSign, party) - Static method in class net.corda.core.crypto.CryptoUtilities
     
    +
    signWithECDSA(keyPair) - Method in class net.corda.core.transactions.SignedTransaction
    +
    +
    Utility to simplify the act of signing the transaction.
    +
    SimpleNotaryService - Class in net.corda.node.services.transactions
    A simple Notary service that does not perform transaction validation
    @@ -12236,6 +12148,8 @@ Registers a JVM shutdown hook to cleanly disconnect.
     
    start() - Method in class net.corda.node.services.statemachine.StateMachineManager
     
    +
    start() - Method in class net.corda.node.webserver.WebServer
    +
     
    Started(message) - Constructor for class net.corda.client.model.TransactionCreateStatus.Started
     
    startFlow(logic) - Method in class net.corda.node.services.api.ServiceHubInternal
    @@ -12276,6 +12190,14 @@ result of running the flow.
    Starts a distributed notary cluster.
    +
    startWebserver(handle) - Method in class net.corda.node.driver.DriverDSL
    +
    +
    Starts a web server for a node
    +
    +
    startWebserver(handle) - Method in interface net.corda.node.driver.DriverDSLExposedInterface
    +
    +
    Starts a web server for a node
    +
    State(amount, owner) - Constructor for class net.corda.contracts.asset.Cash.State
    A state representing a cash claim against some party.
    @@ -12406,39 +12328,35 @@ transaction defined the state and where in that transaction it was.
     
    StateReplacementException - Exception in net.corda.flows
     
    -
    StateReplacementException(error) - Constructor for exception net.corda.flows.StateReplacementException
    +
    StateReplacementException(message, cause) - Constructor for exception net.corda.flows.StateReplacementException
    +
     
    +
    StateReplacementException(message) - Constructor for exception net.corda.flows.StateReplacementException
    +
     
    +
    StateReplacementException() - Constructor for exception net.corda.flows.StateReplacementException
     
    -
    StateReplacementRefused - Class in net.corda.flows
    -
    -
    Thrown when a participant refuses the proposed state replacement
    -
    -
    StateReplacementRefused(identity, state, detail) - Constructor for class net.corda.flows.StateReplacementRefused
    -
    -
    Thrown when a participant refuses the proposed state replacement
    -
    statesForRefs($this, refs) - Static method in class net.corda.core.node.services.VaultService.DefaultImpls
     
    statesForRefs(refs) - Method in interface net.corda.core.node.services.VaultService
     
    statesForRefs(refs) - Method in class net.corda.node.services.vault.NodeVaultService
     
    -
    StatesQuery - Interface in net.corda.node.api
    +
    StatesQuery - Interface in net.corda.node.webserver.api
    Extremely rudimentary query language which should most likely be replaced with a product.
    -
    StatesQuery.Companion - Class in net.corda.node.api
    +
    StatesQuery.Companion - Class in net.corda.node.webserver.api
     
    -
    StatesQuery.Criteria - Interface in net.corda.node.api
    +
    StatesQuery.Criteria - Interface in net.corda.node.webserver.api
     
    -
    StatesQuery.Selection - Class in net.corda.node.api
    +
    StatesQuery.Selection - Class in net.corda.node.webserver.api
     
    -
    status() - Method in interface net.corda.node.api.APIServer
    +
    status() - Method in interface net.corda.node.webserver.api.APIServer
    Report whether this node is started up or not.
    -
    status() - Method in class net.corda.node.internal.APIServerImpl
    +
    status() - Method in class net.corda.node.webserver.internal.APIServerImpl
    -
    Report whether this node is started up or not.
    +
    This endpoint is for polling if the webserver is serving. It will always return 200.
    Step(label) - Constructor for class net.corda.core.utilities.ProgressTracker.Step
    @@ -12535,10 +12453,6 @@ current step in this flow's progress tracker.
     
    success($receiver, body) - Static method in class net.corda.core.Utils
     
    -
    Success(id, transaction, message) - Constructor for class net.corda.flows.CashFlowResult.Success
    -
     
    -
    Success(sig) - Constructor for class net.corda.flows.Result.Success
    -
     
    sum(amounts, token) - Method in class net.corda.client.fxutils.AmountBindings
     
    sum($receiver) - Static method in class net.corda.core.Utils
    @@ -12632,6 +12546,12 @@ states cannot be added together (i.e. are different currencies).

    T

    +
    TContract - Class in com.cordatest
    +
     
    +
    TContract() - Constructor for class com.cordatest.TContract
    +
     
    +
    tcpTransport(direction, host, port) - Static method in class net.corda.node.ArtemisTestKt
    +
     
    tcpTransport(direction, host, port) - Method in class net.corda.node.services.messaging.ArtemisMessagingComponent
     
    tee($receiver, teeTo) - Static method in class net.corda.core.Utils
    @@ -12668,6 +12588,14 @@ states cannot be added together (i.e. are different currencies).
    TestConstants - Class in net.corda.core.utilities
     
    +
    TGenesisCommand - Class in com.cordatest
    +
     
    +
    TGenesisCommand() - Constructor for class com.cordatest.TGenesisCommand
    +
     
    +
    TGenesisFlow - Class in com.cordatest
    +
     
    +
    TGenesisFlow(participants) - Constructor for class com.cordatest.TGenesisFlow
    +
     
    then($receiver, executor, body) - Static method in class net.corda.core.Utils
     
    then($receiver, body) - Static method in class net.corda.core.Utils
    @@ -12686,6 +12614,8 @@ Simply define a private class to hold the data that must be grouped under the sa instance to the ThreadBox constructor. You can now use the locked method with a lambda to take the lock in a way that ensures it'll be released if there's an exception. +
    timed(action) - Static method in class net.corda.node.utilities.MetricsKt
    +
     
    times(other) - Method in class net.corda.core.contracts.Amount
     
    times(other) - Method in class net.corda.core.contracts.Amount
    @@ -12757,7 +12687,8 @@ of "1234" GBP, returns "12.34".
    toFuture($receiver) - Static method in class net.corda.core.Utils
    Returns a ListenableFuture bound to the first item emitted by this Observable. The future will complete with a -NoSuchElementException if no items are emitted or any other error thrown by the Observable.
    +NoSuchElementException if no items are emitted or any other error thrown by the Observable. If it's cancelled then +it will unsubscribe from the observable.
    toHexString($receiver) - Static method in class net.corda.core.serialization.ByteArraysKt
     
    @@ -13066,22 +12997,16 @@ have been fully resolved using the resolution flow by this point.
     
    toString() - Method in class net.corda.core.utilities.TimeWindow
     
    -
    toString() - Method in class net.corda.flows.AbstractStateReplacementFlow.Result
    +
    toString() - Method in class net.corda.flows.AbstractStateReplacementFlow.Proposal
     
    toString() - Method in class net.corda.flows.BroadcastTransactionFlow.NotifyTxRequest
     
    -
    toString() - Method in class net.corda.flows.CashFlowResult.Failed
    -
     
    -
    toString() - Method in class net.corda.flows.CashFlowResult.Success
    -
     
    toString() - Method in class net.corda.flows.FetchDataFlow.Request
     
    toString() - Method in class net.corda.flows.FetchDataFlow.Result
     
    toString() - Method in class net.corda.flows.IssuerFlow.IssuanceRequestState
     
    -
    toString() - Method in class net.corda.flows.NotaryChangeFlow.Proposal
    -
     
    toString() - Method in class net.corda.flows.NotaryError.Conflict
     
    toString() - Method in class net.corda.flows.NotaryError.SignaturesMissing
    @@ -13090,8 +13015,6 @@ have been fully resolved using the resolution flow by this point.
     
    toString() - Method in class net.corda.flows.NotaryFlow.SignRequest
     
    -
    toString() - Method in class net.corda.flows.StateReplacementRefused
    -
     
    toString() - Method in class net.corda.flows.TwoPartyDealFlow.AutoOffer
     
    toString() - Method in exception net.corda.flows.TwoPartyDealFlow.DealMismatchException
    @@ -13106,22 +13029,6 @@ have been fully resolved using the resolution flow by this point.
     
    toString() - Method in class net.corda.flows.TwoPartyTradeFlow.SignaturesFromSeller
     
    -
    toString() - Method in class net.corda.node.api.ContractClassRef
    -
     
    -
    toString() - Method in class net.corda.node.api.ContractLedgerRef
    -
     
    -
    toString() - Method in class net.corda.node.api.FlowClassRef
    -
     
    -
    toString() - Method in class net.corda.node.api.FlowInstanceRef
    -
     
    -
    toString() - Method in class net.corda.node.api.FlowRequiringAttention
    -
     
    -
    toString() - Method in class net.corda.node.api.Criteria.Deal
    -
     
    -
    toString() - Method in class net.corda.node.api.StatesQuery.Selection
    -
     
    -
    toString() - Method in class net.corda.node.api.TransactionBuildStep
    -
     
    toString() - Method in class net.corda.node.CmdLineOptions
     
    toString() - Method in class net.corda.node.driver.NodeHandle
    @@ -13196,6 +13103,10 @@ have been fully resolved using the resolution flow by this point.
     
    toString() - Method in class net.corda.node.utilities.TxnNoteColumns
     
    +
    toString() - Method in class net.corda.node.webserver.api.Criteria.Deal
    +
     
    +
    toString() - Method in class net.corda.node.webserver.api.StatesQuery.Selection
    +
     
    toStringShort($receiver) - Static method in class net.corda.core.crypto.CryptoUtilities
    Render a public key to a string, using a short form if it's an elliptic curve public key
    @@ -13324,14 +13235,6 @@ and commands are right, this class can be used as a holding bucket to gather sig intended to be passed around contracts that may edit it by adding new states/commands. Then once the states and commands are right, this class can be used as a holding bucket to gather signatures from multiple parties.
    -
    TransactionBuildStep - Class in net.corda.node.api
    -
    -
    Encapsulate a generateXXX method call on a contract.
    -
    -
    TransactionBuildStep(generateMethodName, args) - Constructor for class net.corda.node.api.TransactionBuildStep
    -
    -
    Encapsulate a generateXXX method call on a contract.
    -
    TransactionConflictException - Exception in net.corda.core.contracts
     
    TransactionConflictException(conflictRef, tx1, tx2) - Constructor for exception net.corda.core.contracts.TransactionConflictException
    @@ -13454,6 +13357,18 @@ used to set it up. Note that the initializer will be called with the TransientPr will not be serialized to disk, and if it's missing (or the first time it's accessed), the initializer will be used to set it up. Note that the initializer will be called with the TransientProperty object locked. +
    TTxCommand - Class in com.cordatest
    +
     
    +
    TTxCommand() - Constructor for class com.cordatest.TTxCommand
    +
     
    +
    TTxFlow - Class in com.cordatest
    +
     
    +
    TTxFlow(txContent, participants) - Constructor for class com.cordatest.TTxFlow
    +
     
    +
    TTxState - Class in com.cordatest
    +
     
    +
    TTxState(owner, txContent) - Constructor for class com.cordatest.TTxState
    +
     
    TwoPartyDealFlow - Class in net.corda.flows
    Classes for manipulating a two party deal or agreement.
    @@ -13620,7 +13535,7 @@ or transactions observed and the vault.
     
    updateDate(date) - Method in class net.corda.node.utilities.TestClock
     
    -
    upload(data) - Method in interface net.corda.node.services.api.AcceptsFileUpload
    +
    upload(file) - Method in interface net.corda.core.node.services.FileUploader
    Accepts the data in the given input stream, and returns some sort of useful return message that will be sent back to the user in the response.
    @@ -13638,6 +13553,14 @@ back to the user in the response.
    Uploads a jar to the node, returns it's hash.
    +
    uploaders - Variable in class net.corda.node.services.persistence.StorageServiceImpl
    +
     
    +
    uploadFile(dataType, name, file) - Method in interface net.corda.core.messaging.CordaRPCOps
    +
    +
    Deprecated. 
    +
    +
    uploadFile(dataType, name, file) - Method in class net.corda.node.internal.CordaRPCOpsImpl
    +
     
    USD - Static variable in class net.corda.core.contracts.ContractsDSL
     
    use(username, password, block) - Method in class net.corda.node.services.messaging.CordaRPCClient
    @@ -13785,6 +13708,13 @@ consumed by someone else first!
    Returns a pair of all recorded transactions and an observable of future recorded ones.
    +
    verify(tx) - Method in class com.cordatest.TContract
    +
    +
    Takes an object that represents a state transition, and ensures the inputs/outputs/commands make sense. +Must throw an exception if there's a problem that should prevent state transition. Takes a single object +rather than an argument so that additional data can be added without breaking binary compatibility with +existing contract code.
    +
    verify(tx) - Method in class net.corda.contracts.asset.Cash
    Takes an object that represents a state transition, and ensures the inputs/outputs/commands make sense. @@ -13996,13 +13926,13 @@ non-standard lifecycle states on input/output.
    verifyPartialTransaction(untrustedPartialTX) - Method in class net.corda.flows.TwoPartyDealFlow.Primary
     
    -
    verifyProposal(maybeProposal) - Method in class net.corda.flows.AbstractStateReplacementFlow.Acceptor
    +
    verifyProposal(proposal) - Method in class net.corda.flows.AbstractStateReplacementFlow.Acceptor
    Check the state change proposal to confirm that it's acceptable to this node. Rules for verification depend on the change proposed, and may further depend on the node itself (for example configuration). The -proposal is returned if acceptable, otherwise an exception is thrown.
    +proposal is returned if acceptable, otherwise a exception StateReplacementException is thrown.
    -
    verifyProposal(maybeProposal) - Method in class net.corda.flows.NotaryChangeFlow.Acceptor
    +
    verifyProposal(proposal) - Method in class net.corda.flows.NotaryChangeFlow.Acceptor
    Check the notary change proposal.
    @@ -14051,7 +13981,19 @@ public keys are present.
     
    waitForAllNodesToFinish() - Method in interface net.corda.node.driver.DriverDSLExposedInterface
     
    -
    webServer - Variable in class net.corda.node.internal.Node
    +
    waitUntilRegisteredWithNetworkMap() - Method in interface net.corda.core.messaging.CordaRPCOps
    +
    +
    Returns a ListenableFuture which completes when the node has registered wih the network map service. It can also +complete with an exception if it is unable to.
    +
    +
    waitUntilRegisteredWithNetworkMap() - Method in class net.corda.node.internal.CordaRPCOpsImpl
    +
    +
    Returns a ListenableFuture which completes when the node has registered wih the network map service. It can also +complete with an exception if it is unable to.
    +
    +
    WebServer - Class in net.corda.node.webserver
    +
     
    +
    WebServer(config) - Constructor for class net.corda.node.webserver.WebServer
     
    whenConsumed($this, ref) - Static method in class net.corda.core.node.services.VaultService.DefaultImpls
    @@ -14115,8 +14057,6 @@ signatures to have the same identity hash.
    withDeposit($receiver, deposit) - Static method in class net.corda.contracts.asset.CashKt
     
    -
    withError(error) - Method in class net.corda.flows.Result.Companion
    -
     
    withFaceValue(newFaceValue) - Method in class net.corda.contracts.CommercialPaper.State
     
    withFaceValue(newFaceValue) - Method in class net.corda.contracts.CommercialPaperLegacy.State
    diff --git a/docs/build/html/api/javadoc/index.html b/docs/build/html/api/javadoc/index.html index aecb94cb69..bdf35851ce 100644 --- a/docs/build/html/api/javadoc/index.html +++ b/docs/build/html/api/javadoc/index.html @@ -2,15 +2,16 @@ - + Generated Documentation (Untitled) diff --git a/docs/build/html/api/javadoc/net/corda/client/fxutils/package-summary.html b/docs/build/html/api/javadoc/net/corda/client/fxutils/package-summary.html index 2cec564074..ebddd5e2ba 100644 --- a/docs/build/html/api/javadoc/net/corda/client/fxutils/package-summary.html +++ b/docs/build/html/api/javadoc/net/corda/client/fxutils/package-summary.html @@ -2,10 +2,10 @@ - + net.corda.client.fxutils - + @@ -44,7 +44,7 @@
    • withOwner

      -
      public NonExistentClass withOwner(CompositeKey newOwner)
      +
      public net.corda.contracts.ICommercialPaperState withOwner(CompositeKey newOwner)
    @@ -426,7 +426,7 @@ list should just contain the owner.

    @@ -435,7 +435,7 @@ list should just contain the owner.

    @@ -444,7 +444,7 @@ list should just contain the owner.

    • withMaturityDate

      -
      public NonExistentClass withMaturityDate(java.time.Instant newMaturityDate)
      +
      public net.corda.contracts.ICommercialPaperState withMaturityDate(java.time.Instant newMaturityDate)
    diff --git a/docs/build/html/api/javadoc/net/corda/contracts/CommercialPaper.Terms.html b/docs/build/html/api/javadoc/net/corda/contracts/CommercialPaper.Terms.html index 1d977d0cae..378e1cb956 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/CommercialPaper.Terms.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/CommercialPaper.Terms.html @@ -2,10 +2,10 @@ - + CommercialPaper.Terms - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/CommercialPaper.html b/docs/build/html/api/javadoc/net/corda/contracts/CommercialPaper.html index a8f3dfff2f..5138e98e98 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/CommercialPaper.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/CommercialPaper.html @@ -2,10 +2,10 @@ - + CommercialPaper - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/CommercialPaperKt.html b/docs/build/html/api/javadoc/net/corda/contracts/CommercialPaperKt.html index 9e5d8e9523..44bc22a6a8 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/CommercialPaperKt.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/CommercialPaperKt.html @@ -2,10 +2,10 @@ - + CommercialPaperKt - + @@ -143,8 +143,8 @@ is adjusted as if the paper was redeemed and immediately repurchased, but withou CompositeKey owner)  -static NonExistentClass -owned by(NonExistentClass $receiver, +static net.corda.contracts.ICommercialPaperState +owned by(net.corda.contracts.ICommercialPaperState $receiver, CompositeKey newOwner)  @@ -213,8 +213,8 @@ the prototyping phase. It is thus very incomplete.

    Open issues:

    • owned by

      -
      public static NonExistentClass owned by(NonExistentClass $receiver,
      -                                        CompositeKey newOwner)
      +
      public static net.corda.contracts.ICommercialPaperState owned by(net.corda.contracts.ICommercialPaperState $receiver,
      +                                                                 CompositeKey newOwner)
    diff --git a/docs/build/html/api/javadoc/net/corda/contracts/CommercialPaperLegacy.Commands.html b/docs/build/html/api/javadoc/net/corda/contracts/CommercialPaperLegacy.Commands.html index a612d15a5d..0fc8850271 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/CommercialPaperLegacy.Commands.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/CommercialPaperLegacy.Commands.html @@ -2,10 +2,10 @@ - + CommercialPaperLegacy.Commands - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/CommercialPaperLegacy.State.html b/docs/build/html/api/javadoc/net/corda/contracts/CommercialPaperLegacy.State.html index 1dea84ea0c..fe9a9aebe3 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/CommercialPaperLegacy.State.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/CommercialPaperLegacy.State.html @@ -2,10 +2,10 @@ - + CommercialPaperLegacy.State - + @@ -241,15 +241,15 @@ implements toString()  -NonExistentClass +net.corda.contracts.ICommercialPaperState withFaceValue(Amount<net.corda.core.contracts.Issued> newFaceValue)  -NonExistentClass +net.corda.contracts.ICommercialPaperState withIssuance(PartyAndReference newIssuance)  -NonExistentClass +net.corda.contracts.ICommercialPaperState withMaturityDate(java.time.Instant newMaturityDate)  @@ -259,7 +259,7 @@ implements -NonExistentClass +net.corda.contracts.ICommercialPaperState withOwner(CompositeKey newOwner)  @@ -396,7 +396,7 @@ list should just contain the owner.

    • withOwner

      -
      public NonExistentClass withOwner(CompositeKey newOwner)
      +
      public net.corda.contracts.ICommercialPaperState withOwner(CompositeKey newOwner)
    @@ -405,7 +405,7 @@ list should just contain the owner.

    @@ -414,7 +414,7 @@ list should just contain the owner.

    @@ -423,7 +423,7 @@ list should just contain the owner.

    • withMaturityDate

      -
      public NonExistentClass withMaturityDate(java.time.Instant newMaturityDate)
      +
      public net.corda.contracts.ICommercialPaperState withMaturityDate(java.time.Instant newMaturityDate)
    diff --git a/docs/build/html/api/javadoc/net/corda/contracts/CommercialPaperLegacy.html b/docs/build/html/api/javadoc/net/corda/contracts/CommercialPaperLegacy.html index 8849605237..cf43066ab9 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/CommercialPaperLegacy.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/CommercialPaperLegacy.html @@ -2,10 +2,10 @@ - + CommercialPaperLegacy - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/CommercialPaperLegacyKt.html b/docs/build/html/api/javadoc/net/corda/contracts/CommercialPaperLegacyKt.html index 00c440b631..dca476f8d7 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/CommercialPaperLegacyKt.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/CommercialPaperLegacyKt.html @@ -2,10 +2,10 @@ - + CommercialPaperLegacyKt - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/Cash.Clauses.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/Cash.Clauses.html index 589d5fc9ab..2d6a425a07 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/Cash.Clauses.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/Cash.Clauses.html @@ -2,10 +2,10 @@ - + Cash.Clauses - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/Cash.Commands.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/Cash.Commands.html index 8eacb7b5fa..83214bc275 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/Cash.Commands.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/Cash.Commands.html @@ -2,10 +2,10 @@ - + Cash.Commands - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/Cash.State.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/Cash.State.html index da310e23d6..5792d9247a 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/Cash.State.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/Cash.State.html @@ -2,10 +2,10 @@ - + Cash.State - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/Cash.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/Cash.html index 678ecfb160..cb32d14b9a 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/Cash.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/Cash.html @@ -2,10 +2,10 @@ - + Cash - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/CashKt.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/CashKt.html index a2717fb0b7..84be62f886 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/CashKt.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/CashKt.html @@ -2,10 +2,10 @@ - + CashKt - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/Clauses.ConserveAmount.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/Clauses.ConserveAmount.html index af70fef9e7..d908f59e41 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/Clauses.ConserveAmount.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/Clauses.ConserveAmount.html @@ -2,10 +2,10 @@ - + Clauses.ConserveAmount - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/Clauses.Group.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/Clauses.Group.html index 2d9ef32716..81a3c6b886 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/Clauses.Group.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/Clauses.Group.html @@ -2,10 +2,10 @@ - + Clauses.Group - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/Clauses.Issue.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/Clauses.Issue.html index d5dea0e276..9f8f614b69 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/Clauses.Issue.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/Clauses.Issue.html @@ -2,10 +2,10 @@ - + Clauses.Issue - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/Clauses.Net.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/Clauses.Net.html index 86852e087d..c8c8799b5c 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/Clauses.Net.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/Clauses.Net.html @@ -2,10 +2,10 @@ - + Clauses.Net - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/Clauses.SetLifecycle.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/Clauses.SetLifecycle.html index 3c1936b677..aea10f54dd 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/Clauses.SetLifecycle.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/Clauses.SetLifecycle.html @@ -2,10 +2,10 @@ - + Clauses.SetLifecycle - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/Clauses.Settle.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/Clauses.Settle.html index af563a2330..bb6957e5ce 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/Clauses.Settle.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/Clauses.Settle.html @@ -2,10 +2,10 @@ - + Clauses.Settle - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/Clauses.VerifyLifecycle.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/Clauses.VerifyLifecycle.html index 58935fba12..825701e6dd 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/Clauses.VerifyLifecycle.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/Clauses.VerifyLifecycle.html @@ -2,10 +2,10 @@ - + Clauses.VerifyLifecycle - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/Commands.Exit.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/Commands.Exit.html index d832d453bd..6a0517f043 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/Commands.Exit.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/Commands.Exit.html @@ -2,10 +2,10 @@ - + Commands.Exit - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/Commands.Issue.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/Commands.Issue.html index 45e44e5ffb..1c302e7ca1 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/Commands.Issue.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/Commands.Issue.html @@ -2,10 +2,10 @@ - + Commands.Issue - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/Commands.Move.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/Commands.Move.html index fec4bd9a2c..87813e3247 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/Commands.Move.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/Commands.Move.html @@ -2,10 +2,10 @@ - + Commands.Move - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/Commands.Net.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/Commands.Net.html index 1bb2061bec..3e2782359d 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/Commands.Net.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/Commands.Net.html @@ -2,10 +2,10 @@ - + Commands.Net - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/Commands.SetLifecycle.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/Commands.SetLifecycle.html index c52e892bd3..c2584e6c1f 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/Commands.SetLifecycle.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/Commands.SetLifecycle.html @@ -2,10 +2,10 @@ - + Commands.SetLifecycle - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/Commands.Settle.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/Commands.Settle.html index 8825b4c12b..7a0fab0ce4 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/Commands.Settle.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/Commands.Settle.html @@ -2,10 +2,10 @@ - + Commands.Settle - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/CommodityContract.Clauses.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/CommodityContract.Clauses.html index 1ba8493557..d6ef54bd6e 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/CommodityContract.Clauses.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/CommodityContract.Clauses.html @@ -2,10 +2,10 @@ - + CommodityContract.Clauses - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/CommodityContract.Commands.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/CommodityContract.Commands.html index 2e78d2856e..51d789ef13 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/CommodityContract.Commands.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/CommodityContract.Commands.html @@ -2,10 +2,10 @@ - + CommodityContract.Commands - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/CommodityContract.State.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/CommodityContract.State.html index 46a52721a4..29d1f7069e 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/CommodityContract.State.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/CommodityContract.State.html @@ -2,10 +2,10 @@ - + CommodityContract.State - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/CommodityContract.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/CommodityContract.html index f661225dc9..13c4ee96a6 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/CommodityContract.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/CommodityContract.html @@ -2,10 +2,10 @@ - + CommodityContract - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/CommodityContractKt.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/CommodityContractKt.html index b41d7cf8ab..1640f2883a 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/CommodityContractKt.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/CommodityContractKt.html @@ -2,10 +2,10 @@ - + CommodityContractKt - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/Obligation.Clauses.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/Obligation.Clauses.html index 264fa94d10..6221edb5a0 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/Obligation.Clauses.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/Obligation.Clauses.html @@ -2,10 +2,10 @@ - + Obligation.Clauses - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/Obligation.Commands.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/Obligation.Commands.html index 01e276d4a2..271ee86d59 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/Obligation.Commands.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/Obligation.Commands.html @@ -2,10 +2,10 @@ - + Obligation.Commands - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/Obligation.Lifecycle.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/Obligation.Lifecycle.html index a1d3f1744c..2dda72a90a 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/Obligation.Lifecycle.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/Obligation.Lifecycle.html @@ -2,10 +2,10 @@ - + Obligation.Lifecycle - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/Obligation.State.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/Obligation.State.html index 7670da4f54..dd0df059ed 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/Obligation.State.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/Obligation.State.html @@ -2,10 +2,10 @@ - + Obligation.State - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/Obligation.Terms.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/Obligation.Terms.html index 163cc82322..facb0c3152 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/Obligation.Terms.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/Obligation.Terms.html @@ -2,10 +2,10 @@ - + Obligation.Terms - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/Obligation.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/Obligation.html index 687e1344e7..1712640f2d 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/Obligation.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/Obligation.html @@ -2,10 +2,10 @@ - + Obligation - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/ObligationKt.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/ObligationKt.html index 5c5f4f987e..fba5c5b5d2 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/ObligationKt.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/ObligationKt.html @@ -2,10 +2,10 @@ - + ObligationKt - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/OnLedgerAsset.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/OnLedgerAsset.html index 12774238e0..bb728f302a 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/OnLedgerAsset.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/OnLedgerAsset.html @@ -2,10 +2,10 @@ - + OnLedgerAsset - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/package-frame.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/package-frame.html index 58f048670a..b43469b718 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/package-frame.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/package-frame.html @@ -2,10 +2,10 @@ - + net.corda.contracts.asset - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/package-summary.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/package-summary.html index 563bec86e3..c94c407f01 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/package-summary.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/package-summary.html @@ -2,10 +2,10 @@ - + net.corda.contracts.asset - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/asset/package-tree.html b/docs/build/html/api/javadoc/net/corda/contracts/asset/package-tree.html index bad02069c8..c86ee1d853 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/asset/package-tree.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/asset/package-tree.html @@ -2,10 +2,10 @@ - + net.corda.contracts.asset Class Hierarchy - + @@ -125,9 +125,9 @@
  • net.corda.contracts.asset.Obligation.Terms<P>
  • net.corda.contracts.asset.CommodityContract.State (implements net.corda.core.contracts.FungibleAsset<T>)
  • net.corda.contracts.asset.Commands.SetLifecycle (implements net.corda.contracts.asset.Obligation.Commands)
  • +
  • net.corda.contracts.asset.Cash.State (implements net.corda.core.contracts.FungibleAsset<T>, net.corda.core.schemas.QueryableState)
  • net.corda.contracts.asset.Commands.Net (implements net.corda.contracts.asset.Obligation.Commands, net.corda.core.contracts.NetCommand)
  • net.corda.contracts.asset.Commands.Settle<P> (implements net.corda.contracts.asset.Obligation.Commands)
  • -
  • net.corda.contracts.asset.Cash.State (implements net.corda.core.contracts.FungibleAsset<T>, net.corda.core.schemas.QueryableState)
  • net.corda.contracts.asset.Commands.Exit<P> (implements net.corda.contracts.asset.Obligation.Commands, net.corda.core.contracts.Commands.Exit<T>)
  • net.corda.contracts.asset.Commands.Exit (implements net.corda.contracts.asset.CommodityContract.Commands, net.corda.core.contracts.Commands.Exit<T>)
  • net.corda.contracts.asset.Commands.Move (implements net.corda.contracts.asset.Cash.Commands, net.corda.core.contracts.Commands.Move)
  • diff --git a/docs/build/html/api/javadoc/net/corda/contracts/clause/AbstractConserveAmount.html b/docs/build/html/api/javadoc/net/corda/contracts/clause/AbstractConserveAmount.html index 162868c994..db22274268 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/clause/AbstractConserveAmount.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/clause/AbstractConserveAmount.html @@ -2,10 +2,10 @@ - + AbstractConserveAmount - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/clause/AbstractIssue.html b/docs/build/html/api/javadoc/net/corda/contracts/clause/AbstractIssue.html index d753adb645..4ff05907ec 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/clause/AbstractIssue.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/clause/AbstractIssue.html @@ -2,10 +2,10 @@ - + AbstractIssue - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/clause/BilateralNetState.html b/docs/build/html/api/javadoc/net/corda/contracts/clause/BilateralNetState.html index a6fe8e5ee9..8de2762f2e 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/clause/BilateralNetState.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/clause/BilateralNetState.html @@ -2,10 +2,10 @@ - + BilateralNetState - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/clause/MultilateralNetState.html b/docs/build/html/api/javadoc/net/corda/contracts/clause/MultilateralNetState.html index 2593d17eca..c88a704df1 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/clause/MultilateralNetState.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/clause/MultilateralNetState.html @@ -2,10 +2,10 @@ - + MultilateralNetState - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/clause/NetClause.html b/docs/build/html/api/javadoc/net/corda/contracts/clause/NetClause.html index 6b45af3330..fe0974f9d3 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/clause/NetClause.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/clause/NetClause.html @@ -2,10 +2,10 @@ - + NetClause - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/clause/NetState.html b/docs/build/html/api/javadoc/net/corda/contracts/clause/NetState.html index 7d4beab93f..089d99a5d8 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/clause/NetState.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/clause/NetState.html @@ -2,10 +2,10 @@ - + NetState - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/clause/NoZeroSizedOutputs.html b/docs/build/html/api/javadoc/net/corda/contracts/clause/NoZeroSizedOutputs.html index 7ccc173634..8c7dcf3503 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/clause/NoZeroSizedOutputs.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/clause/NoZeroSizedOutputs.html @@ -2,10 +2,10 @@ - + NoZeroSizedOutputs - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/clause/package-frame.html b/docs/build/html/api/javadoc/net/corda/contracts/clause/package-frame.html index 14faf4739e..506a8d51d3 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/clause/package-frame.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/clause/package-frame.html @@ -2,10 +2,10 @@ - + net.corda.contracts.clause - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/clause/package-summary.html b/docs/build/html/api/javadoc/net/corda/contracts/clause/package-summary.html index 5ef9ce00a7..f7a8fc0b89 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/clause/package-summary.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/clause/package-summary.html @@ -2,10 +2,10 @@ - + net.corda.contracts.clause - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/clause/package-tree.html b/docs/build/html/api/javadoc/net/corda/contracts/clause/package-tree.html index 89381019ec..c4e1094eca 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/clause/package-tree.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/clause/package-tree.html @@ -2,10 +2,10 @@ - + net.corda.contracts.clause Class Hierarchy - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/package-frame.html b/docs/build/html/api/javadoc/net/corda/contracts/package-frame.html index c61c02dd61..b04f38eb52 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/package-frame.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/package-frame.html @@ -2,10 +2,10 @@ - + net.corda.contracts - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/package-summary.html b/docs/build/html/api/javadoc/net/corda/contracts/package-summary.html index b85620a96f..54d6cdce11 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/package-summary.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/package-summary.html @@ -2,10 +2,10 @@ - + net.corda.contracts - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/package-tree.html b/docs/build/html/api/javadoc/net/corda/contracts/package-tree.html index 3074a12ad1..a5bb67aacb 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/package-tree.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/package-tree.html @@ -2,10 +2,10 @@ - + net.corda.contracts Class Hierarchy - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/testing/CommandDataGenerator.html b/docs/build/html/api/javadoc/net/corda/contracts/testing/CommandDataGenerator.html index 2dae96d9e6..820e097533 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/testing/CommandDataGenerator.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/testing/CommandDataGenerator.html @@ -2,10 +2,10 @@ - + CommandDataGenerator - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/testing/CommandGenerator.html b/docs/build/html/api/javadoc/net/corda/contracts/testing/CommandGenerator.html index 4702f3b4cf..60a2317c1b 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/testing/CommandGenerator.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/testing/CommandGenerator.html @@ -2,10 +2,10 @@ - + CommandGenerator - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/testing/ContractStateGenerator.html b/docs/build/html/api/javadoc/net/corda/contracts/testing/ContractStateGenerator.html index ebac1edf1c..857902d952 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/testing/ContractStateGenerator.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/testing/ContractStateGenerator.html @@ -2,10 +2,10 @@ - + ContractStateGenerator - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/testing/ExitGenerator.html b/docs/build/html/api/javadoc/net/corda/contracts/testing/ExitGenerator.html index c6215bc1f1..5356715695 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/testing/ExitGenerator.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/testing/ExitGenerator.html @@ -2,10 +2,10 @@ - + ExitGenerator - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/testing/IssueGenerator.html b/docs/build/html/api/javadoc/net/corda/contracts/testing/IssueGenerator.html index 5fdd265299..4618439eec 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/testing/IssueGenerator.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/testing/IssueGenerator.html @@ -2,10 +2,10 @@ - + IssueGenerator - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/testing/MoveGenerator.html b/docs/build/html/api/javadoc/net/corda/contracts/testing/MoveGenerator.html index 1e1068a92c..66437e3504 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/testing/MoveGenerator.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/testing/MoveGenerator.html @@ -2,10 +2,10 @@ - + MoveGenerator - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/testing/SignedTransactionGenerator.html b/docs/build/html/api/javadoc/net/corda/contracts/testing/SignedTransactionGenerator.html index f59fe4bb00..bc12065933 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/testing/SignedTransactionGenerator.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/testing/SignedTransactionGenerator.html @@ -2,10 +2,10 @@ - + SignedTransactionGenerator - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/testing/VaultFiller.html b/docs/build/html/api/javadoc/net/corda/contracts/testing/VaultFiller.html index f47ca73740..ddab68f1de 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/testing/VaultFiller.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/testing/VaultFiller.html @@ -2,10 +2,10 @@ - + VaultFiller - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/testing/WiredTransactionGenerator.html b/docs/build/html/api/javadoc/net/corda/contracts/testing/WiredTransactionGenerator.html index 34a16375b7..a489559798 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/testing/WiredTransactionGenerator.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/testing/WiredTransactionGenerator.html @@ -2,10 +2,10 @@ - + WiredTransactionGenerator - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/testing/package-frame.html b/docs/build/html/api/javadoc/net/corda/contracts/testing/package-frame.html index d9ead28c54..a9b8f6b184 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/testing/package-frame.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/testing/package-frame.html @@ -2,10 +2,10 @@ - + net.corda.contracts.testing - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/testing/package-summary.html b/docs/build/html/api/javadoc/net/corda/contracts/testing/package-summary.html index e37409541e..307f119c76 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/testing/package-summary.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/testing/package-summary.html @@ -2,10 +2,10 @@ - + net.corda.contracts.testing - + diff --git a/docs/build/html/api/javadoc/net/corda/contracts/testing/package-tree.html b/docs/build/html/api/javadoc/net/corda/contracts/testing/package-tree.html index 6032d3c8d6..5d5ba0eb33 100644 --- a/docs/build/html/api/javadoc/net/corda/contracts/testing/package-tree.html +++ b/docs/build/html/api/javadoc/net/corda/contracts/testing/package-tree.html @@ -2,10 +2,10 @@ - + net.corda.contracts.testing Class Hierarchy - + diff --git a/docs/build/html/api/javadoc/net/corda/core/ErrorOr.Companion.html b/docs/build/html/api/javadoc/net/corda/core/ErrorOr.Companion.html index 578b305506..9212017750 100644 --- a/docs/build/html/api/javadoc/net/corda/core/ErrorOr.Companion.html +++ b/docs/build/html/api/javadoc/net/corda/core/ErrorOr.Companion.html @@ -2,10 +2,10 @@ - + ErrorOr.Companion - + diff --git a/docs/build/html/api/javadoc/net/corda/core/ErrorOr.html b/docs/build/html/api/javadoc/net/corda/core/ErrorOr.html index 867077001d..d1c47639da 100644 --- a/docs/build/html/api/javadoc/net/corda/core/ErrorOr.html +++ b/docs/build/html/api/javadoc/net/corda/core/ErrorOr.html @@ -2,10 +2,10 @@ - + ErrorOr - + diff --git a/docs/build/html/api/javadoc/net/corda/core/RetryableException.html b/docs/build/html/api/javadoc/net/corda/core/RetryableException.html index 868ae70c6e..c4be091e53 100644 --- a/docs/build/html/api/javadoc/net/corda/core/RetryableException.html +++ b/docs/build/html/api/javadoc/net/corda/core/RetryableException.html @@ -2,10 +2,10 @@ - + RetryableException - + diff --git a/docs/build/html/api/javadoc/net/corda/core/ThreadBox.html b/docs/build/html/api/javadoc/net/corda/core/ThreadBox.html index 28dcdfb033..9923b6ede8 100644 --- a/docs/build/html/api/javadoc/net/corda/core/ThreadBox.html +++ b/docs/build/html/api/javadoc/net/corda/core/ThreadBox.html @@ -2,10 +2,10 @@ - + ThreadBox - + diff --git a/docs/build/html/api/javadoc/net/corda/core/TransientProperty.html b/docs/build/html/api/javadoc/net/corda/core/TransientProperty.html index b40d9b2ef1..c2edd9513e 100644 --- a/docs/build/html/api/javadoc/net/corda/core/TransientProperty.html +++ b/docs/build/html/api/javadoc/net/corda/core/TransientProperty.html @@ -2,10 +2,10 @@ - + TransientProperty - + diff --git a/docs/build/html/api/javadoc/net/corda/core/Utils.html b/docs/build/html/api/javadoc/net/corda/core/Utils.html index bbbcc33652..ce77132a27 100644 --- a/docs/build/html/api/javadoc/net/corda/core/Utils.html +++ b/docs/build/html/api/javadoc/net/corda/core/Utils.html @@ -2,10 +2,10 @@ - + Utils - + @@ -455,12 +455,13 @@ avoid potential bugs where the value is used in a context where negative numbers static <T> com.google.common.util.concurrent.ListenableFuture<T> toFuture(rx.Observable<T> $receiver)
    Returns a ListenableFuture bound to the first item emitted by this Observable. The future will complete with a -NoSuchElementException if no items are emitted or any other error thrown by the Observable.
    +NoSuchElementException if no items are emitted or any other error thrown by the Observable. If it's cancelled then +it will unsubscribe from the observable. static <A> rx.Observable<A> -toObservable(com.google.common.util.concurrent.ListenableFuture<A> $receiver)  +toObservable(com.google.common.util.concurrent.ListenableFuture<? extends A> $receiver)  static java.time.Duration @@ -745,7 +746,7 @@ avoid potential bugs where the value is used in a context where negative numbers
    • toObservable

      -
      public static <A> rx.Observable<A> toObservable(com.google.common.util.concurrent.ListenableFuture<A> $receiver)
      +
      public static <A> rx.Observable<A> toObservable(com.google.common.util.concurrent.ListenableFuture<? extends A> $receiver)
    @@ -1071,7 +1072,8 @@ or throws if more than one element was found.

    toFuture

    public static <T> com.google.common.util.concurrent.ListenableFuture<T> toFuture(rx.Observable<T> $receiver)

    Returns a ListenableFuture bound to the first item emitted by this Observable. The future will complete with a -NoSuchElementException if no items are emitted or any other error thrown by the Observable.

    +NoSuchElementException if no items are emitted or any other error thrown by the Observable. If it's cancelled then +it will unsubscribe from the observable.

    diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/AccrualAdjustment.html b/docs/build/html/api/javadoc/net/corda/core/contracts/AccrualAdjustment.html index f892bb0b9a..f56c602713 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/AccrualAdjustment.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/AccrualAdjustment.html @@ -2,10 +2,10 @@ - + AccrualAdjustment - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/Amount.Companion.html b/docs/build/html/api/javadoc/net/corda/core/contracts/Amount.Companion.html index 56e07864b8..4111a1b6a0 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/Amount.Companion.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/Amount.Companion.html @@ -2,10 +2,10 @@ - + Amount.Companion - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/Amount.html b/docs/build/html/api/javadoc/net/corda/core/contracts/Amount.html index 305cf397f2..cefcbfb7a8 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/Amount.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/Amount.html @@ -2,10 +2,10 @@ - + Amount - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/Attachment.DefaultImpls.html b/docs/build/html/api/javadoc/net/corda/core/contracts/Attachment.DefaultImpls.html index d4c8360c7b..289b0c8a5e 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/Attachment.DefaultImpls.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/Attachment.DefaultImpls.html @@ -2,10 +2,10 @@ - + Attachment.DefaultImpls - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/Attachment.html b/docs/build/html/api/javadoc/net/corda/core/contracts/Attachment.html index 12e0b790c7..0e7bef9b62 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/Attachment.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/Attachment.html @@ -2,10 +2,10 @@ - + Attachment - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/AuthenticatedObject.html b/docs/build/html/api/javadoc/net/corda/core/contracts/AuthenticatedObject.html index 4596f579d1..e8cf5fd793 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/AuthenticatedObject.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/AuthenticatedObject.html @@ -2,10 +2,10 @@ - + AuthenticatedObject - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/BilateralNettableState.html b/docs/build/html/api/javadoc/net/corda/core/contracts/BilateralNettableState.html index 9fa909c2e3..b845c359b6 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/BilateralNettableState.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/BilateralNettableState.html @@ -2,10 +2,10 @@ - + BilateralNettableState - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/BusinessCalendar.Companion.html b/docs/build/html/api/javadoc/net/corda/core/contracts/BusinessCalendar.Companion.html index 943f3d2394..cebf4d4b01 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/BusinessCalendar.Companion.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/BusinessCalendar.Companion.html @@ -2,10 +2,10 @@ - + BusinessCalendar.Companion - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/BusinessCalendar.UnknownCalendar.html b/docs/build/html/api/javadoc/net/corda/core/contracts/BusinessCalendar.UnknownCalendar.html index 4c679b02c2..9a07d2d43d 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/BusinessCalendar.UnknownCalendar.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/BusinessCalendar.UnknownCalendar.html @@ -2,10 +2,10 @@ - + BusinessCalendar.UnknownCalendar - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/BusinessCalendar.html b/docs/build/html/api/javadoc/net/corda/core/contracts/BusinessCalendar.html index 547c6ceeed..ee04781f4a 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/BusinessCalendar.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/BusinessCalendar.html @@ -2,10 +2,10 @@ - + BusinessCalendar - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/Command.html b/docs/build/html/api/javadoc/net/corda/core/contracts/Command.html index a5515fa532..c16e4236d1 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/Command.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/Command.html @@ -2,10 +2,10 @@ - + Command - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/CommandData.html b/docs/build/html/api/javadoc/net/corda/core/contracts/CommandData.html index 91e3aa743c..3ce34129a1 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/CommandData.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/CommandData.html @@ -2,10 +2,10 @@ - + CommandData - + @@ -100,7 +100,7 @@
    All Known Implementing Classes:
    -
    Commands.Create, Commands.Exit, Commands.Exit, Commands.Exit, Fix, Commands.Issue, Commands.Issue, Commands.Issue, Commands.Issue, Commands.Issue, Commands.Move, Commands.Move, Commands.Move, Commands.Move, Commands.Move, Commands.Move, Commands.Net, Commands.Redeem, Commands.Redeem, Commands.SetLifecycle, Commands.Settle, TypeOnlyCommandData
    +
    Commands.Create, Commands.Exit, Commands.Exit, Commands.Exit, Fix, Commands.Issue, Commands.Issue, Commands.Issue, Commands.Issue, Commands.Issue, Commands.Move, Commands.Move, Commands.Move, Commands.Move, Commands.Move, Commands.Move, Commands.Net, Commands.Redeem, Commands.Redeem, Commands.SetLifecycle, Commands.Settle, TGenesisCommand, TTxCommand, TypeOnlyCommandData


    diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/Commands.Create.html b/docs/build/html/api/javadoc/net/corda/core/contracts/Commands.Create.html index f87aada74c..a073db7171 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/Commands.Create.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/Commands.Create.html @@ -2,10 +2,10 @@ - + Commands.Create - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/Commands.Exit.html b/docs/build/html/api/javadoc/net/corda/core/contracts/Commands.Exit.html index b6e5984691..9c3b439dd0 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/Commands.Exit.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/Commands.Exit.html @@ -2,10 +2,10 @@ - + Commands.Exit - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/Commands.Issue.html b/docs/build/html/api/javadoc/net/corda/core/contracts/Commands.Issue.html index 96810110c0..ed511d82c5 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/Commands.Issue.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/Commands.Issue.html @@ -2,10 +2,10 @@ - + Commands.Issue - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/Commands.Move.html b/docs/build/html/api/javadoc/net/corda/core/contracts/Commands.Move.html index f9bd4b6423..968fab3ddc 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/Commands.Move.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/Commands.Move.html @@ -2,10 +2,10 @@ - + Commands.Move - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/Commodity.Companion.html b/docs/build/html/api/javadoc/net/corda/core/contracts/Commodity.Companion.html index 179c9a427a..1555225b52 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/Commodity.Companion.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/Commodity.Companion.html @@ -2,10 +2,10 @@ - + Commodity.Companion - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/Commodity.html b/docs/build/html/api/javadoc/net/corda/core/contracts/Commodity.html index f1a2d998b9..30e7d0fa3c 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/Commodity.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/Commodity.html @@ -2,10 +2,10 @@ - + Commodity - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/Contract.html b/docs/build/html/api/javadoc/net/corda/core/contracts/Contract.html index c74466dd67..d9d0ed8851 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/Contract.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/Contract.html @@ -2,10 +2,10 @@ - + Contract - + @@ -104,7 +104,7 @@ var activeTableTab = "activeTableTab";
  • All Known Implementing Classes:
    -
    Cash, CommercialPaper, CommercialPaperLegacy, CommodityContract, DummyContract, Obligation, OnLedgerAsset
    +
    Cash, CommercialPaper, CommercialPaperLegacy, CommodityContract, DummyContract, Obligation, OnLedgerAsset, TContract


    diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/ContractState.html b/docs/build/html/api/javadoc/net/corda/core/contracts/ContractState.html index b11cdfc6e7..3536a066a6 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/ContractState.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/ContractState.html @@ -2,10 +2,10 @@ - + ContractState - + @@ -108,7 +108,7 @@ var activeTableTab = "activeTableTab";
  • All Known Implementing Classes:
    -
    DummyState, DummyContract.MultiOwnerState, DummyContract.SingleOwnerState, Cash.State, CommodityContract.State, CommercialPaperLegacy.State, Obligation.State, CommercialPaper.State
    +
    DummyState, DummyContract.MultiOwnerState, DummyContract.SingleOwnerState, Cash.State, CommodityContract.State, CommercialPaperLegacy.State, Obligation.State, CommercialPaper.State, TTxState


    diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/ContractsDSL.html b/docs/build/html/api/javadoc/net/corda/core/contracts/ContractsDSL.html index 2762cff71e..eb09a871e0 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/ContractsDSL.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/ContractsDSL.html @@ -2,10 +2,10 @@ - + ContractsDSL - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/DateRollConvention.Actual.html b/docs/build/html/api/javadoc/net/corda/core/contracts/DateRollConvention.Actual.html index d9331b89e6..74ccb0d409 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/DateRollConvention.Actual.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/DateRollConvention.Actual.html @@ -2,10 +2,10 @@ - + DateRollConvention.Actual - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/DateRollConvention.Following.html b/docs/build/html/api/javadoc/net/corda/core/contracts/DateRollConvention.Following.html index 9d056a316a..0bc236d1d8 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/DateRollConvention.Following.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/DateRollConvention.Following.html @@ -2,10 +2,10 @@ - + DateRollConvention.Following - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/DateRollConvention.ModifiedFollowing.html b/docs/build/html/api/javadoc/net/corda/core/contracts/DateRollConvention.ModifiedFollowing.html index 32a7dc2c89..97bec07e0e 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/DateRollConvention.ModifiedFollowing.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/DateRollConvention.ModifiedFollowing.html @@ -2,10 +2,10 @@ - + DateRollConvention.ModifiedFollowing - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/DateRollConvention.ModifiedPrevious.html b/docs/build/html/api/javadoc/net/corda/core/contracts/DateRollConvention.ModifiedPrevious.html index 48a2ed18a4..30123a07cb 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/DateRollConvention.ModifiedPrevious.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/DateRollConvention.ModifiedPrevious.html @@ -2,10 +2,10 @@ - + DateRollConvention.ModifiedPrevious - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/DateRollConvention.Previous.html b/docs/build/html/api/javadoc/net/corda/core/contracts/DateRollConvention.Previous.html index dee6b534c1..3bfbdd6211 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/DateRollConvention.Previous.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/DateRollConvention.Previous.html @@ -2,10 +2,10 @@ - + DateRollConvention.Previous - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/DateRollConvention.html b/docs/build/html/api/javadoc/net/corda/core/contracts/DateRollConvention.html index 8e02692305..3085a2aee8 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/DateRollConvention.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/DateRollConvention.html @@ -2,10 +2,10 @@ - + DateRollConvention - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/DateRollDirection.html b/docs/build/html/api/javadoc/net/corda/core/contracts/DateRollDirection.html index 0a6a383f74..0f94c91ba4 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/DateRollDirection.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/DateRollDirection.html @@ -2,10 +2,10 @@ - + DateRollDirection - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/DayCountBasisDay.html b/docs/build/html/api/javadoc/net/corda/core/contracts/DayCountBasisDay.html index 4f66324827..33b5c14f77 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/DayCountBasisDay.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/DayCountBasisDay.html @@ -2,10 +2,10 @@ - + DayCountBasisDay - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/DayCountBasisYear.html b/docs/build/html/api/javadoc/net/corda/core/contracts/DayCountBasisYear.html index bcc6301181..1e5b9ccefc 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/DayCountBasisYear.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/DayCountBasisYear.html @@ -2,10 +2,10 @@ - + DayCountBasisYear - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/DealState.html b/docs/build/html/api/javadoc/net/corda/core/contracts/DealState.html index 5c02f6f7cf..f9f8abdece 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/DealState.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/DealState.html @@ -2,10 +2,10 @@ - + DealState - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/DummyContract.Commands.html b/docs/build/html/api/javadoc/net/corda/core/contracts/DummyContract.Commands.html index 15d161f3b7..a747d22f95 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/DummyContract.Commands.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/DummyContract.Commands.html @@ -2,10 +2,10 @@ - + DummyContract.Commands - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/DummyContract.Companion.html b/docs/build/html/api/javadoc/net/corda/core/contracts/DummyContract.Companion.html index b2de2290e9..8797e766a3 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/DummyContract.Companion.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/DummyContract.Companion.html @@ -2,10 +2,10 @@ - + DummyContract.Companion - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/DummyContract.MultiOwnerState.html b/docs/build/html/api/javadoc/net/corda/core/contracts/DummyContract.MultiOwnerState.html index cb697b5641..c0c0f58108 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/DummyContract.MultiOwnerState.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/DummyContract.MultiOwnerState.html @@ -2,10 +2,10 @@ - + DummyContract.MultiOwnerState - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/DummyContract.SingleOwnerState.html b/docs/build/html/api/javadoc/net/corda/core/contracts/DummyContract.SingleOwnerState.html index 40d6281168..8e4aff89f4 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/DummyContract.SingleOwnerState.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/DummyContract.SingleOwnerState.html @@ -2,10 +2,10 @@ - + DummyContract.SingleOwnerState - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/DummyContract.State.html b/docs/build/html/api/javadoc/net/corda/core/contracts/DummyContract.State.html index 2036efefcb..fe87fdfd36 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/DummyContract.State.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/DummyContract.State.html @@ -2,10 +2,10 @@ - + DummyContract.State - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/DummyContract.html b/docs/build/html/api/javadoc/net/corda/core/contracts/DummyContract.html index 2b9248f690..a32e92d78b 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/DummyContract.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/DummyContract.html @@ -2,10 +2,10 @@ - + DummyContract - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/DummyContractKt.html b/docs/build/html/api/javadoc/net/corda/core/contracts/DummyContractKt.html index ede297b1f1..c734e26a82 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/DummyContractKt.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/DummyContractKt.html @@ -2,10 +2,10 @@ - + DummyContractKt - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/DummyState.html b/docs/build/html/api/javadoc/net/corda/core/contracts/DummyState.html index c172d75ba8..05e0593192 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/DummyState.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/DummyState.html @@ -2,10 +2,10 @@ - + DummyState - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/Expression.html b/docs/build/html/api/javadoc/net/corda/core/contracts/Expression.html index 36263e1759..f4af28b463 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/Expression.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/Expression.html @@ -2,10 +2,10 @@ - + Expression - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/ExpressionDeserializer.html b/docs/build/html/api/javadoc/net/corda/core/contracts/ExpressionDeserializer.html index 4145629f64..1800c55654 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/ExpressionDeserializer.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/ExpressionDeserializer.html @@ -2,10 +2,10 @@ - + ExpressionDeserializer - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/ExpressionSerializer.html b/docs/build/html/api/javadoc/net/corda/core/contracts/ExpressionSerializer.html index 8ac26cb8de..5548e1af71 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/ExpressionSerializer.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/ExpressionSerializer.html @@ -2,10 +2,10 @@ - + ExpressionSerializer - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/FinanceTypesKt.html b/docs/build/html/api/javadoc/net/corda/core/contracts/FinanceTypesKt.html index 3ccbe47d5e..c33b1ecec3 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/FinanceTypesKt.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/FinanceTypesKt.html @@ -2,10 +2,10 @@ - + FinanceTypesKt - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/Fix.html b/docs/build/html/api/javadoc/net/corda/core/contracts/Fix.html index 7006d0a5d4..c6239bdd35 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/Fix.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/Fix.html @@ -2,10 +2,10 @@ - + Fix - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/FixOf.html b/docs/build/html/api/javadoc/net/corda/core/contracts/FixOf.html index fc2b66132b..01d1be4de8 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/FixOf.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/FixOf.html @@ -2,10 +2,10 @@ - + FixOf - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/FixableDealState.html b/docs/build/html/api/javadoc/net/corda/core/contracts/FixableDealState.html index 19f0060675..b4490875f6 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/FixableDealState.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/FixableDealState.html @@ -2,10 +2,10 @@ - + FixableDealState - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/Frequency.Annual.html b/docs/build/html/api/javadoc/net/corda/core/contracts/Frequency.Annual.html index bd5263a6b9..93a9a4006d 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/Frequency.Annual.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/Frequency.Annual.html @@ -2,10 +2,10 @@ - + Frequency.Annual - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/Frequency.BiWeekly.html b/docs/build/html/api/javadoc/net/corda/core/contracts/Frequency.BiWeekly.html index b32c38daa4..2ded501657 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/Frequency.BiWeekly.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/Frequency.BiWeekly.html @@ -2,10 +2,10 @@ - + Frequency.BiWeekly - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/Frequency.Daily.html b/docs/build/html/api/javadoc/net/corda/core/contracts/Frequency.Daily.html index 7fa798147d..87cf7b89c0 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/Frequency.Daily.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/Frequency.Daily.html @@ -2,10 +2,10 @@ - + Frequency.Daily - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/Frequency.Monthly.html b/docs/build/html/api/javadoc/net/corda/core/contracts/Frequency.Monthly.html index 8f60a0cfba..7bc5198447 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/Frequency.Monthly.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/Frequency.Monthly.html @@ -2,10 +2,10 @@ - + Frequency.Monthly - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/Frequency.Quarterly.html b/docs/build/html/api/javadoc/net/corda/core/contracts/Frequency.Quarterly.html index 0dce0e9fdd..9da703e7c9 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/Frequency.Quarterly.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/Frequency.Quarterly.html @@ -2,10 +2,10 @@ - + Frequency.Quarterly - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/Frequency.SemiAnnual.html b/docs/build/html/api/javadoc/net/corda/core/contracts/Frequency.SemiAnnual.html index 0937d8fc0e..4012b0bbaf 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/Frequency.SemiAnnual.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/Frequency.SemiAnnual.html @@ -2,10 +2,10 @@ - + Frequency.SemiAnnual - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/Frequency.Weekly.html b/docs/build/html/api/javadoc/net/corda/core/contracts/Frequency.Weekly.html index 735e7af22b..fb2fd2eca9 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/Frequency.Weekly.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/Frequency.Weekly.html @@ -2,10 +2,10 @@ - + Frequency.Weekly - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/Frequency.html b/docs/build/html/api/javadoc/net/corda/core/contracts/Frequency.html index 352a10cf77..1030b4cade 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/Frequency.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/Frequency.html @@ -2,10 +2,10 @@ - + Frequency - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/FungibleAsset.Commands.html b/docs/build/html/api/javadoc/net/corda/core/contracts/FungibleAsset.Commands.html index f9ec49314e..68242a56c4 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/FungibleAsset.Commands.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/FungibleAsset.Commands.html @@ -2,10 +2,10 @@ - + FungibleAsset.Commands - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/FungibleAsset.html b/docs/build/html/api/javadoc/net/corda/core/contracts/FungibleAsset.html index 89fd4caa88..2a9598ede7 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/FungibleAsset.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/FungibleAsset.html @@ -2,10 +2,10 @@ - + FungibleAsset - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/FungibleAssetKt.html b/docs/build/html/api/javadoc/net/corda/core/contracts/FungibleAssetKt.html index 6fe6ec7032..82736a719e 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/FungibleAssetKt.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/FungibleAssetKt.html @@ -2,10 +2,10 @@ - + FungibleAssetKt - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/General.Builder.html b/docs/build/html/api/javadoc/net/corda/core/contracts/General.Builder.html index 6a1ab735d6..561cddf116 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/General.Builder.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/General.Builder.html @@ -2,10 +2,10 @@ - + General.Builder - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/InsufficientBalanceException.html b/docs/build/html/api/javadoc/net/corda/core/contracts/InsufficientBalanceException.html index 6797c01f05..d80b125c2f 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/InsufficientBalanceException.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/InsufficientBalanceException.html @@ -2,10 +2,10 @@ - + InsufficientBalanceException - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/IssuanceDefinition.html b/docs/build/html/api/javadoc/net/corda/core/contracts/IssuanceDefinition.html index 0526c1b308..376c4b473f 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/IssuanceDefinition.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/IssuanceDefinition.html @@ -2,10 +2,10 @@ - + IssuanceDefinition - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/IssueCommand.html b/docs/build/html/api/javadoc/net/corda/core/contracts/IssueCommand.html index 8a8c2a639f..afcd70c56a 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/IssueCommand.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/IssueCommand.html @@ -2,10 +2,10 @@ - + IssueCommand - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/Issued.html b/docs/build/html/api/javadoc/net/corda/core/contracts/Issued.html index 9511ac6fb8..8a6c04787c 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/Issued.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/Issued.html @@ -2,10 +2,10 @@ - + Issued - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/LinearState.ClauseVerifier.html b/docs/build/html/api/javadoc/net/corda/core/contracts/LinearState.ClauseVerifier.html index f921195b26..73fe0eb5ea 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/LinearState.ClauseVerifier.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/LinearState.ClauseVerifier.html @@ -2,10 +2,10 @@ - + LinearState.ClauseVerifier - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/LinearState.html b/docs/build/html/api/javadoc/net/corda/core/contracts/LinearState.html index 7c0ba87ccb..78c73e6559 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/LinearState.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/LinearState.html @@ -2,10 +2,10 @@ - + LinearState - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/MoveCommand.html b/docs/build/html/api/javadoc/net/corda/core/contracts/MoveCommand.html index 44a237e4d0..442f9bba65 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/MoveCommand.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/MoveCommand.html @@ -2,10 +2,10 @@ - + MoveCommand - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/MultilateralNettableState.html b/docs/build/html/api/javadoc/net/corda/core/contracts/MultilateralNettableState.html index 9025754979..a40817eed4 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/MultilateralNettableState.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/MultilateralNettableState.html @@ -2,10 +2,10 @@ - + MultilateralNettableState - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/NamedByHash.html b/docs/build/html/api/javadoc/net/corda/core/contracts/NamedByHash.html index d2cb19ee13..36110ca284 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/NamedByHash.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/NamedByHash.html @@ -2,10 +2,10 @@ - + NamedByHash - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/NetCommand.html b/docs/build/html/api/javadoc/net/corda/core/contracts/NetCommand.html index 824c8c6a41..f9d8ac4eac 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/NetCommand.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/NetCommand.html @@ -2,10 +2,10 @@ - + NetCommand - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/NetType.html b/docs/build/html/api/javadoc/net/corda/core/contracts/NetType.html index 80ef5a1371..6c609dbfcc 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/NetType.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/NetType.html @@ -2,10 +2,10 @@ - + NetType - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/NettableState.html b/docs/build/html/api/javadoc/net/corda/core/contracts/NettableState.html index bdb5afa66c..30457e498d 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/NettableState.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/NettableState.html @@ -2,10 +2,10 @@ - + NettableState - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/NotaryChange.Builder.html b/docs/build/html/api/javadoc/net/corda/core/contracts/NotaryChange.Builder.html index f43a149307..ba72aa3dd6 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/NotaryChange.Builder.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/NotaryChange.Builder.html @@ -2,10 +2,10 @@ - + NotaryChange.Builder - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/OwnableState.html b/docs/build/html/api/javadoc/net/corda/core/contracts/OwnableState.html index bf7897565b..100fbc7283 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/OwnableState.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/OwnableState.html @@ -2,10 +2,10 @@ - + OwnableState - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/PartyAndReference.html b/docs/build/html/api/javadoc/net/corda/core/contracts/PartyAndReference.html index e2768226d5..9becb0703b 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/PartyAndReference.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/PartyAndReference.html @@ -2,10 +2,10 @@ - + PartyAndReference - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/PaymentRule.html b/docs/build/html/api/javadoc/net/corda/core/contracts/PaymentRule.html index 9fbe931cae..7f9863f473 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/PaymentRule.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/PaymentRule.html @@ -2,10 +2,10 @@ - + PaymentRule - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/Requirements.html b/docs/build/html/api/javadoc/net/corda/core/contracts/Requirements.html index fbac4aea2b..4a410c02a9 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/Requirements.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/Requirements.html @@ -2,10 +2,10 @@ - + Requirements - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/SchedulableState.html b/docs/build/html/api/javadoc/net/corda/core/contracts/SchedulableState.html index 596a22bb2a..dd8bcc4f43 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/SchedulableState.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/SchedulableState.html @@ -2,10 +2,10 @@ - + SchedulableState - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/Scheduled.html b/docs/build/html/api/javadoc/net/corda/core/contracts/Scheduled.html index e4f60a0885..88e41ed0b3 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/Scheduled.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/Scheduled.html @@ -2,10 +2,10 @@ - + Scheduled - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/ScheduledActivity.html b/docs/build/html/api/javadoc/net/corda/core/contracts/ScheduledActivity.html index 933c7d1bb0..b917b94ffe 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/ScheduledActivity.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/ScheduledActivity.html @@ -2,10 +2,10 @@ - + ScheduledActivity - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/ScheduledStateRef.html b/docs/build/html/api/javadoc/net/corda/core/contracts/ScheduledStateRef.html index 6f2b95bd89..0fa95c1641 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/ScheduledStateRef.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/ScheduledStateRef.html @@ -2,10 +2,10 @@ - + ScheduledStateRef - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/StateAndRef.html b/docs/build/html/api/javadoc/net/corda/core/contracts/StateAndRef.html index 02e9559958..3f604d1edc 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/StateAndRef.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/StateAndRef.html @@ -2,10 +2,10 @@ - + StateAndRef - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/StateRef.html b/docs/build/html/api/javadoc/net/corda/core/contracts/StateRef.html index bb82599809..e2402081be 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/StateRef.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/StateRef.html @@ -2,10 +2,10 @@ - + StateRef - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/StructuresKt.html b/docs/build/html/api/javadoc/net/corda/core/contracts/StructuresKt.html index 32a0c91e6d..4eb4beed5a 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/StructuresKt.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/StructuresKt.html @@ -2,10 +2,10 @@ - + StructuresKt - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/Tenor.TimeUnit.html b/docs/build/html/api/javadoc/net/corda/core/contracts/Tenor.TimeUnit.html index 1adf0f40b7..d802fa3585 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/Tenor.TimeUnit.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/Tenor.TimeUnit.html @@ -2,10 +2,10 @@ - + Tenor.TimeUnit - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/Tenor.html b/docs/build/html/api/javadoc/net/corda/core/contracts/Tenor.html index 219813b385..d58dc074c1 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/Tenor.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/Tenor.html @@ -2,10 +2,10 @@ - + Tenor - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/Timestamp.html b/docs/build/html/api/javadoc/net/corda/core/contracts/Timestamp.html index a863a69993..4b1e8d5dca 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/Timestamp.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/Timestamp.html @@ -2,10 +2,10 @@ - + Timestamp - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionConflictException.html b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionConflictException.html index d438c3630a..58c04f6ca8 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionConflictException.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionConflictException.html @@ -2,10 +2,10 @@ - + TransactionConflictException - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionForContract.InOutGroup.html b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionForContract.InOutGroup.html index f1d032f063..855eb6185b 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionForContract.InOutGroup.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionForContract.InOutGroup.html @@ -2,10 +2,10 @@ - + TransactionForContract.InOutGroup - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionForContract.html b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionForContract.html index ee6fb81cf9..1e4f6b1347 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionForContract.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionForContract.html @@ -2,10 +2,10 @@ - + TransactionForContract - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionGraphSearch.Query.html b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionGraphSearch.Query.html index f350dba279..0e21802af1 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionGraphSearch.Query.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionGraphSearch.Query.html @@ -2,10 +2,10 @@ - + TransactionGraphSearch.Query - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionGraphSearch.html b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionGraphSearch.html index 6472fb0333..ff7c66f644 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionGraphSearch.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionGraphSearch.html @@ -2,10 +2,10 @@ - + TransactionGraphSearch - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionResolutionException.html b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionResolutionException.html index 8a44668ae5..1cdce98f5e 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionResolutionException.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionResolutionException.html @@ -2,10 +2,10 @@ - + TransactionResolutionException - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionState.html b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionState.html index 570b11c75d..79f1815488 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionState.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionState.html @@ -2,10 +2,10 @@ - + TransactionState - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionType.General.html b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionType.General.html index 4717abecec..aa31779f57 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionType.General.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionType.General.html @@ -2,10 +2,10 @@ - + TransactionType.General - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionType.NotaryChange.html b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionType.NotaryChange.html index 5f7f4ca8b4..36c6b2efbd 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionType.NotaryChange.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionType.NotaryChange.html @@ -2,10 +2,10 @@ - + TransactionType.NotaryChange - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionType.html b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionType.html index d329fe94bc..3ef9b8fd71 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionType.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionType.html @@ -2,10 +2,10 @@ - + TransactionType - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.ContractRejection.html b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.ContractRejection.html index f53a6ca4eb..65cb89a9df 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.ContractRejection.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.ContractRejection.html @@ -2,10 +2,10 @@ - + TransactionVerificationException.ContractRejection - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.Direction.html b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.Direction.html index 2abe478180..59fa7ac896 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.Direction.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.Direction.html @@ -2,10 +2,10 @@ - + TransactionVerificationException.Direction - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.DuplicateInputStates.html b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.DuplicateInputStates.html index 57fba3e979..07f52098c8 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.DuplicateInputStates.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.DuplicateInputStates.html @@ -2,10 +2,10 @@ - + TransactionVerificationException.DuplicateInputStates - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.InvalidNotaryChange.html b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.InvalidNotaryChange.html index 46549ba097..eccce2f4f2 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.InvalidNotaryChange.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.InvalidNotaryChange.html @@ -2,10 +2,10 @@ - + TransactionVerificationException.InvalidNotaryChange - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.MoreThanOneNotary.html b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.MoreThanOneNotary.html index 3d6917152e..d29db17864 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.MoreThanOneNotary.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.MoreThanOneNotary.html @@ -2,10 +2,10 @@ - + TransactionVerificationException.MoreThanOneNotary - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.NotaryChangeInWrongTransactionType.html b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.NotaryChangeInWrongTransactionType.html index 7fd5ca0dbd..f3b941d2c2 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.NotaryChangeInWrongTransactionType.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.NotaryChangeInWrongTransactionType.html @@ -2,10 +2,10 @@ - + TransactionVerificationException.NotaryChangeInWrongTransactionType - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.SignersMissing.html b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.SignersMissing.html index 087a7523be..6df9578a8f 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.SignersMissing.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.SignersMissing.html @@ -2,10 +2,10 @@ - + TransactionVerificationException.SignersMissing - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.TransactionMissingEncumbranceException.html b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.TransactionMissingEncumbranceException.html index d81a832445..c0776f6733 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.TransactionMissingEncumbranceException.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.TransactionMissingEncumbranceException.html @@ -2,10 +2,10 @@ - + TransactionVerificationException.TransactionMissingEncumbranceException - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.html b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.html index 590adfe289..61e5ded1ab 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/TransactionVerificationException.html @@ -2,10 +2,10 @@ - + TransactionVerificationException - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/TypeOnlyCommandData.html b/docs/build/html/api/javadoc/net/corda/core/contracts/TypeOnlyCommandData.html index a3b45b691a..f0cd622026 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/TypeOnlyCommandData.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/TypeOnlyCommandData.html @@ -2,10 +2,10 @@ - + TypeOnlyCommandData - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/UniqueIdentifier.Companion.html b/docs/build/html/api/javadoc/net/corda/core/contracts/UniqueIdentifier.Companion.html index 1f63cc075b..db59e50566 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/UniqueIdentifier.Companion.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/UniqueIdentifier.Companion.html @@ -2,10 +2,10 @@ - + UniqueIdentifier.Companion - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/UniqueIdentifier.html b/docs/build/html/api/javadoc/net/corda/core/contracts/UniqueIdentifier.html index eaddccb371..83d94b2d1f 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/UniqueIdentifier.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/UniqueIdentifier.html @@ -2,10 +2,10 @@ - + UniqueIdentifier - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/AllComposition.html b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/AllComposition.html index 2f09e8f367..a04eeff0df 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/AllComposition.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/AllComposition.html @@ -2,10 +2,10 @@ - + AllComposition - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/AllOf.html b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/AllOf.html index 02b3eb5c04..5b9db8c312 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/AllOf.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/AllOf.html @@ -2,10 +2,10 @@ - + AllOf - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/AnyComposition.html b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/AnyComposition.html index a242a1bec6..e63e00e6c6 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/AnyComposition.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/AnyComposition.html @@ -2,10 +2,10 @@ - + AnyComposition - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/AnyOf.html b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/AnyOf.html index 896690538f..590952d8a3 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/AnyOf.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/AnyOf.html @@ -2,10 +2,10 @@ - + AnyOf - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/Clause.Companion.html b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/Clause.Companion.html index b8b43a96e0..3bc1e23d9d 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/Clause.Companion.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/Clause.Companion.html @@ -2,10 +2,10 @@ - + Clause.Companion - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/Clause.html b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/Clause.html index ca9f16900a..53a36326f7 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/Clause.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/Clause.html @@ -2,10 +2,10 @@ - + Clause - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/ClauseKt.html b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/ClauseKt.html index 8a20ea88b1..d3e9e98d7c 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/ClauseKt.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/ClauseKt.html @@ -2,10 +2,10 @@ - + ClauseKt - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/ClauseVerifier.html b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/ClauseVerifier.html index aaa79e331e..32255ed852 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/ClauseVerifier.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/ClauseVerifier.html @@ -2,10 +2,10 @@ - + ClauseVerifier - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/CompositeClause.html b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/CompositeClause.html index 56ff006b28..146732fc0f 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/CompositeClause.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/CompositeClause.html @@ -2,10 +2,10 @@ - + CompositeClause - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/FilterOn.html b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/FilterOn.html index 03559abdc0..c9238e4cc3 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/FilterOn.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/FilterOn.html @@ -2,10 +2,10 @@ - + FilterOn - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/FirstComposition.Companion.html b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/FirstComposition.Companion.html index d4449c1e72..86aa0fee7d 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/FirstComposition.Companion.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/FirstComposition.Companion.html @@ -2,10 +2,10 @@ - + FirstComposition.Companion - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/FirstComposition.html b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/FirstComposition.html index c64487762b..05e263a775 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/FirstComposition.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/FirstComposition.html @@ -2,10 +2,10 @@ - + FirstComposition - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/FirstOf.Companion.html b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/FirstOf.Companion.html index afdcce9c15..22bc6cc7d5 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/FirstOf.Companion.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/FirstOf.Companion.html @@ -2,10 +2,10 @@ - + FirstOf.Companion - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/FirstOf.html b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/FirstOf.html index bc2ef49206..0fc4ec16fb 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/FirstOf.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/FirstOf.html @@ -2,10 +2,10 @@ - + FirstOf - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/GroupClauseVerifier.html b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/GroupClauseVerifier.html index 35db5b915f..251c4c690c 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/GroupClauseVerifier.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/GroupClauseVerifier.html @@ -2,10 +2,10 @@ - + GroupClauseVerifier - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/package-frame.html b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/package-frame.html index 4219b353e7..a6284b410f 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/package-frame.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/package-frame.html @@ -2,10 +2,10 @@ - + net.corda.core.contracts.clauses - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/package-summary.html b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/package-summary.html index e1512d083d..4a79eb855f 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/package-summary.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/package-summary.html @@ -2,10 +2,10 @@ - + net.corda.core.contracts.clauses - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/package-tree.html b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/package-tree.html index c922396e89..6b6b81a44e 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/package-tree.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/clauses/package-tree.html @@ -2,10 +2,10 @@ - + net.corda.core.contracts.clauses Class Hierarchy - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/package-frame.html b/docs/build/html/api/javadoc/net/corda/core/contracts/package-frame.html index fb282c02b7..ca08ce6aea 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/package-frame.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/package-frame.html @@ -2,10 +2,10 @@ - + net.corda.core.contracts - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/package-summary.html b/docs/build/html/api/javadoc/net/corda/core/contracts/package-summary.html index b4f1a05e0b..85b6831685 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/package-summary.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/package-summary.html @@ -2,10 +2,10 @@ - + net.corda.core.contracts - + diff --git a/docs/build/html/api/javadoc/net/corda/core/contracts/package-tree.html b/docs/build/html/api/javadoc/net/corda/core/contracts/package-tree.html index 01dd869137..78cbc5301c 100644 --- a/docs/build/html/api/javadoc/net/corda/core/contracts/package-tree.html +++ b/docs/build/html/api/javadoc/net/corda/core/contracts/package-tree.html @@ -2,10 +2,10 @@ - + net.corda.core.contracts Class Hierarchy - + diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/CertificateStream.html b/docs/build/html/api/javadoc/net/corda/core/crypto/CertificateStream.html index a7305520ff..6dbdd8daff 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/CertificateStream.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/CertificateStream.html @@ -2,10 +2,10 @@ - + CertificateStream - + diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/CompositeKey.Builder.html b/docs/build/html/api/javadoc/net/corda/core/crypto/CompositeKey.Builder.html index aa3dc59756..3d00bbd687 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/CompositeKey.Builder.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/CompositeKey.Builder.html @@ -2,10 +2,10 @@ - + CompositeKey.Builder - + diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/CompositeKey.Companion.html b/docs/build/html/api/javadoc/net/corda/core/crypto/CompositeKey.Companion.html index 173c18044f..f77f2042ac 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/CompositeKey.Companion.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/CompositeKey.Companion.html @@ -2,10 +2,10 @@ - + CompositeKey.Companion - + @@ -130,7 +130,7 @@ var activeTableTab = "activeTableTab"; Method and Description -NonExistentClass +CompositeKey parseFromBase58(java.lang.String encoded)  @@ -154,7 +154,7 @@ var activeTableTab = "activeTableTab";
    • parseFromBase58

      -
      public NonExistentClass parseFromBase58(java.lang.String encoded)
      +
      public CompositeKey parseFromBase58(java.lang.String encoded)
    diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/CompositeKey.Leaf.html b/docs/build/html/api/javadoc/net/corda/core/crypto/CompositeKey.Leaf.html index 2d3684476b..e812a2d646 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/CompositeKey.Leaf.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/CompositeKey.Leaf.html @@ -2,10 +2,10 @@ - + CompositeKey.Leaf - + diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/CompositeKey.Node.html b/docs/build/html/api/javadoc/net/corda/core/crypto/CompositeKey.Node.html index 0f3d983d8b..1fb8abb9a0 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/CompositeKey.Node.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/CompositeKey.Node.html @@ -2,10 +2,10 @@ - + CompositeKey.Node - + diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/CompositeKey.html b/docs/build/html/api/javadoc/net/corda/core/crypto/CompositeKey.html index 176fdf856d..a8f575d1d6 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/CompositeKey.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/CompositeKey.html @@ -2,10 +2,10 @@ - + CompositeKey - + diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/CompositeKeyKt.html b/docs/build/html/api/javadoc/net/corda/core/crypto/CompositeKeyKt.html index ad6642eabd..de6e731722 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/CompositeKeyKt.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/CompositeKeyKt.html @@ -2,10 +2,10 @@ - + CompositeKeyKt - + diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/CryptoUtilities.html b/docs/build/html/api/javadoc/net/corda/core/crypto/CryptoUtilities.html index 409a5689e8..1ddbc34a75 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/CryptoUtilities.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/CryptoUtilities.html @@ -2,10 +2,10 @@ - + CryptoUtilities - + @@ -184,7 +184,7 @@ you want hard-coded private keys. newSecureRandom()  -static NonExistentClass +static net.i2p.crypto.eddsa.EdDSAPublicKey parsePublicKeyBase58(java.lang.String base58String)  @@ -223,7 +223,7 @@ you want hard-coded private keys. Party party)
      -static NonExistentClass +static java.lang.String toBase58String(java.security.PublicKey $receiver)  @@ -310,7 +310,7 @@ you want hard-coded private keys.
    • parsePublicKeyBase58

      -
      public static NonExistentClass parsePublicKeyBase58(java.lang.String base58String)
      +
      public static net.i2p.crypto.eddsa.EdDSAPublicKey parsePublicKeyBase58(java.lang.String base58String)
    @@ -319,7 +319,7 @@ you want hard-coded private keys.
    • toBase58String

      -
      public static NonExistentClass toBase58String(java.security.PublicKey $receiver)
      +
      public static java.lang.String toBase58String(java.security.PublicKey $receiver)
    diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/DigitalSignature.LegallyIdentifiable.html b/docs/build/html/api/javadoc/net/corda/core/crypto/DigitalSignature.LegallyIdentifiable.html index 73ded1b8cc..afb075465e 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/DigitalSignature.LegallyIdentifiable.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/DigitalSignature.LegallyIdentifiable.html @@ -2,10 +2,10 @@ - + DigitalSignature.LegallyIdentifiable - + diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/DigitalSignature.WithKey.html b/docs/build/html/api/javadoc/net/corda/core/crypto/DigitalSignature.WithKey.html index d9c19971ce..f5a03c7260 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/DigitalSignature.WithKey.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/DigitalSignature.WithKey.html @@ -2,10 +2,10 @@ - + DigitalSignature.WithKey - + diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/DigitalSignature.html b/docs/build/html/api/javadoc/net/corda/core/crypto/DigitalSignature.html index 84f8e8d23f..a6a548cab4 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/DigitalSignature.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/DigitalSignature.html @@ -2,10 +2,10 @@ - + DigitalSignature - + diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/DummyPublicKey.html b/docs/build/html/api/javadoc/net/corda/core/crypto/DummyPublicKey.html index 1c7368a6ec..fdaa21ae41 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/DummyPublicKey.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/DummyPublicKey.html @@ -2,10 +2,10 @@ - + DummyPublicKey - + diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/MerkleTreeException.html b/docs/build/html/api/javadoc/net/corda/core/crypto/MerkleTreeException.html index a11e51039e..6b22f5ed18 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/MerkleTreeException.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/MerkleTreeException.html @@ -2,10 +2,10 @@ - + MerkleTreeException - + diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/NullPublicKey.html b/docs/build/html/api/javadoc/net/corda/core/crypto/NullPublicKey.html index 5e29e4cf3c..55b532beb0 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/NullPublicKey.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/NullPublicKey.html @@ -2,10 +2,10 @@ - + NullPublicKey - + diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/NullSignature.html b/docs/build/html/api/javadoc/net/corda/core/crypto/NullSignature.html index ae030ff8e4..8c206bb784 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/NullSignature.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/NullSignature.html @@ -2,10 +2,10 @@ - + NullSignature - + diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/PartialMerkleTree.Companion.html b/docs/build/html/api/javadoc/net/corda/core/crypto/PartialMerkleTree.Companion.html index 27d0862482..41127ab65c 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/PartialMerkleTree.Companion.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/PartialMerkleTree.Companion.html @@ -2,10 +2,10 @@ - + PartialMerkleTree.Companion - + diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/PartialMerkleTree.PartialTree.html b/docs/build/html/api/javadoc/net/corda/core/crypto/PartialMerkleTree.PartialTree.html index 9917e929e2..73a2812e37 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/PartialMerkleTree.PartialTree.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/PartialMerkleTree.PartialTree.html @@ -2,10 +2,10 @@ - + PartialMerkleTree.PartialTree - + diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/PartialMerkleTree.html b/docs/build/html/api/javadoc/net/corda/core/crypto/PartialMerkleTree.html index d385143d3e..9955a95150 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/PartialMerkleTree.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/PartialMerkleTree.html @@ -2,10 +2,10 @@ - + PartialMerkleTree - + diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/PartialTree.IncludedLeaf.html b/docs/build/html/api/javadoc/net/corda/core/crypto/PartialTree.IncludedLeaf.html index 0a7961cce7..64326a57cf 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/PartialTree.IncludedLeaf.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/PartialTree.IncludedLeaf.html @@ -2,10 +2,10 @@ - + PartialTree.IncludedLeaf - + diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/PartialTree.Leaf.html b/docs/build/html/api/javadoc/net/corda/core/crypto/PartialTree.Leaf.html index 82a17bd378..fa99776dac 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/PartialTree.Leaf.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/PartialTree.Leaf.html @@ -2,10 +2,10 @@ - + PartialTree.Leaf - + diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/PartialTree.Node.html b/docs/build/html/api/javadoc/net/corda/core/crypto/PartialTree.Node.html index 1d3a0736b3..b5a083521b 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/PartialTree.Node.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/PartialTree.Node.html @@ -2,10 +2,10 @@ - + PartialTree.Node - + diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/Party.html b/docs/build/html/api/javadoc/net/corda/core/crypto/Party.html index 137f5911ce..629616da25 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/Party.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/Party.html @@ -2,20 +2,17 @@ - + Party - + + + - - - - - @@ -29,7 +26,7 @@ catch(err) { } //--> -var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10}; +var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10}; var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]}; var altColor = "altColor"; var rowColor = "rowColor"; @@ -122,7 +119,7 @@ cryptographic public key primitives into a tree structure.

    For e Her advertised class Party then has a legal name "Alice" and an owingKey "pub1 or pub2".

    class Party is also used for service identities. E.g. Alice may also be running an interest rate oracle on her Corda node, which requires a separate signing key (and an identifying name). Services can also be distributed – run by a coordinated cluster of Corda nodes. A class Party representing a distributed service will use a composite key containing all -individual cluster nodes' public keys. Each of the nodes in the cluster will advertise the same group class Party.

    +individual cluster nodes' public keys. Each of the nodes in the cluster will advertise the same group class Party.

    Note that equality is based solely on the owning key.

    See Also:
    class Party, @@ -182,48 +179,32 @@ cryptographic public key primitives into a tree structure. Method and Description -java.lang.String -component1()  - - -CompositeKey -component2()  - - -Party -copy(java.lang.String name, - CompositeKey owningKey) -
    The class Party class represents an entity on the network, which is typically identified by a legal name and public key -that it can sign transactions under. As parties may use multiple keys for signing and, for example, have offline backup -keys, the "public key" of a party is represented by a composite construct – a class CompositeKey, which combines multiple -cryptographic public key primitives into a tree structure.
    +boolean +equals(java.lang.Object other) +
    Anonymised parties do not include any detail apart from owning key, so equality is dependent solely on the key
    - -boolean -equals(java.lang.Object p)  - - + java.lang.String getName()  - + CompositeKey getOwningKey()  - + int hashCode()  - + PartyAndReference ref(OpaqueBytes bytes)  - + PartyAndReference ref(byte bytes)  - + java.lang.String toString()  @@ -257,7 +238,7 @@ cryptographic public key primitives into a tree structure.

    For e Her advertised class Party then has a legal name "Alice" and an owingKey "pub1 or pub2".

    class Party is also used for service identities. E.g. Alice may also be running an interest rate oracle on her Corda node, which requires a separate signing key (and an identifying name). Services can also be distributed – run by a coordinated cluster of Corda nodes. A class Party representing a distributed service will use a composite key containing all -individual cluster nodes' public keys. Each of the nodes in the cluster will advertise the same group class Party.

    +individual cluster nodes' public keys. Each of the nodes in the cluster will advertise the same group class Party.

    Note that equality is based solely on the owning key.

    See Also:
    class Party, @@ -295,6 +276,25 @@ individual cluster nodes' public keys. Each of the nodes in the cluster will adv

    Method Detail

    + + + +
      +
    • +

      equals

      +
      public boolean equals(java.lang.Object other)
      +

      Anonymised parties do not include any detail apart from owning key, so equality is dependent solely on the key

      +
    • +
    + + + +
      +
    • +

      hashCode

      +
      public int hashCode()
      +
    • +
    @@ -334,77 +334,12 @@ individual cluster nodes' public keys. Each of the nodes in the cluster will adv -
      + - - - -
        -
      • -

        component1

        -
        public java.lang.String component1()
        -
      • -
      - - - - - - - -
        -
      • -

        copy

        -
        public Party copy(java.lang.String name,
        -                  CompositeKey owningKey)
        -

        The class Party class represents an entity on the network, which is typically identified by a legal name and public key -that it can sign transactions under. As parties may use multiple keys for signing and, for example, have offline backup -keys, the "public key" of a party is represented by a composite construct – a class CompositeKey, which combines multiple -cryptographic public key primitives into a tree structure.

        For example: Alice has two key pairs (pub1/priv1 and pub2/priv2), and wants to be able to sign transactions with either of them. -Her advertised class Party then has a legal name "Alice" and an owingKey "pub1 or pub2".

        class Party is also used for service identities. E.g. Alice may also be running an interest rate oracle on her Corda node, -which requires a separate signing key (and an identifying name). Services can also be distributed – run by a coordinated -cluster of Corda nodes. A class Party representing a distributed service will use a composite key containing all -individual cluster nodes' public keys. Each of the nodes in the cluster will advertise the same group class Party.

        -
        -
        See Also:
        -
        class Party, -class CompositeKey, -class Party, -owingKey, -class Party, -class Party, -class Party, -class CompositeKey
        -
        -
      • -
      - - - -
        -
      • -

        hashCode

        -
        public int hashCode()
        -
      • -
      - - - -
        -
      • -

        equals

        -
        public boolean equals(java.lang.Object p)
        -
      • -
    diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/SecureHash.Companion.html b/docs/build/html/api/javadoc/net/corda/core/crypto/SecureHash.Companion.html index ab53d41a1a..4b8006bacf 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/SecureHash.Companion.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/SecureHash.Companion.html @@ -2,10 +2,10 @@ - + SecureHash.Companion - + diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/SecureHash.SHA256.html b/docs/build/html/api/javadoc/net/corda/core/crypto/SecureHash.SHA256.html index 5b78b8b243..6ba1a04e75 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/SecureHash.SHA256.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/SecureHash.SHA256.html @@ -2,10 +2,10 @@ - + SecureHash.SHA256 - + diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/SecureHash.html b/docs/build/html/api/javadoc/net/corda/core/crypto/SecureHash.html index 237f87b55c..80abe701e9 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/SecureHash.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/SecureHash.html @@ -2,10 +2,10 @@ - + SecureHash - + diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/SecureHashKt.html b/docs/build/html/api/javadoc/net/corda/core/crypto/SecureHashKt.html index 87ef19b617..1fa6242e3e 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/SecureHashKt.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/SecureHashKt.html @@ -2,10 +2,10 @@ - + SecureHashKt - + diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/SignedData.html b/docs/build/html/api/javadoc/net/corda/core/crypto/SignedData.html index 4b9aa544dc..ab2063f739 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/SignedData.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/SignedData.html @@ -2,10 +2,10 @@ - + SignedData - + diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/X509Utilities.CACertAndKey.html b/docs/build/html/api/javadoc/net/corda/core/crypto/X509Utilities.CACertAndKey.html index 91ef3f0efa..92becebcf2 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/X509Utilities.CACertAndKey.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/X509Utilities.CACertAndKey.html @@ -2,10 +2,10 @@ - + X509Utilities.CACertAndKey - + diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/X509Utilities.html b/docs/build/html/api/javadoc/net/corda/core/crypto/X509Utilities.html index 4756ee16b3..5fb067bd54 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/X509Utilities.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/X509Utilities.html @@ -2,10 +2,10 @@ - + X509Utilities - + diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/X509UtilitiesKt.html b/docs/build/html/api/javadoc/net/corda/core/crypto/X509UtilitiesKt.html index 07eee79170..bbc066fdc7 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/X509UtilitiesKt.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/X509UtilitiesKt.html @@ -2,10 +2,10 @@ - + X509UtilitiesKt - + diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/package-frame.html b/docs/build/html/api/javadoc/net/corda/core/crypto/package-frame.html index 7d37b008a3..658de030c0 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/package-frame.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/package-frame.html @@ -2,10 +2,10 @@ - + net.corda.core.crypto - + diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/package-summary.html b/docs/build/html/api/javadoc/net/corda/core/crypto/package-summary.html index 22cad8e338..bfc969f06b 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/package-summary.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/package-summary.html @@ -2,10 +2,10 @@ - + net.corda.core.crypto - + diff --git a/docs/build/html/api/javadoc/net/corda/core/crypto/package-tree.html b/docs/build/html/api/javadoc/net/corda/core/crypto/package-tree.html index 72a1cbd121..cd8b318250 100644 --- a/docs/build/html/api/javadoc/net/corda/core/crypto/package-tree.html +++ b/docs/build/html/api/javadoc/net/corda/core/crypto/package-tree.html @@ -2,10 +2,10 @@ - + net.corda.core.crypto Class Hierarchy - + @@ -98,7 +98,6 @@
  • net.corda.core.crypto.SecureHashKt
  • net.corda.core.crypto.PartialMerkleTree.Companion
  • net.corda.core.crypto.CompositeKey.Companion
  • -
  • net.corda.core.crypto.Party
  • net.corda.core.serialization.OpaqueBytes
  • +
  • net.corda.core.crypto.Party
  • net.corda.core.crypto.SignedData<T>
  • net.corda.core.crypto.X509UtilitiesKt
  • -
  • net.corda.core.crypto.SecureHash.Companion
  • net.corda.core.crypto.NullPublicKey
  • +
  • net.corda.core.crypto.SecureHash.Companion
  • net.corda.core.crypto.PartialMerkleTree
  • net.corda.core.crypto.CompositeKey.Builder
  • net.corda.core.crypto.CryptoUtilities
  • diff --git a/docs/build/html/api/javadoc/net/corda/core/flows/AppContext.html b/docs/build/html/api/javadoc/net/corda/core/flows/AppContext.html index 6af7d6830d..13cafc46eb 100644 --- a/docs/build/html/api/javadoc/net/corda/core/flows/AppContext.html +++ b/docs/build/html/api/javadoc/net/corda/core/flows/AppContext.html @@ -2,10 +2,10 @@ - + AppContext - + diff --git a/docs/build/html/api/javadoc/net/corda/core/flows/FlowException.html b/docs/build/html/api/javadoc/net/corda/core/flows/FlowException.html index 76079037fa..0fa08a0918 100644 --- a/docs/build/html/api/javadoc/net/corda/core/flows/FlowException.html +++ b/docs/build/html/api/javadoc/net/corda/core/flows/FlowException.html @@ -2,10 +2,10 @@ - + FlowException - + @@ -97,6 +97,18 @@

    public class FlowException
    +

    Exception which can be thrown by a class FlowLogic at any point in its logic to unexpectedly bring it to a permanent end. +The exception will propagate to all counterparty flows and will be thrown on their end the next time they wait on a +FlowLogic.receive or FlowLogic.sendAndReceive. Any flow which no longer needs to do a receive, or has already ended, +will not receive the exception (if this is required then have them wait for a confirmation message).

    exception FlowException (or a subclass) can be a valid expected response from a flow, particularly ones which act as a service. +It is recommended a class FlowLogic document the exception FlowException types it can throw.

    +
    +
    See Also:
    +
    class FlowLogic, +exception FlowException, +class FlowLogic, +exception FlowException
    +
    @@ -115,7 +127,29 @@ Constructor and Description -FlowException(java.lang.String message)  +FlowException(java.lang.String message, + java.lang.Throwable cause) +
    Exception which can be thrown by a class FlowLogic at any point in its logic to unexpectedly bring it to a permanent end. +The exception will propagate to all counterparty flows and will be thrown on their end the next time they wait on a +FlowLogic.receive or FlowLogic.sendAndReceive. Any flow which no longer needs to do a receive, or has already ended, +will not receive the exception (if this is required then have them wait for a confirmation message).
    + + + +FlowException(java.lang.String message) +
    Exception which can be thrown by a class FlowLogic at any point in its logic to unexpectedly bring it to a permanent end. +The exception will propagate to all counterparty flows and will be thrown on their end the next time they wait on a +FlowLogic.receive or FlowLogic.sendAndReceive. Any flow which no longer needs to do a receive, or has already ended, +will not receive the exception (if this is required then have them wait for a confirmation message).
    + + + +FlowException() +
    Exception which can be thrown by a class FlowLogic at any point in its logic to unexpectedly bring it to a permanent end. +The exception will propagate to all counterparty flows and will be thrown on their end the next time they wait on a +FlowLogic.receive or FlowLogic.sendAndReceive. Any flow which no longer needs to do a receive, or has already ended, +will not receive the exception (if this is required then have them wait for a confirmation message).
    + @@ -132,13 +166,68 @@

    Constructor Detail

    + + + +
      +
    • +

      FlowException

      +
      public FlowException(java.lang.String message,
      +                     java.lang.Throwable cause)
      +

      Exception which can be thrown by a class FlowLogic at any point in its logic to unexpectedly bring it to a permanent end. +The exception will propagate to all counterparty flows and will be thrown on their end the next time they wait on a +FlowLogic.receive or FlowLogic.sendAndReceive. Any flow which no longer needs to do a receive, or has already ended, +will not receive the exception (if this is required then have them wait for a confirmation message).

      exception FlowException (or a subclass) can be a valid expected response from a flow, particularly ones which act as a service. +It is recommended a class FlowLogic document the exception FlowException types it can throw.

      +
      +
      See Also:
      +
      class FlowLogic, +exception FlowException, +class FlowLogic, +exception FlowException
      +
      +
    • +
    +
      +
    • +

      FlowException

      +
      public FlowException(java.lang.String message)
      +

      Exception which can be thrown by a class FlowLogic at any point in its logic to unexpectedly bring it to a permanent end. +The exception will propagate to all counterparty flows and will be thrown on their end the next time they wait on a +FlowLogic.receive or FlowLogic.sendAndReceive. Any flow which no longer needs to do a receive, or has already ended, +will not receive the exception (if this is required then have them wait for a confirmation message).

      exception FlowException (or a subclass) can be a valid expected response from a flow, particularly ones which act as a service. +It is recommended a class FlowLogic document the exception FlowException types it can throw.

      +
      +
      See Also:
      +
      class FlowLogic, +exception FlowException, +class FlowLogic, +exception FlowException
      +
      +
    • +
    + + +
    • FlowException

      -
      public FlowException(java.lang.String message)
      +
      public FlowException()
      +

      Exception which can be thrown by a class FlowLogic at any point in its logic to unexpectedly bring it to a permanent end. +The exception will propagate to all counterparty flows and will be thrown on their end the next time they wait on a +FlowLogic.receive or FlowLogic.sendAndReceive. Any flow which no longer needs to do a receive, or has already ended, +will not receive the exception (if this is required then have them wait for a confirmation message).

      exception FlowException (or a subclass) can be a valid expected response from a flow, particularly ones which act as a service. +It is recommended a class FlowLogic document the exception FlowException types it can throw.

      +
      +
      See Also:
      +
      class FlowLogic, +exception FlowException, +class FlowLogic, +exception FlowException
      +
    diff --git a/docs/build/html/api/javadoc/net/corda/core/flows/FlowLogic.html b/docs/build/html/api/javadoc/net/corda/core/flows/FlowLogic.html index be72df8a3b..f381f83503 100644 --- a/docs/build/html/api/javadoc/net/corda/core/flows/FlowLogic.html +++ b/docs/build/html/api/javadoc/net/corda/core/flows/FlowLogic.html @@ -2,10 +2,10 @@ - + FlowLogic - + @@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
  • Direct Known Subclasses:
    -
    AbstractStateReplacementFlow.Acceptor, BroadcastTransactionFlow, TwoPartyTradeFlow.Buyer, CashFlow, NotaryFlow.Client, FetchDataFlow, FinalityFlow, AbstractStateReplacementFlow.Instigator, IssuerFlow.IssuanceRequester, IssuerFlow.Issuer, Service.NotifyTransactionHandler, TwoPartyDealFlow.Primary, ResolveTransactionsFlow, NodeSchedulerService.RunScheduled, TwoPartyDealFlow.Secondary, TwoPartyTradeFlow.Seller, NotaryFlow.Service
    +
    AbstractStateReplacementFlow.Acceptor, BroadcastTransactionFlow, TwoPartyTradeFlow.Buyer, CashFlow, NotaryFlow.Client, FetchDataFlow, FinalityFlow, AbstractStateReplacementFlow.Instigator, IssuerFlow.IssuanceRequester, IssuerFlow.Issuer, Service.NotifyTransactionHandler, TwoPartyDealFlow.Primary, ResolveTransactionsFlow, NodeSchedulerService.RunScheduled, TwoPartyDealFlow.Secondary, TwoPartyTradeFlow.Seller, NotaryFlow.Service, TGenesisFlow, TTxFlow


    @@ -229,8 +229,8 @@ across module boundaries. -<T> UntrustworthyData<T> -receive(java.lang.Class<T> receiveType, +<R> UntrustworthyData<R> +receive(java.lang.Class<R> receiveType, Party otherParty)
    Suspends until the specified otherParty sends us a message of type receiveType.
    @@ -243,8 +243,8 @@ across module boundaries. -<T> UntrustworthyData<T> -sendAndReceive(java.lang.Class<T> receiveType, +<R> UntrustworthyData<R> +sendAndReceive(java.lang.Class<R> receiveType, Party otherParty, java.lang.Object payload)
    Serializes and queues the given payload object for sending to the otherParty. Suspends until a response @@ -394,7 +394,7 @@ will do as long as the other side registers with it.

    • sendAndReceive

      -
      public <T> UntrustworthyData<T> sendAndReceive(java.lang.Class<T> receiveType,
      +
      public <R> UntrustworthyData<R> sendAndReceive(java.lang.Class<R> receiveType,
                                                      Party otherParty,
                                                      java.lang.Object payload)

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response @@ -410,7 +410,7 @@ use this when you expect to do a message swap than do use send and then receive

      • receive

        -
        public <T> UntrustworthyData<T> receive(java.lang.Class<T> receiveType,
        +
        public <R> UntrustworthyData<R> receive(java.lang.Class<R> receiveType,
                                                 Party otherParty)

        Suspends until the specified otherParty sends us a message of type receiveType.

        Remember that when receiving data from other parties the data should not be trusted until it's been thoroughly verified for consistency and that all expectations are satisfied, as a malicious peer may send you subtly @@ -446,6 +446,9 @@ current step in this flow's progress tracker.

        shareParentSessions - In certain situations the need arises to use the same sessions the parent flow has already established. However this also prevents the subflow from creating new sessions with those parties. For this reason the default value is false.
        +
        Throws:
        +
        - This is either thrown by subLogic itself or propagated from any of the remote +class FlowLogics it communicated with. A subflow retry can be done by catching this exception.
        See Also:
        FlowLogic.call
  • @@ -462,6 +465,9 @@ For this reason the default value is false.
    returned by that subflows FlowLogic.call method. If the subflow has a progress tracker, it is attached to the current step in this flow's progress tracker.

    +
    Throws:
    +
    - This is either thrown by subLogic itself or propagated from any of the remote +class FlowLogics it communicated with. A subflow retry can be done by catching this exception.
    See Also:
    FlowLogic.call
    diff --git a/docs/build/html/api/javadoc/net/corda/core/flows/FlowLogicRef.html b/docs/build/html/api/javadoc/net/corda/core/flows/FlowLogicRef.html index 97b08a6b58..cb9b6c27ac 100644 --- a/docs/build/html/api/javadoc/net/corda/core/flows/FlowLogicRef.html +++ b/docs/build/html/api/javadoc/net/corda/core/flows/FlowLogicRef.html @@ -2,10 +2,10 @@ - + FlowLogicRef - + diff --git a/docs/build/html/api/javadoc/net/corda/core/flows/FlowLogicRefFactory.html b/docs/build/html/api/javadoc/net/corda/core/flows/FlowLogicRefFactory.html index f40123479f..fbca9a19e7 100644 --- a/docs/build/html/api/javadoc/net/corda/core/flows/FlowLogicRefFactory.html +++ b/docs/build/html/api/javadoc/net/corda/core/flows/FlowLogicRefFactory.html @@ -2,10 +2,10 @@ - + FlowLogicRefFactory - + diff --git a/docs/build/html/api/javadoc/net/corda/core/flows/FlowStateMachine.html b/docs/build/html/api/javadoc/net/corda/core/flows/FlowStateMachine.html index 0f2846eb8a..4daf5534b5 100644 --- a/docs/build/html/api/javadoc/net/corda/core/flows/FlowStateMachine.html +++ b/docs/build/html/api/javadoc/net/corda/core/flows/FlowStateMachine.html @@ -2,10 +2,10 @@ - + FlowStateMachine - + diff --git a/docs/build/html/api/javadoc/net/corda/core/flows/IllegalFlowLogicException.html b/docs/build/html/api/javadoc/net/corda/core/flows/IllegalFlowLogicException.html index 18c69a5ceb..a5523e31e3 100644 --- a/docs/build/html/api/javadoc/net/corda/core/flows/IllegalFlowLogicException.html +++ b/docs/build/html/api/javadoc/net/corda/core/flows/IllegalFlowLogicException.html @@ -2,10 +2,10 @@ - + IllegalFlowLogicException - + diff --git a/docs/build/html/api/javadoc/net/corda/core/flows/StateMachineRunId.Companion.html b/docs/build/html/api/javadoc/net/corda/core/flows/StateMachineRunId.Companion.html index af82b053cb..56ae8b7eb2 100644 --- a/docs/build/html/api/javadoc/net/corda/core/flows/StateMachineRunId.Companion.html +++ b/docs/build/html/api/javadoc/net/corda/core/flows/StateMachineRunId.Companion.html @@ -2,10 +2,10 @@ - + StateMachineRunId.Companion - + diff --git a/docs/build/html/api/javadoc/net/corda/core/flows/StateMachineRunId.html b/docs/build/html/api/javadoc/net/corda/core/flows/StateMachineRunId.html index a896c5d5a3..cddb53dd24 100644 --- a/docs/build/html/api/javadoc/net/corda/core/flows/StateMachineRunId.html +++ b/docs/build/html/api/javadoc/net/corda/core/flows/StateMachineRunId.html @@ -2,10 +2,10 @@ - + StateMachineRunId - + diff --git a/docs/build/html/api/javadoc/net/corda/core/flows/package-frame.html b/docs/build/html/api/javadoc/net/corda/core/flows/package-frame.html index f280c3d747..b57bc6e854 100644 --- a/docs/build/html/api/javadoc/net/corda/core/flows/package-frame.html +++ b/docs/build/html/api/javadoc/net/corda/core/flows/package-frame.html @@ -2,10 +2,10 @@ - + net.corda.core.flows - + diff --git a/docs/build/html/api/javadoc/net/corda/core/flows/package-summary.html b/docs/build/html/api/javadoc/net/corda/core/flows/package-summary.html index b9545e7ba1..e838fbd90f 100644 --- a/docs/build/html/api/javadoc/net/corda/core/flows/package-summary.html +++ b/docs/build/html/api/javadoc/net/corda/core/flows/package-summary.html @@ -2,10 +2,10 @@ - + net.corda.core.flows - + @@ -147,7 +147,12 @@ has at least one flow, but that flow may also invoke sub-flows: they all share t FlowException -  + +
    Exception which can be thrown by a class FlowLogic at any point in its logic to unexpectedly bring it to a permanent end. +The exception will propagate to all counterparty flows and will be thrown on their end the next time they wait on a +FlowLogic.receive or FlowLogic.sendAndReceive. Any flow which no longer needs to do a receive, or has already ended, +will not receive the exception (if this is required then have them wait for a confirmation message).
    + IllegalFlowLogicException diff --git a/docs/build/html/api/javadoc/net/corda/core/flows/package-tree.html b/docs/build/html/api/javadoc/net/corda/core/flows/package-tree.html index 345663e5db..e50c83b0ca 100644 --- a/docs/build/html/api/javadoc/net/corda/core/flows/package-tree.html +++ b/docs/build/html/api/javadoc/net/corda/core/flows/package-tree.html @@ -2,10 +2,10 @@ - + net.corda.core.flows Class Hierarchy - + diff --git a/docs/build/html/api/javadoc/net/corda/core/math/CubicSplineInterpolator.Factory.html b/docs/build/html/api/javadoc/net/corda/core/math/CubicSplineInterpolator.Factory.html index fcef976977..6dbf4c863c 100644 --- a/docs/build/html/api/javadoc/net/corda/core/math/CubicSplineInterpolator.Factory.html +++ b/docs/build/html/api/javadoc/net/corda/core/math/CubicSplineInterpolator.Factory.html @@ -2,10 +2,10 @@ - + CubicSplineInterpolator.Factory - + diff --git a/docs/build/html/api/javadoc/net/corda/core/math/CubicSplineInterpolator.html b/docs/build/html/api/javadoc/net/corda/core/math/CubicSplineInterpolator.html index 953d4fd2f3..14bdf375ff 100644 --- a/docs/build/html/api/javadoc/net/corda/core/math/CubicSplineInterpolator.html +++ b/docs/build/html/api/javadoc/net/corda/core/math/CubicSplineInterpolator.html @@ -2,10 +2,10 @@ - + CubicSplineInterpolator - + diff --git a/docs/build/html/api/javadoc/net/corda/core/math/Interpolator.html b/docs/build/html/api/javadoc/net/corda/core/math/Interpolator.html index 027d314fb8..e1ab8b9ba8 100644 --- a/docs/build/html/api/javadoc/net/corda/core/math/Interpolator.html +++ b/docs/build/html/api/javadoc/net/corda/core/math/Interpolator.html @@ -2,10 +2,10 @@ - + Interpolator - + diff --git a/docs/build/html/api/javadoc/net/corda/core/math/InterpolatorFactory.html b/docs/build/html/api/javadoc/net/corda/core/math/InterpolatorFactory.html index d338d39dbb..5c0a67e216 100644 --- a/docs/build/html/api/javadoc/net/corda/core/math/InterpolatorFactory.html +++ b/docs/build/html/api/javadoc/net/corda/core/math/InterpolatorFactory.html @@ -2,10 +2,10 @@ - + InterpolatorFactory - + diff --git a/docs/build/html/api/javadoc/net/corda/core/math/LinearInterpolator.Factory.html b/docs/build/html/api/javadoc/net/corda/core/math/LinearInterpolator.Factory.html index 5873795116..d6d5960822 100644 --- a/docs/build/html/api/javadoc/net/corda/core/math/LinearInterpolator.Factory.html +++ b/docs/build/html/api/javadoc/net/corda/core/math/LinearInterpolator.Factory.html @@ -2,10 +2,10 @@ - + LinearInterpolator.Factory - + diff --git a/docs/build/html/api/javadoc/net/corda/core/math/LinearInterpolator.html b/docs/build/html/api/javadoc/net/corda/core/math/LinearInterpolator.html index d6b2c56024..57159af7cb 100644 --- a/docs/build/html/api/javadoc/net/corda/core/math/LinearInterpolator.html +++ b/docs/build/html/api/javadoc/net/corda/core/math/LinearInterpolator.html @@ -2,10 +2,10 @@ - + LinearInterpolator - + diff --git a/docs/build/html/api/javadoc/net/corda/core/math/Polynomial.html b/docs/build/html/api/javadoc/net/corda/core/math/Polynomial.html index 74a2baec53..4ef6497e52 100644 --- a/docs/build/html/api/javadoc/net/corda/core/math/Polynomial.html +++ b/docs/build/html/api/javadoc/net/corda/core/math/Polynomial.html @@ -2,10 +2,10 @@ - + Polynomial - + diff --git a/docs/build/html/api/javadoc/net/corda/core/math/SplineFunction.html b/docs/build/html/api/javadoc/net/corda/core/math/SplineFunction.html index 235888b406..caecbc1a28 100644 --- a/docs/build/html/api/javadoc/net/corda/core/math/SplineFunction.html +++ b/docs/build/html/api/javadoc/net/corda/core/math/SplineFunction.html @@ -2,10 +2,10 @@ - + SplineFunction - + diff --git a/docs/build/html/api/javadoc/net/corda/core/math/package-frame.html b/docs/build/html/api/javadoc/net/corda/core/math/package-frame.html index 28164f4aea..ae8291d4c1 100644 --- a/docs/build/html/api/javadoc/net/corda/core/math/package-frame.html +++ b/docs/build/html/api/javadoc/net/corda/core/math/package-frame.html @@ -2,10 +2,10 @@ - + net.corda.core.math - + diff --git a/docs/build/html/api/javadoc/net/corda/core/math/package-summary.html b/docs/build/html/api/javadoc/net/corda/core/math/package-summary.html index 466f986f69..7f00631f6f 100644 --- a/docs/build/html/api/javadoc/net/corda/core/math/package-summary.html +++ b/docs/build/html/api/javadoc/net/corda/core/math/package-summary.html @@ -2,10 +2,10 @@ - + net.corda.core.math - + diff --git a/docs/build/html/api/javadoc/net/corda/core/math/package-tree.html b/docs/build/html/api/javadoc/net/corda/core/math/package-tree.html index 8cf8583ae4..e630900c15 100644 --- a/docs/build/html/api/javadoc/net/corda/core/math/package-tree.html +++ b/docs/build/html/api/javadoc/net/corda/core/math/package-tree.html @@ -2,10 +2,10 @@ - + net.corda.core.math Class Hierarchy - + diff --git a/docs/build/html/api/javadoc/net/corda/core/messaging/Ack.html b/docs/build/html/api/javadoc/net/corda/core/messaging/Ack.html index 4ac03ae9ab..ca1b234536 100644 --- a/docs/build/html/api/javadoc/net/corda/core/messaging/Ack.html +++ b/docs/build/html/api/javadoc/net/corda/core/messaging/Ack.html @@ -2,10 +2,10 @@ - + Ack - + diff --git a/docs/build/html/api/javadoc/net/corda/core/messaging/AllPossibleRecipients.html b/docs/build/html/api/javadoc/net/corda/core/messaging/AllPossibleRecipients.html index 1710ea624e..7754c2b971 100644 --- a/docs/build/html/api/javadoc/net/corda/core/messaging/AllPossibleRecipients.html +++ b/docs/build/html/api/javadoc/net/corda/core/messaging/AllPossibleRecipients.html @@ -2,10 +2,10 @@ - + AllPossibleRecipients - + diff --git a/docs/build/html/api/javadoc/net/corda/core/messaging/CordaRPCOps.html b/docs/build/html/api/javadoc/net/corda/core/messaging/CordaRPCOps.html index 8f76c67ea9..d30f054a68 100644 --- a/docs/build/html/api/javadoc/net/corda/core/messaging/CordaRPCOps.html +++ b/docs/build/html/api/javadoc/net/corda/core/messaging/CordaRPCOps.html @@ -2,10 +2,10 @@ - + CordaRPCOps - + @@ -18,7 +18,9 @@ + + @@ -34,8 +36,8 @@ catch(err) { } //--> -var methods = {"i0":18,"i1":18,"i2":18,"i3":18,"i4":18,"i5":18,"i6":18,"i7":18,"i8":18,"i9":18,"i10":18,"i11":18,"i12":18,"i13":18}; -var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],16:["t5","Default Methods"]}; +var methods = {"i0":18,"i1":18,"i2":18,"i3":18,"i4":18,"i5":18,"i6":18,"i7":18,"i8":18,"i9":18,"i10":18,"i11":18,"i12":50,"i13":18,"i14":18,"i15":18}; +var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],16:["t5","Default Methods"],32:["t6","Deprecated Methods"]}; var altColor = "altColor"; var rowColor = "rowColor"; var tableTab = "tableTab"; @@ -145,7 +147,7 @@ client apps and are implemented by the node in the CordaRPCOpsImpl

    Method Summary

    - + @@ -164,7 +166,7 @@ client apps and are implemented by the node in the CordaRPCOpsImpl @@ -223,17 +225,32 @@ such mappings as well. + + + + - + + + + +
    All Methods Instance Methods Default Methods All Methods Instance Methods Default Methods Deprecated Methods 
    Modifier and Type Method and Descriptionjava.time.Instant currentNodeTime() -
    Returns the node-local current time.
    +
    Returns the node's current time.
    java.lang.StringuploadFile(java.lang.String dataType, + java.lang.String name, + java.io.InputStream file) +
    Deprecated.  
    +
    kotlin.Pair<java.util.List,rx.Observable> vaultAndUpdates()
    Returns a pair of head states in the vault and an observable of future updates to the vault.
    kotlin.Pair<java.util.List,rx.Observable> verifiedTransactions()
    Returns a pair of all recorded transactions and an observable of future recorded ones.
    com.google.common.util.concurrent.ListenableFuture<kotlin.Unit>waitUntilRegisteredWithNetworkMap() +
    Returns a ListenableFuture which completes when the node has registered wih the network map service. It can also +complete with an exception if it is unable to.
    +
    + + + +
      +
    • +

      uploadFile

      +
      java.lang.String uploadFile(java.lang.String dataType,
      +                            java.lang.String name,
      +                            java.io.InputStream file)
      +
      Deprecated. 
      +
    • +
    @@ -375,7 +404,18 @@ result of running the flow.

  • currentNodeTime

    java.time.Instant currentNodeTime()
    -

    Returns the node-local current time.

    +

    Returns the node's current time.

    +
  • + + + + +
      +
    • +

      waitUntilRegisteredWithNetworkMap

      +
      com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> waitUntilRegisteredWithNetworkMap()
      +

      Returns a ListenableFuture which completes when the node has registered wih the network map service. It can also +complete with an exception if it is unable to.

    diff --git a/docs/build/html/api/javadoc/net/corda/core/messaging/CordaRPCOpsKt.html b/docs/build/html/api/javadoc/net/corda/core/messaging/CordaRPCOpsKt.html index c3e484210c..408d4bcee5 100644 --- a/docs/build/html/api/javadoc/net/corda/core/messaging/CordaRPCOpsKt.html +++ b/docs/build/html/api/javadoc/net/corda/core/messaging/CordaRPCOpsKt.html @@ -2,10 +2,10 @@ - + CordaRPCOpsKt - + diff --git a/docs/build/html/api/javadoc/net/corda/core/messaging/FlowHandle.html b/docs/build/html/api/javadoc/net/corda/core/messaging/FlowHandle.html index efcc715d93..57a6828327 100644 --- a/docs/build/html/api/javadoc/net/corda/core/messaging/FlowHandle.html +++ b/docs/build/html/api/javadoc/net/corda/core/messaging/FlowHandle.html @@ -2,10 +2,10 @@ - + FlowHandle - + @@ -141,7 +141,7 @@ var activeTableTab = "activeTableTab"; FlowHandle(StateMachineRunId id, rx.Observable<java.lang.String> progress, - rx.Observable<A> returnValue) + com.google.common.util.concurrent.ListenableFuture<A> returnValue)
    class FlowHandle is a serialisable handle for the started flow, parameterised by the type of the flow's return value.
    @@ -169,14 +169,14 @@ var activeTableTab = "activeTableTab"; component2()  -rx.Observable<A> +com.google.common.util.concurrent.ListenableFuture<A> component3()  FlowHandle<A> copy(StateMachineRunId id, rx.Observable<java.lang.String> progress, - rx.Observable<A> returnValue) + com.google.common.util.concurrent.ListenableFuture<A> returnValue)
    class FlowHandle is a serialisable handle for the started flow, parameterised by the type of the flow's return value.
    @@ -193,7 +193,7 @@ var activeTableTab = "activeTableTab"; getProgress()  -rx.Observable<A> +com.google.common.util.concurrent.ListenableFuture<A> getReturnValue()  @@ -227,15 +227,13 @@ var activeTableTab = "activeTableTab";

    FlowHandle

    public FlowHandle(StateMachineRunId id,
                       rx.Observable<java.lang.String> progress,
    -                  rx.Observable<A> returnValue)
    + com.google.common.util.concurrent.ListenableFuture<A> returnValue)

    class FlowHandle is a serialisable handle for the started flow, parameterised by the type of the flow's return value.

    Parameters:
    id - The started state machine's ID.
    progress - The stream of progress tracker events.
    -
    returnValue - An Observable emitting a single event containing the flow's return value. - To block on this value: - val returnValue = rpc.startFlow(::MyFlow).returnValue.toBlocking().first()
    +
    returnValue - A ListenableFuture of the flow's return value.
    See Also:
    class FlowHandle
    @@ -273,7 +271,7 @@ var activeTableTab = "activeTableTab";
    • getReturnValue

      -
      public rx.Observable<A> getReturnValue()
      +
      public com.google.common.util.concurrent.ListenableFuture<A> getReturnValue()
    @@ -300,7 +298,7 @@ var activeTableTab = "activeTableTab";
    • component3

      -
      public rx.Observable<A> component3()
      +
      public com.google.common.util.concurrent.ListenableFuture<A> component3()
    @@ -311,15 +309,13 @@ var activeTableTab = "activeTableTab";

    copy

    public FlowHandle<A> copy(StateMachineRunId id,
                               rx.Observable<java.lang.String> progress,
    -                          rx.Observable<A> returnValue)
    + com.google.common.util.concurrent.ListenableFuture<A> returnValue)

    class FlowHandle is a serialisable handle for the started flow, parameterised by the type of the flow's return value.

    Parameters:
    id - The started state machine's ID.
    progress - The stream of progress tracker events.
    -
    returnValue - An Observable emitting a single event containing the flow's return value. - To block on this value: - val returnValue = rpc.startFlow(::MyFlow).returnValue.toBlocking().first()
    +
    returnValue - A ListenableFuture of the flow's return value.
    See Also:
    class FlowHandle
    diff --git a/docs/build/html/api/javadoc/net/corda/core/messaging/Message.html b/docs/build/html/api/javadoc/net/corda/core/messaging/Message.html index 4a291de3dc..c14aa13d07 100644 --- a/docs/build/html/api/javadoc/net/corda/core/messaging/Message.html +++ b/docs/build/html/api/javadoc/net/corda/core/messaging/Message.html @@ -2,10 +2,10 @@ - + Message - + diff --git a/docs/build/html/api/javadoc/net/corda/core/messaging/MessageHandlerRegistration.html b/docs/build/html/api/javadoc/net/corda/core/messaging/MessageHandlerRegistration.html index 71efc088bb..29b61092d0 100644 --- a/docs/build/html/api/javadoc/net/corda/core/messaging/MessageHandlerRegistration.html +++ b/docs/build/html/api/javadoc/net/corda/core/messaging/MessageHandlerRegistration.html @@ -2,10 +2,10 @@ - + MessageHandlerRegistration - + diff --git a/docs/build/html/api/javadoc/net/corda/core/messaging/MessageRecipientGroup.html b/docs/build/html/api/javadoc/net/corda/core/messaging/MessageRecipientGroup.html index bfef12d032..20193e1bda 100644 --- a/docs/build/html/api/javadoc/net/corda/core/messaging/MessageRecipientGroup.html +++ b/docs/build/html/api/javadoc/net/corda/core/messaging/MessageRecipientGroup.html @@ -2,10 +2,10 @@ - + MessageRecipientGroup - + diff --git a/docs/build/html/api/javadoc/net/corda/core/messaging/MessageRecipients.html b/docs/build/html/api/javadoc/net/corda/core/messaging/MessageRecipients.html index b482fc7441..c7c4cf1a51 100644 --- a/docs/build/html/api/javadoc/net/corda/core/messaging/MessageRecipients.html +++ b/docs/build/html/api/javadoc/net/corda/core/messaging/MessageRecipients.html @@ -2,10 +2,10 @@ - + MessageRecipients - + diff --git a/docs/build/html/api/javadoc/net/corda/core/messaging/MessagingKt.html b/docs/build/html/api/javadoc/net/corda/core/messaging/MessagingKt.html index eff119fee3..e2aa1006e1 100644 --- a/docs/build/html/api/javadoc/net/corda/core/messaging/MessagingKt.html +++ b/docs/build/html/api/javadoc/net/corda/core/messaging/MessagingKt.html @@ -2,10 +2,10 @@ - + MessagingKt - + diff --git a/docs/build/html/api/javadoc/net/corda/core/messaging/MessagingService.html b/docs/build/html/api/javadoc/net/corda/core/messaging/MessagingService.html index b5940655c6..c6c03a0498 100644 --- a/docs/build/html/api/javadoc/net/corda/core/messaging/MessagingService.html +++ b/docs/build/html/api/javadoc/net/corda/core/messaging/MessagingService.html @@ -2,10 +2,10 @@ - + MessagingService - + diff --git a/docs/build/html/api/javadoc/net/corda/core/messaging/RPCOps.html b/docs/build/html/api/javadoc/net/corda/core/messaging/RPCOps.html index 1170d579c6..0e24113733 100644 --- a/docs/build/html/api/javadoc/net/corda/core/messaging/RPCOps.html +++ b/docs/build/html/api/javadoc/net/corda/core/messaging/RPCOps.html @@ -2,10 +2,10 @@ - + RPCOps - + diff --git a/docs/build/html/api/javadoc/net/corda/core/messaging/RPCReturnsObservables.html b/docs/build/html/api/javadoc/net/corda/core/messaging/RPCReturnsObservables.html index 8484031a48..2f4df73f01 100644 --- a/docs/build/html/api/javadoc/net/corda/core/messaging/RPCReturnsObservables.html +++ b/docs/build/html/api/javadoc/net/corda/core/messaging/RPCReturnsObservables.html @@ -2,10 +2,10 @@ - + RPCReturnsObservables - + diff --git a/docs/build/html/api/javadoc/net/corda/core/messaging/ReceivedMessage.html b/docs/build/html/api/javadoc/net/corda/core/messaging/ReceivedMessage.html index 33cadc600a..e4e9a72d38 100644 --- a/docs/build/html/api/javadoc/net/corda/core/messaging/ReceivedMessage.html +++ b/docs/build/html/api/javadoc/net/corda/core/messaging/ReceivedMessage.html @@ -2,10 +2,10 @@ - + ReceivedMessage - + diff --git a/docs/build/html/api/javadoc/net/corda/core/messaging/SingleMessageRecipient.html b/docs/build/html/api/javadoc/net/corda/core/messaging/SingleMessageRecipient.html index 0a0c8c320e..00bf8152dd 100644 --- a/docs/build/html/api/javadoc/net/corda/core/messaging/SingleMessageRecipient.html +++ b/docs/build/html/api/javadoc/net/corda/core/messaging/SingleMessageRecipient.html @@ -2,10 +2,10 @@ - + SingleMessageRecipient - + diff --git a/docs/build/html/api/javadoc/net/corda/core/messaging/StateMachineInfo.html b/docs/build/html/api/javadoc/net/corda/core/messaging/StateMachineInfo.html index 8d396a6021..3f59620cd8 100644 --- a/docs/build/html/api/javadoc/net/corda/core/messaging/StateMachineInfo.html +++ b/docs/build/html/api/javadoc/net/corda/core/messaging/StateMachineInfo.html @@ -2,10 +2,10 @@ - + StateMachineInfo - + diff --git a/docs/build/html/api/javadoc/net/corda/core/messaging/StateMachineUpdate.Added.html b/docs/build/html/api/javadoc/net/corda/core/messaging/StateMachineUpdate.Added.html index 786a11eb27..4bdd3722f1 100644 --- a/docs/build/html/api/javadoc/net/corda/core/messaging/StateMachineUpdate.Added.html +++ b/docs/build/html/api/javadoc/net/corda/core/messaging/StateMachineUpdate.Added.html @@ -2,10 +2,10 @@ - + StateMachineUpdate.Added - + diff --git a/docs/build/html/api/javadoc/net/corda/core/messaging/StateMachineUpdate.Removed.html b/docs/build/html/api/javadoc/net/corda/core/messaging/StateMachineUpdate.Removed.html index 185ae01982..3ef866ec83 100644 --- a/docs/build/html/api/javadoc/net/corda/core/messaging/StateMachineUpdate.Removed.html +++ b/docs/build/html/api/javadoc/net/corda/core/messaging/StateMachineUpdate.Removed.html @@ -2,10 +2,10 @@ - + StateMachineUpdate.Removed - + diff --git a/docs/build/html/api/javadoc/net/corda/core/messaging/StateMachineUpdate.html b/docs/build/html/api/javadoc/net/corda/core/messaging/StateMachineUpdate.html index eefdccd8a9..78e2d16765 100644 --- a/docs/build/html/api/javadoc/net/corda/core/messaging/StateMachineUpdate.html +++ b/docs/build/html/api/javadoc/net/corda/core/messaging/StateMachineUpdate.html @@ -2,10 +2,10 @@ - + StateMachineUpdate - + diff --git a/docs/build/html/api/javadoc/net/corda/core/messaging/TopicSession.html b/docs/build/html/api/javadoc/net/corda/core/messaging/TopicSession.html index 16722722c3..9dcb041fb8 100644 --- a/docs/build/html/api/javadoc/net/corda/core/messaging/TopicSession.html +++ b/docs/build/html/api/javadoc/net/corda/core/messaging/TopicSession.html @@ -2,10 +2,10 @@ - + TopicSession - + diff --git a/docs/build/html/api/javadoc/net/corda/core/messaging/TopicStringValidator.html b/docs/build/html/api/javadoc/net/corda/core/messaging/TopicStringValidator.html index 58c0fa19df..baa4910c5d 100644 --- a/docs/build/html/api/javadoc/net/corda/core/messaging/TopicStringValidator.html +++ b/docs/build/html/api/javadoc/net/corda/core/messaging/TopicStringValidator.html @@ -2,10 +2,10 @@ - + TopicStringValidator - + diff --git a/docs/build/html/api/javadoc/net/corda/core/messaging/package-frame.html b/docs/build/html/api/javadoc/net/corda/core/messaging/package-frame.html index dff69c274c..658a53ec1e 100644 --- a/docs/build/html/api/javadoc/net/corda/core/messaging/package-frame.html +++ b/docs/build/html/api/javadoc/net/corda/core/messaging/package-frame.html @@ -2,10 +2,10 @@ - + net.corda.core.messaging - + diff --git a/docs/build/html/api/javadoc/net/corda/core/messaging/package-summary.html b/docs/build/html/api/javadoc/net/corda/core/messaging/package-summary.html index 04561d630d..ad91b1f8fe 100644 --- a/docs/build/html/api/javadoc/net/corda/core/messaging/package-summary.html +++ b/docs/build/html/api/javadoc/net/corda/core/messaging/package-summary.html @@ -2,10 +2,10 @@ - + net.corda.core.messaging - + diff --git a/docs/build/html/api/javadoc/net/corda/core/messaging/package-tree.html b/docs/build/html/api/javadoc/net/corda/core/messaging/package-tree.html index cd6697f45c..351430ebfa 100644 --- a/docs/build/html/api/javadoc/net/corda/core/messaging/package-tree.html +++ b/docs/build/html/api/javadoc/net/corda/core/messaging/package-tree.html @@ -2,10 +2,10 @@ - + net.corda.core.messaging Class Hierarchy - + diff --git a/docs/build/html/api/javadoc/net/corda/core/node/AttachmentsClassLoader.OverlappingAttachments.html b/docs/build/html/api/javadoc/net/corda/core/node/AttachmentsClassLoader.OverlappingAttachments.html index cdeed51cb7..1637d30ed8 100644 --- a/docs/build/html/api/javadoc/net/corda/core/node/AttachmentsClassLoader.OverlappingAttachments.html +++ b/docs/build/html/api/javadoc/net/corda/core/node/AttachmentsClassLoader.OverlappingAttachments.html @@ -2,10 +2,10 @@ - + AttachmentsClassLoader.OverlappingAttachments - + diff --git a/docs/build/html/api/javadoc/net/corda/core/node/AttachmentsClassLoader.html b/docs/build/html/api/javadoc/net/corda/core/node/AttachmentsClassLoader.html index 05e080523c..e9727952b2 100644 --- a/docs/build/html/api/javadoc/net/corda/core/node/AttachmentsClassLoader.html +++ b/docs/build/html/api/javadoc/net/corda/core/node/AttachmentsClassLoader.html @@ -2,10 +2,10 @@ - + AttachmentsClassLoader - + diff --git a/docs/build/html/api/javadoc/net/corda/core/node/CityDatabase.html b/docs/build/html/api/javadoc/net/corda/core/node/CityDatabase.html index 4efd44302e..4f850e5ff7 100644 --- a/docs/build/html/api/javadoc/net/corda/core/node/CityDatabase.html +++ b/docs/build/html/api/javadoc/net/corda/core/node/CityDatabase.html @@ -2,10 +2,10 @@ - + CityDatabase - + diff --git a/docs/build/html/api/javadoc/net/corda/core/node/CordaPluginRegistry.html b/docs/build/html/api/javadoc/net/corda/core/node/CordaPluginRegistry.html index 05f4bdbc36..b546572566 100644 --- a/docs/build/html/api/javadoc/net/corda/core/node/CordaPluginRegistry.html +++ b/docs/build/html/api/javadoc/net/corda/core/node/CordaPluginRegistry.html @@ -2,10 +2,10 @@ - + CordaPluginRegistry - + diff --git a/docs/build/html/api/javadoc/net/corda/core/node/NodeInfo.html b/docs/build/html/api/javadoc/net/corda/core/node/NodeInfo.html index cf37ca9934..74358c3422 100644 --- a/docs/build/html/api/javadoc/net/corda/core/node/NodeInfo.html +++ b/docs/build/html/api/javadoc/net/corda/core/node/NodeInfo.html @@ -2,10 +2,10 @@ - + NodeInfo - + diff --git a/docs/build/html/api/javadoc/net/corda/core/node/PhysicalLocation.html b/docs/build/html/api/javadoc/net/corda/core/node/PhysicalLocation.html index fbe616f1df..20c9f919a3 100644 --- a/docs/build/html/api/javadoc/net/corda/core/node/PhysicalLocation.html +++ b/docs/build/html/api/javadoc/net/corda/core/node/PhysicalLocation.html @@ -2,10 +2,10 @@ - + PhysicalLocation - + diff --git a/docs/build/html/api/javadoc/net/corda/core/node/PluginServiceHub.html b/docs/build/html/api/javadoc/net/corda/core/node/PluginServiceHub.html index 975a59ae66..538c7ce57c 100644 --- a/docs/build/html/api/javadoc/net/corda/core/node/PluginServiceHub.html +++ b/docs/build/html/api/javadoc/net/corda/core/node/PluginServiceHub.html @@ -2,10 +2,10 @@ - + PluginServiceHub - + diff --git a/docs/build/html/api/javadoc/net/corda/core/node/ServiceEntry.html b/docs/build/html/api/javadoc/net/corda/core/node/ServiceEntry.html index 591f7caf36..a282bf1193 100644 --- a/docs/build/html/api/javadoc/net/corda/core/node/ServiceEntry.html +++ b/docs/build/html/api/javadoc/net/corda/core/node/ServiceEntry.html @@ -2,10 +2,10 @@ - + ServiceEntry - + diff --git a/docs/build/html/api/javadoc/net/corda/core/node/ServiceHub.DefaultImpls.html b/docs/build/html/api/javadoc/net/corda/core/node/ServiceHub.DefaultImpls.html index 23df3ae648..96079bf202 100644 --- a/docs/build/html/api/javadoc/net/corda/core/node/ServiceHub.DefaultImpls.html +++ b/docs/build/html/api/javadoc/net/corda/core/node/ServiceHub.DefaultImpls.html @@ -2,10 +2,10 @@ - + ServiceHub.DefaultImpls - + diff --git a/docs/build/html/api/javadoc/net/corda/core/node/ServiceHub.html b/docs/build/html/api/javadoc/net/corda/core/node/ServiceHub.html index abbcc0603f..437741b0b0 100644 --- a/docs/build/html/api/javadoc/net/corda/core/node/ServiceHub.html +++ b/docs/build/html/api/javadoc/net/corda/core/node/ServiceHub.html @@ -2,10 +2,10 @@ - + ServiceHub - + diff --git a/docs/build/html/api/javadoc/net/corda/core/node/ServiceHubKt.html b/docs/build/html/api/javadoc/net/corda/core/node/ServiceHubKt.html index 15a7b0cc01..1c89fd9b8a 100644 --- a/docs/build/html/api/javadoc/net/corda/core/node/ServiceHubKt.html +++ b/docs/build/html/api/javadoc/net/corda/core/node/ServiceHubKt.html @@ -2,10 +2,10 @@ - + ServiceHubKt - + diff --git a/docs/build/html/api/javadoc/net/corda/core/node/WorldCoordinate.html b/docs/build/html/api/javadoc/net/corda/core/node/WorldCoordinate.html index 3cf95bce71..3dbf7dc653 100644 --- a/docs/build/html/api/javadoc/net/corda/core/node/WorldCoordinate.html +++ b/docs/build/html/api/javadoc/net/corda/core/node/WorldCoordinate.html @@ -2,10 +2,10 @@ - + WorldCoordinate - + diff --git a/docs/build/html/api/javadoc/net/corda/core/node/package-frame.html b/docs/build/html/api/javadoc/net/corda/core/node/package-frame.html index 50362a2c71..0db42b2eea 100644 --- a/docs/build/html/api/javadoc/net/corda/core/node/package-frame.html +++ b/docs/build/html/api/javadoc/net/corda/core/node/package-frame.html @@ -2,10 +2,10 @@ - + net.corda.core.node - + diff --git a/docs/build/html/api/javadoc/net/corda/core/node/package-summary.html b/docs/build/html/api/javadoc/net/corda/core/node/package-summary.html index c6af74e8da..78d025043a 100644 --- a/docs/build/html/api/javadoc/net/corda/core/node/package-summary.html +++ b/docs/build/html/api/javadoc/net/corda/core/node/package-summary.html @@ -2,10 +2,10 @@ - + net.corda.core.node - + diff --git a/docs/build/html/api/javadoc/net/corda/core/node/package-tree.html b/docs/build/html/api/javadoc/net/corda/core/node/package-tree.html index 26561e1764..193613fd19 100644 --- a/docs/build/html/api/javadoc/net/corda/core/node/package-tree.html +++ b/docs/build/html/api/javadoc/net/corda/core/node/package-tree.html @@ -2,10 +2,10 @@ - + net.corda.core.node Class Hierarchy - + diff --git a/docs/build/html/api/javadoc/net/corda/core/node/services/AttachmentStorage.html b/docs/build/html/api/javadoc/net/corda/core/node/services/AttachmentStorage.html index 9fa18fbaeb..b9aae4b14f 100644 --- a/docs/build/html/api/javadoc/net/corda/core/node/services/AttachmentStorage.html +++ b/docs/build/html/api/javadoc/net/corda/core/node/services/AttachmentStorage.html @@ -2,10 +2,10 @@ - + AttachmentStorage - + diff --git a/docs/build/html/api/javadoc/net/corda/core/node/services/FileUploader.html b/docs/build/html/api/javadoc/net/corda/core/node/services/FileUploader.html new file mode 100644 index 0000000000..bd3b589df0 --- /dev/null +++ b/docs/build/html/api/javadoc/net/corda/core/node/services/FileUploader.html @@ -0,0 +1,255 @@ + + + + + + +FileUploader + + + + + + + + + + + + + + + +
    +
    net.corda.core.node.services
    +

    Interface FileUploader

    +
    +
    +
    +
      +
    • +
      +
      All Known Subinterfaces:
      +
      AcceptsFileUpload
      +
      +
      +
      All Known Implementing Classes:
      +
      NodeAttachmentService
      +
      +
      +
      +
      public FileUploader
      +

      An interface that denotes a service that can accept file uploads.

      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + +
        All Methods Instance Methods Default Methods 
        Modifier and TypeMethod and Description
        booleanaccepts(java.lang.String type) +
        Check if this service accepts this type of upload. For example if you are uploading interest rates this could +be "my-service-interest-rates". Type here does not refer to file extentions or MIME types.
        +
        java.lang.Stringupload(java.io.InputStream file) +
        Accepts the data in the given input stream, and returns some sort of useful return message that will be sent +back to the user in the response.
        +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          upload

          +
          java.lang.String upload(java.io.InputStream file)
          +

          Accepts the data in the given input stream, and returns some sort of useful return message that will be sent +back to the user in the response.

          +
        • +
        + + + +
          +
        • +

          accepts

          +
          boolean accepts(java.lang.String type)
          +

          Check if this service accepts this type of upload. For example if you are uploading interest rates this could +be "my-service-interest-rates". Type here does not refer to file extentions or MIME types.

          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/docs/build/html/api/javadoc/net/corda/core/node/services/IdentityService.html b/docs/build/html/api/javadoc/net/corda/core/node/services/IdentityService.html index ce62db6265..537505fc04 100644 --- a/docs/build/html/api/javadoc/net/corda/core/node/services/IdentityService.html +++ b/docs/build/html/api/javadoc/net/corda/core/node/services/IdentityService.html @@ -2,10 +2,10 @@ - + IdentityService - + @@ -54,7 +54,7 @@ var activeTableTab = "activeTableTab"; - + diff --git a/docs/build/html/api/javadoc/net/corda/flows/AbstractStateReplacementFlow.Instigator.html b/docs/build/html/api/javadoc/net/corda/flows/AbstractStateReplacementFlow.Instigator.html index 4296e03d16..3f24b0f811 100644 --- a/docs/build/html/api/javadoc/net/corda/flows/AbstractStateReplacementFlow.Instigator.html +++ b/docs/build/html/api/javadoc/net/corda/flows/AbstractStateReplacementFlow.Instigator.html @@ -2,14 +2,13 @@ - + AbstractStateReplacementFlow.Instigator - + - @@ -27,7 +26,7 @@ catch(err) { } //--> -var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10}; +var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10}; var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]}; var altColor = "altColor"; var rowColor = "rowColor"; @@ -121,7 +120,7 @@ var activeTableTab = "activeTableTab";
    Enclosing class:
    -
    AbstractStateReplacementFlow<T>
    +
    AbstractStateReplacementFlow


    @@ -203,31 +202,25 @@ extends FlowLogic Method and Description -AbstractStateReplacementFlow.Proposal<T> -assembleProposal(StateRef stateRef, - T modification, - SignedTransaction stx)  - - kotlin.Pair<net.corda.core.transactions.SignedTransaction,java.lang.Iterable> assembleTx()  - + StateAndRef<S> call()
    This is where you fill out your business logic. The returned object will usually be ignored, but can be helpful if this flow is meant to be used as a subflow.
    - + T getModification()  - + StateAndRef<S> getOriginalState()  - + ProgressTracker getProgressTracker()
    Override this to provide a class ProgressTracker. If one is provided and stepped, the framework will do something @@ -313,17 +306,6 @@ through.

    helpful if this flow is meant to be used as a subflow.

    - - - - diff --git a/docs/build/html/api/javadoc/net/corda/flows/AbstractStateReplacementFlow.Proposal.html b/docs/build/html/api/javadoc/net/corda/flows/AbstractStateReplacementFlow.Proposal.html index e387230d99..0cc9b7f5c8 100644 --- a/docs/build/html/api/javadoc/net/corda/flows/AbstractStateReplacementFlow.Proposal.html +++ b/docs/build/html/api/javadoc/net/corda/flows/AbstractStateReplacementFlow.Proposal.html @@ -2,14 +2,21 @@ - + AbstractStateReplacementFlow.Proposal - - + + + + + + + + + @@ -23,8 +30,8 @@ catch(err) { } //--> -var methods = {"i0":18,"i1":18,"i2":18}; -var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],16:["t5","Default Methods"]}; +var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10}; +var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]}; var altColor = "altColor"; var rowColor = "rowColor"; var tableTab = "tableTab"; @@ -53,7 +60,7 @@ var activeTableTab = "activeTableTab"; @@ -97,29 +104,47 @@ var activeTableTab = "activeTableTab";
    net.corda.flows
    -

    Interface AbstractStateReplacementFlow.Proposal<T>

    +

    Class AbstractStateReplacementFlow.Proposal<T>

    +
      +
    • net.corda.flows.AbstractStateReplacementFlow.Proposal<T>
    • +


    -
    public class AbstractStateReplacementFlow<T>
    +
    public class AbstractStateReplacementFlow

    Abstract flow to be used for replacing one state with another, for example when changing the notary of a state. Notably this requires a one to one replacement of states, states cannot be split, merged or issued as part of these flows.

    The class AbstractStateReplacementFlow.Instigator assembles the transaction for state replacement and sends out change proposals to all participants @@ -144,7 +144,7 @@ use the new updated state for future transactions.

    static class  -AbstractStateReplacementFlow.Result  +AbstractStateReplacementFlow.Proposal<T>  diff --git a/docs/build/html/api/javadoc/net/corda/flows/Acceptor.Companion.html b/docs/build/html/api/javadoc/net/corda/flows/Acceptor.Companion.html index e67e9c0388..57dcdc55ae 100644 --- a/docs/build/html/api/javadoc/net/corda/flows/Acceptor.Companion.html +++ b/docs/build/html/api/javadoc/net/corda/flows/Acceptor.Companion.html @@ -2,10 +2,10 @@ - + Acceptor.Companion - + @@ -135,10 +135,6 @@ var activeTableTab = "activeTableTab"; static class  -Companion.REJECTING  - - -static class  Companion.VERIFYING  diff --git a/docs/build/html/api/javadoc/net/corda/flows/BroadcastTransactionFlow.NotifyTxRequest.html b/docs/build/html/api/javadoc/net/corda/flows/BroadcastTransactionFlow.NotifyTxRequest.html index c594dc45e7..6faf0aa2fd 100644 --- a/docs/build/html/api/javadoc/net/corda/flows/BroadcastTransactionFlow.NotifyTxRequest.html +++ b/docs/build/html/api/javadoc/net/corda/flows/BroadcastTransactionFlow.NotifyTxRequest.html @@ -2,10 +2,10 @@ - + BroadcastTransactionFlow.NotifyTxRequest - + diff --git a/docs/build/html/api/javadoc/net/corda/flows/BroadcastTransactionFlow.html b/docs/build/html/api/javadoc/net/corda/flows/BroadcastTransactionFlow.html index d9d7c463ce..ceb757b119 100644 --- a/docs/build/html/api/javadoc/net/corda/flows/BroadcastTransactionFlow.html +++ b/docs/build/html/api/javadoc/net/corda/flows/BroadcastTransactionFlow.html @@ -2,10 +2,10 @@ - + BroadcastTransactionFlow - + @@ -53,7 +53,7 @@ var activeTableTab = "activeTableTab";

    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%0De`3<5D)vKgt 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 z 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 M4yKM!%C1yH5~BA(4qkRe=ir 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%0A&fRp%!z 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

    -startNode, startNotaryCluster, waitForAllNodesToFinish +startNode, startNotaryCluster, startWebserver, waitForAllNodesToFinish @@ -398,6 +405,20 @@ random. Note that this must be unique as the driver uses it as a primary key! + + + +
      +
    • +

      startWebserver

      +
      public com.google.common.util.concurrent.ListenableFuture<com.google.common.net.HostAndPort> startWebserver(NodeHandle handle)
      +

      Starts a web server for a node

      +
      +
      Parameters:
      +
      handle - The handle for the node that this webserver connects to via RPC.
      +
      +
    • +
    diff --git a/docs/build/html/api/javadoc/net/corda/node/driver/DriverDSLExposedInterface.html b/docs/build/html/api/javadoc/net/corda/node/driver/DriverDSLExposedInterface.html index f85258f0a0..7e8d4bfeca 100644 --- a/docs/build/html/api/javadoc/net/corda/node/driver/DriverDSLExposedInterface.html +++ b/docs/build/html/api/javadoc/net/corda/node/driver/DriverDSLExposedInterface.html @@ -2,13 +2,14 @@ - + DriverDSLExposedInterface - + + @@ -23,7 +24,7 @@ catch(err) { } //--> -var methods = {"i0":18,"i1":18,"i2":18}; +var methods = {"i0":18,"i1":18,"i2":18,"i3":18}; var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],16:["t5","Default Methods"]}; var altColor = "altColor"; var rowColor = "rowColor"; @@ -152,6 +153,12 @@ var activeTableTab = "activeTableTab"; +com.google.common.util.concurrent.ListenableFuture<com.google.common.net.HostAndPort> +startWebserver(NodeHandle handle) +
    Starts a web server for a node
    + + + void waitForAllNodesToFinish()  @@ -216,6 +223,20 @@ random. Note that this must be unique as the driver uses it as a primary key! + + + +
      +
    • +

      startWebserver

      +
      com.google.common.util.concurrent.ListenableFuture<com.google.common.net.HostAndPort> startWebserver(NodeHandle handle)
      +

      Starts a web server for a node

      +
      +
      Parameters:
      +
      handle - The handle for the node that this webserver connects to via RPC.
      +
      +
    • +
    diff --git a/docs/build/html/api/javadoc/net/corda/node/driver/DriverDSLInternalInterface.html b/docs/build/html/api/javadoc/net/corda/node/driver/DriverDSLInternalInterface.html index 7497dc029c..8d483f8cb3 100644 --- a/docs/build/html/api/javadoc/net/corda/node/driver/DriverDSLInternalInterface.html +++ b/docs/build/html/api/javadoc/net/corda/node/driver/DriverDSLInternalInterface.html @@ -2,10 +2,10 @@ - + DriverDSLInternalInterface - + @@ -146,7 +146,7 @@ extends DriverDSLExposedInterface -startNode, startNotaryCluster, waitForAllNodesToFinish +startNode, startNotaryCluster, startWebserver, waitForAllNodesToFinish diff --git a/docs/build/html/api/javadoc/net/corda/node/driver/NodeHandle.html b/docs/build/html/api/javadoc/net/corda/node/driver/NodeHandle.html index b25dd5b1be..2ac514bca5 100644 --- a/docs/build/html/api/javadoc/net/corda/node/driver/NodeHandle.html +++ b/docs/build/html/api/javadoc/net/corda/node/driver/NodeHandle.html @@ -2,18 +2,20 @@ - + NodeHandle - + + + @@ -31,7 +33,7 @@ catch(err) { } //--> -var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10}; +var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10}; var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]}; var altColor = "altColor"; var rowColor = "rowColor"; @@ -135,7 +137,8 @@ var activeTableTab = "activeTableTab"; Constructor and Description -NodeHandle(NodeInfo nodeInfo, +NodeHandle(NodeInfo nodeInfo, + CordaRPCOps rpc, FullNodeConfiguration configuration, java.lang.Process process)  @@ -159,44 +162,53 @@ var activeTableTab = "activeTableTab"; component1()  -FullNodeConfiguration +CordaRPCOps component2()  -java.lang.Process +FullNodeConfiguration component3()  +java.lang.Process +component4()  + + NodeHandle -copy(NodeInfo nodeInfo, +copy(NodeInfo nodeInfo, + CordaRPCOps rpc, FullNodeConfiguration configuration, java.lang.Process process)  - + boolean equals(java.lang.Object p)  - + FullNodeConfiguration getConfiguration()  - + NodeInfo getNodeInfo()  - + java.lang.Process getProcess()  - + +CordaRPCOps +getRpc()  + + int hashCode()  - + CordaRPCClient rpcClientToNode()  - + java.lang.String toString()  @@ -215,13 +227,14 @@ var activeTableTab = "activeTableTab";

    Constructor Detail

    - + + + + + @@ -285,7 +307,7 @@ var activeTableTab = "activeTableTab"; @@ -294,16 +316,26 @@ var activeTableTab = "activeTableTab"; - + + + +
      +
    • +

      component4

      +
      public java.lang.Process component4()
      +
    • +
    +
    • copy

      public NodeHandle copy(NodeInfo nodeInfo,
      +                       CordaRPCOps rpc,
                              FullNodeConfiguration configuration,
                              java.lang.Process process)
    • diff --git a/docs/build/html/api/javadoc/net/corda/node/driver/PortAllocation.Incremental.html b/docs/build/html/api/javadoc/net/corda/node/driver/PortAllocation.Incremental.html index 95ec24d905..37f300ee12 100644 --- a/docs/build/html/api/javadoc/net/corda/node/driver/PortAllocation.Incremental.html +++ b/docs/build/html/api/javadoc/net/corda/node/driver/PortAllocation.Incremental.html @@ -2,10 +2,10 @@ - + PortAllocation.Incremental - + diff --git a/docs/build/html/api/javadoc/net/corda/node/driver/PortAllocation.RandomFree.html b/docs/build/html/api/javadoc/net/corda/node/driver/PortAllocation.RandomFree.html index 8c1723ffc6..03e94ddff3 100644 --- a/docs/build/html/api/javadoc/net/corda/node/driver/PortAllocation.RandomFree.html +++ b/docs/build/html/api/javadoc/net/corda/node/driver/PortAllocation.RandomFree.html @@ -2,10 +2,10 @@ - + PortAllocation.RandomFree - + diff --git a/docs/build/html/api/javadoc/net/corda/node/driver/PortAllocation.html b/docs/build/html/api/javadoc/net/corda/node/driver/PortAllocation.html index d8ddb06722..327cc5f350 100644 --- a/docs/build/html/api/javadoc/net/corda/node/driver/PortAllocation.html +++ b/docs/build/html/api/javadoc/net/corda/node/driver/PortAllocation.html @@ -2,10 +2,10 @@ - + PortAllocation - + diff --git a/docs/build/html/api/javadoc/net/corda/node/driver/package-frame.html b/docs/build/html/api/javadoc/net/corda/node/driver/package-frame.html index f60c56c9ad..65fc0cd80a 100644 --- a/docs/build/html/api/javadoc/net/corda/node/driver/package-frame.html +++ b/docs/build/html/api/javadoc/net/corda/node/driver/package-frame.html @@ -2,10 +2,10 @@ - + net.corda.node.driver - + diff --git a/docs/build/html/api/javadoc/net/corda/node/driver/package-summary.html b/docs/build/html/api/javadoc/net/corda/node/driver/package-summary.html index a481db2d6e..1782a8b8fb 100644 --- a/docs/build/html/api/javadoc/net/corda/node/driver/package-summary.html +++ b/docs/build/html/api/javadoc/net/corda/node/driver/package-summary.html @@ -2,10 +2,10 @@ - + net.corda.node.driver - + @@ -44,7 +44,7 @@ getAdvertisedServices()  -APIServer -getApi()  - - org.apache.activemq.artemis.utils.ReusableLatch getBusyNodeLatch()  - + CheckpointStorage getCheckpointStorage()  - + NodeConfiguration getConfiguration()  - + java.util.ArrayList<java.lang.Object> getCustomServices()  - + org.jetbrains.exposed.sql.Database getDatabase()  - + java.lang.Runnable getDbCloser()  - + FlowLogicRefFactory getFlowLogicFactory()  - + IdentityService getIdentity()  - + NetworkMapService getInNodeNetworkMapService()  - + NotaryService getInNodeNotaryService()  - + NodeInfo getInfo()  - + KeyManagementService getKeyManagement()  - + org.slf4j.Logger getLog()  - + MessagingServiceInternal getNet()  - + NetworkMapCache getNetMapCache()  - + SingleMessageRecipient getNetworkMapAddress()  - + com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> getNetworkMapRegistrationFuture()
      Completes once the node has successfully registered with the network map service
      - + long getNetworkMapSeq()
      Sequence number of changes sent to the network map service, when registering/de-registering this node.
      - + java.util.Set<java.security.KeyPair> getPartyKeys()  - + java.time.Clock getPlatformClock()  - + java.util.List<net.corda.core.node.CordaPluginRegistry> getPluginRegistries()
      Fetch CordaPluginRegistry classes registered in META-INF/services/net.corda.core.node.CordaPluginRegistry files that exist in the classpath
      - + java.util.ArrayList<java.lang.Runnable> getRunOnStop()  - + NodeSchedulerService getScheduler()  - + SchemaService getSchemas()  - + AffinityExecutor getServerThread()  - + ServiceHubInternal getServices()  - -java.util.List<net.corda.node.services.api.AcceptsFileUpload> -getServicesThatAcceptUploads()  - - + StateMachineManager getSmm()  - + boolean getStarted()
      Set to true once AbstractNode.start has been successfully called.
      - + TxWritableStorageService getStorage()  - + UniquenessProvider getUniquenessProvider()  - + VaultService getVault()  - + com.google.common.util.concurrent.SettableFuture<kotlin.Unit> get_networkMapRegistrationFuture()  - -java.util.ArrayList<net.corda.node.services.api.AcceptsFileUpload> -get_servicesThatAcceptUploads()  - - + void initialiseDatabasePersistence(kotlin.jvm.functions.Function0<kotlin.Unit> insideTransaction)  - + kotlin.Pair<net.corda.core.node.services.TxWritableStorageService,net.corda.node.services.api.CheckpointStorage> initialiseStorageService(java.nio.file.Path dir)  - + boolean isPreviousCheckpointsPresent()  - + NodeAttachmentService makeAttachmentStorage(java.nio.file.Path dir)  - + IdentityService makeIdentityService()  - + KeyManagementService makeKeyManagementService()  - + MessagingServiceInternal makeMessagingService()  - + void makeNetworkMapService()  - + NotaryService makeNotaryService(ServiceType type)  - + SchemaService makeSchemaService()  - + java.util.List<net.corda.core.node.ServiceEntry> makeServiceEntries()
      A service entry contains the advertised class ServiceInfo along with the service identity. The identity name is taken from the configuration or, if non specified, generated by combining the node's legal name and the service id.
      - + UniquenessProvider makeUniquenessProvider(ServiceType type)  - + VaultService makeVaultService()  - + com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> noNetworkMapConfigured()
      This is overriden by the mock node implementation to enable operation without any network map service
      - + Party obtainLegalIdentity()  - + java.security.KeyPair obtainLegalIdentityKey()  - + com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> registerWithNetworkMap()
      Register this node with the network map cache, and load network map from a remote service (and register for updates) if one has been supplied.
      - -void -setApi(APIServer p)  - - + void setCheckpointStorage(CheckpointStorage p)  - + void setDatabase(org.jetbrains.exposed.sql.Database p)  - + void setDbCloser(java.lang.Runnable p)  - + void setFlowLogicFactory(FlowLogicRefFactory p)  - + void setIdentity(IdentityService p)  - + void setInNodeNetworkMapService(NetworkMapService p)  - + void setInNodeNotaryService(NotaryService p)  - + void setInfo(NodeInfo p)  - + void setKeyManagement(KeyManagementService p)  - + void setNet(MessagingServiceInternal p)  - + void setNetMapCache(NetworkMapCache p)  - + void setNetworkMapSeq(long p)
      Sequence number of changes sent to the network map service, when registering/de-registering this node.
      - + void setScheduler(NodeSchedulerService p)  - + void setSchemas(SchemaService p)  - + void setSmm(StateMachineManager p)  - + void setStorage(TxWritableStorageService p)  - + void setUniquenessProvider(UniquenessProvider p)  - + void setVault(VaultService p)  - + AbstractNode setup()
      Run any tasks that are needed to ensure the node is in a correct state before running start().
      - + AbstractNode start()  - + void startMessagingService(RPCOps rpcOps)  - + void stop()  @@ -810,15 +785,6 @@ updates) if one has been supplied.
      public NetworkMapCache netMapCache
    - - - - @@ -942,24 +908,6 @@ sweeping up the Node into the Kryo checkpoint serialization via any flows holdin
    public AffinityExecutor getServerThread()
    - - - -
      -
    • -

      get_servicesThatAcceptUploads

      -
      public java.util.ArrayList<net.corda.node.services.api.AcceptsFileUpload> get_servicesThatAcceptUploads()
      -
    • -
    - - - -
      -
    • -

      getServicesThatAcceptUploads

      -
      public java.util.List<net.corda.node.services.api.AcceptsFileUpload> getServicesThatAcceptUploads()
      -
    • -
    @@ -1203,24 +1151,6 @@ sweeping up the Node into the Kryo checkpoint serialization via any flows holdin
    public void setNetMapCache(NetworkMapCache p)
    - - - - - - - -
      -
    • -

      setApi

      -
      public void setApi(APIServer p)
      -
    • -
    @@ -1672,7 +1602,7 @@ updates) if one has been supplied.

    +java.lang.String +uploadFile(java.lang.String dataType, + java.lang.String name, + java.io.InputStream file)  + + kotlin.Pair<java.util.List,rx.Observable> vaultAndUpdates()
    Returns a pair of head states in the vault and an observable of future updates to the vault.
    - + kotlin.Pair<java.util.List,rx.Observable> verifiedTransactions()
    Returns a pair of all recorded transactions and an observable of future recorded ones.
    + +com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> +waitUntilRegisteredWithNetworkMap() +
    Returns a ListenableFuture which completes when the node has registered wih the network map service. It can also +complete with an exception if it is unable to.
    + + + + + +
      +
    • +

      uploadFile

      +
      public java.lang.String uploadFile(java.lang.String dataType,
      +                                   java.lang.String name,
      +                                   java.io.InputStream file)
      +
    • +
    + + + +
      +
    • +

      waitUntilRegisteredWithNetworkMap

      +
      public com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> waitUntilRegisteredWithNetworkMap()
      +

      Returns a ListenableFuture which completes when the node has registered wih the network map service. It can also +complete with an exception if it is unable to.

      +
      +
      See Also:
      +
      ListenableFuture
      +
    diff --git a/docs/build/html/api/javadoc/net/corda/node/internal/NetworkMapInfo.html b/docs/build/html/api/javadoc/net/corda/node/internal/NetworkMapInfo.html index 643fb05daa..ffda4e052d 100644 --- a/docs/build/html/api/javadoc/net/corda/node/internal/NetworkMapInfo.html +++ b/docs/build/html/api/javadoc/net/corda/node/internal/NetworkMapInfo.html @@ -2,10 +2,10 @@ - + NetworkMapInfo - + diff --git a/docs/build/html/api/javadoc/net/corda/node/internal/Node.html b/docs/build/html/api/javadoc/net/corda/node/internal/Node.html index 1ec976191d..9190009eb8 100644 --- a/docs/build/html/api/javadoc/net/corda/node/internal/Node.html +++ b/docs/build/html/api/javadoc/net/corda/node/internal/Node.html @@ -2,17 +2,14 @@ - + Node - + - - - @@ -38,7 +35,7 @@ catch(err) { } //--> -var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10}; +var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10}; var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]}; var altColor = "altColor"; var rowColor = "rowColor"; @@ -94,13 +91,13 @@ var activeTableTab = "activeTableTab"; @@ -172,23 +169,12 @@ loads important data off disk and starts listening for connections.

    Field Summary

    - - - - - - - - - - -
    Fields 
    Modifier and TypeField and Description
    org.eclipse.jetty.server.ServerwebServer 
    @@ -247,10 +233,6 @@ loads important data off disk and starts listening for connections. getServerThread()  -org.eclipse.jetty.server.Server -getWebServer()  - - void initialiseDatabasePersistence(kotlin.jvm.functions.Function0<kotlin.Unit> insideTransaction)
    If the node is persisting to an embedded H2 database, then expose this via TCP with a JDBC URL of the form: @@ -263,50 +245,46 @@ This is not using the H2 "automatic mixed mode" directly but leans on many of th on H2 URLs and configuration see: http://www.h2database.com/html/features.html#database_url
    - + MessagingServiceInternal makeMessagingService()  - + UniquenessProvider makeUniquenessProvider(ServiceType type)  - + com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> registerWithNetworkMap()
    Insert an initial step in the registration process which will throw an exception if a non-recoverable error is encountered when trying to connect to the network map node.
    - + void run()
    Starts a blocking event loop for message dispatch.
    - + void setMessageBroker(ArtemisMessagingServer p)  - -void -setWebServer(org.eclipse.jetty.server.Server p)  - - + Node setup()
    Run any tasks that are needed to ensure the node is in a correct state before running start().
    - + Node start()  - + void startMessagingService(RPCOps rpcOps)  - + void stop()  @@ -316,7 +294,7 @@ encountered when trying to connect to the network map node.

    Methods inherited from class net.corda.node.internal.AbstractNode

    -acceptableLiveFiberCountOnStop, constructStorageService, createNodeDir, findMyLocation, generateKeyPair, getAdvertisedServices, getApi, getBusyNodeLatch, getCheckpointStorage, getConfiguration, getCustomServices, getDatabase, getDbCloser, getFlowLogicFactory, getIdentity, getInNodeNetworkMapService, getInNodeNotaryService, getInfo, getKeyManagement, getLog, getNet, getNetMapCache, getNetworkMapAddress, getNetworkMapRegistrationFuture, getNetworkMapSeq, getPartyKeys, getPlatformClock, getPluginRegistries, getRunOnStop, getScheduler, getSchemas, getServerThread, getServices, getServicesThatAcceptUploads, getSmm, getStarted, getStorage, getUniquenessProvider, getVault, get_networkMapRegistrationFuture, get_servicesThatAcceptUploads, initialiseDatabasePersistence, initialiseStorageService, isPreviousCheckpointsPresent, makeAttachmentStorage, makeIdentityService, makeKeyManagementService, makeMessagingService, makeNetworkMapService, makeNotaryService, makeSchemaService, makeServiceEntries, makeUniquenessProvider, makeVaultService, noNetworkMapConfigured, obtainLegalIdentity, obtainLegalIdentityKey, registerWithNetworkMap, setApi, setCheckpointStorage, setDatabase, setDbCloser, setFlowLogicFactory, setIdentity, setInNodeNetworkMapService, setInNodeNotaryService, setInfo, setKeyManagement, setNet, setNetMapCache, setNetworkMapSeq, setScheduler, setSchemas, setSmm, setStorage, setUniquenessProvider, setVault, setup, start, startMessagingService, stop +acceptableLiveFiberCountOnStop, constructStorageService, createNodeDir, findMyLocation, generateKeyPair, getAdvertisedServices, getBusyNodeLatch, getCheckpointStorage, getConfiguration, getCustomServices, getDatabase, getDbCloser, getFlowLogicFactory, getIdentity, getInNodeNetworkMapService, getInNodeNotaryService, getInfo, getKeyManagement, getLog, getNet, getNetMapCache, getNetworkMapAddress, getNetworkMapRegistrationFuture, getNetworkMapSeq, getPartyKeys, getPlatformClock, getPluginRegistries, getRunOnStop, getScheduler, getSchemas, getServerThread, getServices, getSmm, getStarted, getStorage, getUniquenessProvider, getVault, get_networkMapRegistrationFuture, initialiseDatabasePersistence, initialiseStorageService, isPreviousCheckpointsPresent, makeAttachmentStorage, makeIdentityService, makeKeyManagementService, makeMessagingService, makeNetworkMapService, makeNotaryService, makeSchemaService, makeServiceEntries, makeUniquenessProvider, makeVaultService, noNetworkMapConfigured, obtainLegalIdentity, obtainLegalIdentityKey, registerWithNetworkMap, setCheckpointStorage, setDatabase, setDbCloser, setFlowLogicFactory, setIdentity, setInNodeNetworkMapService, setInNodeNotaryService, setInfo, setKeyManagement, setNet, setNetMapCache, setNetworkMapSeq, setScheduler, setSchemas, setSmm, setStorage, setUniquenessProvider, setVault, setup, start, startMessagingService, stop
    • @@ -340,23 +318,6 @@ encountered when trying to connect to the network map node.
      • - -
          -
        • - - -

          Field Detail

          - - - -
            -
          • -

            webServer

            -
            public org.eclipse.jetty.server.Server webServer
            -
          • -
          -
        • -
        - - - -
          -
        • -

          getWebServer

          -
          public org.eclipse.jetty.server.Server getWebServer()
          -
        • -
        - - - -
          -
        • -

          setWebServer

          -
          public void setWebServer(org.eclipse.jetty.server.Server p)
          -
        • -
        @@ -611,13 +554,13 @@ on H2 URLs and configuration see: http://www.h2database.com/html/features.html#d diff --git a/docs/build/html/api/javadoc/net/corda/node/internal/package-frame.html b/docs/build/html/api/javadoc/net/corda/node/internal/package-frame.html index 6eebba91d6..444c23437b 100644 --- a/docs/build/html/api/javadoc/net/corda/node/internal/package-frame.html +++ b/docs/build/html/api/javadoc/net/corda/node/internal/package-frame.html @@ -2,10 +2,10 @@ - + net.corda.node.internal - + @@ -15,7 +15,6 @@

        Classes

          -
        • APIServerImpl
        • AbstractNode
        • CordaRPCOpsImpl
        • NetworkMapInfo
        • diff --git a/docs/build/html/api/javadoc/net/corda/node/internal/package-summary.html b/docs/build/html/api/javadoc/net/corda/node/internal/package-summary.html index 5bd42caa2c..929b1495a0 100644 --- a/docs/build/html/api/javadoc/net/corda/node/internal/package-summary.html +++ b/docs/build/html/api/javadoc/net/corda/node/internal/package-summary.html @@ -2,10 +2,10 @@ - + net.corda.node.internal - + @@ -84,28 +84,24 @@ -APIServerImpl -  - - AbstractNode
          A base node implementation that can be customised either for production (with real implementations that do real I/O), or a mock implementation suitable for unit test environments.
          - + CordaRPCOpsImpl
          Server side implementations of RPCs available to MQ based client tools. Execution takes place on the server thread (i.e. serially). Arguments are serialised and deserialised automatically.
          - + NetworkMapInfo   - + Node
          A Node manages a standalone server that takes part in the P2P network. It creates the services found in interface ServiceHub, diff --git a/docs/build/html/api/javadoc/net/corda/node/internal/package-tree.html b/docs/build/html/api/javadoc/net/corda/node/internal/package-tree.html index 67edde2891..9c2d7930cc 100644 --- a/docs/build/html/api/javadoc/net/corda/node/internal/package-tree.html +++ b/docs/build/html/api/javadoc/net/corda/node/internal/package-tree.html @@ -2,10 +2,10 @@ - + net.corda.node.internal Class Hierarchy - + @@ -90,9 +90,8 @@
      • -
      • net.corda.node.internal.APIServerImpl (implements net.corda.node.api.APIServer)
      • -
      • net.corda.node.internal.NetworkMapInfo
      • net.corda.node.internal.AbstractNode.Companion
      • +
      • net.corda.node.internal.NetworkMapInfo
      diff --git a/docs/build/html/api/javadoc/net/corda/node/package-frame.html b/docs/build/html/api/javadoc/net/corda/node/package-frame.html index e1b972234f..2be63aa2f8 100644 --- a/docs/build/html/api/javadoc/net/corda/node/package-frame.html +++ b/docs/build/html/api/javadoc/net/corda/node/package-frame.html @@ -2,10 +2,10 @@ - + net.corda.node - + @@ -16,8 +16,12 @@

      Classes

      diff --git a/docs/build/html/api/javadoc/net/corda/node/package-summary.html b/docs/build/html/api/javadoc/net/corda/node/package-summary.html index 79d375aaf6..6e087c13da 100644 --- a/docs/build/html/api/javadoc/net/corda/node/package-summary.html +++ b/docs/build/html/api/javadoc/net/corda/node/package-summary.html @@ -2,10 +2,10 @@ - + net.corda.node - + @@ -45,7 +45,7 @@ @@ -107,6 +114,54 @@
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getAMQ_DELAY

          +
          public java.lang.Integer getAMQ_DELAY()
          +
        • +
        +
      • +
      +
    • +
    +
    @@ -157,13 +212,13 @@
  • Nested | 
  • Field | 
  • Constr | 
  • -
  • Method
  • +
  • Method
  • diff --git a/docs/build/html/api/javadoc/net/corda/node/services/messaging/NodeMessagingClient.Handler.html b/docs/build/html/api/javadoc/net/corda/node/services/messaging/NodeMessagingClient.Handler.html index 7b36cc17c2..c7cf142863 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/messaging/NodeMessagingClient.Handler.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/messaging/NodeMessagingClient.Handler.html @@ -2,10 +2,10 @@ - + NodeMessagingClient.Handler - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/messaging/NodeMessagingClient.html b/docs/build/html/api/javadoc/net/corda/node/services/messaging/NodeMessagingClient.html index 7bbd956d48..f0bc1c2d22 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/messaging/NodeMessagingClient.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/messaging/NodeMessagingClient.html @@ -2,10 +2,10 @@ - + NodeMessagingClient - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/messaging/PermissionException.html b/docs/build/html/api/javadoc/net/corda/node/services/messaging/PermissionException.html index 2851ccbab5..ed9f9a31e9 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/messaging/PermissionException.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/messaging/PermissionException.html @@ -2,10 +2,10 @@ - + PermissionException - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/messaging/RPCDispatcher.html b/docs/build/html/api/javadoc/net/corda/node/services/messaging/RPCDispatcher.html index 7ea64739c8..7c199b19d3 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/messaging/RPCDispatcher.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/messaging/RPCDispatcher.html @@ -2,10 +2,10 @@ - + RPCDispatcher - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/messaging/RPCException.DeadlineExceeded.html b/docs/build/html/api/javadoc/net/corda/node/services/messaging/RPCException.DeadlineExceeded.html index 8f85337e87..3c743738db 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/messaging/RPCException.DeadlineExceeded.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/messaging/RPCException.DeadlineExceeded.html @@ -2,10 +2,10 @@ - + RPCException.DeadlineExceeded - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/messaging/RPCException.html b/docs/build/html/api/javadoc/net/corda/node/services/messaging/RPCException.html index cb6556c089..45ee3e393d 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/messaging/RPCException.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/messaging/RPCException.html @@ -2,10 +2,10 @@ - + RPCException - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/messaging/RPCSinceVersion.html b/docs/build/html/api/javadoc/net/corda/node/services/messaging/RPCSinceVersion.html index 29f13b9132..41f3bd4585 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/messaging/RPCSinceVersion.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/messaging/RPCSinceVersion.html @@ -2,10 +2,10 @@ - + RPCSinceVersion - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/messaging/RPCStructures.html b/docs/build/html/api/javadoc/net/corda/node/services/messaging/RPCStructures.html index 2f96852617..5b9debc97e 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/messaging/RPCStructures.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/messaging/RPCStructures.html @@ -2,10 +2,10 @@ - + RPCStructures - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/messaging/VerifyingNettyConnectorFactory.html b/docs/build/html/api/javadoc/net/corda/node/services/messaging/VerifyingNettyConnectorFactory.html index d65d254b98..e4b9d57ca8 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/messaging/VerifyingNettyConnectorFactory.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/messaging/VerifyingNettyConnectorFactory.html @@ -2,10 +2,10 @@ - + VerifyingNettyConnectorFactory - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/messaging/package-frame.html b/docs/build/html/api/javadoc/net/corda/node/services/messaging/package-frame.html index ec7ac50fe0..2f313008fa 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/messaging/package-frame.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/messaging/package-frame.html @@ -2,10 +2,10 @@ - + net.corda.node.services.messaging - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/messaging/package-summary.html b/docs/build/html/api/javadoc/net/corda/node/services/messaging/package-summary.html index 00ee52d535..bb9562c20f 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/messaging/package-summary.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/messaging/package-summary.html @@ -2,10 +2,10 @@ - + net.corda.node.services.messaging - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/messaging/package-tree.html b/docs/build/html/api/javadoc/net/corda/node/services/messaging/package-tree.html index fe0fdfa433..4f18697300 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/messaging/package-tree.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/messaging/package-tree.html @@ -2,10 +2,10 @@ - + net.corda.node.services.messaging Class Hierarchy - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/network/AbstractNetworkMapService.html b/docs/build/html/api/javadoc/net/corda/node/services/network/AbstractNetworkMapService.html index 6c7987b385..31bc6be1f6 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/network/AbstractNetworkMapService.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/network/AbstractNetworkMapService.html @@ -2,10 +2,10 @@ - + AbstractNetworkMapService - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/network/InMemoryNetworkMapCache.Companion.html b/docs/build/html/api/javadoc/net/corda/node/services/network/InMemoryNetworkMapCache.Companion.html index a344caea74..b63752316c 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/network/InMemoryNetworkMapCache.Companion.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/network/InMemoryNetworkMapCache.Companion.html @@ -2,10 +2,10 @@ - + InMemoryNetworkMapCache.Companion - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/network/InMemoryNetworkMapCache.html b/docs/build/html/api/javadoc/net/corda/node/services/network/InMemoryNetworkMapCache.html index 4493e6da79..b6895f84bd 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/network/InMemoryNetworkMapCache.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/network/InMemoryNetworkMapCache.html @@ -2,10 +2,10 @@ - + InMemoryNetworkMapCache - + @@ -15,6 +15,7 @@ + @@ -27,7 +28,6 @@ - @@ -514,6 +514,16 @@ first subscriber is registered so as to avoid racing with early updates.

    Returns information about the party, which may be a specific node or a service

    +
    + + +
      +
    • +

      getNodeByLegalIdentityKey

      +
      public NodeInfo getNodeByLegalIdentityKey(CompositeKey compositeKey)
      +

      Look up the node info for a specific peer key.

      +
    • +
    @@ -657,16 +667,6 @@ or the appropriate oracle for a contract.

    Look up the node info for a legal name.

    - - - -
      -
    • -

      getNodeByLegalIdentityKey

      -
      public NodeInfo getNodeByLegalIdentityKey(CompositeKey compositeKey)
      -

      Look up the node info for a specific peer key.

      -
    • -
    diff --git a/docs/build/html/api/javadoc/net/corda/node/services/network/InMemoryNetworkMapService.html b/docs/build/html/api/javadoc/net/corda/node/services/network/InMemoryNetworkMapService.html index 1fa1ac1ac6..494f350cba 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/network/InMemoryNetworkMapService.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/network/InMemoryNetworkMapService.html @@ -2,10 +2,10 @@ - + InMemoryNetworkMapService - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/network/LastAcknowledgeInfo.html b/docs/build/html/api/javadoc/net/corda/node/services/network/LastAcknowledgeInfo.html index ddef90128e..e2ff8d2613 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/network/LastAcknowledgeInfo.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/network/LastAcknowledgeInfo.html @@ -2,10 +2,10 @@ - + LastAcknowledgeInfo - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.Companion.html b/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.Companion.html index 0df89b79cc..2a5294c1e5 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.Companion.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.Companion.html @@ -2,10 +2,10 @@ - + NetworkMapService.Companion - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.FetchMapRequest.html b/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.FetchMapRequest.html index c211402df3..b1a2581538 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.FetchMapRequest.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.FetchMapRequest.html @@ -2,10 +2,10 @@ - + NetworkMapService.FetchMapRequest - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.FetchMapResponse.html b/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.FetchMapResponse.html index e9d942b56c..39e369af86 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.FetchMapResponse.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.FetchMapResponse.html @@ -2,10 +2,10 @@ - + NetworkMapService.FetchMapResponse - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.QueryIdentityRequest.html b/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.QueryIdentityRequest.html index 7f85027c2d..4ed4d1a50a 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.QueryIdentityRequest.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.QueryIdentityRequest.html @@ -2,10 +2,10 @@ - + NetworkMapService.QueryIdentityRequest - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.QueryIdentityResponse.html b/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.QueryIdentityResponse.html index faf860ec2b..6a5668bc51 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.QueryIdentityResponse.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.QueryIdentityResponse.html @@ -2,10 +2,10 @@ - + NetworkMapService.QueryIdentityResponse - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.RegistrationRequest.html b/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.RegistrationRequest.html index a06df79f36..77a017c214 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.RegistrationRequest.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.RegistrationRequest.html @@ -2,10 +2,10 @@ - + NetworkMapService.RegistrationRequest - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.RegistrationResponse.html b/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.RegistrationResponse.html index f3db5d650c..bfdd86685e 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.RegistrationResponse.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.RegistrationResponse.html @@ -2,10 +2,10 @@ - + NetworkMapService.RegistrationResponse - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.SubscribeRequest.html b/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.SubscribeRequest.html index fc9f0278a4..22f818e7f0 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.SubscribeRequest.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.SubscribeRequest.html @@ -2,10 +2,10 @@ - + NetworkMapService.SubscribeRequest - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.SubscribeResponse.html b/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.SubscribeResponse.html index a6c701d85c..daaa3c3812 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.SubscribeResponse.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.SubscribeResponse.html @@ -2,10 +2,10 @@ - + NetworkMapService.SubscribeResponse - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.Update.html b/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.Update.html index 94750ec8f5..4f0dc21adf 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.Update.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.Update.html @@ -2,10 +2,10 @@ - + NetworkMapService.Update - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.UpdateAcknowledge.html b/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.UpdateAcknowledge.html index 1799187b36..6690d917de 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.UpdateAcknowledge.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.UpdateAcknowledge.html @@ -2,10 +2,10 @@ - + NetworkMapService.UpdateAcknowledge - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.html b/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.html index 8f94a681ac..7e2e68194b 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/network/NetworkMapService.html @@ -2,10 +2,10 @@ - + NetworkMapService - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/network/NodeMapError.InvalidSignature.html b/docs/build/html/api/javadoc/net/corda/node/services/network/NodeMapError.InvalidSignature.html index ad0bcd5472..a32eb97f6c 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/network/NodeMapError.InvalidSignature.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/network/NodeMapError.InvalidSignature.html @@ -2,10 +2,10 @@ - + NodeMapError.InvalidSignature - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/network/NodeMapError.InvalidSubscriber.html b/docs/build/html/api/javadoc/net/corda/node/services/network/NodeMapError.InvalidSubscriber.html index 556e641747..ec3ee20b86 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/network/NodeMapError.InvalidSubscriber.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/network/NodeMapError.InvalidSubscriber.html @@ -2,10 +2,10 @@ - + NodeMapError.InvalidSubscriber - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/network/NodeMapError.UnknownChangeType.html b/docs/build/html/api/javadoc/net/corda/node/services/network/NodeMapError.UnknownChangeType.html index c65266c13c..cedcbe822c 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/network/NodeMapError.UnknownChangeType.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/network/NodeMapError.UnknownChangeType.html @@ -2,10 +2,10 @@ - + NodeMapError.UnknownChangeType - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/network/NodeMapError.html b/docs/build/html/api/javadoc/net/corda/node/services/network/NodeMapError.html index 4fc7037dbd..64b60331cb 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/network/NodeMapError.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/network/NodeMapError.html @@ -2,10 +2,10 @@ - + NodeMapError - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/network/NodeRegistration.html b/docs/build/html/api/javadoc/net/corda/node/services/network/NodeRegistration.html index a8dbc67763..3f900183d7 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/network/NodeRegistration.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/network/NodeRegistration.html @@ -2,10 +2,10 @@ - + NodeRegistration - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/network/NodeRegistrationInfo.html b/docs/build/html/api/javadoc/net/corda/node/services/network/NodeRegistrationInfo.html index d72e1997c7..d0aaab6db0 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/network/NodeRegistrationInfo.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/network/NodeRegistrationInfo.html @@ -2,10 +2,10 @@ - + NodeRegistrationInfo - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/network/PersistentNetworkMapService.html b/docs/build/html/api/javadoc/net/corda/node/services/network/PersistentNetworkMapService.html index 1cf216fecc..f0664ef532 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/network/PersistentNetworkMapService.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/network/PersistentNetworkMapService.html @@ -2,10 +2,10 @@ - + PersistentNetworkMapService - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/network/WireNodeRegistration.html b/docs/build/html/api/javadoc/net/corda/node/services/network/WireNodeRegistration.html index d4d36f8406..1cc8762db1 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/network/WireNodeRegistration.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/network/WireNodeRegistration.html @@ -2,10 +2,10 @@ - + WireNodeRegistration - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/network/package-frame.html b/docs/build/html/api/javadoc/net/corda/node/services/network/package-frame.html index c448008742..1aa24bd870 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/network/package-frame.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/network/package-frame.html @@ -2,10 +2,10 @@ - + net.corda.node.services.network - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/network/package-summary.html b/docs/build/html/api/javadoc/net/corda/node/services/network/package-summary.html index c819049f66..c0cbd461fd 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/network/package-summary.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/network/package-summary.html @@ -2,10 +2,10 @@ - + net.corda.node.services.network - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/network/package-tree.html b/docs/build/html/api/javadoc/net/corda/node/services/network/package-tree.html index 95c636db0c..b846dd9901 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/network/package-tree.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/network/package-tree.html @@ -2,10 +2,10 @@ - + net.corda.node.services.network Class Hierarchy - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/package-frame.html b/docs/build/html/api/javadoc/net/corda/node/services/package-frame.html index d2a2c50864..8e2a065e01 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/package-frame.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/package-frame.html @@ -2,10 +2,10 @@ - + net.corda.node.services - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/package-summary.html b/docs/build/html/api/javadoc/net/corda/node/services/package-summary.html index 539e2dcd77..5ee8587054 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/package-summary.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/package-summary.html @@ -2,10 +2,10 @@ - + net.corda.node.services - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/package-tree.html b/docs/build/html/api/javadoc/net/corda/node/services/package-tree.html index 604025e7e8..63e2ae8743 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/package-tree.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/package-tree.html @@ -2,10 +2,10 @@ - + net.corda.node.services Class Hierarchy - + @@ -86,13 +86,13 @@
  • net.corda.node.services.NotaryChange.Service
  • +
  • net.corda.node.services.RPCUserServiceImpl (implements net.corda.node.services.RPCUserService)
  • +
  • net.corda.node.services.User
  • net.corda.core.node.CordaPluginRegistry
  • -
  • net.corda.node.services.RPCUserServiceImpl (implements net.corda.node.services.RPCUserService)
  • -
  • net.corda.node.services.User
  • Interface Hierarchy

      diff --git a/docs/build/html/api/javadoc/net/corda/node/services/persistence/DBCheckpointStorage.html b/docs/build/html/api/javadoc/net/corda/node/services/persistence/DBCheckpointStorage.html index b6514953c3..8545960201 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/persistence/DBCheckpointStorage.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/persistence/DBCheckpointStorage.html @@ -2,10 +2,10 @@ - + DBCheckpointStorage - + @@ -53,7 +53,7 @@ var activeTableTab = "activeTableTab";
      • - -
        • @@ -308,13 +267,13 @@ such the hash of a piece of data can be seen as a type of password allowing acce diff --git a/docs/build/html/api/javadoc/net/corda/node/services/persistence/DataVending.html b/docs/build/html/api/javadoc/net/corda/node/services/persistence/DataVending.html index fbd2654e9b..52ac8060b2 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/persistence/DataVending.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/persistence/DataVending.html @@ -2,10 +2,10 @@ - + DataVending - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/persistence/InMemoryStateMachineRecordedTransactionMappingStorage.html b/docs/build/html/api/javadoc/net/corda/node/services/persistence/InMemoryStateMachineRecordedTransactionMappingStorage.html index 6c59042705..35de59e1f5 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/persistence/InMemoryStateMachineRecordedTransactionMappingStorage.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/persistence/InMemoryStateMachineRecordedTransactionMappingStorage.html @@ -2,10 +2,10 @@ - + InMemoryStateMachineRecordedTransactionMappingStorage - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/persistence/NodeAttachmentService.OnDiskHashMismatch.html b/docs/build/html/api/javadoc/net/corda/node/services/persistence/NodeAttachmentService.OnDiskHashMismatch.html index bba59cf6ea..95806c402d 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/persistence/NodeAttachmentService.OnDiskHashMismatch.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/persistence/NodeAttachmentService.OnDiskHashMismatch.html @@ -2,10 +2,10 @@ - + NodeAttachmentService.OnDiskHashMismatch - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/persistence/NodeAttachmentService.html b/docs/build/html/api/javadoc/net/corda/node/services/persistence/NodeAttachmentService.html index 4ff76aa8e5..03ffe76355 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/persistence/NodeAttachmentService.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/persistence/NodeAttachmentService.html @@ -2,10 +2,10 @@ - + NodeAttachmentService - + @@ -17,6 +17,7 @@ + @@ -30,7 +31,7 @@ catch(err) { } //--> -var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10}; +var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10}; var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]}; var altColor = "altColor"; var rowColor = "rowColor"; @@ -115,7 +116,7 @@ var activeTableTab = "activeTableTab";
        • All Implemented Interfaces:
          -
          AcceptsFileUpload, AttachmentStorage
          +
          AcceptsFileUpload, AttachmentStorage, FileUploader


          @@ -128,6 +129,21 @@ implements @@ -376,12 +406,23 @@ back to the user in the response.

      -
        +
        • getStorePath

          public java.nio.file.Path getStorePath()
        + + + +
          +
        • +

          accepts

          +
          public boolean accepts(java.lang.String prefix)
          +

          Check if this service accepts this type of upload. For example if you are uploading interest rates this could +be "my-service-interest-rates". Type here does not refer to file extentions or MIME types.

          +
        • +
      diff --git a/docs/build/html/api/javadoc/net/corda/node/services/persistence/Service.NotifyTransactionHandler.html b/docs/build/html/api/javadoc/net/corda/node/services/persistence/Service.NotifyTransactionHandler.html index d0a718bbcd..1979d5ddb3 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/persistence/Service.NotifyTransactionHandler.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/persistence/Service.NotifyTransactionHandler.html @@ -2,10 +2,10 @@ - + Service.NotifyTransactionHandler - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/persistence/StorageServiceImpl.html b/docs/build/html/api/javadoc/net/corda/node/services/persistence/StorageServiceImpl.html index dc95d3037f..aa99da72b2 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/persistence/StorageServiceImpl.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/persistence/StorageServiceImpl.html @@ -2,11 +2,15 @@ - + StorageServiceImpl - + + + + + @@ -23,7 +27,7 @@ catch(err) { } //--> -var methods = {"i0":10,"i1":10,"i2":10}; +var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10}; var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]}; var altColor = "altColor"; var rowColor = "rowColor"; @@ -79,13 +83,13 @@ var activeTableTab = "activeTableTab"; @@ -126,6 +130,25 @@ implements
      • + +
          +
        • + + +

          Field Summary

          + + + + + + + + + + +
          Fields 
          Modifier and TypeField and Description
          java.util.List<? extends net.corda.core.node.services.FileUploader>uploaders 
          +
        • +
        • @@ -168,11 +191,23 @@ implements getStateMachineRecordedTransactionMapping()  +java.util.List<net.corda.core.node.services.FileUploader> +getUploaders()  + + TransactionStorage getValidatedTransactions()
          A map of hash-
          + +void +initUploaders(java.util.List<? extends net.corda.core.node.services.FileUploader> uploadersList)  + + +void +setUploaders(java.util.List<? extends net.corda.core.node.services.FileUploader> p)  +
          • @@ -210,6 +245,23 @@ implements
            • + +
                +
              • + + +

                Field Detail

                + + + +
                  +
                • +

                  uploaders

                  +
                  public java.util.List<? extends net.corda.core.node.services.FileUploader> uploaders
                  +
                • +
                +
              • +
              • @@ -240,6 +292,33 @@ implements + + +
                  +
                • +

                  getUploaders

                  +
                  public java.util.List<net.corda.core.node.services.FileUploader> getUploaders()
                  +
                • +
                + + + +
                  +
                • +

                  setUploaders

                  +
                  public void setUploaders(java.util.List<? extends net.corda.core.node.services.FileUploader> p)
                  +
                • +
                + + + +
                  +
                • +

                  initUploaders

                  +
                  public void initUploaders(java.util.List<? extends net.corda.core.node.services.FileUploader> uploadersList)
                  +
                • +
                @@ -322,13 +401,13 @@ implements
              • Summary: 
              • Nested | 
              • -
              • Field | 
              • +
              • Field | 
              • Constr | 
              • Method
              diff --git a/docs/build/html/api/javadoc/net/corda/node/services/persistence/package-frame.html b/docs/build/html/api/javadoc/net/corda/node/services/persistence/package-frame.html index 4b03b6c631..5c1ba6ae1e 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/persistence/package-frame.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/persistence/package-frame.html @@ -2,10 +2,10 @@ - + net.corda.node.services.persistence - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/persistence/package-summary.html b/docs/build/html/api/javadoc/net/corda/node/services/persistence/package-summary.html index 2e9c314d6e..31c5e9c764 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/persistence/package-summary.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/persistence/package-summary.html @@ -2,10 +2,10 @@ - + net.corda.node.services.persistence - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/persistence/package-tree.html b/docs/build/html/api/javadoc/net/corda/node/services/persistence/package-tree.html index c4cf4d0fb2..4d98bcd3e0 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/persistence/package-tree.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/persistence/package-tree.html @@ -2,10 +2,10 @@ - + net.corda.node.services.persistence Class Hierarchy - + @@ -84,13 +84,13 @@
            • net.corda.node.services.persistence.Service.NotifyTransactionHandler
          • +
          • net.corda.node.services.persistence.DBTransactionStorage (implements net.corda.core.node.services.TransactionStorage)
          • net.corda.core.serialization.SingletonSerializeAsToken (implements net.corda.core.serialization.SerializeAsToken)
          • -
          • net.corda.node.services.persistence.DBTransactionStorage (implements net.corda.core.node.services.TransactionStorage)
          • net.corda.node.services.persistence.NodeAttachmentService (implements net.corda.node.services.api.AcceptsFileUpload, net.corda.core.node.services.AttachmentStorage)
          • net.corda.node.services.persistence.DataVending
          • net.corda.core.node.CordaPluginRegistry @@ -101,7 +101,6 @@
          • net.corda.node.services.persistence.DBTransactionMappingStorage (implements net.corda.core.node.services.StateMachineRecordedTransactionMappingStorage)
          • net.corda.node.services.persistence.DBCheckpointStorage (implements net.corda.node.services.api.CheckpointStorage)
          • net.corda.node.services.persistence.InMemoryStateMachineRecordedTransactionMappingStorage (implements net.corda.core.node.services.StateMachineRecordedTransactionMappingStorage)
          • -
          • net.corda.node.services.persistence.Service.Companion
          diff --git a/docs/build/html/api/javadoc/net/corda/node/services/schema/HibernateObserver.Companion.html b/docs/build/html/api/javadoc/net/corda/node/services/schema/HibernateObserver.Companion.html index bd3f579d8a..3a1f681835 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/schema/HibernateObserver.Companion.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/schema/HibernateObserver.Companion.html @@ -2,10 +2,10 @@ - + HibernateObserver.Companion - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/schema/HibernateObserver.NodeDatabaseConnectionProvider.html b/docs/build/html/api/javadoc/net/corda/node/services/schema/HibernateObserver.NodeDatabaseConnectionProvider.html index 182f6b933f..1f87601a82 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/schema/HibernateObserver.NodeDatabaseConnectionProvider.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/schema/HibernateObserver.NodeDatabaseConnectionProvider.html @@ -2,10 +2,10 @@ - + HibernateObserver.NodeDatabaseConnectionProvider - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/schema/HibernateObserver.html b/docs/build/html/api/javadoc/net/corda/node/services/schema/HibernateObserver.html index 8c6f4a17f3..c81b819d43 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/schema/HibernateObserver.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/schema/HibernateObserver.html @@ -2,10 +2,10 @@ - + HibernateObserver - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/schema/NodeSchemaService.html b/docs/build/html/api/javadoc/net/corda/node/services/schema/NodeSchemaService.html index 65b1ea47b8..6aebf6f241 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/schema/NodeSchemaService.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/schema/NodeSchemaService.html @@ -2,10 +2,10 @@ - + NodeSchemaService - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/schema/package-frame.html b/docs/build/html/api/javadoc/net/corda/node/services/schema/package-frame.html index f603f0476b..e7c46476b4 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/schema/package-frame.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/schema/package-frame.html @@ -2,10 +2,10 @@ - + net.corda.node.services.schema - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/schema/package-summary.html b/docs/build/html/api/javadoc/net/corda/node/services/schema/package-summary.html index 6922b02b82..2851a981c5 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/schema/package-summary.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/schema/package-summary.html @@ -2,10 +2,10 @@ - + net.corda.node.services.schema - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/schema/package-tree.html b/docs/build/html/api/javadoc/net/corda/node/services/schema/package-tree.html index f716d9dc37..9d38b2b2d6 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/schema/package-tree.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/schema/package-tree.html @@ -2,10 +2,10 @@ - + net.corda.node.services.schema Class Hierarchy - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/ExistingSessionMessage.html b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/ExistingSessionMessage.html index e5bf33a4dd..fa7c320fa1 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/ExistingSessionMessage.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/ExistingSessionMessage.html @@ -2,10 +2,10 @@ - + ExistingSessionMessage - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/FlowIORequest.html b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/FlowIORequest.html index 41b74a90e6..79164377b3 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/FlowIORequest.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/FlowIORequest.html @@ -2,10 +2,10 @@ - + FlowIORequest - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/FlowSessionException.html b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/FlowSessionException.html new file mode 100644 index 0000000000..c0f5aa00a8 --- /dev/null +++ b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/FlowSessionException.html @@ -0,0 +1,213 @@ + + + + + + +FlowSessionException + + + + + + + + + + + + + +
          +
          net.corda.node.services.statemachine
          +

          Class FlowSessionException

          +
          +
          +
          +
            +
          • +
            +
            +
            public class FlowSessionException
            +
          • +
          +
          +
          +
            +
          • + +
              +
            • + + +

              Constructor Summary

              + + + + + + + + +
              Constructors 
              Constructor and Description
              FlowSessionException(java.lang.String message) 
              +
            • +
            +
          • +
          +
          +
          +
            +
          • + +
              +
            • + + +

              Constructor Detail

              + + + +
                +
              • +

                FlowSessionException

                +
                public FlowSessionException(java.lang.String message)
                +
              • +
              +
            • +
            +
          • +
          +
          +
          + + + + + + + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/FlowSessionState.Initiated.html b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/FlowSessionState.Initiated.html index 8de92327ea..ee8c2bf08c 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/FlowSessionState.Initiated.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/FlowSessionState.Initiated.html @@ -2,10 +2,10 @@ - + FlowSessionState.Initiated - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/FlowSessionState.Initiating.html b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/FlowSessionState.Initiating.html index 8f6c45efe7..00112e0c0a 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/FlowSessionState.Initiating.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/FlowSessionState.Initiating.html @@ -2,10 +2,10 @@ - + FlowSessionState.Initiating - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/FlowStateMachineImpl.Companion.html b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/FlowStateMachineImpl.Companion.html index c815b9f08d..94b655e5c5 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/FlowStateMachineImpl.Companion.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/FlowStateMachineImpl.Companion.html @@ -2,10 +2,10 @@ - + FlowStateMachineImpl.Companion - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/FlowStateMachineImpl.html b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/FlowStateMachineImpl.html index 8d66d060ce..f359166069 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/FlowStateMachineImpl.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/FlowStateMachineImpl.html @@ -2,10 +2,10 @@ - + FlowStateMachineImpl - + @@ -231,7 +231,7 @@ implements FlowLogic<?> sessionFlow)
            -R +void run()  @@ -361,7 +361,7 @@ implements
        • run

          -
          public R run()
          +
          public void run()
        diff --git a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/ReceiveOnly.html b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/ReceiveOnly.html index c32143e2c4..119b3fec8c 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/ReceiveOnly.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/ReceiveOnly.html @@ -2,10 +2,10 @@ - + ReceiveOnly - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/ReceiveRequest.html b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/ReceiveRequest.html index 552f0f8c6b..50ef792b8c 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/ReceiveRequest.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/ReceiveRequest.html @@ -2,10 +2,10 @@ - + ReceiveRequest - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/ReceivedSessionMessage.html b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/ReceivedSessionMessage.html index c2d98f312e..fcf4421bca 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/ReceivedSessionMessage.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/ReceivedSessionMessage.html @@ -2,10 +2,10 @@ - + ReceivedSessionMessage - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SendAndReceive.html b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SendAndReceive.html index a61fb095cf..0346709445 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SendAndReceive.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SendAndReceive.html @@ -2,10 +2,10 @@ - + SendAndReceive - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SendOnly.html b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SendOnly.html index a7315afac1..541941ec3a 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SendOnly.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SendOnly.html @@ -2,10 +2,10 @@ - + SendOnly - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SendRequest.html b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SendRequest.html index d949445d18..0de095d153 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SendRequest.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SendRequest.html @@ -2,10 +2,10 @@ - + SendRequest - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SessionConfirm.html b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SessionConfirm.html index d1edb49c3c..b5714bb05c 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SessionConfirm.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SessionConfirm.html @@ -2,10 +2,10 @@ - + SessionConfirm - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SessionData.html b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SessionData.html index 4273446fb2..669eb87fb5 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SessionData.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SessionData.html @@ -2,10 +2,10 @@ - + SessionData - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SessionEnd.html b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SessionEnd.html index 41c26b7d03..10c68fb919 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SessionEnd.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SessionEnd.html @@ -2,13 +2,15 @@ - + SessionEnd - + + + @@ -26,7 +28,7 @@ catch(err) { } //--> -var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10}; +var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10}; var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]}; var altColor = "altColor"; var rowColor = "rowColor"; @@ -135,7 +137,8 @@ implements Constructor and Description -SessionEnd(long recipientSessionId)  +SessionEnd(long recipientSessionId, + FlowException errorResponse) 
      • @@ -157,22 +160,31 @@ implements component1()  -SessionEnd -copy(long recipientSessionId)  +FlowException +component2()  +SessionEnd +copy(long recipientSessionId, + FlowException errorResponse)  + + boolean equals(java.lang.Object p)  - + +FlowException +getErrorResponse()  + + long getRecipientSessionId()  - + int hashCode()  - + java.lang.String toString()  @@ -198,13 +210,14 @@ implements +
        • SessionEnd

          -
          public SessionEnd(long recipientSessionId)
          +
          public SessionEnd(long recipientSessionId,
          +                  FlowException errorResponse)
        @@ -224,6 +237,15 @@ implements + + +
          +
        • +

          getErrorResponse

          +
          public FlowException getErrorResponse()
          +
        • +
        @@ -233,13 +255,23 @@ implements + + + + + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SessionInit.html b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SessionInit.html index bd87bfc3b7..34f03420c0 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SessionInit.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SessionInit.html @@ -2,10 +2,10 @@ - + SessionInit - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SessionInitResponse.html b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SessionInitResponse.html index 259e6238a5..3706e545fd 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SessionInitResponse.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SessionInitResponse.html @@ -2,10 +2,10 @@ - + SessionInitResponse - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SessionMessage.html b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SessionMessage.html index d475859de8..9c2b30d64f 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SessionMessage.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SessionMessage.html @@ -2,10 +2,10 @@ - + SessionMessage - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SessionMessageKt.html b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SessionMessageKt.html index 5ed47e2bc6..06e081a8cc 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SessionMessageKt.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SessionMessageKt.html @@ -2,10 +2,10 @@ - + SessionMessageKt - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SessionReject.html b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SessionReject.html index 4262ccdaf9..a3b1b8a0db 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SessionReject.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/SessionReject.html @@ -2,10 +2,10 @@ - + SessionReject - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/StackSnapshot.html b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/StackSnapshot.html index 58510dd243..0708d693e5 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/StackSnapshot.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/StackSnapshot.html @@ -2,10 +2,10 @@ - + StackSnapshot - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/StateMachineManager.Change.html b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/StateMachineManager.Change.html index 4351b72bb0..5ab2a8b2ad 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/StateMachineManager.Change.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/StateMachineManager.Change.html @@ -2,10 +2,10 @@ - + StateMachineManager.Change - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/StateMachineManager.Companion.html b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/StateMachineManager.Companion.html index 68238bf7c2..071a0737aa 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/StateMachineManager.Companion.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/StateMachineManager.Companion.html @@ -2,10 +2,10 @@ - + StateMachineManager.Companion - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/StateMachineManager.FiberScheduler.html b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/StateMachineManager.FiberScheduler.html index 0928002eb4..1b99a995d4 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/StateMachineManager.FiberScheduler.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/StateMachineManager.FiberScheduler.html @@ -2,10 +2,10 @@ - + StateMachineManager.FiberScheduler - + diff --git a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/StateMachineManager.FlowSession.html b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/StateMachineManager.FlowSession.html index 5f3448df7c..ba567913d8 100644 --- a/docs/build/html/api/javadoc/net/corda/node/services/statemachine/StateMachineManager.FlowSession.html +++ b/docs/build/html/api/javadoc/net/corda/node/services/statemachine/StateMachineManager.FlowSession.html @@ -2,15 +2,16 @@ - + StateMachineManager.FlowSession - + + @@ -19,6 +20,7 @@ + @@ -36,7 +38,7 @@ catch(err) { } //--> -var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10}; +var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10}; var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]}; var altColor = "altColor"; var rowColor = "rowColor"; @@ -67,7 +69,7 @@ var activeTableTab = "activeTableTab";
      @@ -3810,22 +3750,6 @@
    -data class FlowInstanceRef
    - abstract class FlowLogic<out T>
    -interface FlowRef
    -data class FlowRequiringAttention
    +class FlowSessionException : RuntimeException
    @@ -3923,7 +3842,7 @@ -class FlowStateMachineImpl<R> : Fiber<R>, FlowStateMachine<R>
    +class FlowStateMachineImpl<R> : Fiber<Unit>, FlowStateMachine<R>
    -class InputStateRefResolveFailed : Exception
    - object InputStreamSerializer : Serializer<InputStream>
      @@ -4446,7 +4353,7 @@
    -class InsufficientBalanceException : Exception
    +class InsufficientBalanceException : FlowException
      @@ -4750,6 +4657,21 @@
    +class IdentityObjectMapper : PartyObjectMapper, ObjectMapper
    + object LocalDateDeserializer : JsonDeserializer<LocalDate>
      @@ -4776,6 +4698,20 @@
    +class NoPartyObjectMapper : PartyObjectMapper, ObjectMapper
    + object NodeInfoDeserializer : JsonDeserializer<NodeInfo>
      @@ -4815,6 +4751,19 @@
    +interface PartyObjectMapper
    + object PartySerializer : JsonSerializer<Party>
      @@ -4854,6 +4803,21 @@
    +class RpcObjectMapper : PartyObjectMapper, ObjectMapper
    + class SecureHashDeserializer<T : SecureHash> : JsonDeserializer<T>
      @@ -4881,20 +4845,6 @@
    -class ServiceHubObjectMapper : ObjectMapper
    - object ToStringSerializer : JsonSerializer<Any>
      @@ -4909,7 +4859,9 @@
    val cordaModule: Module
    -fun createDefaultMapper(identities: IdentityService): ObjectMapper
    +fun createDefaultMapper(rpc: CordaRPCOps): ObjectMapper
    +fun createInMemoryMapper(identityService: IdentityService): ObjectMapper
    +fun createNonRpcMapper(): ObjectMapper
    val javaTimeModule: Module
    @@ -5583,7 +5535,7 @@ abstract val changed: Observable<MapChange>
    abstract fun deregisterForUpdates(net: MessagingService, service: NodeInfo): ListenableFuture<Unit>
    open fun getAnyNotary(type: ServiceType? = null): Party?
    -open fun getNodeByLegalIdentityKey(compositeKey: CompositeKey): NodeInfo?
    +abstract fun getNodeByLegalIdentityKey(compositeKey: CompositeKey): NodeInfo?
    open fun getNodeByLegalName(name: String): NodeInfo?
    open fun getNodesByAdvertisedServiceIdentityKey(compositeKey: CompositeKey): List<NodeInfo>
    open fun getNodesWithService(serviceType: ServiceType): List<NodeInfo>
    @@ -5847,7 +5799,6 @@ fun start(): Node
    protected fun startMessagingService(rpcOps: RPCOps): Unit
    fun stop(): Unit
    -lateinit var webServer: Server
    @@ -5936,10 +5887,11 @@ -NodeHandle(nodeInfo: NodeInfo, configuration: FullNodeConfiguration, process: Process)
    +NodeHandle(nodeInfo: NodeInfo, rpc: CordaRPCOps, configuration: FullNodeConfiguration, process: Process)
    val configuration: FullNodeConfiguration
    val nodeInfo: NodeInfo
    val process: Process
    +val rpc: CordaRPCOps
    fun rpcClientToNode(): CordaRPCClient
    @@ -6046,6 +5998,7 @@ NodeMessagingClient(config: NodeConfiguration, serverHostPort: HostAndPort, myIdentity: CompositeKey?, nodeExecutor: AffinityExecutor, database: Database, networkMapRegistrationFuture: ListenableFuture<Unit>)
    +val AMQ_DELAY: Int
    data class Handler : MessageHandlerRegistration
      @@ -6309,7 +6262,7 @@
    -object NotaryChangeFlow : AbstractStateReplacementFlow<Party>
    +object NotaryChangeFlow : AbstractStateReplacementFlow
    -class Instigator<T : ContractState> : Instigator<T, Party>
    +class Instigator<out T : ContractState> : Instigator<T, Party>
    -data class Proposal : Proposal<Party>
    - @@ -6451,7 +6387,7 @@ -class NotaryException : Exception
    +class NotaryException : FlowException
      @@ -6495,46 +6431,6 @@
    -sealed class Result
    - class Service : FlowLogic<Unit>
      @@ -6602,6 +6498,21 @@
    object NullSignature : WithKey
    +@Provider class ObjectMapperConfig : ContextResolver<ObjectMapper>
    + class Obligation<P> : Contract
      @@ -7108,7 +7019,7 @@
    -data class Party
    +class Party
    -@Provider class ResponseFilter : ContainerResponseFilter
    +@Provider class ResponseFilter : ContainerResponseFilter
    @@ -8319,6 +8232,22 @@ +class Server
    + data class ServiceEntry
    -class StateReplacementException : Exception
    +open class StateReplacementException : FlowException
    -class StateReplacementRefused
    +interface StatesQuery
    -interface StatesQuery
    +interface Criteria
    @@ -9106,6 +9020,7 @@ abstract val attachments: AttachmentStorage
    abstract val stateMachineRecordedTransactionMapping: StateMachineRecordedTransactionMappingStorage
    +abstract val uploaders: List<FileUploader>
    abstract val validatedTransactions: ReadOnlyTransactionStorage
    @@ -9121,7 +9036,9 @@ StorageServiceImpl(attachments: AttachmentStorage, validatedTransactions: TransactionStorage, stateMachineRecordedTransactionMapping: StateMachineRecordedTransactionMappingStorage)
    open val attachments: AttachmentStorage
    +fun initUploaders(uploadersList: List<FileUploader>): Unit
    open val stateMachineRecordedTransactionMapping: StateMachineRecordedTransactionMappingStorage
    +open lateinit var uploaders: List<FileUploader>
    open val validatedTransactions: TransactionStorage
    @@ -9161,6 +9078,95 @@ +class TContract : Contract
    + +class TGenesisCommand : CommandData
    + +class TGenesisFlow : FlowLogic<SignedTransaction>
    + +class TTxCommand : CommandData
    + +class TTxFlow : FlowLogic<SecureHash>
    + +class TTxState : ContractState
    + data class Tenor
      @@ -9486,21 +9492,6 @@
    -data class TransactionBuildStep
    - open class TransactionBuilder
    +class WebServer
    + class WireNodeRegistration : SignedData<NodeRegistration>
    @@ -10802,6 +10813,20 @@ +com.typesafe.config.Config
    + java.io.InputStream
    +package com.cordatest
    + package net.corda.client.fxutils
      @@ -12588,7 +12714,7 @@
    -data class State : OwnableState, QueryableState
    +data class State : OwnableState, QueryableState, ICommercialPaperState
    @@ -12700,7 +12826,7 @@ -data class State : OwnableState
    +data class State : OwnableState, ICommercialPaperState
    infix fun State.owned by(owner: CompositeKey): State
    -infix fun <ERROR CLASS>.owned by(newOwner: CompositeKey): <ERROR CLASS>
    +infix fun ICommercialPaperState.owned by(newOwner: CompositeKey): ICommercialPaperState
    infix fun State.with notary(notary: Party): TransactionState<State>
    @@ -13759,7 +13885,7 @@ infix fun <T> ListenableFuture<T>.success(body: (T) -> Unit): ListenableFuture<T>
    fun <T> ListenableFuture<T>.then(executor: Executor, body: () -> Unit): Unit
    infix fun <T> ListenableFuture<T>.then(body: () -> Unit): ListenableFuture<T>
    -fun <A> ListenableFuture<A>.toObservable(): Observable<A>
    +fun <A> ListenableFuture<out A>.toObservable(): Observable<A>
    @@ -14711,7 +14837,7 @@ @JvmField val GBP: Currency
    -class InsufficientBalanceException : Exception
    +class InsufficientBalanceException : FlowException
    -data class Party
    +class Party
    -fun parsePublicKeyBase58(base58String: String): <ERROR CLASS>
    +fun parsePublicKeyBase58(base58String: String): EdDSAPublicKey
    fun OpaqueBytes.sha256(): SHA256
    @@ -16211,7 +16339,7 @@ -class FlowException : RuntimeException
    +open class FlowException : Exception
    @@ -16239,11 +16367,11 @@ val logger: Logger
    open val progressTracker: ProgressTracker?
    inline fun <reified R : Any> receive(otherParty: Party): UntrustworthyData<R>
    -@Suspendable open fun <T : Any> receive(receiveType: Class<T>, otherParty: Party): UntrustworthyData<T>
    +@Suspendable open fun <R : Any> receive(receiveType: Class<R>, otherParty: Party): UntrustworthyData<R>
    val runId: StateMachineRunId
    @Suspendable open fun send(otherParty: Party, payload: Any): Unit
    inline fun <reified R : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<R>
    -@Suspendable open fun <T : Any> sendAndReceive(receiveType: Class<T>, otherParty: Party, payload: Any): UntrustworthyData<T>
    +@Suspendable open fun <R : Any> sendAndReceive(receiveType: Class<R>, otherParty: Party, payload: Any): UntrustworthyData<R>
    val serviceHub: ServiceHub
    var stateMachine: FlowStateMachine<*>
    @Suspendable @JvmOverloads open fun <R> subFlow(subLogic: FlowLogic<R>, shareParentSessions: Boolean = false): R
    @@ -16463,8 +16591,10 @@ @RPCReturnsObservables abstract fun stateMachineRecordedTransactionMapping(): Pair<List<StateMachineTransactionMapping>, Observable<StateMachineTransactionMapping>>
    @RPCReturnsObservables abstract fun stateMachinesAndUpdates(): Pair<List<StateMachineInfo>, Observable<StateMachineUpdate>>
    abstract fun uploadAttachment(jar: InputStream): SecureHash
    +abstract fun uploadFile(dataType: String, name: String?, file: InputStream): String
    @RPCReturnsObservables abstract fun vaultAndUpdates(): Pair<List<StateAndRef<ContractState>>, Observable<Update>>
    @RPCReturnsObservables abstract fun verifiedTransactions(): Pair<List<SignedTransaction>, Observable<SignedTransaction>>
    +@RPCReturnsObservables abstract fun waitUntilRegisteredWithNetworkMap(): ListenableFuture<Unit>
    @@ -16477,10 +16607,10 @@ -FlowHandle(id: StateMachineRunId, progress: Observable<String>, returnValue: Observable<A>)
    +FlowHandle(id: StateMachineRunId, progress: Observable<String>, returnValue: ListenableFuture<A>)
    val id: StateMachineRunId
    val progress: Observable<String>
    -val returnValue: Observable<A>
    +val returnValue: ListenableFuture<A>
    @@ -16869,6 +16999,20 @@ val DEFAULT_SESSION_ID: Long
    +interface FileUploader
    + interface IdentityService
    -class NotaryException : Exception
    +class NotaryException : FlowException
      @@ -19332,46 +19403,6 @@
    -sealed class Result
    - class Service : FlowLogic<Unit>
      @@ -19451,7 +19482,7 @@
    -class StateReplacementException : Exception
    +open class StateReplacementException : FlowException
    -class StateReplacementRefused
    - @@ -19671,7 +19684,7 @@ -class AssetMismatchException : Exception
    +class AssetMismatchException : FlowException
      @@ -19780,7 +19793,7 @@
    -class UnacceptablePriceException : Exception
    +class UnacceptablePriceException : FlowException
    @@ -19839,6 +19851,24 @@ +class Client
    + data class CmdLineOptions
    +sealed class ConnectionDirection
    + +const val P2P_QUEUE: String
    +class Server
    + fun main(args: Array<String>): Unit
    +fun main(args: Array<String>): Unit
    +val nameToAddress: Map<String, String>
    fun printBasicNodeInfo(description: String, info: String? = null): Unit
    - - - -package net.corda.node.api
    - @@ -20107,6 +20003,7 @@ open fun start(): Unit
    open fun startNode(providedName: String?, advertisedServices: Set<ServiceInfo>, rpcUsers: List<User>, customOverrides: Map<String, Any?>): ListenableFuture<NodeHandle>
    open fun startNotaryCluster(notaryName: String, clusterSize: Int, type: ServiceType, rpcUsers: List<User>): ListenableFuture<Pair<Party, List<NodeHandle>>>
    +open fun startWebserver(handle: NodeHandle): ListenableFuture<HostAndPort>
    val useTestClock: Boolean
    open fun waitForAllNodesToFinish(): Unit
    @@ -20123,6 +20020,7 @@ abstract fun startNode(providedName: String? = null, advertisedServices: Set<ServiceInfo> = emptySet(), rpcUsers: List<User> = emptyList(), customOverrides: Map<String, Any?> = emptyMap()): ListenableFuture<NodeHandle>
    abstract fun startNotaryCluster(notaryName: String, clusterSize: Int = 3, type: ServiceType = RaftValidatingNotaryService.type, rpcUsers: List<User> = emptyList()): Future<Pair<Party, List<NodeHandle>>>
    +abstract fun startWebserver(handle: NodeHandle): ListenableFuture<HostAndPort>
    abstract fun waitForAllNodesToFinish(): Unit
    @@ -20150,10 +20048,11 @@ -NodeHandle(nodeInfo: NodeInfo, configuration: FullNodeConfiguration, process: Process)
    +NodeHandle(nodeInfo: NodeInfo, rpc: CordaRPCOps, configuration: FullNodeConfiguration, process: Process)
    val configuration: FullNodeConfiguration
    val nodeInfo: NodeInfo
    val process: Process
    +val rpc: CordaRPCOps
    fun rpcClientToNode(): CordaRPCClient
    @@ -20218,32 +20117,6 @@ -class APIServerImpl : APIServer
    - abstract class AbstractNode : SingletonSerializeAsToken
    @@ -20419,7 +20291,6 @@ fun start(): Node
    protected fun startMessagingService(rpcOps: RPCOps): Unit
    fun stop(): Unit
    -lateinit var webServer: Server
    @@ -20581,7 +20452,7 @@ -interface AcceptsFileUpload
    +interface AcceptsFileUpload : FileUploader
    @@ -21202,12 +21073,13 @@ -CordaRPCClient(host: HostAndPort, config: SSLConfiguration?)
    +CordaRPCClient(host: HostAndPort, config: SSLConfiguration?, serviceConfigurationOverride: ServerLocator.() -> Unit = null)
    fun close(): Unit
    val config: SSLConfiguration?
    val host: HostAndPort
    val log: Logger
    @JvmOverloads fun proxy(timeout: Duration? = null, minVersion: Int = 0): CordaRPCOps
    +val serviceConfigurationOverride: ServerLocator.() -> Unit
    fun start(username: String, password: String): CordaRPCClient
    fun <T> use(username: String, password: String, block: CordaRPCOps.() -> T): T
    @@ -21274,6 +21146,7 @@ NodeMessagingClient(config: NodeConfiguration, serverHostPort: HostAndPort, myIdentity: CompositeKey?, nodeExecutor: AffinityExecutor, database: Database, networkMapRegistrationFuture: ListenableFuture<Unit>)
    +val AMQ_DELAY: Int
    data class Handler : MessageHandlerRegistration
    -val logger: Logger
    @@ -21967,7 +21840,9 @@ StorageServiceImpl(attachments: AttachmentStorage, validatedTransactions: TransactionStorage, stateMachineRecordedTransactionMapping: StateMachineRecordedTransactionMappingStorage)
    open val attachments: AttachmentStorage
    +fun initUploaders(uploadersList: List<FileUploader>): Unit
    open val stateMachineRecordedTransactionMapping: StateMachineRecordedTransactionMappingStorage
    +open lateinit var uploaders: List<FileUploader>
    open val validatedTransactions: TransactionStorage
    @@ -22073,7 +21948,20 @@ -class FlowStateMachineImpl<R> : Fiber<R>, FlowStateMachine<R>
    +class FlowSessionException : RuntimeException
    + +class FlowStateMachineImpl<R> : Fiber<Unit>, FlowStateMachine<R>
    -package net.corda.node.servlets
    - package net.corda.node.utilities
      @@ -23043,6 +22863,21 @@
    +class IdentityObjectMapper : PartyObjectMapper, ObjectMapper
    + object LocalDateDeserializer : JsonDeserializer<LocalDate>
      @@ -23069,6 +22904,20 @@
    +class NoPartyObjectMapper : PartyObjectMapper, ObjectMapper
    + object NodeInfoDeserializer : JsonDeserializer<NodeInfo>
      @@ -23108,6 +22957,19 @@
    +interface PartyObjectMapper
    + object PartySerializer : JsonSerializer<Party>
      @@ -23147,6 +23009,21 @@
    +class RpcObjectMapper : PartyObjectMapper, ObjectMapper
    + class SecureHashDeserializer<T : SecureHash> : JsonDeserializer<T>
      @@ -23174,20 +23051,6 @@
    -class ServiceHubObjectMapper : ObjectMapper
    - object ToStringSerializer : JsonSerializer<Any>
      @@ -23202,7 +23065,9 @@
    val cordaModule: Module
    -fun createDefaultMapper(identities: IdentityService): ObjectMapper
    +fun createDefaultMapper(rpc: CordaRPCOps): ObjectMapper
    +fun createInMemoryMapper(identityService: IdentityService): ObjectMapper
    +fun createNonRpcMapper(): ObjectMapper
    val javaTimeModule: Module
    @@ -23414,6 +23279,20 @@ fun <T : Any> bytesFromBlob(blob: Blob): SerializedBytes<T>
    fun bytesToBlob(value: SerializedBytes<*>, finalizables: MutableList<() -> Unit>): Blob
    +com.typesafe.config.Config
    + fun configureDatabase(props: Properties): Pair<Closeable, Database>
    fun createDatabaseTransaction(db: Database): Transaction
    fun <T> databaseTransaction(db: Database, statement: Transaction.() -> T): T
    @@ -23482,6 +23361,7 @@ fun serializeToBlob(value: Any, finalizables: MutableList<() -> Unit>): Blob
    +fun <R> timed(action: () -> R): Pair<R, Double>
    @@ -23547,6 +23427,217 @@ +package net.corda.node.webserver
    + +package net.corda.node.webserver.api
    + +package net.corda.node.webserver.internal
    + +package net.corda.node.webserver.servlets
    + package net.corda.schemas
      diff --git a/docs/build/html/api/kotlin/corda/index.html b/docs/build/html/api/kotlin/corda/index.html index 946a2ed7a3..7883889123 100644 --- a/docs/build/html/api/kotlin/corda/index.html +++ b/docs/build/html/api/kotlin/corda/index.html @@ -12,6 +12,12 @@ +com.cordatest + + + + + net.corda.client.fxutils @@ -150,12 +156,6 @@ -net.corda.node.api - - - - - net.corda.node.driver @@ -252,12 +252,6 @@ -net.corda.node.servlets - - - - - net.corda.node.utilities @@ -270,6 +264,30 @@ +net.corda.node.webserver + + + + + +net.corda.node.webserver.api + + + + + +net.corda.node.webserver.internal + + + + + +net.corda.node.webserver.servlets + + + + + net.corda.schemas diff --git a/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper-legacy/-state/index.html b/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper-legacy/-state/index.html index dde4be5664..714a8a4142 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper-legacy/-state/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper-legacy/-state/index.html @@ -8,7 +8,7 @@ corda / net.corda.contracts / CommercialPaperLegacy / State

      State

      -data class State : OwnableState +data class State : OwnableState, ICommercialPaperState

      Constructors

      @@ -80,19 +80,19 @@ +fun withFaceValue(newFaceValue: Amount<Issued<Currency>>): ICommercialPaperState +fun withIssuance(newIssuance: PartyAndReference): ICommercialPaperState +fun withMaturityDate(newMaturityDate: Instant): ICommercialPaperState +fun withOwner(newOwner: CompositeKey): ICommercialPaperState +data class State : OwnableState, ICommercialPaperState
      withFaceValue -fun withFaceValue(newFaceValue: Amount<Issued<Currency>>): <ERROR CLASS>
      withIssuance -fun withIssuance(newIssuance: PartyAndReference): <ERROR CLASS>
      withMaturityDate -fun withMaturityDate(newMaturityDate: Instant): <ERROR CLASS>
      @@ -106,7 +106,7 @@ withOwner -fun withOwner(newOwner: CompositeKey): <ERROR CLASS>
      diff --git a/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper-legacy/-state/with-face-value.html b/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper-legacy/-state/with-face-value.html index ed5f54e6ab..17409f235e 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper-legacy/-state/with-face-value.html +++ b/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper-legacy/-state/with-face-value.html @@ -9,6 +9,6 @@

      withFaceValue

      -fun withFaceValue(newFaceValue: Amount<Issued<Currency>>): <ERROR CLASS> +fun withFaceValue(newFaceValue: Amount<Issued<Currency>>): ICommercialPaperState diff --git a/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper-legacy/-state/with-issuance.html b/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper-legacy/-state/with-issuance.html index e6f9f23f4c..bae4db7119 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper-legacy/-state/with-issuance.html +++ b/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper-legacy/-state/with-issuance.html @@ -9,6 +9,6 @@

      withIssuance

      -fun withIssuance(newIssuance: PartyAndReference): <ERROR CLASS> +fun withIssuance(newIssuance: PartyAndReference): ICommercialPaperState diff --git a/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper-legacy/-state/with-maturity-date.html b/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper-legacy/-state/with-maturity-date.html index 1d7a93d44f..40a8413531 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper-legacy/-state/with-maturity-date.html +++ b/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper-legacy/-state/with-maturity-date.html @@ -9,6 +9,6 @@

      withMaturityDate

      -fun withMaturityDate(newMaturityDate: Instant): <ERROR CLASS> +fun withMaturityDate(newMaturityDate: Instant): ICommercialPaperState diff --git a/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper-legacy/-state/with-owner.html b/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper-legacy/-state/with-owner.html index f756ffc214..b122cc9821 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper-legacy/-state/with-owner.html +++ b/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper-legacy/-state/with-owner.html @@ -9,6 +9,6 @@

      withOwner

      -fun withOwner(newOwner: CompositeKey): <ERROR CLASS> +fun withOwner(newOwner: CompositeKey): ICommercialPaperState diff --git a/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper-legacy/index.html b/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper-legacy/index.html index 7d84e16021..2abfc09afc 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper-legacy/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper-legacy/index.html @@ -22,7 +22,7 @@
      State -data class State : OwnableState
      diff --git a/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper/-state/index.html b/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper/-state/index.html index 438c20574c..331de37f57 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper/-state/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper/-state/index.html @@ -8,7 +8,7 @@ corda / net.corda.contracts / CommercialPaper / State

      State

      -data class State : OwnableState, QueryableState +data class State : OwnableState, QueryableState, ICommercialPaperState

      Constructors

      @@ -102,19 +102,19 @@ +fun withFaceValue(newFaceValue: Amount<Issued<Currency>>): ICommercialPaperState +fun withIssuance(newIssuance: PartyAndReference): ICommercialPaperState +fun withMaturityDate(newMaturityDate: Instant): ICommercialPaperState +fun withOwner(newOwner: CompositeKey): ICommercialPaperState
      withFaceValue -fun withFaceValue(newFaceValue: Amount<Issued<Currency>>): <ERROR CLASS>
      withIssuance -fun withIssuance(newIssuance: PartyAndReference): <ERROR CLASS>
      withMaturityDate -fun withMaturityDate(newMaturityDate: Instant): <ERROR CLASS>
      @@ -128,7 +128,7 @@ withOwner -fun withOwner(newOwner: CompositeKey): <ERROR CLASS>
      diff --git a/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper/-state/with-face-value.html b/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper/-state/with-face-value.html index 351d8eeb42..f2ed9b926c 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper/-state/with-face-value.html +++ b/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper/-state/with-face-value.html @@ -9,6 +9,6 @@

      withFaceValue

      -fun withFaceValue(newFaceValue: Amount<Issued<Currency>>): <ERROR CLASS> +fun withFaceValue(newFaceValue: Amount<Issued<Currency>>): ICommercialPaperState diff --git a/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper/-state/with-issuance.html b/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper/-state/with-issuance.html index ba88d8fea3..1fe8f107fe 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper/-state/with-issuance.html +++ b/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper/-state/with-issuance.html @@ -9,6 +9,6 @@

      withIssuance

      -fun withIssuance(newIssuance: PartyAndReference): <ERROR CLASS> +fun withIssuance(newIssuance: PartyAndReference): ICommercialPaperState diff --git a/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper/-state/with-maturity-date.html b/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper/-state/with-maturity-date.html index 0665bb2d6f..abc2a651ea 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper/-state/with-maturity-date.html +++ b/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper/-state/with-maturity-date.html @@ -9,6 +9,6 @@

      withMaturityDate

      -fun withMaturityDate(newMaturityDate: Instant): <ERROR CLASS> +fun withMaturityDate(newMaturityDate: Instant): ICommercialPaperState diff --git a/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper/-state/with-owner.html b/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper/-state/with-owner.html index 548430d375..39c21e55db 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper/-state/with-owner.html +++ b/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper/-state/with-owner.html @@ -9,6 +9,6 @@

      withOwner

      -fun withOwner(newOwner: CompositeKey): <ERROR CLASS> +fun withOwner(newOwner: CompositeKey): ICommercialPaperState diff --git a/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper/index.html b/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper/index.html index 9bdf5833ab..b25caa212a 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.contracts/-commercial-paper/index.html @@ -28,7 +28,7 @@ State -data class State : OwnableState, QueryableState +data class State : OwnableState, QueryableState, ICommercialPaperState diff --git a/docs/build/html/api/kotlin/corda/net.corda.contracts/index.html b/docs/build/html/api/kotlin/corda/net.corda.contracts/index.html index 177afa5f1b..bd86a3f29b 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.contracts/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.contracts/index.html @@ -59,7 +59,7 @@ is adjusted as if the paper was redeemed and immediately repurchased, but withou owned by infix fun State.owned by(owner: CompositeKey): State
      -infix fun <ERROR CLASS>.owned by(newOwner: CompositeKey): <ERROR CLASS> +infix fun ICommercialPaperState.owned by(newOwner: CompositeKey): ICommercialPaperState diff --git a/docs/build/html/api/kotlin/corda/net.corda.contracts/owned by.html b/docs/build/html/api/kotlin/corda/net.corda.contracts/owned by.html index 64c39edb83..4d10bd7600 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.contracts/owned by.html +++ b/docs/build/html/api/kotlin/corda/net.corda.contracts/owned by.html @@ -10,7 +10,7 @@

      owned by

      infix fun State.owned by(owner: CompositeKey): State
      - -infix fun <ERROR CLASS>.owned by(newOwner: CompositeKey): <ERROR CLASS> + +infix fun ICommercialPaperState.owned by(newOwner: CompositeKey): ICommercialPaperState diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.contracts/-command-data.html b/docs/build/html/api/kotlin/corda/net.corda.core.contracts/-command-data.html index e96c3b6e37..9295db2fa8 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.contracts/-command-data.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.contracts/-command-data.html @@ -71,6 +71,18 @@ +TGenesisCommand + +class TGenesisCommand : CommandData + + + +TTxCommand + +class TTxCommand : CommandData + + + TypeOnlyCommandData abstract class TypeOnlyCommandData : CommandData diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.contracts/-contract-state/index.html b/docs/build/html/api/kotlin/corda/net.corda.core.contracts/-contract-state/index.html index 5782ebce98..6f936eeade 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.contracts/-contract-state/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.contracts/-contract-state/index.html @@ -120,6 +120,12 @@ or filtering of, states.

      interface State : ContractState + + +TTxState + +class TTxState : ContractState + diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.contracts/-contract/index.html b/docs/build/html/api/kotlin/corda/net.corda.core.contracts/-contract/index.html index 003f2578dd..d5e9da874c 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.contracts/-contract/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.contracts/-contract/index.html @@ -86,6 +86,12 @@ issuer+depositRef) and you couldn't merge outputs of two colours together, but y transaction.

      + + +TContract + +class TContract : Contract + diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.contracts/-insufficient-balance-exception/index.html b/docs/build/html/api/kotlin/corda/net.corda.core.contracts/-insufficient-balance-exception/index.html index 299f3ab7d5..3353a678f7 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.contracts/-insufficient-balance-exception/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.contracts/-insufficient-balance-exception/index.html @@ -8,7 +8,7 @@ corda / net.corda.core.contracts / InsufficientBalanceException

      InsufficientBalanceException

      -class InsufficientBalanceException : Exception +class InsufficientBalanceException : FlowException

      Constructors

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.contracts/-ownable-state/index.html b/docs/build/html/api/kotlin/corda/net.corda.core.contracts/-ownable-state/index.html index a9a455a548..564c88ab43 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.contracts/-ownable-state/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.contracts/-ownable-state/index.html @@ -96,13 +96,13 @@ container), shares of the same class in a specific company are fungible and coun +data class State : OwnableState, QueryableState, ICommercialPaperState +data class State : OwnableState, ICommercialPaperState
      State -data class State : OwnableState, QueryableState
      State -data class State : OwnableState
      diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.contracts/index.html b/docs/build/html/api/kotlin/corda/net.corda.core.contracts/index.html index cd687adb29..5fc27d00ec 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.contracts/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.contracts/index.html @@ -480,7 +480,7 @@ different external IDs, it would indicate a problem with handling of IDs.

      InsufficientBalanceException -class InsufficientBalanceException : Exception +class InsufficientBalanceException : FlowException diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.crypto/-composite-key/index.html b/docs/build/html/api/kotlin/corda/net.corda.core.crypto/-composite-key/index.html index 573a63ba59..860c141951 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.crypto/-composite-key/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.crypto/-composite-key/index.html @@ -105,7 +105,7 @@ A custom serialization format is being used.

      parseFromBase58 -fun parseFromBase58(encoded: String): <ERROR CLASS> +fun parseFromBase58(encoded: String): CompositeKey diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.crypto/-composite-key/parse-from-base58.html b/docs/build/html/api/kotlin/corda/net.corda.core.crypto/-composite-key/parse-from-base58.html index c198a7f968..97cd74484d 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.crypto/-composite-key/parse-from-base58.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.crypto/-composite-key/parse-from-base58.html @@ -9,6 +9,6 @@

      parseFromBase58

      -fun parseFromBase58(encoded: String): <ERROR CLASS> +fun parseFromBase58(encoded: String): CompositeKey diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.crypto/-dummy-public-key/index.html b/docs/build/html/api/kotlin/corda/net.corda.core.crypto/-dummy-public-key/index.html index 6d2987caa5..0bd10daca6 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.crypto/-dummy-public-key/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.crypto/-dummy-public-key/index.html @@ -98,7 +98,7 @@ toBase58String -fun PublicKey.toBase58String(): <ERROR CLASS> +fun PublicKey.toBase58String(): String diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.crypto/-null-public-key/index.html b/docs/build/html/api/kotlin/corda/net.corda.core.crypto/-null-public-key/index.html index b6f3f9b984..24484c969d 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.crypto/-null-public-key/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.crypto/-null-public-key/index.html @@ -64,7 +64,7 @@ toBase58String -fun PublicKey.toBase58String(): <ERROR CLASS> +fun PublicKey.toBase58String(): String diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.crypto/-party/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.core.crypto/-party/-init-.html index 0ca2af3dc5..7fc811402b 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.crypto/-party/-init-.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.crypto/-party/-init-.html @@ -23,6 +23,7 @@ Her advertised Party then has a legal Party representing a distributed service will use a composite key containing all individual cluster nodes' public keys. Each of the nodes in the cluster will advertise the same group Party.

      +

      Note that equality is based solely on the owning key.

      See Also

      CompositeKey

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.crypto/-party/equals.html b/docs/build/html/api/kotlin/corda/net.corda.core.crypto/-party/equals.html new file mode 100644 index 0000000000..b4c57b4503 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.core.crypto/-party/equals.html @@ -0,0 +1,15 @@ + + + +Party.equals - corda + + + +corda / net.corda.core.crypto / Party / equals
      +
      +

      equals

      + +fun equals(other: Any?): Boolean +

      Anonymised parties do not include any detail apart from owning key, so equality is dependent solely on the key

      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.crypto/-party/hash-code.html b/docs/build/html/api/kotlin/corda/net.corda.core.crypto/-party/hash-code.html new file mode 100644 index 0000000000..6248d87ecf --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.core.crypto/-party/hash-code.html @@ -0,0 +1,14 @@ + + + +Party.hashCode - corda + + + +corda / net.corda.core.crypto / Party / hashCode
      +
      +

      hashCode

      + +fun hashCode(): Int + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.crypto/-party/index.html b/docs/build/html/api/kotlin/corda/net.corda.core.crypto/-party/index.html index 5baaec1d2a..ecd253d3ba 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.crypto/-party/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.crypto/-party/index.html @@ -8,7 +8,7 @@ corda / net.corda.core.crypto / Party

      Party

      -data class Party +class Party

      The Party class represents an entity on the network, which is typically identified by a legal name and public key that it can sign transactions under. As parties may use multiple keys for signing and, for example, have offline backup keys, the "public key" of a party is represented by a composite construct – a CompositeKey, which combines multiple @@ -19,6 +19,7 @@ Her advertised Party then has a legal name "Alice" and a which requires a separate signing key (and an identifying name). Services can also be distributed – run by a coordinated cluster of Corda nodes. A Party representing a distributed service will use a composite key containing all individual cluster nodes' public keys. Each of the nodes in the cluster will advertise the same group Party.

      +

      Note that equality is based solely on the owning key.

      See Also

      CompositeKey

      @@ -62,6 +63,20 @@ cryptographic public key primitives into a tree structure.

      +equals + +fun equals(other: Any?): Boolean +

      Anonymised parties do not include any detail apart from owning key, so equality is dependent solely on the key

      + + + + +hashCode + +fun hashCode(): Int + + + ref fun ref(bytes: OpaqueBytes): PartyAndReference
      diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.crypto/index.html b/docs/build/html/api/kotlin/corda/net.corda.core.crypto/index.html index 49041b51ab..5c96805c3d 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.crypto/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.crypto/index.html @@ -68,7 +68,7 @@ Partial Merkle Tree is a minimal tree needed to check that a given set of leaves Party -data class Party +class Party

      The Party class represents an entity on the network, which is typically identified by a legal name and public key that it can sign transactions under. As parties may use multiple keys for signing and, for example, have offline backup keys, the "public key" of a party is represented by a composite construct – a CompositeKey, which combines multiple @@ -200,7 +200,7 @@ you want hard-coded private keys.

      parsePublicKeyBase58 -fun parsePublicKeyBase58(base58String: String): <ERROR CLASS> +fun parsePublicKeyBase58(base58String: String): EdDSAPublicKey diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.crypto/java.security.-public-key/index.html b/docs/build/html/api/kotlin/corda/net.corda.core.crypto/java.security.-public-key/index.html index 69f5ea9c80..2044334d26 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.crypto/java.security.-public-key/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.crypto/java.security.-public-key/index.html @@ -22,7 +22,7 @@ toBase58String -fun PublicKey.toBase58String(): <ERROR CLASS> +fun PublicKey.toBase58String(): String diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.crypto/java.security.-public-key/to-base58-string.html b/docs/build/html/api/kotlin/corda/net.corda.core.crypto/java.security.-public-key/to-base58-string.html index 65916ff1ed..f63b181840 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.crypto/java.security.-public-key/to-base58-string.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.crypto/java.security.-public-key/to-base58-string.html @@ -9,6 +9,6 @@

      toBase58String

      -fun PublicKey.toBase58String(): <ERROR CLASS> +fun PublicKey.toBase58String(): String diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.crypto/parse-public-key-base58.html b/docs/build/html/api/kotlin/corda/net.corda.core.crypto/parse-public-key-base58.html index 1ce8f4f8fd..6bbecc5840 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.crypto/parse-public-key-base58.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.crypto/parse-public-key-base58.html @@ -9,6 +9,6 @@

      parsePublicKeyBase58

      -fun parsePublicKeyBase58(base58String: String): <ERROR CLASS> +fun parsePublicKeyBase58(base58String: String): EdDSAPublicKey diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.flows/-flow-exception/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.core.flows/-flow-exception/-init-.html index f77979bde0..f3856b1571 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.flows/-flow-exception/-init-.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.flows/-flow-exception/-init-.html @@ -8,6 +8,12 @@ corda / net.corda.core.flows / FlowException / <init>

      <init>

      -FlowException(message: String) +FlowException(message: String? = null, cause: Throwable? = null) +

      Exception which can be thrown by a FlowLogic at any point in its logic to unexpectedly bring it to a permanent end. +The exception will propagate to all counterparty flows and will be thrown on their end the next time they wait on a +FlowLogic.receive or FlowLogic.sendAndReceive. Any flow which no longer needs to do a receive, or has already ended, +will not receive the exception (if this is required then have them wait for a confirmation message).

      +

      FlowException (or a subclass) can be a valid expected response from a flow, particularly ones which act as a service. +It is recommended a FlowLogic document the FlowException types it can throw.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.flows/-flow-exception/index.html b/docs/build/html/api/kotlin/corda/net.corda.core.flows/-flow-exception/index.html index 517d0a9b58..f3ab74ad5c 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.flows/-flow-exception/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.flows/-flow-exception/index.html @@ -8,7 +8,13 @@ corda / net.corda.core.flows / FlowException

      FlowException

      -class FlowException : RuntimeException +open class FlowException : Exception +

      Exception which can be thrown by a FlowLogic at any point in its logic to unexpectedly bring it to a permanent end. +The exception will propagate to all counterparty flows and will be thrown on their end the next time they wait on a +FlowLogic.receive or FlowLogic.sendAndReceive. Any flow which no longer needs to do a receive, or has already ended, +will not receive the exception (if this is required then have them wait for a confirmation message).

      +

      FlowException (or a subclass) can be a valid expected response from a flow, particularly ones which act as a service. +It is recommended a FlowLogic document the FlowException types it can throw.

      Constructors

      @@ -16,7 +22,12 @@ +FlowException(message: String? = null, cause: Throwable? = null) +

      Exception which can be thrown by a FlowLogic at any point in its logic to unexpectedly bring it to a permanent end. +The exception will propagate to all counterparty flows and will be thrown on their end the next time they wait on a +FlowLogic.receive or FlowLogic.sendAndReceive. Any flow which no longer needs to do a receive, or has already ended, +will not receive the exception (if this is required then have them wait for a confirmation message).

      +
      <init> -FlowException(message: String)
      @@ -31,5 +42,52 @@ +

      Inheritors

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +AssetMismatchException +class AssetMismatchException : FlowException
      +CashException +class CashException : FlowException
      +HashNotFound +class HashNotFound : FlowException
      +InsufficientBalanceException +class InsufficientBalanceException : FlowException
      +NotaryException +class NotaryException : FlowException
      +StateReplacementException +open class StateReplacementException : FlowException
      +UnacceptablePriceException +class UnacceptablePriceException : FlowException
      diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.flows/-flow-logic/index.html b/docs/build/html/api/kotlin/corda/net.corda.core.flows/-flow-logic/index.html index 4667bd0455..c8a71b61a8 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.flows/-flow-logic/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.flows/-flow-logic/index.html @@ -116,8 +116,8 @@ will do as long as the other side registers with it.

      fun <R : Any> receive(otherParty: Party): UntrustworthyData<R>

      Suspends until the specified otherParty sends us a message of type R.

      -open fun <T : Any> receive(receiveType: Class<T>, otherParty: Party): UntrustworthyData<T> -

      Suspends until the specified otherParty sends us a message of type receiveType.

      +open fun <R : Any> receive(receiveType: Class<R>, otherParty: Party): UntrustworthyData<R> +

      Suspends until the specified otherParty sends us a message of type receiveType.

      @@ -135,9 +135,9 @@ will do as long as the other side registers with it.

      fun <R : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<R>

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response is received, which must be of the given R type.

      -open fun <T : Any> sendAndReceive(receiveType: Class<T>, otherParty: Party, payload: Any): UntrustworthyData<T> -

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response -is received, which must be of the given receiveType. Remember that when receiving data from other parties the data +open fun <R : Any> sendAndReceive(receiveType: Class<R>, otherParty: Party, payload: Any): UntrustworthyData<R> +

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response +is received, which must be of the given receiveType. Remember that when receiving data from other parties the data should not be trusted until it's been thoroughly verified for consistency and that all expectations are satisfied, as a malicious peer may send you subtly corrupted data in order to exploit your code.

      @@ -170,7 +170,7 @@ current step in this flow's progress tracker.

      Acceptor -abstract class Acceptor<T> : FlowLogic<Unit> +abstract class Acceptor<in T> : FlowLogic<Unit> @@ -191,7 +191,7 @@ current step in this flow's progress tracker.

      CashFlow -class CashFlow : FlowLogic<CashFlowResult> +class CashFlow : FlowLogic<SignedTransaction>

      Initiates a flow that produces an Issue/Move or Exit Cash transaction.

      @@ -224,14 +224,14 @@ timestamp is correct and none of its inputs have been used in another completed Instigator -abstract class Instigator<out S : ContractState, T> : FlowLogic<StateAndRef<S>> +abstract class Instigator<out S : ContractState, out T> : FlowLogic<StateAndRef<S>> IssuanceRequester class IssuanceRequester : FlowLogic<SignedTransaction> -

      IssuanceRequester should be used by a client to ask a remote note to issue some FungibleAsset with the given details. +

      IssuanceRequester should be used by a client to ask a remote node to issue some FungibleAsset with the given details. Returns the transaction created by the Issuer to move the cash to the Requester.

      @@ -297,6 +297,18 @@ checked again.

      if any of the input states have been previously committed.

      + + +TGenesisFlow + +class TGenesisFlow : FlowLogic<SignedTransaction> + + + +TTxFlow + +class TTxFlow : FlowLogic<SecureHash> + diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.flows/-flow-logic/receive.html b/docs/build/html/api/kotlin/corda/net.corda.core.flows/-flow-logic/receive.html index 3385dda934..3dddc57c0a 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.flows/-flow-logic/receive.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.flows/-flow-logic/receive.html @@ -16,11 +16,13 @@ verified for consistency and that all expectations are satisfied, as a malicious peer may send you subtly corrupted data in order to exploit your code.

      -

      -@Suspendable open fun <T : Any> receive(receiveType: Class<T>, otherParty: Party): UntrustworthyData<T> -

      Suspends until the specified otherParty sends us a message of type receiveType.

      +

      +@Suspendable open fun <R : Any> receive(receiveType: Class<R>, otherParty: Party): UntrustworthyData<R> +

      Suspends until the specified otherParty sends us a message of type receiveType.

      Remember that when receiving data from other parties the data should not be trusted until it's been thoroughly verified for consistency and that all expectations are satisfied, as a malicious peer may send you subtly corrupted data in order to exploit your code.

      +

      Returns
      +an UntrustworthyData wrapper around the received object.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.flows/-flow-logic/send-and-receive.html b/docs/build/html/api/kotlin/corda/net.corda.core.flows/-flow-logic/send-and-receive.html index 99cba2837f..0d76b59bc9 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.flows/-flow-logic/send-and-receive.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.flows/-flow-logic/send-and-receive.html @@ -21,10 +21,10 @@ use this when you expect to do a message swap than do use se

      Returns
      an
      UntrustworthyData wrapper around the received object.

      -

      -@Suspendable open fun <T : Any> sendAndReceive(receiveType: Class<T>, otherParty: Party, payload: Any): UntrustworthyData<T> -

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response -is received, which must be of the given receiveType. Remember that when receiving data from other parties the data +

      +@Suspendable open fun <R : Any> sendAndReceive(receiveType: Class<R>, otherParty: Party, payload: Any): UntrustworthyData<R> +

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response +is received, which must be of the given receiveType. Remember that when receiving data from other parties the data should not be trusted until it's been thoroughly verified for consistency and that all expectations are satisfied, as a malicious peer may send you subtly corrupted data in order to exploit your code.

      Note that this function is not just a simple send+receive pair: it is more efficient and more correct to diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.flows/-flow-logic/sub-flow.html b/docs/build/html/api/kotlin/corda/net.corda.core.flows/-flow-logic/sub-flow.html index f7b4fa0115..53848a37b3 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.flows/-flow-logic/sub-flow.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.flows/-flow-logic/sub-flow.html @@ -19,5 +19,10 @@ current step in this flow's progress tracker.

      shareParentSessions - In certain situations the need arises to use the same sessions the parent flow has already established. However this also prevents the subflow from creating new sessions with those parties. For this reason the default value is false. +

      Exceptions

      + +

      +FlowException - This is either thrown by subLogic itself or propagated from any of the remote +FlowLogics it communicated with. A subflow retry can be done by catching this exception. diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.flows/-flow-state-machine/index.html b/docs/build/html/api/kotlin/corda/net.corda.core.flows/-flow-state-machine/index.html index ce58284c1c..6e9ea82452 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.flows/-flow-state-machine/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.flows/-flow-state-machine/index.html @@ -69,7 +69,7 @@ FlowStateMachineImpl -class FlowStateMachineImpl<R> : Fiber<R>, FlowStateMachine<R> +class FlowStateMachineImpl<R> : Fiber<Unit>, FlowStateMachine<R> diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.flows/index.html b/docs/build/html/api/kotlin/corda/net.corda.core.flows/index.html index 25c47cc069..720af44327 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.flows/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.flows/index.html @@ -72,7 +72,12 @@ has at least one flow, but that flow may also invoke sub-flows: they all share t FlowException -class FlowException : RuntimeException +open class FlowException : Exception +

      Exception which can be thrown by a FlowLogic at any point in its logic to unexpectedly bring it to a permanent end. +The exception will propagate to all counterparty flows and will be thrown on their end the next time they wait on a +FlowLogic.receive or FlowLogic.sendAndReceive. Any flow which no longer needs to do a receive, or has already ended, +will not receive the exception (if this is required then have them wait for a confirmation message).

      + diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.messaging/-corda-r-p-c-ops/current-node-time.html b/docs/build/html/api/kotlin/corda/net.corda.core.messaging/-corda-r-p-c-ops/current-node-time.html index fc8f97fd13..6561ff2ca4 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.messaging/-corda-r-p-c-ops/current-node-time.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.messaging/-corda-r-p-c-ops/current-node-time.html @@ -10,6 +10,6 @@

      currentNodeTime

      abstract fun currentNodeTime(): Instant -

      Returns the node-local current time.

      +

      Returns the node's current time.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.messaging/-corda-r-p-c-ops/index.html b/docs/build/html/api/kotlin/corda/net.corda.core.messaging/-corda-r-p-c-ops/index.html index 8a92378360..3087fb0558 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.messaging/-corda-r-p-c-ops/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.messaging/-corda-r-p-c-ops/index.html @@ -46,7 +46,7 @@ client apps and are implemented by the node in the CordaRPCOpsImplcurrentNodeTime abstract fun currentNodeTime(): Instant -

      Returns the node-local current time.

      +

      Returns the node's current time.

      @@ -123,6 +123,12 @@ such mappings as well.

      +uploadFile + +abstract fun uploadFile(dataType: String, name: String?, file: InputStream): String + + + vaultAndUpdates abstract fun vaultAndUpdates(): Pair<List<StateAndRef<ContractState>>, Observable<Update>> @@ -137,6 +143,15 @@ such mappings as well.

      Returns a pair of all recorded transactions and an observable of future recorded ones.

      + + +waitUntilRegisteredWithNetworkMap + +abstract fun waitUntilRegisteredWithNetworkMap(): ListenableFuture<Unit> +

      Returns a ListenableFuture which completes when the node has registered wih the network map service. It can also +complete with an exception if it is unable to.

      + +

      Extension Functions

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.messaging/-corda-r-p-c-ops/upload-file.html b/docs/build/html/api/kotlin/corda/net.corda.core.messaging/-corda-r-p-c-ops/upload-file.html new file mode 100644 index 0000000000..73db695bfc --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.core.messaging/-corda-r-p-c-ops/upload-file.html @@ -0,0 +1,16 @@ + + + +CordaRPCOps.uploadFile - corda + + + +corda / net.corda.core.messaging / CordaRPCOps / uploadFile
      +
      +

      uploadFile

      + +abstract fun uploadFile(dataType: String, name: String?, file: InputStream): String
      +Deprecated: This service will be removed in a future milestone
      +
      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.messaging/-corda-r-p-c-ops/wait-until-registered-with-network-map.html b/docs/build/html/api/kotlin/corda/net.corda.core.messaging/-corda-r-p-c-ops/wait-until-registered-with-network-map.html new file mode 100644 index 0000000000..7bc0fcbd46 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.core.messaging/-corda-r-p-c-ops/wait-until-registered-with-network-map.html @@ -0,0 +1,16 @@ + + + +CordaRPCOps.waitUntilRegisteredWithNetworkMap - corda + + + +corda / net.corda.core.messaging / CordaRPCOps / waitUntilRegisteredWithNetworkMap
      +
      +

      waitUntilRegisteredWithNetworkMap

      + +@RPCReturnsObservables abstract fun waitUntilRegisteredWithNetworkMap(): ListenableFuture<Unit> +

      Returns a ListenableFuture which completes when the node has registered wih the network map service. It can also +complete with an exception if it is unable to.

      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.messaging/-flow-handle/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.core.messaging/-flow-handle/-init-.html index 306b134e29..d8d75a3403 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.messaging/-flow-handle/-init-.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.messaging/-flow-handle/-init-.html @@ -8,7 +8,7 @@ corda / net.corda.core.messaging / FlowHandle / <init>

      <init>

      -FlowHandle(id: StateMachineRunId, progress: Observable<String>, returnValue: Observable<A>) +FlowHandle(id: StateMachineRunId, progress: Observable<String>, returnValue: ListenableFuture<A>)

      FlowHandle is a serialisable handle for the started flow, parameterised by the type of the flow's return value.

      Parameters

      @@ -17,8 +17,6 @@

      progress - The stream of progress tracker events.

      -returnValue - An Observable emitting a single event containing the flow's return value. - To block on this value: - val returnValue = rpc.startFlow(::MyFlow).returnValue.toBlocking().first() +returnValue - A ListenableFuture of the flow's return value. diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.messaging/-flow-handle/index.html b/docs/build/html/api/kotlin/corda/net.corda.core.messaging/-flow-handle/index.html index 20a5b7f9bf..a18bb754ab 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.messaging/-flow-handle/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.messaging/-flow-handle/index.html @@ -17,9 +17,7 @@

      progress - The stream of progress tracker events.

      -returnValue - An Observable emitting a single event containing the flow's return value. - To block on this value: - val returnValue = rpc.startFlow(::MyFlow).returnValue.toBlocking().first() +returnValue - A ListenableFuture of the flow's return value.

      Constructors

      @@ -27,7 +25,7 @@ @@ -52,7 +50,7 @@ +val returnValue: ListenableFuture<A>
      <init> -FlowHandle(id: StateMachineRunId, progress: Observable<String>, returnValue: Observable<A>) +FlowHandle(id: StateMachineRunId, progress: Observable<String>, returnValue: ListenableFuture<A>)

      FlowHandle is a serialisable handle for the started flow, parameterised by the type of the flow's return value.

      returnValue -val returnValue: Observable<A>
      diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.messaging/-flow-handle/return-value.html b/docs/build/html/api/kotlin/corda/net.corda.core.messaging/-flow-handle/return-value.html index 977d5383c8..805933ed68 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.messaging/-flow-handle/return-value.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.messaging/-flow-handle/return-value.html @@ -9,6 +9,6 @@

      returnValue

      -val returnValue: Observable<A> +val returnValue: ListenableFuture<A> diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.node.services/-file-uploader/accepts.html b/docs/build/html/api/kotlin/corda/net.corda.core.node.services/-file-uploader/accepts.html new file mode 100644 index 0000000000..97ffb114a7 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.core.node.services/-file-uploader/accepts.html @@ -0,0 +1,16 @@ + + + +FileUploader.accepts - corda + + + +corda / net.corda.core.node.services / FileUploader / accepts
      +
      +

      accepts

      + +abstract fun accepts(type: String): Boolean +

      Check if this service accepts this type of upload. For example if you are uploading interest rates this could +be "my-service-interest-rates". Type here does not refer to file extentions or MIME types.

      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.node.services/-file-uploader/index.html b/docs/build/html/api/kotlin/corda/net.corda.core.node.services/-file-uploader/index.html new file mode 100644 index 0000000000..eefd3f8ff7 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.core.node.services/-file-uploader/index.html @@ -0,0 +1,50 @@ + + + +FileUploader - corda + + + +corda / net.corda.core.node.services / FileUploader
      +
      +

      FileUploader

      +interface FileUploader +

      An interface that denotes a service that can accept file uploads.

      +

      Functions

      + + + + + + + + + + + +
      +accepts +abstract fun accepts(type: String): Boolean +

      Check if this service accepts this type of upload. For example if you are uploading interest rates this could +be "my-service-interest-rates". Type here does not refer to file extentions or MIME types.

      +
      +upload +abstract fun upload(file: InputStream): String +

      Accepts the data in the given input stream, and returns some sort of useful return message that will be sent +back to the user in the response.

      +
      +

      Inheritors

      + + + + + + + +
      +AcceptsFileUpload +interface AcceptsFileUpload : FileUploader +

      A service that implements AcceptsFileUpload can have new binary data provided to it via an HTTP upload.

      +
      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.node.services/-file-uploader/upload.html b/docs/build/html/api/kotlin/corda/net.corda.core.node.services/-file-uploader/upload.html new file mode 100644 index 0000000000..3b0d55bdfa --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.core.node.services/-file-uploader/upload.html @@ -0,0 +1,16 @@ + + + +FileUploader.upload - corda + + + +corda / net.corda.core.node.services / FileUploader / upload
      +
      +

      upload

      + +abstract fun upload(file: InputStream): String +

      Accepts the data in the given input stream, and returns some sort of useful return message that will be sent +back to the user in the response.

      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.node.services/-network-map-cache/get-node-by-legal-identity-key.html b/docs/build/html/api/kotlin/corda/net.corda.core.node.services/-network-map-cache/get-node-by-legal-identity-key.html index 89298039cf..3eed0ee7bb 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.node.services/-network-map-cache/get-node-by-legal-identity-key.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.node.services/-network-map-cache/get-node-by-legal-identity-key.html @@ -9,7 +9,7 @@

      getNodeByLegalIdentityKey

      -open fun getNodeByLegalIdentityKey(compositeKey: CompositeKey): NodeInfo? +abstract fun getNodeByLegalIdentityKey(compositeKey: CompositeKey): NodeInfo?

      Look up the node info for a specific peer key.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.node.services/-network-map-cache/index.html b/docs/build/html/api/kotlin/corda/net.corda.core.node.services/-network-map-cache/index.html index 0c7ffcd0ec..576114ef4b 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.node.services/-network-map-cache/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.node.services/-network-map-cache/index.html @@ -119,7 +119,7 @@ updates.

      getNodeByLegalIdentityKey -open fun getNodeByLegalIdentityKey(compositeKey: CompositeKey): NodeInfo? +abstract fun getNodeByLegalIdentityKey(compositeKey: CompositeKey): NodeInfo?

      Look up the node info for a specific peer key.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.node.services/-storage-service/index.html b/docs/build/html/api/kotlin/corda/net.corda.core.node.services/-storage-service/index.html index 7ed09907e9..f4ba87025e 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.node.services/-storage-service/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.node.services/-storage-service/index.html @@ -31,6 +31,12 @@ anything like that, this interface is only big enough to support the prototyping +uploaders + +abstract val uploaders: List<FileUploader> + + + validatedTransactions abstract val validatedTransactions: ReadOnlyTransactionStorage diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.node.services/-storage-service/uploaders.html b/docs/build/html/api/kotlin/corda/net.corda.core.node.services/-storage-service/uploaders.html new file mode 100644 index 0000000000..1915f9949f --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.core.node.services/-storage-service/uploaders.html @@ -0,0 +1,16 @@ + + + +StorageService.uploaders - corda + + + +corda / net.corda.core.node.services / StorageService / uploaders
      +
      +

      uploaders

      + +abstract val uploaders: List<FileUploader>
      +Deprecated: This service will be removed in a future milestone
      +
      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.node.services/-tx-writable-storage-service/index.html b/docs/build/html/api/kotlin/corda/net.corda.core.node.services/-tx-writable-storage-service/index.html index e86d165005..d8f9e62016 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.node.services/-tx-writable-storage-service/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.node.services/-tx-writable-storage-service/index.html @@ -42,6 +42,12 @@ the transaction data to other nodes that need it.

      abstract val stateMachineRecordedTransactionMapping: StateMachineRecordedTransactionMappingStorage + + +uploaders + +abstract val uploaders: List<FileUploader> +

      Inheritors

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.node.services/index.html b/docs/build/html/api/kotlin/corda/net.corda.core.node.services/index.html index b8d4a92db6..d643ccd69d 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.node.services/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.node.services/index.html @@ -21,6 +21,14 @@ +FileUploader + +interface FileUploader +

      An interface that denotes a service that can accept file uploads.

      + + + + IdentityService interface IdentityService diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.schemas/-queryable-state/index.html b/docs/build/html/api/kotlin/corda/net.corda.core.schemas/-queryable-state/index.html index ed34dec65f..ac34fbc847 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.schemas/-queryable-state/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.schemas/-queryable-state/index.html @@ -81,7 +81,7 @@ or filtering of, states.

      State -data class State : OwnableState, QueryableState +data class State : OwnableState, QueryableState, ICommercialPaperState diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.serialization/com.esotericsoftware.kryo.-kryo/index.html b/docs/build/html/api/kotlin/corda/net.corda.core.serialization/com.esotericsoftware.kryo.-kryo/index.html index 2719e8796f..e2ddd74064 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.serialization/com.esotericsoftware.kryo.-kryo/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.serialization/com.esotericsoftware.kryo.-kryo/index.html @@ -28,6 +28,12 @@ references will throw a stack overflow exception during serialisation.

      +register + +fun <T : Any> Kryo.register(type: KClass<T>, read: (Kryo, Input) -> T, write: (Kryo, Output, T) -> Unit): Registration + + + useClassLoader fun <T> Kryo.useClassLoader(cl: ClassLoader, body: () -> T): T diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.serialization/com.esotericsoftware.kryo.-kryo/register.html b/docs/build/html/api/kotlin/corda/net.corda.core.serialization/com.esotericsoftware.kryo.-kryo/register.html new file mode 100644 index 0000000000..4967c2a5e3 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.core.serialization/com.esotericsoftware.kryo.-kryo/register.html @@ -0,0 +1,14 @@ + + + +register - corda + + + +corda / net.corda.core.serialization / com.esotericsoftware.kryo.Kryo / register
      +
      +

      register

      + +inline fun <T : Any> Kryo.register(type: KClass<T>, crossinline read: (Kryo, Input) -> T, crossinline write: (Kryo, Output, T) -> Unit): Registration + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.transactions/-signed-transaction/index.html b/docs/build/html/api/kotlin/corda/net.corda.core.transactions/-signed-transaction/index.html index d61a74c892..1def3eb406 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.transactions/-signed-transaction/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.transactions/-signed-transaction/index.html @@ -103,6 +103,14 @@ want verifySignatures instead.

      +signWithECDSA + +fun signWithECDSA(keyPair: KeyPair): WithKey +

      Utility to simplify the act of signing the transaction.

      + + + + toLedgerTransaction fun toLedgerTransaction(services: ServiceHub): LedgerTransaction diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.transactions/-signed-transaction/sign-with-e-c-d-s-a.html b/docs/build/html/api/kotlin/corda/net.corda.core.transactions/-signed-transaction/sign-with-e-c-d-s-a.html new file mode 100644 index 0000000000..5edba62ae5 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.core.transactions/-signed-transaction/sign-with-e-c-d-s-a.html @@ -0,0 +1,21 @@ + + + +SignedTransaction.signWithECDSA - corda + + + +corda / net.corda.core.transactions / SignedTransaction / signWithECDSA
      +
      +

      signWithECDSA

      + +fun signWithECDSA(keyPair: KeyPair): WithKey +

      Utility to simplify the act of signing the transaction.

      +

      Parameters

      + +

      +keyPair - the signer's public/private key pair. +

      Return
      +a digital signature of the transaction.

      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.core.utilities/-progress-tracker/-step/index.html b/docs/build/html/api/kotlin/corda/net.corda.core.utilities/-progress-tracker/-step/index.html index 928db1a8f6..c74f82fc6b 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core.utilities/-progress-tracker/-step/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core.utilities/-progress-tracker/-step/index.html @@ -170,12 +170,6 @@ -REJECTING - -object REJECTING : Step - - - REQUESTING object REQUESTING : Step diff --git a/docs/build/html/api/kotlin/corda/net.corda.core/com.google.common.util.concurrent.-listenable-future/index.html b/docs/build/html/api/kotlin/corda/net.corda.core/com.google.common.util.concurrent.-listenable-future/index.html index 84e3ab421e..4e888a30ed 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core/com.google.common.util.concurrent.-listenable-future/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core/com.google.common.util.concurrent.-listenable-future/index.html @@ -47,7 +47,7 @@ toObservable -fun <A> ListenableFuture<A>.toObservable(): Observable<A> +fun <A> ListenableFuture<out A>.toObservable(): Observable<A> diff --git a/docs/build/html/api/kotlin/corda/net.corda.core/com.google.common.util.concurrent.-listenable-future/to-observable.html b/docs/build/html/api/kotlin/corda/net.corda.core/com.google.common.util.concurrent.-listenable-future/to-observable.html index 90bb8ae602..9462c01302 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core/com.google.common.util.concurrent.-listenable-future/to-observable.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core/com.google.common.util.concurrent.-listenable-future/to-observable.html @@ -9,6 +9,6 @@

      toObservable

      -fun <A> ListenableFuture<A>.toObservable(): Observable<A> +fun <A> ListenableFuture<out A>.toObservable(): Observable<A> diff --git a/docs/build/html/api/kotlin/corda/net.corda.core/rx.-observable/index.html b/docs/build/html/api/kotlin/corda/net.corda.core/rx.-observable/index.html index 7d58a22cf5..1b9e2e5770 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core/rx.-observable/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core/rx.-observable/index.html @@ -24,7 +24,8 @@ fun <T> Observable<T>.toFuture(): ListenableFuture<T>

      Returns a ListenableFuture bound to the first item emitted by this Observable. The future will complete with a -NoSuchElementException if no items are emitted or any other error thrown by the Observable.

      +NoSuchElementException if no items are emitted or any other error thrown by the Observable. If it's cancelled then +it will unsubscribe from the observable.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.core/rx.-observable/to-future.html b/docs/build/html/api/kotlin/corda/net.corda.core/rx.-observable/to-future.html index bbfe701512..6f4fcad534 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.core/rx.-observable/to-future.html +++ b/docs/build/html/api/kotlin/corda/net.corda.core/rx.-observable/to-future.html @@ -11,6 +11,7 @@ fun <T> Observable<T>.toFuture(): ListenableFuture<T>

      Returns a ListenableFuture bound to the first item emitted by this Observable. The future will complete with a -NoSuchElementException if no items are emitted or any other error thrown by the Observable.

      +NoSuchElementException if no items are emitted or any other error thrown by the Observable. If it's cancelled then +it will unsubscribe from the observable.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-acceptor/-r-e-j-e-c-t-i-n-g.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-acceptor/-r-e-j-e-c-t-i-n-g.html deleted file mode 100644 index 77327a3c88..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-acceptor/-r-e-j-e-c-t-i-n-g.html +++ /dev/null @@ -1,41 +0,0 @@ - - - -AbstractStateReplacementFlow.Acceptor.REJECTING - corda - - - -corda / net.corda.flows / AbstractStateReplacementFlow / Acceptor / REJECTING
      -
      -

      REJECTING

      -object REJECTING : Step -

      Inherited Properties

      - - - - - - - - - - - -
      -changes -open val changes: Observable<Change>
      -label -open val label: String
      -

      Inherited Functions

      - - - - - - - -
      -childProgressTracker -open fun childProgressTracker(): ProgressTracker?
      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-acceptor/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-acceptor/index.html index f445f8b0db..7a6a2d90a9 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-acceptor/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-acceptor/index.html @@ -8,7 +8,7 @@ corda / net.corda.flows / AbstractStateReplacementFlow / Acceptor

      Acceptor

      -abstract class Acceptor<T> : FlowLogic<Unit> +abstract class Acceptor<in T> : FlowLogic<Unit>

      Types

      @@ -20,12 +20,6 @@ - - - - @@ -122,10 +116,10 @@ helpful if this flow is meant to be used as a subflow.

      @@ -147,10 +141,10 @@ will do as long as the other side registers with it.

      @@ -168,9 +162,9 @@ will do as long as the other side registers with it.

      fun <R : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<R>

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response is received, which must be of the given R type.

      -open fun <T : Any> sendAndReceive(receiveType: Class<T>, otherParty: Party, payload: Any): UntrustworthyData<T> -

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response -is received, which must be of the given receiveType. Remember that when receiving data from other parties the data +open fun <R : Any> sendAndReceive(receiveType: Class<R>, otherParty: Party, payload: Any): UntrustworthyData<R> +

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response +is received, which must be of the given receiveType. Remember that when receiving data from other parties the data should not be trusted until it's been thoroughly verified for consistency and that all expectations are satisfied, as a malicious peer may send you subtly corrupted data in order to exploit your code.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-acceptor/verify-proposal.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-acceptor/verify-proposal.html index 8d4a28e8f4..36651dbff6 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-acceptor/verify-proposal.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-acceptor/verify-proposal.html @@ -8,10 +8,10 @@ corda / net.corda.flows / AbstractStateReplacementFlow / Acceptor / verifyProposal

      verifyProposal

      - -protected abstract fun verifyProposal(maybeProposal: UntrustworthyData<Proposal<T>>): Proposal<T> + +protected abstract fun verifyProposal(proposal: Proposal<T>): Unit

      Check the state change proposal to confirm that it's acceptable to this node. Rules for verification depend on the change proposed, and may further depend on the node itself (for example configuration). The -proposal is returned if acceptable, otherwise an exception is thrown.

      +proposal is returned if acceptable, otherwise a StateReplacementException is thrown.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-instigator/assemble-proposal.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-instigator/assemble-proposal.html deleted file mode 100644 index 93c4468047..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-instigator/assemble-proposal.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -AbstractStateReplacementFlow.Instigator.assembleProposal - corda - - - -corda / net.corda.flows / AbstractStateReplacementFlow / Instigator / assembleProposal
      -
      -

      assembleProposal

      - -protected abstract fun assembleProposal(stateRef: StateRef, modification: T, stx: SignedTransaction): Proposal<T> - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-instigator/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-instigator/index.html index 5b23efbbd5..35075ee8eb 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-instigator/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-instigator/index.html @@ -8,7 +8,7 @@ corda / net.corda.flows / AbstractStateReplacementFlow / Instigator

      Instigator

      -abstract class Instigator<out S : ContractState, T> : FlowLogic<StateAndRef<S>> +abstract class Instigator<out S : ContractState, out T> : FlowLogic<StateAndRef<S>>

      Types

      -REJECTING -object REJECTING : Step
      VERIFYING object VERIFYING : Step verifyProposal -abstract fun verifyProposal(maybeProposal: UntrustworthyData<Proposal<T>>): Proposal<T> +abstract fun verifyProposal(proposal: Proposal<T>): Unit

      Check the state change proposal to confirm that it's acceptable to this node. Rules for verification depend on the change proposed, and may further depend on the node itself (for example configuration). The -proposal is returned if acceptable, otherwise an exception is thrown.

      +proposal is returned if acceptable, otherwise a StateReplacementException is thrown.

      receive +open fun <R : Any> receive(receiveType: Class<R>, otherParty: Party): UntrustworthyData<R> +

      Suspends until the specified otherParty sends us a message of type receiveType.

      fun <R : Any> receive(otherParty: Party): UntrustworthyData<R>

      Suspends until the specified otherParty sends us a message of type R.

      -open fun <T : Any> receive(receiveType: Class<T>, otherParty: Party): UntrustworthyData<T> -

      Suspends until the specified otherParty sends us a message of type receiveType.

      @@ -111,12 +111,6 @@ across module boundaries.

      - - - - @@ -151,8 +145,8 @@ will do as long as the other side registers with it.

      @@ -167,14 +161,14 @@ will do as long as the other side registers with it.

      @@ -216,7 +210,7 @@ current step in this flow's progress tracker.

      +class Instigator<out T : ContractState> : Instigator<T, Party>
      -assembleProposal -abstract fun assembleProposal(stateRef: StateRef, modification: T, stx: SignedTransaction): Proposal<T>
      assembleTx abstract fun assembleTx(): Pair<SignedTransaction, Iterable<CompositeKey>> fun <R : Any> receive(otherParty: Party): UntrustworthyData<R>

      Suspends until the specified otherParty sends us a message of type R.

      -open fun <T : Any> receive(receiveType: Class<T>, otherParty: Party): UntrustworthyData<T> -

      Suspends until the specified otherParty sends us a message of type receiveType.

      +open fun <R : Any> receive(receiveType: Class<R>, otherParty: Party): UntrustworthyData<R> +

      Suspends until the specified otherParty sends us a message of type receiveType.

      sendAndReceive +open fun <R : Any> sendAndReceive(receiveType: Class<R>, otherParty: Party, payload: Any): UntrustworthyData<R> +

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response +is received, which must be of the given receiveType. Remember that when receiving data from other parties the data +should not be trusted until it's been thoroughly verified for consistency and that all expectations are +satisfied, as a malicious peer may send you subtly corrupted data in order to exploit your code.

      fun <R : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<R>

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response is received, which must be of the given R type.

      -open fun <T : Any> sendAndReceive(receiveType: Class<T>, otherParty: Party, payload: Any): UntrustworthyData<T> -

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response -is received, which must be of the given receiveType. Remember that when receiving data from other parties the data -should not be trusted until it's been thoroughly verified for consistency and that all expectations are -satisfied, as a malicious peer may send you subtly corrupted data in order to exploit your code.

      Instigator -class Instigator<T : ContractState> : Instigator<T, Party>
      diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-proposal/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-proposal/-init-.html new file mode 100644 index 0000000000..bacbdd419e --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-proposal/-init-.html @@ -0,0 +1,13 @@ + + + +AbstractStateReplacementFlow.Proposal.<init> - corda + + + +corda / net.corda.flows / AbstractStateReplacementFlow / Proposal / <init>
      +
      +

      <init>

      +Proposal(stateRef: StateRef, modification: T, stx: SignedTransaction) + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-proposal/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-proposal/index.html index fa8e2d4c11..8723df1848 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-proposal/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-proposal/index.html @@ -8,7 +8,18 @@ corda / net.corda.flows / AbstractStateReplacementFlow / Proposal

      Proposal

      -interface Proposal<out T> +data class Proposal<out T> +

      Constructors

      + + + + + + + +
      +<init> +Proposal(stateRef: StateRef, modification: T, stx: SignedTransaction)

      Properties

      @@ -16,30 +27,19 @@ +val modification: T +val stateRef: StateRef - - -
      modification -abstract val modification: T
      stateRef -abstract val stateRef: StateRef
      stx -abstract val stx: SignedTransaction
      -

      Inheritors

      - - - - - +val stx: SignedTransaction
      -Proposal -data class Proposal : Proposal<Party>
      diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-proposal/modification.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-proposal/modification.html index 120dd3a4c6..1deb00d1b8 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-proposal/modification.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-proposal/modification.html @@ -9,6 +9,6 @@

      modification

      -abstract val modification: T +val modification: T diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-proposal/state-ref.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-proposal/state-ref.html index 72f03fe3ce..53fc4c6e34 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-proposal/state-ref.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-proposal/state-ref.html @@ -9,6 +9,6 @@

      stateRef

      -abstract val stateRef: StateRef +val stateRef: StateRef diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-proposal/stx.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-proposal/stx.html index 685f628963..079f6497d9 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-proposal/stx.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-proposal/stx.html @@ -9,6 +9,6 @@

      stx

      -abstract val stx: SignedTransaction +val stx: SignedTransaction diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-result/error.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-result/error.html deleted file mode 100644 index 31c52e4f91..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-result/error.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -AbstractStateReplacementFlow.Result.error - corda - - - -corda / net.corda.flows / AbstractStateReplacementFlow / Result / error
      -
      -

      error

      - -val error: StateReplacementRefused? - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-result/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-result/index.html deleted file mode 100644 index 1f63a4555b..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-result/index.html +++ /dev/null @@ -1,47 +0,0 @@ - - - -AbstractStateReplacementFlow.Result - corda - - - -corda / net.corda.flows / AbstractStateReplacementFlow / Result
      -
      -

      Result

      -data class Result -

      Properties

      - - - - - - - - - - - -
      -error -val error: StateReplacementRefused?
      -sig -val sig: WithKey?
      -

      Companion Object Functions

      - - - - - - - - - - - -
      -noError -fun noError(sig: WithKey): Result
      -withError -fun withError(error: StateReplacementRefused): Result
      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-result/no-error.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-result/no-error.html deleted file mode 100644 index b09fd67783..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-result/no-error.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -AbstractStateReplacementFlow.Result.noError - corda - - - -corda / net.corda.flows / AbstractStateReplacementFlow / Result / noError
      -
      -

      noError

      - -fun noError(sig: WithKey): Result - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-result/sig.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-result/sig.html deleted file mode 100644 index 783cb00bef..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-result/sig.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -AbstractStateReplacementFlow.Result.sig - corda - - - -corda / net.corda.flows / AbstractStateReplacementFlow / Result / sig
      -
      -

      sig

      - -val sig: WithKey? - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-result/with-error.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-result/with-error.html deleted file mode 100644 index 631278464f..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/-result/with-error.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -AbstractStateReplacementFlow.Result.withError - corda - - - -corda / net.corda.flows / AbstractStateReplacementFlow / Result / withError
      -
      -

      withError

      - -fun withError(error: StateReplacementRefused): Result - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/index.html index d8183b7ac2..eff402adfb 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-abstract-state-replacement-flow/index.html @@ -8,7 +8,7 @@ corda / net.corda.flows / AbstractStateReplacementFlow

      AbstractStateReplacementFlow

      -abstract class AbstractStateReplacementFlow<T> +abstract class AbstractStateReplacementFlow

      Abstract flow to be used for replacing one state with another, for example when changing the notary of a state. Notably this requires a one to one replacement of states, states cannot be split, merged or issued as part of these flows.

      @@ -23,25 +23,19 @@ use the new updated state for future transactions.

      Acceptor -abstract class Acceptor<T> : FlowLogic<Unit> +abstract class Acceptor<in T> : FlowLogic<Unit> Instigator -abstract class Instigator<out S : ContractState, T> : FlowLogic<StateAndRef<S>> +abstract class Instigator<out S : ContractState, out T> : FlowLogic<StateAndRef<S>> Proposal -interface Proposal<out T> - - - -Result - -data class Result +data class Proposal<out T> @@ -67,7 +61,7 @@ flows.

      NotaryChangeFlow -object NotaryChangeFlow : AbstractStateReplacementFlow<Party> +object NotaryChangeFlow : AbstractStateReplacementFlow

      A flow to be used for changing a state's Notary. This is required since all input states to a transaction must point to the same notary.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-broadcast-transaction-flow/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-broadcast-transaction-flow/index.html index e1b59b94f8..c553da8a0a 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-broadcast-transaction-flow/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-broadcast-transaction-flow/index.html @@ -144,8 +144,8 @@ will do as long as the other side registers with it.

      receive -open fun <T : Any> receive(receiveType: Class<T>, otherParty: Party): UntrustworthyData<T> -

      Suspends until the specified otherParty sends us a message of type receiveType.

      +open fun <R : Any> receive(receiveType: Class<R>, otherParty: Party): UntrustworthyData<R> +

      Suspends until the specified otherParty sends us a message of type receiveType.

      fun <R : Any> receive(otherParty: Party): UntrustworthyData<R>

      Suspends until the specified otherParty sends us a message of type R.

      @@ -162,14 +162,14 @@ will do as long as the other side registers with it.

      sendAndReceive -open fun <T : Any> sendAndReceive(receiveType: Class<T>, otherParty: Party, payload: Any): UntrustworthyData<T> -

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response -is received, which must be of the given receiveType. Remember that when receiving data from other parties the data -should not be trusted until it's been thoroughly verified for consistency and that all expectations are -satisfied, as a malicious peer may send you subtly corrupted data in order to exploit your code.

      fun <R : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<R>

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response is received, which must be of the given R type.

      +open fun <R : Any> sendAndReceive(receiveType: Class<R>, otherParty: Party, payload: Any): UntrustworthyData<R> +

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response +is received, which must be of the given receiveType. Remember that when receiving data from other parties the data +should not be trusted until it's been thoroughly verified for consistency and that all expectations are +satisfied, as a malicious peer may send you subtly corrupted data in order to exploit your code.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-exception/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-exception/-init-.html new file mode 100644 index 0000000000..9279636fb4 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-exception/-init-.html @@ -0,0 +1,13 @@ + + + +CashException.<init> - corda + + + +corda / net.corda.flows / CashException / <init>
      +
      +

      <init>

      +CashException(message: String, cause: Throwable) + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-exception/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-exception/index.html new file mode 100644 index 0000000000..f70ee2a7c6 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-exception/index.html @@ -0,0 +1,35 @@ + + + +CashException - corda + + + +corda / net.corda.flows / CashException
      +
      +

      CashException

      +class CashException : FlowException +

      Constructors

      + + + + + + + +
      +<init> +CashException(message: String, cause: Throwable)
      +

      Extension Properties

      + + + + + + + +
      +rootCause +val Throwable.rootCause: Throwable
      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/-failed/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/-failed/-init-.html deleted file mode 100644 index 7dd1e8bca5..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/-failed/-init-.html +++ /dev/null @@ -1,15 +0,0 @@ - - - -CashFlowResult.Failed.<init> - corda - - - -corda / net.corda.flows / CashFlowResult / Failed / <init>
      -
      -

      <init>

      -Failed(message: String?) -

      State indicating the action undertaken failed, either directly (it is not something which requires a -state machine), or before a state machine was started.

      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/-failed/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/-failed/index.html deleted file mode 100644 index daa6ec097c..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/-failed/index.html +++ /dev/null @@ -1,51 +0,0 @@ - - - -CashFlowResult.Failed - corda - - - -corda / net.corda.flows / CashFlowResult / Failed
      -
      -

      Failed

      -class Failed : CashFlowResult -

      State indicating the action undertaken failed, either directly (it is not something which requires a -state machine), or before a state machine was started.

      -

      Constructors

      - - - - - - - -
      -<init> -Failed(message: String?) -

      State indicating the action undertaken failed, either directly (it is not something which requires a -state machine), or before a state machine was started.

      -
      -

      Properties

      - - - - - - - -
      -message -val message: String?
      -

      Functions

      - - - - - - - -
      -toString -fun toString(): String
      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/-failed/message.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/-failed/message.html deleted file mode 100644 index 956173aed0..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/-failed/message.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -CashFlowResult.Failed.message - corda - - - -corda / net.corda.flows / CashFlowResult / Failed / message
      -
      -

      message

      - -val message: String? - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/-failed/to-string.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/-failed/to-string.html deleted file mode 100644 index 027ed71d0c..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/-failed/to-string.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -CashFlowResult.Failed.toString - corda - - - -corda / net.corda.flows / CashFlowResult / Failed / toString
      -
      -

      toString

      - -fun toString(): String - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/-success/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/-success/-init-.html deleted file mode 100644 index ffa2d90b37..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/-success/-init-.html +++ /dev/null @@ -1,17 +0,0 @@ - - - -CashFlowResult.Success.<init> - corda - - - -corda / net.corda.flows / CashFlowResult / Success / <init>
      -
      -

      <init>

      -Success(id: StateMachineRunId, transaction: SignedTransaction?, message: String?) -

      Parameters

      - -

      -transaction - the transaction created as a result, in the case where the flow completed successfully. - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/-success/id.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/-success/id.html deleted file mode 100644 index 699d6b7743..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/-success/id.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -CashFlowResult.Success.id - corda - - - -corda / net.corda.flows / CashFlowResult / Success / id
      -
      -

      id

      - -val id: StateMachineRunId - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/-success/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/-success/index.html deleted file mode 100644 index f47bb73522..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/-success/index.html +++ /dev/null @@ -1,62 +0,0 @@ - - - -CashFlowResult.Success - corda - - - -corda / net.corda.flows / CashFlowResult / Success
      -
      -

      Success

      -class Success : CashFlowResult -

      Parameters

      - -

      -transaction - the transaction created as a result, in the case where the flow completed successfully. -

      Constructors

      - - - - - - - -
      -<init> -Success(id: StateMachineRunId, transaction: SignedTransaction?, message: String?)
      -

      Properties

      - - - - - - - - - - - - - - - -
      -id -val id: StateMachineRunId
      -message -val message: String?
      -transaction -val transaction: SignedTransaction?
      -

      Functions

      - - - - - - - -
      -toString -fun toString(): String
      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/-success/message.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/-success/message.html deleted file mode 100644 index c1de05670c..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/-success/message.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -CashFlowResult.Success.message - corda - - - -corda / net.corda.flows / CashFlowResult / Success / message
      -
      -

      message

      - -val message: String? - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/-success/to-string.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/-success/to-string.html deleted file mode 100644 index 6500ef26df..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/-success/to-string.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -CashFlowResult.Success.toString - corda - - - -corda / net.corda.flows / CashFlowResult / Success / toString
      -
      -

      toString

      - -fun toString(): String - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/-success/transaction.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/-success/transaction.html deleted file mode 100644 index 67ac38ba36..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/-success/transaction.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -CashFlowResult.Success.transaction - corda - - - -corda / net.corda.flows / CashFlowResult / Success / transaction
      -
      -

      transaction

      - -val transaction: SignedTransaction? - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/index.html deleted file mode 100644 index 71e054ba92..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow-result/index.html +++ /dev/null @@ -1,53 +0,0 @@ - - - -CashFlowResult - corda - - - -corda / net.corda.flows / CashFlowResult
      -
      -

      CashFlowResult

      -sealed class CashFlowResult -

      Types

      - - - - - - - - - - - -
      -Failed -class Failed : CashFlowResult -

      State indicating the action undertaken failed, either directly (it is not something which requires a -state machine), or before a state machine was started.

      -
      -Success -class Success : CashFlowResult
      -

      Inheritors

      - - - - - - - - - - - -
      -Failed -class Failed : CashFlowResult -

      State indicating the action undertaken failed, either directly (it is not something which requires a -state machine), or before a state machine was started.

      -
      -Success -class Success : CashFlowResult
      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow/call.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow/call.html index 783666e4e5..391860dc7f 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow/call.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow/call.html @@ -9,7 +9,7 @@

      call

      -@Suspendable fun call(): CashFlowResult +@Suspendable fun call(): SignedTransaction

      Overrides FlowLogic.call

      This is where you fill out your business logic. The returned object will usually be ignored, but can be helpful if this flow is meant to be used as a subflow.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow/index.html index cf9af58c98..770321a384 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-cash-flow/index.html @@ -8,7 +8,7 @@ corda / net.corda.flows / CashFlow

      CashFlow

      -class CashFlow : FlowLogic<CashFlowResult> +class CashFlow : FlowLogic<SignedTransaction>

      Initiates a flow that produces an Issue/Move or Exit Cash transaction.

      Parameters

      @@ -120,7 +120,7 @@ across module boundaries.

      call -fun call(): CashFlowResult +fun call(): SignedTransaction

      This is where you fill out your business logic. The returned object will usually be ignored, but can be helpful if this flow is meant to be used as a subflow.

      @@ -144,10 +144,10 @@ will do as long as the other side registers with it.

      receive +open fun <R : Any> receive(receiveType: Class<R>, otherParty: Party): UntrustworthyData<R> +

      Suspends until the specified otherParty sends us a message of type receiveType.

      fun <R : Any> receive(otherParty: Party): UntrustworthyData<R>

      Suspends until the specified otherParty sends us a message of type R.

      -open fun <T : Any> receive(receiveType: Class<T>, otherParty: Party): UntrustworthyData<T> -

      Suspends until the specified otherParty sends us a message of type receiveType.

      @@ -162,9 +162,9 @@ will do as long as the other side registers with it.

      sendAndReceive -open fun <T : Any> sendAndReceive(receiveType: Class<T>, otherParty: Party, payload: Any): UntrustworthyData<T> -

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response -is received, which must be of the given receiveType. Remember that when receiving data from other parties the data +open fun <R : Any> sendAndReceive(receiveType: Class<R>, otherParty: Party, payload: Any): UntrustworthyData<R> +

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response +is received, which must be of the given receiveType. Remember that when receiving data from other parties the data should not be trusted until it's been thoroughly verified for consistency and that all expectations are satisfied, as a malicious peer may send you subtly corrupted data in order to exploit your code.

      fun <R : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<R> diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-fetch-data-flow/-bad-answer/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-fetch-data-flow/-bad-answer/-init-.html deleted file mode 100644 index ff281a5fdc..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-fetch-data-flow/-bad-answer/-init-.html +++ /dev/null @@ -1,13 +0,0 @@ - - - -FetchDataFlow.BadAnswer.<init> - corda - - - -corda / net.corda.flows / FetchDataFlow / BadAnswer / <init>
      -
      -

      <init>

      -BadAnswer() - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-fetch-data-flow/-bad-answer/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-fetch-data-flow/-bad-answer/index.html deleted file mode 100644 index e1233acdd6..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-fetch-data-flow/-bad-answer/index.html +++ /dev/null @@ -1,41 +0,0 @@ - - - -FetchDataFlow.BadAnswer - corda - - - -corda / net.corda.flows / FetchDataFlow / BadAnswer
      -
      -

      BadAnswer

      -open class BadAnswer : Exception -

      Constructors

      - - - - - - - -
      -<init> -BadAnswer()
      -

      Inheritors

      - - - - - - - - - - - -
      -DownloadedVsRequestedDataMismatch -class DownloadedVsRequestedDataMismatch : BadAnswer
      -HashNotFound -class HashNotFound : BadAnswer
      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-fetch-data-flow/-downloaded-vs-requested-data-mismatch/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-fetch-data-flow/-downloaded-vs-requested-data-mismatch/index.html index 247757c782..55cce2c59a 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-fetch-data-flow/-downloaded-vs-requested-data-mismatch/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-fetch-data-flow/-downloaded-vs-requested-data-mismatch/index.html @@ -8,7 +8,7 @@ corda / net.corda.flows / FetchDataFlow / DownloadedVsRequestedDataMismatch

      DownloadedVsRequestedDataMismatch

      -class DownloadedVsRequestedDataMismatch : BadAnswer +class DownloadedVsRequestedDataMismatch : IllegalArgumentException

      Constructors

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-fetch-data-flow/-downloaded-vs-requested-size-mismatch/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-fetch-data-flow/-downloaded-vs-requested-size-mismatch/-init-.html new file mode 100644 index 0000000000..b7462ca0bb --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-fetch-data-flow/-downloaded-vs-requested-size-mismatch/-init-.html @@ -0,0 +1,13 @@ + + + +FetchDataFlow.DownloadedVsRequestedSizeMismatch.<init> - corda + + + +corda / net.corda.flows / FetchDataFlow / DownloadedVsRequestedSizeMismatch / <init>
      +
      +

      <init>

      +DownloadedVsRequestedSizeMismatch(requested: Int, got: Int) + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-fetch-data-flow/-downloaded-vs-requested-size-mismatch/got.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-fetch-data-flow/-downloaded-vs-requested-size-mismatch/got.html new file mode 100644 index 0000000000..f524d2ef1b --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-fetch-data-flow/-downloaded-vs-requested-size-mismatch/got.html @@ -0,0 +1,14 @@ + + + +FetchDataFlow.DownloadedVsRequestedSizeMismatch.got - corda + + + +corda / net.corda.flows / FetchDataFlow / DownloadedVsRequestedSizeMismatch / got
      +
      +

      got

      + +val got: Int + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-fetch-data-flow/-downloaded-vs-requested-size-mismatch/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-fetch-data-flow/-downloaded-vs-requested-size-mismatch/index.html new file mode 100644 index 0000000000..3d2ccbe767 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-fetch-data-flow/-downloaded-vs-requested-size-mismatch/index.html @@ -0,0 +1,41 @@ + + + +FetchDataFlow.DownloadedVsRequestedSizeMismatch - corda + + + +corda / net.corda.flows / FetchDataFlow / DownloadedVsRequestedSizeMismatch
      +
      +

      DownloadedVsRequestedSizeMismatch

      +class DownloadedVsRequestedSizeMismatch : IllegalArgumentException +

      Constructors

      +
      + + + + + + +
      +<init> +DownloadedVsRequestedSizeMismatch(requested: Int, got: Int)
      +

      Properties

      + + + + + + + + + + + +
      +got +val got: Int
      +requested +val requested: Int
      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-fetch-data-flow/-downloaded-vs-requested-size-mismatch/requested.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-fetch-data-flow/-downloaded-vs-requested-size-mismatch/requested.html new file mode 100644 index 0000000000..17c363757a --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-fetch-data-flow/-downloaded-vs-requested-size-mismatch/requested.html @@ -0,0 +1,14 @@ + + + +FetchDataFlow.DownloadedVsRequestedSizeMismatch.requested - corda + + + +corda / net.corda.flows / FetchDataFlow / DownloadedVsRequestedSizeMismatch / requested
      +
      +

      requested

      + +val requested: Int + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-fetch-data-flow/-hash-not-found/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-fetch-data-flow/-hash-not-found/index.html index c74c8125a5..94750329d9 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-fetch-data-flow/-hash-not-found/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-fetch-data-flow/-hash-not-found/index.html @@ -8,7 +8,7 @@ corda / net.corda.flows / FetchDataFlow / HashNotFound

      HashNotFound

      -class HashNotFound : BadAnswer +class HashNotFound : FlowException

      Constructors

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-fetch-data-flow/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-fetch-data-flow/index.html index 837ca87e62..ad45876fbe 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-fetch-data-flow/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-fetch-data-flow/index.html @@ -45,21 +45,21 @@ ultimate type, you must also override convert.

      +DownloadedVsRequestedDataMismatch +class DownloadedVsRequestedDataMismatch : IllegalArgumentException +DownloadedVsRequestedSizeMismatch +class DownloadedVsRequestedSizeMismatch : IllegalArgumentException +class HashNotFound : FlowException
      -BadAnswer -open class BadAnswer : Exception
      -DownloadedVsRequestedDataMismatch -class DownloadedVsRequestedDataMismatch : BadAnswer
      HashNotFound -class HashNotFound : BadAnswer
      @@ -196,8 +196,8 @@ will do as long as the other side registers with it.

      fun <R : Any> receive(otherParty: Party): UntrustworthyData<R>

      Suspends until the specified otherParty sends us a message of type R.

      -open fun <T : Any> receive(receiveType: Class<T>, otherParty: Party): UntrustworthyData<T> -

      Suspends until the specified otherParty sends us a message of type receiveType.

      +open fun <R : Any> receive(receiveType: Class<R>, otherParty: Party): UntrustworthyData<R> +

      Suspends until the specified otherParty sends us a message of type receiveType.

      @@ -212,14 +212,14 @@ will do as long as the other side registers with it.

      sendAndReceive +open fun <R : Any> sendAndReceive(receiveType: Class<R>, otherParty: Party, payload: Any): UntrustworthyData<R> +

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response +is received, which must be of the given receiveType. Remember that when receiving data from other parties the data +should not be trusted until it's been thoroughly verified for consistency and that all expectations are +satisfied, as a malicious peer may send you subtly corrupted data in order to exploit your code.

      fun <R : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<R>

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response is received, which must be of the given R type.

      -open fun <T : Any> sendAndReceive(receiveType: Class<T>, otherParty: Party, payload: Any): UntrustworthyData<T> -

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response -is received, which must be of the given receiveType. Remember that when receiving data from other parties the data -should not be trusted until it's been thoroughly verified for consistency and that all expectations are -satisfied, as a malicious peer may send you subtly corrupted data in order to exploit your code.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-finality-flow/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-finality-flow/index.html index b17a096ea5..a6aef3704e 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-finality-flow/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-finality-flow/index.html @@ -150,8 +150,8 @@ will do as long as the other side registers with it.

      fun <R : Any> receive(otherParty: Party): UntrustworthyData<R>

      Suspends until the specified otherParty sends us a message of type R.

      -open fun <T : Any> receive(receiveType: Class<T>, otherParty: Party): UntrustworthyData<T> -

      Suspends until the specified otherParty sends us a message of type receiveType.

      +open fun <R : Any> receive(receiveType: Class<R>, otherParty: Party): UntrustworthyData<R> +

      Suspends until the specified otherParty sends us a message of type receiveType.

      @@ -169,9 +169,9 @@ will do as long as the other side registers with it.

      fun <R : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<R>

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response is received, which must be of the given R type.

      -open fun <T : Any> sendAndReceive(receiveType: Class<T>, otherParty: Party, payload: Any): UntrustworthyData<T> -

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response -is received, which must be of the given receiveType. Remember that when receiving data from other parties the data +open fun <R : Any> sendAndReceive(receiveType: Class<R>, otherParty: Party, payload: Any): UntrustworthyData<R> +

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response +is received, which must be of the given receiveType. Remember that when receiving data from other parties the data should not be trusted until it's been thoroughly verified for consistency and that all expectations are satisfied, as a malicious peer may send you subtly corrupted data in order to exploit your code.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-input-state-ref-resolve-failed/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-input-state-ref-resolve-failed/-init-.html deleted file mode 100644 index bc854193b1..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-input-state-ref-resolve-failed/-init-.html +++ /dev/null @@ -1,13 +0,0 @@ - - - -InputStateRefResolveFailed.<init> - corda - - - -corda / net.corda.flows / InputStateRefResolveFailed / <init>
      -
      -

      <init>

      -InputStateRefResolveFailed(stateRefs: List<StateRef>) - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-input-state-ref-resolve-failed/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-input-state-ref-resolve-failed/index.html deleted file mode 100644 index 8b9272b7ca..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-input-state-ref-resolve-failed/index.html +++ /dev/null @@ -1,35 +0,0 @@ - - - -InputStateRefResolveFailed - corda - - - -corda / net.corda.flows / InputStateRefResolveFailed
      -
      -

      InputStateRefResolveFailed

      -class InputStateRefResolveFailed : Exception -

      Constructors

      - - - - - - - -
      -<init> -InputStateRefResolveFailed(stateRefs: List<StateRef>)
      -

      Extension Properties

      - - - - - - - -
      -rootCause -val Throwable.rootCause: Throwable
      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-issuer-flow/-issuance-requester/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-issuer-flow/-issuance-requester/-init-.html index b7c86462a1..ac5decc11d 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-issuer-flow/-issuance-requester/-init-.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-issuer-flow/-issuance-requester/-init-.html @@ -9,7 +9,7 @@

      <init>

      IssuanceRequester(amount: Amount<Currency>, issueToParty: Party, issueToPartyRef: OpaqueBytes, issuerBankParty: Party) -

      IssuanceRequester should be used by a client to ask a remote note to issue some FungibleAsset with the given details. +

      IssuanceRequester should be used by a client to ask a remote node to issue some FungibleAsset with the given details. Returns the transaction created by the Issuer to move the cash to the Requester.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-issuer-flow/-issuance-requester/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-issuer-flow/-issuance-requester/index.html index 215448349d..5729af8b6c 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-issuer-flow/-issuance-requester/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-issuer-flow/-issuance-requester/index.html @@ -9,7 +9,7 @@

      IssuanceRequester

      class IssuanceRequester : FlowLogic<SignedTransaction> -

      IssuanceRequester should be used by a client to ask a remote note to issue some FungibleAsset with the given details. +

      IssuanceRequester should be used by a client to ask a remote node to issue some FungibleAsset with the given details. Returns the transaction created by the Issuer to move the cash to the Requester.

      Constructors

      @@ -19,7 +19,7 @@ Returns the transaction created by the Issuer to move the cash to the Requester. <init> @@ -139,8 +139,8 @@ will do as long as the other side registers with it.

      @@ -155,14 +155,14 @@ will do as long as the other side registers with it.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-issuer-flow/-issuer/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-issuer-flow/-issuer/index.html index 60c7e88459..0b27033c3e 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-issuer-flow/-issuer/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-issuer-flow/-issuer/index.html @@ -156,8 +156,8 @@ will do as long as the other side registers with it.

      @@ -175,9 +175,9 @@ will do as long as the other side registers with it.

      fun <R : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<R>

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response is received, which must be of the given R type.

      -open fun <T : Any> sendAndReceive(receiveType: Class<T>, otherParty: Party, payload: Any): UntrustworthyData<T> -

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response -is received, which must be of the given receiveType. Remember that when receiving data from other parties the data +open fun <R : Any> sendAndReceive(receiveType: Class<R>, otherParty: Party, payload: Any): UntrustworthyData<R> +

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response +is received, which must be of the given receiveType. Remember that when receiving data from other parties the data should not be trusted until it's been thoroughly verified for consistency and that all expectations are satisfied, as a malicious peer may send you subtly corrupted data in order to exploit your code.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-issuer-flow/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-issuer-flow/index.html index 27b7bce955..b09f965013 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-issuer-flow/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-issuer-flow/index.html @@ -27,7 +27,7 @@ useful for creation of fake assets.

      IssuanceRequester diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/-acceptor/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/-acceptor/index.html index 20831e5924..7da840b43f 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/-acceptor/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/-acceptor/index.html @@ -54,7 +54,7 @@ progress.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/-acceptor/verify-proposal.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/-acceptor/verify-proposal.html index bbf8659db8..78869780b5 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/-acceptor/verify-proposal.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/-acceptor/verify-proposal.html @@ -8,8 +8,8 @@ corda / net.corda.flows / NotaryChangeFlow / Acceptor / verifyProposal

      verifyProposal

      - -@Suspendable protected fun verifyProposal(maybeProposal: UntrustworthyData<Proposal<Party>>): Proposal<Party> + +protected fun verifyProposal(proposal: Proposal<Party>): Unit

      Check the notary change proposal.

      For example, if the proposed new notary has the same behaviour (e.g. both are non-validating) and is also in a geographically convenient location we can just automatically approve the change. diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/-instigator/assemble-proposal.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/-instigator/assemble-proposal.html deleted file mode 100644 index 564ba9f771..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/-instigator/assemble-proposal.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -NotaryChangeFlow.Instigator.assembleProposal - corda - - - -corda / net.corda.flows / NotaryChangeFlow / Instigator / assembleProposal
      -
      -

      assembleProposal

      - -protected fun assembleProposal(stateRef: StateRef, modification: Party, stx: SignedTransaction): Proposal<Party> - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/-instigator/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/-instigator/index.html index 17985b6e40..f240630b30 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/-instigator/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/-instigator/index.html @@ -8,7 +8,7 @@ corda / net.corda.flows / NotaryChangeFlow / Instigator

      Instigator

      -class Instigator<T : ContractState> : Instigator<T, Party> +class Instigator<out T : ContractState> : Instigator<T, Party>

      Constructors

      IssuanceRequester(amount: Amount<Currency>, issueToParty: Party, issueToPartyRef: OpaqueBytes, issuerBankParty: Party) -

      IssuanceRequester should be used by a client to ask a remote note to issue some FungibleAsset with the given details. +

      IssuanceRequester should be used by a client to ask a remote node to issue some FungibleAsset with the given details. Returns the transaction created by the Issuer to move the cash to the Requester.

      fun <R : Any> receive(otherParty: Party): UntrustworthyData<R>

      Suspends until the specified otherParty sends us a message of type R.

      -open fun <T : Any> receive(receiveType: Class<T>, otherParty: Party): UntrustworthyData<T> -

      Suspends until the specified otherParty sends us a message of type receiveType.

      +open fun <R : Any> receive(receiveType: Class<R>, otherParty: Party): UntrustworthyData<R> +

      Suspends until the specified otherParty sends us a message of type receiveType.

      sendAndReceive -open fun <T : Any> sendAndReceive(receiveType: Class<T>, otherParty: Party, payload: Any): UntrustworthyData<T> -

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response -is received, which must be of the given receiveType. Remember that when receiving data from other parties the data -should not be trusted until it's been thoroughly verified for consistency and that all expectations are -satisfied, as a malicious peer may send you subtly corrupted data in order to exploit your code.

      fun <R : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<R>

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response is received, which must be of the given R type.

      +open fun <R : Any> sendAndReceive(receiveType: Class<R>, otherParty: Party, payload: Any): UntrustworthyData<R> +

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response +is received, which must be of the given receiveType. Remember that when receiving data from other parties the data +should not be trusted until it's been thoroughly verified for consistency and that all expectations are +satisfied, as a malicious peer may send you subtly corrupted data in order to exploit your code.

      fun <R : Any> receive(otherParty: Party): UntrustworthyData<R>

      Suspends until the specified otherParty sends us a message of type R.

      -open fun <T : Any> receive(receiveType: Class<T>, otherParty: Party): UntrustworthyData<T> -

      Suspends until the specified otherParty sends us a message of type receiveType.

      +open fun <R : Any> receive(receiveType: Class<R>, otherParty: Party): UntrustworthyData<R> +

      Suspends until the specified otherParty sends us a message of type receiveType.

      class IssuanceRequester : FlowLogic<SignedTransaction> -

      IssuanceRequester should be used by a client to ask a remote note to issue some FungibleAsset with the given details. +

      IssuanceRequester should be used by a client to ask a remote node to issue some FungibleAsset with the given details. Returns the transaction created by the Issuer to move the cash to the Requester.

      verifyProposal -fun verifyProposal(maybeProposal: UntrustworthyData<Proposal<Party>>): Proposal<Party> +fun verifyProposal(proposal: Proposal<Party>): Unit

      Check the notary change proposal.

      @@ -53,12 +53,6 @@ progress.

      - - - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/-proposal/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/-proposal/-init-.html deleted file mode 100644 index 7d74b8414b..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/-proposal/-init-.html +++ /dev/null @@ -1,13 +0,0 @@ - - - -NotaryChangeFlow.Proposal.<init> - corda - - - -corda / net.corda.flows / NotaryChangeFlow / Proposal / <init>
      -
      -

      <init>

      -Proposal(stateRef: StateRef, modification: Party, stx: SignedTransaction) - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/-proposal/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/-proposal/index.html deleted file mode 100644 index a2a7adf655..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/-proposal/index.html +++ /dev/null @@ -1,47 +0,0 @@ - - - -NotaryChangeFlow.Proposal - corda - - - -corda / net.corda.flows / NotaryChangeFlow / Proposal
      -
      -

      Proposal

      -data class Proposal : Proposal<Party> -

      Constructors

      -
      -assembleProposal -fun assembleProposal(stateRef: StateRef, modification: Party, stx: SignedTransaction): Proposal<Party>
      assembleTx fun assembleTx(): Pair<SignedTransaction, Iterable<CompositeKey>>
      - - - - - - -
      -<init> -Proposal(stateRef: StateRef, modification: Party, stx: SignedTransaction)
      -

      Properties

      - - - - - - - - - - - - - - - -
      -modification -val modification: Party
      -stateRef -val stateRef: StateRef
      -stx -val stx: SignedTransaction
      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/-proposal/modification.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/-proposal/modification.html deleted file mode 100644 index 3d2bfa5200..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/-proposal/modification.html +++ /dev/null @@ -1,15 +0,0 @@ - - - -NotaryChangeFlow.Proposal.modification - corda - - - -corda / net.corda.flows / NotaryChangeFlow / Proposal / modification
      -
      -

      modification

      - -val modification: Party -

      Overrides Proposal.modification

      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/-proposal/state-ref.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/-proposal/state-ref.html deleted file mode 100644 index a15282c48b..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/-proposal/state-ref.html +++ /dev/null @@ -1,15 +0,0 @@ - - - -NotaryChangeFlow.Proposal.stateRef - corda - - - -corda / net.corda.flows / NotaryChangeFlow / Proposal / stateRef
      -
      -

      stateRef

      - -val stateRef: StateRef -

      Overrides Proposal.stateRef

      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/-proposal/stx.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/-proposal/stx.html deleted file mode 100644 index bbca83fe6a..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/-proposal/stx.html +++ /dev/null @@ -1,15 +0,0 @@ - - - -NotaryChangeFlow.Proposal.stx - corda - - - -corda / net.corda.flows / NotaryChangeFlow / Proposal / stx
      -
      -

      stx

      - -val stx: SignedTransaction -

      Overrides Proposal.stx

      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/index.html index fd95128137..39f14e512c 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-change-flow/index.html @@ -8,7 +8,7 @@ corda / net.corda.flows / NotaryChangeFlow

      NotaryChangeFlow

      -object NotaryChangeFlow : AbstractStateReplacementFlow<Party> +object NotaryChangeFlow : AbstractStateReplacementFlow

      A flow to be used for changing a state's Notary. This is required since all input states to a transaction must point to the same notary.

      The Instigator assembles the transaction for notary replacement and sends out change proposals to all participants @@ -28,13 +28,7 @@ use the new updated state for future transactions.

      Instigator -class Instigator<T : ContractState> : Instigator<T, Party> - - - -Proposal - -data class Proposal : Proposal<Party> +class Instigator<out T : ContractState> : Instigator<T, Party> diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-exception/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-exception/index.html index 6d897b871a..c89916f7d8 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-exception/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-exception/index.html @@ -8,7 +8,7 @@ corda / net.corda.flows / NotaryException

      NotaryException

      -class NotaryException : Exception +class NotaryException : FlowException

      Constructors

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/-client/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/-client/index.html index 2f7534ece3..23b874705b 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/-client/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/-client/index.html @@ -141,10 +141,10 @@ will do as long as the other side registers with it.

      @@ -159,14 +159,14 @@ will do as long as the other side registers with it.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/-result/-error/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/-result/-error/-init-.html deleted file mode 100644 index 792a597c63..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/-result/-error/-init-.html +++ /dev/null @@ -1,13 +0,0 @@ - - - -NotaryFlow.Result.Error.<init> - corda - - - -corda / net.corda.flows / NotaryFlow / Result / Error / <init>
      -
      -

      <init>

      -Error(error: NotaryError) - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/-result/-error/error.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/-result/-error/error.html deleted file mode 100644 index 01a05b59a1..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/-result/-error/error.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -NotaryFlow.Result.Error.error - corda - - - -corda / net.corda.flows / NotaryFlow / Result / Error / error
      -
      -

      error

      - -val error: NotaryError - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/-result/-error/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/-result/-error/index.html deleted file mode 100644 index 960b0ba7c0..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/-result/-error/index.html +++ /dev/null @@ -1,35 +0,0 @@ - - - -NotaryFlow.Result.Error - corda - - - -corda / net.corda.flows / NotaryFlow / Result / Error
      -
      -

      Error

      -class Error : Result -

      Constructors

      -
      receive +open fun <R : Any> receive(receiveType: Class<R>, otherParty: Party): UntrustworthyData<R> +

      Suspends until the specified otherParty sends us a message of type receiveType.

      fun <R : Any> receive(otherParty: Party): UntrustworthyData<R>

      Suspends until the specified otherParty sends us a message of type R.

      -open fun <T : Any> receive(receiveType: Class<T>, otherParty: Party): UntrustworthyData<T> -

      Suspends until the specified otherParty sends us a message of type receiveType.

      sendAndReceive +open fun <R : Any> sendAndReceive(receiveType: Class<R>, otherParty: Party, payload: Any): UntrustworthyData<R> +

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response +is received, which must be of the given receiveType. Remember that when receiving data from other parties the data +should not be trusted until it's been thoroughly verified for consistency and that all expectations are +satisfied, as a malicious peer may send you subtly corrupted data in order to exploit your code.

      fun <R : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<R>

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response is received, which must be of the given R type.

      -open fun <T : Any> sendAndReceive(receiveType: Class<T>, otherParty: Party, payload: Any): UntrustworthyData<T> -

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response -is received, which must be of the given receiveType. Remember that when receiving data from other parties the data -should not be trusted until it's been thoroughly verified for consistency and that all expectations are -satisfied, as a malicious peer may send you subtly corrupted data in order to exploit your code.

      - - - - - - -
      -<init> -Error(error: NotaryError)
      -

      Properties

      - - - - - - - -
      -error -val error: NotaryError
      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/-result/-success/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/-result/-success/-init-.html deleted file mode 100644 index 0938723002..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/-result/-success/-init-.html +++ /dev/null @@ -1,13 +0,0 @@ - - - -NotaryFlow.Result.Success.<init> - corda - - - -corda / net.corda.flows / NotaryFlow / Result / Success / <init>
      -
      -

      <init>

      -Success(sig: WithKey) - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/-result/-success/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/-result/-success/index.html deleted file mode 100644 index 31c0d2158e..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/-result/-success/index.html +++ /dev/null @@ -1,35 +0,0 @@ - - - -NotaryFlow.Result.Success - corda - - - -corda / net.corda.flows / NotaryFlow / Result / Success
      -
      -

      Success

      -class Success : Result -

      Constructors

      - - - - - - - -
      -<init> -Success(sig: WithKey)
      -

      Properties

      - - - - - - - -
      -sig -val sig: WithKey
      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/-result/-success/sig.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/-result/-success/sig.html deleted file mode 100644 index a6ee845df5..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/-result/-success/sig.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -NotaryFlow.Result.Success.sig - corda - - - -corda / net.corda.flows / NotaryFlow / Result / Success / sig
      -
      -

      sig

      - -val sig: WithKey - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/-result/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/-result/index.html deleted file mode 100644 index 39284aad5c..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/-result/index.html +++ /dev/null @@ -1,47 +0,0 @@ - - - -NotaryFlow.Result - corda - - - -corda / net.corda.flows / NotaryFlow / Result
      -
      -

      Result

      -sealed class Result -

      Types

      - - - - - - - - - - - -
      -Error -class Error : Result
      -Success -class Success : Result
      -

      Inheritors

      - - - - - - - - - - - -
      -Error -class Error : Result
      -Success -class Success : Result
      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/-service/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/-service/index.html index 6e65626fc6..9c127f7acc 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/-service/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/-service/index.html @@ -146,8 +146,8 @@ will do as long as the other side registers with it.

      receive -open fun <T : Any> receive(receiveType: Class<T>, otherParty: Party): UntrustworthyData<T> -

      Suspends until the specified otherParty sends us a message of type receiveType.

      +open fun <R : Any> receive(receiveType: Class<R>, otherParty: Party): UntrustworthyData<R> +

      Suspends until the specified otherParty sends us a message of type receiveType.

      fun <R : Any> receive(otherParty: Party): UntrustworthyData<R>

      Suspends until the specified otherParty sends us a message of type R.

      @@ -164,14 +164,14 @@ will do as long as the other side registers with it.

      sendAndReceive +open fun <R : Any> sendAndReceive(receiveType: Class<R>, otherParty: Party, payload: Any): UntrustworthyData<R> +

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response +is received, which must be of the given receiveType. Remember that when receiving data from other parties the data +should not be trusted until it's been thoroughly verified for consistency and that all expectations are +satisfied, as a malicious peer may send you subtly corrupted data in order to exploit your code.

      fun <R : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<R>

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response is received, which must be of the given R type.

      -open fun <T : Any> sendAndReceive(receiveType: Class<T>, otherParty: Party, payload: Any): UntrustworthyData<T> -

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response -is received, which must be of the given receiveType. Remember that when receiving data from other parties the data -should not be trusted until it's been thoroughly verified for consistency and that all expectations are -satisfied, as a malicious peer may send you subtly corrupted data in order to exploit your code.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/index.html index 0df665e5aa..0d6d20359b 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-notary-flow/index.html @@ -23,12 +23,6 @@ timestamp is correct and none of its inputs have been used in another completed -Result - -sealed class Result - - - Service class Service : FlowLogic<Unit> diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-resolve-transactions-flow/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-resolve-transactions-flow/index.html index 442dfe93b2..0f50efc386 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-resolve-transactions-flow/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-resolve-transactions-flow/index.html @@ -145,8 +145,8 @@ will do as long as the other side registers with it.

      fun <R : Any> receive(otherParty: Party): UntrustworthyData<R>

      Suspends until the specified otherParty sends us a message of type R.

      -open fun <T : Any> receive(receiveType: Class<T>, otherParty: Party): UntrustworthyData<T> -

      Suspends until the specified otherParty sends us a message of type receiveType.

      +open fun <R : Any> receive(receiveType: Class<R>, otherParty: Party): UntrustworthyData<R> +

      Suspends until the specified otherParty sends us a message of type receiveType.

      @@ -161,14 +161,14 @@ will do as long as the other side registers with it.

      sendAndReceive +open fun <R : Any> sendAndReceive(receiveType: Class<R>, otherParty: Party, payload: Any): UntrustworthyData<R> +

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response +is received, which must be of the given receiveType. Remember that when receiving data from other parties the data +should not be trusted until it's been thoroughly verified for consistency and that all expectations are +satisfied, as a malicious peer may send you subtly corrupted data in order to exploit your code.

      fun <R : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<R>

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response is received, which must be of the given R type.

      -open fun <T : Any> sendAndReceive(receiveType: Class<T>, otherParty: Party, payload: Any): UntrustworthyData<T> -

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response -is received, which must be of the given receiveType. Remember that when receiving data from other parties the data -should not be trusted until it's been thoroughly verified for consistency and that all expectations are -satisfied, as a malicious peer may send you subtly corrupted data in order to exploit your code.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-state-replacement-exception/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-state-replacement-exception/-init-.html index a45be924b4..b62330009d 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-state-replacement-exception/-init-.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-state-replacement-exception/-init-.html @@ -8,6 +8,6 @@ corda / net.corda.flows / StateReplacementException / <init>

      <init>

      -StateReplacementException(error: StateReplacementRefused) +StateReplacementException(message: String? = null, cause: Throwable? = null) diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-state-replacement-exception/error.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-state-replacement-exception/error.html deleted file mode 100644 index c8fdf6f1d3..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-state-replacement-exception/error.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -StateReplacementException.error - corda - - - -corda / net.corda.flows / StateReplacementException / error
      -
      -

      error

      - -val error: StateReplacementRefused - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-state-replacement-exception/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-state-replacement-exception/index.html index a94336be22..8005978b1b 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-state-replacement-exception/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-state-replacement-exception/index.html @@ -8,7 +8,7 @@ corda / net.corda.flows / StateReplacementException

      StateReplacementException

      -class StateReplacementException : Exception +open class StateReplacementException : FlowException

      Constructors

      @@ -16,18 +16,7 @@ - - -
      <init> -StateReplacementException(error: StateReplacementRefused)
      -

      Properties

      - - - - - +StateReplacementException(message: String? = null, cause: Throwable? = null)
      -error -val error: StateReplacementRefused
      diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-state-replacement-refused/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-state-replacement-refused/-init-.html deleted file mode 100644 index 204a5fd349..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-state-replacement-refused/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -StateReplacementRefused.<init> - corda - - - -corda / net.corda.flows / StateReplacementRefused / <init>
      -
      -

      <init>

      -StateReplacementRefused(identity: Party, state: StateRef, detail: String?) -

      Thrown when a participant refuses the proposed state replacement

      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-state-replacement-refused/detail.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-state-replacement-refused/detail.html deleted file mode 100644 index 70b8e03a9a..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-state-replacement-refused/detail.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -StateReplacementRefused.detail - corda - - - -corda / net.corda.flows / StateReplacementRefused / detail
      -
      -

      detail

      - -val detail: String? - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-state-replacement-refused/identity.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-state-replacement-refused/identity.html deleted file mode 100644 index 984d8349f9..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-state-replacement-refused/identity.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -StateReplacementRefused.identity - corda - - - -corda / net.corda.flows / StateReplacementRefused / identity
      -
      -

      identity

      - -val identity: Party - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-state-replacement-refused/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-state-replacement-refused/index.html deleted file mode 100644 index e14f9ba8e3..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-state-replacement-refused/index.html +++ /dev/null @@ -1,61 +0,0 @@ - - - -StateReplacementRefused - corda - - - -corda / net.corda.flows / StateReplacementRefused
      -
      -

      StateReplacementRefused

      -class StateReplacementRefused -

      Thrown when a participant refuses the proposed state replacement

      -

      Constructors

      - - - - - - - -
      -<init> -StateReplacementRefused(identity: Party, state: StateRef, detail: String?) -

      Thrown when a participant refuses the proposed state replacement

      -
      -

      Properties

      - - - - - - - - - - - - - - - -
      -detail -val detail: String?
      -identity -val identity: Party
      -state -val state: StateRef
      -

      Functions

      - - - - - - - -
      -toString -fun toString(): String
      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-state-replacement-refused/state.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-state-replacement-refused/state.html deleted file mode 100644 index 2b6fe031a3..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-state-replacement-refused/state.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -StateReplacementRefused.state - corda - - - -corda / net.corda.flows / StateReplacementRefused / state
      -
      -

      state

      - -val state: StateRef - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-state-replacement-refused/to-string.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-state-replacement-refused/to-string.html deleted file mode 100644 index 3c10e5e63c..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-state-replacement-refused/to-string.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -StateReplacementRefused.toString - corda - - - -corda / net.corda.flows / StateReplacementRefused / toString
      -
      -

      toString

      - -fun toString(): String - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-two-party-deal-flow/-primary/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-two-party-deal-flow/-primary/index.html index 2249da3ada..ab9442a7cd 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-two-party-deal-flow/-primary/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-two-party-deal-flow/-primary/index.html @@ -202,10 +202,10 @@ will do as long as the other side registers with it.

      receive +open fun <R : Any> receive(receiveType: Class<R>, otherParty: Party): UntrustworthyData<R> +

      Suspends until the specified otherParty sends us a message of type receiveType.

      fun <R : Any> receive(otherParty: Party): UntrustworthyData<R>

      Suspends until the specified otherParty sends us a message of type R.

      -open fun <T : Any> receive(receiveType: Class<T>, otherParty: Party): UntrustworthyData<T> -

      Suspends until the specified otherParty sends us a message of type receiveType.

      @@ -220,14 +220,14 @@ will do as long as the other side registers with it.

      sendAndReceive -open fun <T : Any> sendAndReceive(receiveType: Class<T>, otherParty: Party, payload: Any): UntrustworthyData<T> -

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response -is received, which must be of the given receiveType. Remember that when receiving data from other parties the data -should not be trusted until it's been thoroughly verified for consistency and that all expectations are -satisfied, as a malicious peer may send you subtly corrupted data in order to exploit your code.

      fun <R : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<R>

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response is received, which must be of the given R type.

      +open fun <R : Any> sendAndReceive(receiveType: Class<R>, otherParty: Party, payload: Any): UntrustworthyData<R> +

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response +is received, which must be of the given receiveType. Remember that when receiving data from other parties the data +should not be trusted until it's been thoroughly verified for consistency and that all expectations are +satisfied, as a malicious peer may send you subtly corrupted data in order to exploit your code.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-two-party-deal-flow/-secondary/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-two-party-deal-flow/-secondary/index.html index 60750a73a2..77f525e787 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-two-party-deal-flow/-secondary/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-two-party-deal-flow/-secondary/index.html @@ -168,8 +168,8 @@ will do as long as the other side registers with it.

      fun <R : Any> receive(otherParty: Party): UntrustworthyData<R>

      Suspends until the specified otherParty sends us a message of type R.

      -open fun <T : Any> receive(receiveType: Class<T>, otherParty: Party): UntrustworthyData<T> -

      Suspends until the specified otherParty sends us a message of type receiveType.

      +open fun <R : Any> receive(receiveType: Class<R>, otherParty: Party): UntrustworthyData<R> +

      Suspends until the specified otherParty sends us a message of type receiveType.

      @@ -187,9 +187,9 @@ will do as long as the other side registers with it.

      fun <R : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<R>

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response is received, which must be of the given R type.

      -open fun <T : Any> sendAndReceive(receiveType: Class<T>, otherParty: Party, payload: Any): UntrustworthyData<T> -

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response -is received, which must be of the given receiveType. Remember that when receiving data from other parties the data +open fun <R : Any> sendAndReceive(receiveType: Class<R>, otherParty: Party, payload: Any): UntrustworthyData<R> +

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response +is received, which must be of the given receiveType. Remember that when receiving data from other parties the data should not be trusted until it's been thoroughly verified for consistency and that all expectations are satisfied, as a malicious peer may send you subtly corrupted data in order to exploit your code.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-two-party-trade-flow/-asset-mismatch-exception/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-two-party-trade-flow/-asset-mismatch-exception/index.html index 35402f7fa7..024caf934e 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-two-party-trade-flow/-asset-mismatch-exception/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-two-party-trade-flow/-asset-mismatch-exception/index.html @@ -8,7 +8,7 @@ corda / net.corda.flows / TwoPartyTradeFlow / AssetMismatchException

      AssetMismatchException

      -class AssetMismatchException : Exception +class AssetMismatchException : FlowException

      Constructors

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-two-party-trade-flow/-buyer/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-two-party-trade-flow/-buyer/index.html index 089f4c140e..db8bca037a 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-two-party-trade-flow/-buyer/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-two-party-trade-flow/-buyer/index.html @@ -161,10 +161,10 @@ will do as long as the other side registers with it.

      @@ -179,14 +179,14 @@ will do as long as the other side registers with it.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-two-party-trade-flow/-seller/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-two-party-trade-flow/-seller/index.html index e8ba8b1c7a..06044b683b 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-two-party-trade-flow/-seller/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-two-party-trade-flow/-seller/index.html @@ -181,8 +181,8 @@ will do as long as the other side registers with it.

      @@ -197,14 +197,14 @@ will do as long as the other side registers with it.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-two-party-trade-flow/-unacceptable-price-exception/given-price.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-two-party-trade-flow/-unacceptable-price-exception/given-price.html deleted file mode 100644 index 629fd6edfc..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-two-party-trade-flow/-unacceptable-price-exception/given-price.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -TwoPartyTradeFlow.UnacceptablePriceException.givenPrice - corda - - - -corda / net.corda.flows / TwoPartyTradeFlow / UnacceptablePriceException / givenPrice
      -
      -

      givenPrice

      - -val givenPrice: Amount<Currency> - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-two-party-trade-flow/-unacceptable-price-exception/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-two-party-trade-flow/-unacceptable-price-exception/index.html index fd3a7d26e5..d15bf4f040 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-two-party-trade-flow/-unacceptable-price-exception/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-two-party-trade-flow/-unacceptable-price-exception/index.html @@ -8,7 +8,7 @@ corda / net.corda.flows / TwoPartyTradeFlow / UnacceptablePriceException

      UnacceptablePriceException

      -class UnacceptablePriceException : Exception +class UnacceptablePriceException : FlowException

      Constructors

      receive +open fun <R : Any> receive(receiveType: Class<R>, otherParty: Party): UntrustworthyData<R> +

      Suspends until the specified otherParty sends us a message of type receiveType.

      fun <R : Any> receive(otherParty: Party): UntrustworthyData<R>

      Suspends until the specified otherParty sends us a message of type R.

      -open fun <T : Any> receive(receiveType: Class<T>, otherParty: Party): UntrustworthyData<T> -

      Suspends until the specified otherParty sends us a message of type receiveType.

      sendAndReceive -open fun <T : Any> sendAndReceive(receiveType: Class<T>, otherParty: Party, payload: Any): UntrustworthyData<T> -

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response -is received, which must be of the given receiveType. Remember that when receiving data from other parties the data -should not be trusted until it's been thoroughly verified for consistency and that all expectations are -satisfied, as a malicious peer may send you subtly corrupted data in order to exploit your code.

      fun <R : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<R>

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response is received, which must be of the given R type.

      +open fun <R : Any> sendAndReceive(receiveType: Class<R>, otherParty: Party, payload: Any): UntrustworthyData<R> +

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response +is received, which must be of the given receiveType. Remember that when receiving data from other parties the data +should not be trusted until it's been thoroughly verified for consistency and that all expectations are +satisfied, as a malicious peer may send you subtly corrupted data in order to exploit your code.

      fun <R : Any> receive(otherParty: Party): UntrustworthyData<R>

      Suspends until the specified otherParty sends us a message of type R.

      -open fun <T : Any> receive(receiveType: Class<T>, otherParty: Party): UntrustworthyData<T> -

      Suspends until the specified otherParty sends us a message of type receiveType.

      +open fun <R : Any> receive(receiveType: Class<R>, otherParty: Party): UntrustworthyData<R> +

      Suspends until the specified otherParty sends us a message of type receiveType.

      sendAndReceive -open fun <T : Any> sendAndReceive(receiveType: Class<T>, otherParty: Party, payload: Any): UntrustworthyData<T> -

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response -is received, which must be of the given receiveType. Remember that when receiving data from other parties the data -should not be trusted until it's been thoroughly verified for consistency and that all expectations are -satisfied, as a malicious peer may send you subtly corrupted data in order to exploit your code.

      fun <R : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<R>

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response is received, which must be of the given R type.

      +open fun <R : Any> sendAndReceive(receiveType: Class<R>, otherParty: Party, payload: Any): UntrustworthyData<R> +

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response +is received, which must be of the given receiveType. Remember that when receiving data from other parties the data +should not be trusted until it's been thoroughly verified for consistency and that all expectations are +satisfied, as a malicious peer may send you subtly corrupted data in order to exploit your code.

      @@ -20,16 +20,5 @@
      -

      Properties

      - - - - - - - -
      -givenPrice -val givenPrice: Amount<Currency>
      diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/-two-party-trade-flow/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/-two-party-trade-flow/index.html index d0c216f44e..bff539e7a5 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/-two-party-trade-flow/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/-two-party-trade-flow/index.html @@ -62,13 +62,13 @@ transaction is available: you can either block your thread waiting for the flow AssetMismatchException -class AssetMismatchException : Exception +class AssetMismatchException : FlowException UnacceptablePriceException -class UnacceptablePriceException : Exception +class UnacceptablePriceException : FlowException diff --git a/docs/build/html/api/kotlin/corda/net.corda.flows/index.html b/docs/build/html/api/kotlin/corda/net.corda.flows/index.html index f6ba29145f..337a5f9f4f 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.flows/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.flows/index.html @@ -15,7 +15,7 @@ AbstractStateReplacementFlow -abstract class AbstractStateReplacementFlow<T> +abstract class AbstractStateReplacementFlow

      Abstract flow to be used for replacing one state with another, for example when changing the notary of a state. Notably this requires a one to one replacement of states, states cannot be split, merged or issued as part of these flows.

      @@ -42,18 +42,12 @@ flows.

      CashFlow -class CashFlow : FlowLogic<CashFlowResult> +class CashFlow : FlowLogic<SignedTransaction>

      Initiates a flow that produces an Issue/Move or Exit Cash transaction.

      -CashFlowResult - -sealed class CashFlowResult - - - FetchAttachmentsFlow class FetchAttachmentsFlow : FetchDataFlow<Attachment, ByteArray> @@ -98,7 +92,7 @@ server acting as an issuer (see NotaryChangeFlow -object NotaryChangeFlow : AbstractStateReplacementFlow<Party> +object NotaryChangeFlow : AbstractStateReplacementFlow

      A flow to be used for changing a state's Notary. This is required since all input states to a transaction must point to the same notary.

      @@ -135,14 +129,6 @@ checked again.

      -StateReplacementRefused - -class StateReplacementRefused -

      Thrown when a participant refuses the proposed state replacement

      - - - - TwoPartyDealFlow object TwoPartyDealFlow @@ -176,21 +162,21 @@ indeed valid.

      -InputStateRefResolveFailed +CashException -class InputStateRefResolveFailed : Exception +class CashException : FlowException NotaryException -class NotaryException : Exception +class NotaryException : FlowException StateReplacementException -class StateReplacementException : Exception +open class StateReplacementException : FlowException diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/build-transaction.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/build-transaction.html deleted file mode 100644 index e4936611d1..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/build-transaction.html +++ /dev/null @@ -1,17 +0,0 @@ - - - -APIServer.buildTransaction - corda - - - -corda / net.corda.node.api / APIServer / buildTransaction
      -
      -

      buildTransaction

      - -abstract fun buildTransaction(type: ContractDefRef, steps: List<TransactionBuildStep>): SerializedBytes<WireTransaction> -

      TransactionBuildSteps would be invocations of contract.generateXXX() methods that all share a common TransactionBuilder -and a common contract type (e.g. Cash or CommercialPaper) -which would automatically be passed as the first argument (we'd need that to be a criteria/pattern of the generateXXX methods).

      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/commit-transaction.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/commit-transaction.html deleted file mode 100644 index 49ade22113..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/commit-transaction.html +++ /dev/null @@ -1,16 +0,0 @@ - - - -APIServer.commitTransaction - corda - - - -corda / net.corda.node.api / APIServer / commitTransaction
      -
      -

      commitTransaction

      - -abstract fun commitTransaction(tx: SerializedBytes<WireTransaction>, signatures: List<WithKey>): SecureHash -

      Attempt to commit transaction (returned from build transaction) with the necessary signatures for that to be -successful, otherwise exception is thrown.

      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/fetch-flows-requiring-attention.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/fetch-flows-requiring-attention.html deleted file mode 100644 index 0e096b6863..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/fetch-flows-requiring-attention.html +++ /dev/null @@ -1,15 +0,0 @@ - - - -APIServer.fetchFlowsRequiringAttention - corda - - - -corda / net.corda.node.api / APIServer / fetchFlowsRequiringAttention
      -
      -

      fetchFlowsRequiringAttention

      - -abstract fun fetchFlowsRequiringAttention(query: StatesQuery): Map<StateRef, FlowRequiringAttention> -

      Fetch flows that require a response to some prompt/question by a human (on the "bank" side).

      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/fetch-states.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/fetch-states.html deleted file mode 100644 index f5923227ca..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/fetch-states.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -APIServer.fetchStates - corda - - - -corda / net.corda.node.api / APIServer / fetchStates
      -
      -

      fetchStates

      - -abstract fun fetchStates(states: List<StateRef>): Map<StateRef, TransactionState<ContractState>?> - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/fetch-transactions.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/fetch-transactions.html deleted file mode 100644 index 8d4862767b..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/fetch-transactions.html +++ /dev/null @@ -1,21 +0,0 @@ - - - -APIServer.fetchTransactions - corda - - - -corda / net.corda.node.api / APIServer / fetchTransactions
      -
      -

      fetchTransactions

      - -abstract fun fetchTransactions(txs: List<SecureHash>): Map<SecureHash, SignedTransaction?> -

      Query for immutable transactions (results can be cached indefinitely by their id/hash).

      -

      Parameters

      - -

      -txs - The hashes (from StateRef.txhash returned from queryStates) you would like full transactions for. -

      Return
      -null values indicate missing transactions from the requested list.

      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/generate-transaction-signature.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/generate-transaction-signature.html deleted file mode 100644 index df92295edc..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/generate-transaction-signature.html +++ /dev/null @@ -1,15 +0,0 @@ - - - -APIServer.generateTransactionSignature - corda - - - -corda / net.corda.node.api / APIServer / generateTransactionSignature
      -
      -

      generateTransactionSignature

      - -abstract fun generateTransactionSignature(tx: SerializedBytes<WireTransaction>): WithKey -

      Generate a signature for this transaction signed by us.

      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/index.html deleted file mode 100644 index 763f984ec4..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/index.html +++ /dev/null @@ -1,133 +0,0 @@ - - - -APIServer - corda - - - -corda / net.corda.node.api / APIServer
      -
      -

      APIServer

      -@Path("") interface APIServer -

      Top level interface to external interaction with the distributed ledger.

      -

      Wherever a list is returned by a fetchXXX method that corresponds with an input list, that output list will have optional elements -where a null indicates "missing" and the elements returned will be in the order corresponding with the input list.

      -

      Functions

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -buildTransaction -abstract fun buildTransaction(type: ContractDefRef, steps: List<TransactionBuildStep>): SerializedBytes<WireTransaction> -

      TransactionBuildSteps would be invocations of contract.generateXXX() methods that all share a common TransactionBuilder -and a common contract type (e.g. Cash or CommercialPaper) -which would automatically be passed as the first argument (we'd need that to be a criteria/pattern of the generateXXX methods).

      -
      -commitTransaction -abstract fun commitTransaction(tx: SerializedBytes<WireTransaction>, signatures: List<WithKey>): SecureHash -

      Attempt to commit transaction (returned from build transaction) with the necessary signatures for that to be -successful, otherwise exception is thrown.

      -
      -fetchFlowsRequiringAttention -abstract fun fetchFlowsRequiringAttention(query: StatesQuery): Map<StateRef, FlowRequiringAttention> -

      Fetch flows that require a response to some prompt/question by a human (on the "bank" side).

      -
      -fetchStates -abstract fun fetchStates(states: List<StateRef>): Map<StateRef, TransactionState<ContractState>?>
      -fetchTransactions -abstract fun fetchTransactions(txs: List<SecureHash>): Map<SecureHash, SignedTransaction?> -

      Query for immutable transactions (results can be cached indefinitely by their id/hash).

      -
      -generateTransactionSignature -abstract fun generateTransactionSignature(tx: SerializedBytes<WireTransaction>): WithKey -

      Generate a signature for this transaction signed by us.

      -
      -info -abstract fun info(): NodeInfo -

      Report this node's configuration and identities. -Currently tunnels the NodeInfo as an encoding of the Kryo serialised form. -TODO this functionality should be available via the RPC

      -
      -invokeFlowSync -abstract fun invokeFlowSync(type: FlowRef, args: Map<String, Any?>): Any? -

      This method would not return until the flow is finished (hence the "Sync").

      -
      -provideFlowResponse -abstract fun provideFlowResponse(flow: FlowInstanceRef, choice: SecureHash, args: Map<String, Any?>): Unit -

      Provide the response that a flow is waiting for.

      -
      -queryStates -abstract fun queryStates(query: StatesQuery): List<StateRef> -

      Query your "local" states (containing only outputs involving you) and return the hashes & indexes associated with them -to probably be later inflated by fetchLedgerTransactions() or fetchStates() although because immutable you can cache them -to avoid calling fetchLedgerTransactions() many times.

      -
      -serverTime -abstract fun serverTime(): LocalDateTime -

      Report current UTC time as understood by the platform.

      -
      -status -abstract fun status(): Response -

      Report whether this node is started up or not.

      -
      -

      Inheritors

      - - - - - - - -
      -APIServerImpl -class APIServerImpl : APIServer
      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/invoke-flow-sync.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/invoke-flow-sync.html deleted file mode 100644 index 6ebc6b378f..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/invoke-flow-sync.html +++ /dev/null @@ -1,18 +0,0 @@ - - - -APIServer.invokeFlowSync - corda - - - -corda / net.corda.node.api / APIServer / invokeFlowSync
      -
      -

      invokeFlowSync

      - -abstract fun invokeFlowSync(type: FlowRef, args: Map<String, Any?>): Any? -

      This method would not return until the flow is finished (hence the "Sync").

      -

      Longer term we'd add an Async version that returns some kind of FlowInvocationRef that could be queried and -would appear on some kind of event message that is broadcast informing of progress.

      -

      Will throw exception if flow fails.

      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/provide-flow-response.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/provide-flow-response.html deleted file mode 100644 index 578778d197..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/provide-flow-response.html +++ /dev/null @@ -1,25 +0,0 @@ - - - -APIServer.provideFlowResponse - corda - - - -corda / net.corda.node.api / APIServer / provideFlowResponse
      -
      -

      provideFlowResponse

      - -abstract fun provideFlowResponse(flow: FlowInstanceRef, choice: SecureHash, args: Map<String, Any?>): Unit -

      Provide the response that a flow is waiting for.

      -

      Parameters

      - -

      -flow - Should refer to a previously supplied FlowRequiringAttention. -

      -stepId - Which step of the flow are we referring too. -

      -choice - Should be one of the choices presented in the FlowRequiringAttention. -

      -args - Any arguments required. - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/query-states.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/query-states.html deleted file mode 100644 index 21725d46f9..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/query-states.html +++ /dev/null @@ -1,23 +0,0 @@ - - - -APIServer.queryStates - corda - - - -corda / net.corda.node.api / APIServer / queryStates
      -
      -

      queryStates

      - -abstract fun queryStates(query: StatesQuery): List<StateRef> -

      Query your "local" states (containing only outputs involving you) and return the hashes & indexes associated with them -to probably be later inflated by fetchLedgerTransactions() or fetchStates() although because immutable you can cache them -to avoid calling fetchLedgerTransactions() many times.

      -

      Parameters

      - -

      -query - Some "where clause" like expression. -

      Return
      -Zero or more matching States.

      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-contract-class-ref/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-contract-class-ref/-init-.html deleted file mode 100644 index 62890589b5..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-contract-class-ref/-init-.html +++ /dev/null @@ -1,13 +0,0 @@ - - - -ContractClassRef.<init> - corda - - - -corda / net.corda.node.api / ContractClassRef / <init>
      -
      -

      <init>

      -ContractClassRef(className: String) - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-contract-class-ref/class-name.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-contract-class-ref/class-name.html deleted file mode 100644 index 7999bd5dd4..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-contract-class-ref/class-name.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -ContractClassRef.className - corda - - - -corda / net.corda.node.api / ContractClassRef / className
      -
      -

      className

      - -val className: String - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-contract-class-ref/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-contract-class-ref/index.html deleted file mode 100644 index d0a47a6c07..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-contract-class-ref/index.html +++ /dev/null @@ -1,35 +0,0 @@ - - - -ContractClassRef - corda - - - -corda / net.corda.node.api / ContractClassRef
      -
      -

      ContractClassRef

      -data class ContractClassRef : ContractDefRef -

      Constructors

      - - - - - - - -
      -<init> -ContractClassRef(className: String)
      -

      Properties

      - - - - - - - -
      -className -val className: String
      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-contract-def-ref.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-contract-def-ref.html deleted file mode 100644 index 60124f3129..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-contract-def-ref.html +++ /dev/null @@ -1,31 +0,0 @@ - - - -ContractDefRef - corda - - - -corda / net.corda.node.api / ContractDefRef
      -
      -

      ContractDefRef

      -interface ContractDefRef -

      Encapsulates the contract type. e.g. Cash or CommercialPaper etc.

      -

      Inheritors

      - - - - - - - - - - - -
      -ContractClassRef -data class ContractClassRef : ContractDefRef
      -ContractLedgerRef -data class ContractLedgerRef : ContractDefRef
      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-contract-ledger-ref/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-contract-ledger-ref/-init-.html deleted file mode 100644 index 8390ba24f1..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-contract-ledger-ref/-init-.html +++ /dev/null @@ -1,13 +0,0 @@ - - - -ContractLedgerRef.<init> - corda - - - -corda / net.corda.node.api / ContractLedgerRef / <init>
      -
      -

      <init>

      -ContractLedgerRef(hash: SecureHash) - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-contract-ledger-ref/hash.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-contract-ledger-ref/hash.html deleted file mode 100644 index 3517fed76e..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-contract-ledger-ref/hash.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -ContractLedgerRef.hash - corda - - - -corda / net.corda.node.api / ContractLedgerRef / hash
      -
      -

      hash

      - -val hash: SecureHash - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-contract-ledger-ref/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-contract-ledger-ref/index.html deleted file mode 100644 index 0a96c336a3..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-contract-ledger-ref/index.html +++ /dev/null @@ -1,35 +0,0 @@ - - - -ContractLedgerRef - corda - - - -corda / net.corda.node.api / ContractLedgerRef
      -
      -

      ContractLedgerRef

      -data class ContractLedgerRef : ContractDefRef -

      Constructors

      - - - - - - - -
      -<init> -ContractLedgerRef(hash: SecureHash)
      -

      Properties

      - - - - - - - -
      -hash -val hash: SecureHash
      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-class-ref/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-class-ref/-init-.html deleted file mode 100644 index b37f56cf53..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-class-ref/-init-.html +++ /dev/null @@ -1,13 +0,0 @@ - - - -FlowClassRef.<init> - corda - - - -corda / net.corda.node.api / FlowClassRef / <init>
      -
      -

      <init>

      -FlowClassRef(className: String) - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-class-ref/class-name.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-class-ref/class-name.html deleted file mode 100644 index b250aa8074..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-class-ref/class-name.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -FlowClassRef.className - corda - - - -corda / net.corda.node.api / FlowClassRef / className
      -
      -

      className

      - -val className: String - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-class-ref/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-class-ref/index.html deleted file mode 100644 index 65b69c9518..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-class-ref/index.html +++ /dev/null @@ -1,35 +0,0 @@ - - - -FlowClassRef - corda - - - -corda / net.corda.node.api / FlowClassRef
      -
      -

      FlowClassRef

      -data class FlowClassRef : FlowRef -

      Constructors

      - - - - - - - -
      -<init> -FlowClassRef(className: String)
      -

      Properties

      - - - - - - - -
      -className -val className: String
      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-instance-ref/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-instance-ref/-init-.html deleted file mode 100644 index 3db243f692..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-instance-ref/-init-.html +++ /dev/null @@ -1,13 +0,0 @@ - - - -FlowInstanceRef.<init> - corda - - - -corda / net.corda.node.api / FlowInstanceRef / <init>
      -
      -

      <init>

      -FlowInstanceRef(flowInstance: SecureHash, flowClass: FlowClassRef, flowStepId: String) - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-instance-ref/flow-class.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-instance-ref/flow-class.html deleted file mode 100644 index 1eb85f9706..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-instance-ref/flow-class.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -FlowInstanceRef.flowClass - corda - - - -corda / net.corda.node.api / FlowInstanceRef / flowClass
      -
      -

      flowClass

      - -val flowClass: FlowClassRef - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-instance-ref/flow-instance.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-instance-ref/flow-instance.html deleted file mode 100644 index 5ae11270ba..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-instance-ref/flow-instance.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -FlowInstanceRef.flowInstance - corda - - - -corda / net.corda.node.api / FlowInstanceRef / flowInstance
      -
      -

      flowInstance

      - -val flowInstance: SecureHash - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-instance-ref/flow-step-id.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-instance-ref/flow-step-id.html deleted file mode 100644 index 50da86b263..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-instance-ref/flow-step-id.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -FlowInstanceRef.flowStepId - corda - - - -corda / net.corda.node.api / FlowInstanceRef / flowStepId
      -
      -

      flowStepId

      - -val flowStepId: String - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-instance-ref/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-instance-ref/index.html deleted file mode 100644 index 78e95483b5..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-instance-ref/index.html +++ /dev/null @@ -1,47 +0,0 @@ - - - -FlowInstanceRef - corda - - - -corda / net.corda.node.api / FlowInstanceRef
      -
      -

      FlowInstanceRef

      -data class FlowInstanceRef -

      Constructors

      - - - - - - - -
      -<init> -FlowInstanceRef(flowInstance: SecureHash, flowClass: FlowClassRef, flowStepId: String)
      -

      Properties

      - - - - - - - - - - - - - - - -
      -flowClass -val flowClass: FlowClassRef
      -flowInstance -val flowInstance: SecureHash
      -flowStepId -val flowStepId: String
      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-ref.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-ref.html deleted file mode 100644 index 250a9938e2..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-ref.html +++ /dev/null @@ -1,25 +0,0 @@ - - - -FlowRef - corda - - - -corda / net.corda.node.api / FlowRef
      -
      -

      FlowRef

      -interface FlowRef -

      Encapsulates the flow to be instantiated. e.g. TwoPartyTradeFlow.Buyer.

      -

      Inheritors

      - - - - - - - -
      -FlowClassRef -data class FlowClassRef : FlowRef
      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-requiring-attention/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-requiring-attention/-init-.html deleted file mode 100644 index 3da6e25719..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-requiring-attention/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -FlowRequiringAttention.<init> - corda - - - -corda / net.corda.node.api / FlowRequiringAttention / <init>
      -
      -

      <init>

      -FlowRequiringAttention(ref: FlowInstanceRef, prompt: String, choiceIdsToMessages: Map<SecureHash, String>, dueBy: Instant) -

      Thinking that Instant is OK for short lived flow deadlines.

      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-requiring-attention/choice-ids-to-messages.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-requiring-attention/choice-ids-to-messages.html deleted file mode 100644 index 837a51f817..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-requiring-attention/choice-ids-to-messages.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -FlowRequiringAttention.choiceIdsToMessages - corda - - - -corda / net.corda.node.api / FlowRequiringAttention / choiceIdsToMessages
      -
      -

      choiceIdsToMessages

      - -val choiceIdsToMessages: Map<SecureHash, String> - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-requiring-attention/due-by.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-requiring-attention/due-by.html deleted file mode 100644 index 6164de2bf3..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-requiring-attention/due-by.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -FlowRequiringAttention.dueBy - corda - - - -corda / net.corda.node.api / FlowRequiringAttention / dueBy
      -
      -

      dueBy

      - -val dueBy: Instant - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-requiring-attention/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-requiring-attention/index.html deleted file mode 100644 index 4ee782a460..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-requiring-attention/index.html +++ /dev/null @@ -1,56 +0,0 @@ - - - -FlowRequiringAttention - corda - - - -corda / net.corda.node.api / FlowRequiringAttention
      -
      -

      FlowRequiringAttention

      -data class FlowRequiringAttention -

      Thinking that Instant is OK for short lived flow deadlines.

      -

      Constructors

      - - - - - - - -
      -<init> -FlowRequiringAttention(ref: FlowInstanceRef, prompt: String, choiceIdsToMessages: Map<SecureHash, String>, dueBy: Instant) -

      Thinking that Instant is OK for short lived flow deadlines.

      -
      -

      Properties

      - - - - - - - - - - - - - - - - - - - -
      -choiceIdsToMessages -val choiceIdsToMessages: Map<SecureHash, String>
      -dueBy -val dueBy: Instant
      -prompt -val prompt: String
      -ref -val ref: FlowInstanceRef
      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-requiring-attention/prompt.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-requiring-attention/prompt.html deleted file mode 100644 index 4d715333c0..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-requiring-attention/prompt.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -FlowRequiringAttention.prompt - corda - - - -corda / net.corda.node.api / FlowRequiringAttention / prompt
      -
      -

      prompt

      - -val prompt: String - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-requiring-attention/ref.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-requiring-attention/ref.html deleted file mode 100644 index ec5d7ae765..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-flow-requiring-attention/ref.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -FlowRequiringAttention.ref - corda - - - -corda / net.corda.node.api / FlowRequiringAttention / ref
      -
      -

      ref

      - -val ref: FlowInstanceRef - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-states-query/-criteria/-deal/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-states-query/-criteria/-deal/-init-.html deleted file mode 100644 index 2e16179c3d..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-states-query/-criteria/-deal/-init-.html +++ /dev/null @@ -1,13 +0,0 @@ - - - -StatesQuery.Criteria.Deal.<init> - corda - - - -corda / net.corda.node.api / StatesQuery / Criteria / Deal / <init>
      -
      -

      <init>

      -Deal(ref: String) - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-states-query/-selection/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-states-query/-selection/-init-.html deleted file mode 100644 index f100f3d524..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-states-query/-selection/-init-.html +++ /dev/null @@ -1,13 +0,0 @@ - - - -StatesQuery.Selection.<init> - corda - - - -corda / net.corda.node.api / StatesQuery / Selection / <init>
      -
      -

      <init>

      -Selection(criteria: Criteria) - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-states-query/select.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-states-query/select.html deleted file mode 100644 index ea78efd856..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-states-query/select.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -StatesQuery.select - corda - - - -corda / net.corda.node.api / StatesQuery / select
      -
      -

      select

      - -fun select(criteria: Criteria): Selection - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-transaction-build-step/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-transaction-build-step/-init-.html deleted file mode 100644 index b457cd2cdf..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-transaction-build-step/-init-.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -TransactionBuildStep.<init> - corda - - - -corda / net.corda.node.api / TransactionBuildStep / <init>
      -
      -

      <init>

      -TransactionBuildStep(generateMethodName: String, args: Map<String, Any?>) -

      Encapsulate a generateXXX method call on a contract.

      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-transaction-build-step/args.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-transaction-build-step/args.html deleted file mode 100644 index 7a3c6688d0..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-transaction-build-step/args.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -TransactionBuildStep.args - corda - - - -corda / net.corda.node.api / TransactionBuildStep / args
      -
      -

      args

      - -val args: Map<String, Any?> - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-transaction-build-step/generate-method-name.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-transaction-build-step/generate-method-name.html deleted file mode 100644 index 12d8c5c833..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-transaction-build-step/generate-method-name.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -TransactionBuildStep.generateMethodName - corda - - - -corda / net.corda.node.api / TransactionBuildStep / generateMethodName
      -
      -

      generateMethodName

      - -val generateMethodName: String - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-transaction-build-step/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/-transaction-build-step/index.html deleted file mode 100644 index a114bc553d..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-transaction-build-step/index.html +++ /dev/null @@ -1,44 +0,0 @@ - - - -TransactionBuildStep - corda - - - -corda / net.corda.node.api / TransactionBuildStep
      -
      -

      TransactionBuildStep

      -data class TransactionBuildStep -

      Encapsulate a generateXXX method call on a contract.

      -

      Constructors

      - - - - - - - -
      -<init> -TransactionBuildStep(generateMethodName: String, args: Map<String, Any?>) -

      Encapsulate a generateXXX method call on a contract.

      -
      -

      Properties

      - - - - - - - - - - - -
      -args -val args: Map<String, Any?>
      -generateMethodName -val generateMethodName: String
      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.api/index.html deleted file mode 100644 index 75a22d986b..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/index.html +++ /dev/null @@ -1,89 +0,0 @@ - - - -net.corda.node.api - corda - - - -corda / net.corda.node.api
      -
      -

      Package net.corda.node.api

      -

      Types

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -APIServer -interface APIServer -

      Top level interface to external interaction with the distributed ledger.

      -
      -ContractClassRef -data class ContractClassRef : ContractDefRef
      -ContractDefRef -interface ContractDefRef -

      Encapsulates the contract type. e.g. Cash or CommercialPaper etc.

      -
      -ContractLedgerRef -data class ContractLedgerRef : ContractDefRef
      -FlowClassRef -data class FlowClassRef : FlowRef
      -FlowInstanceRef -data class FlowInstanceRef
      -FlowRef -interface FlowRef -

      Encapsulates the flow to be instantiated. e.g. TwoPartyTradeFlow.Buyer.

      -
      -FlowRequiringAttention -data class FlowRequiringAttention -

      Thinking that Instant is OK for short lived flow deadlines.

      -
      -StatesQuery -interface StatesQuery -

      Extremely rudimentary query language which should most likely be replaced with a product.

      -
      -TransactionBuildStep -data class TransactionBuildStep -

      Encapsulate a generateXXX method call on a contract.

      -
      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.driver/-driver-d-s-l-exposed-interface/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.driver/-driver-d-s-l-exposed-interface/index.html index 5ea92dfbcb..bf549f8b33 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.driver/-driver-d-s-l-exposed-interface/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.driver/-driver-d-s-l-exposed-interface/index.html @@ -31,6 +31,14 @@ +startWebserver + +abstract fun startWebserver(handle: NodeHandle): ListenableFuture<HostAndPort> +

      Starts a web server for a node

      + + + + waitForAllNodesToFinish abstract fun waitForAllNodesToFinish(): Unit diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.driver/-driver-d-s-l-exposed-interface/start-webserver.html b/docs/build/html/api/kotlin/corda/net.corda.node.driver/-driver-d-s-l-exposed-interface/start-webserver.html new file mode 100644 index 0000000000..51a5b802a8 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.driver/-driver-d-s-l-exposed-interface/start-webserver.html @@ -0,0 +1,19 @@ + + + +DriverDSLExposedInterface.startWebserver - corda + + + +corda / net.corda.node.driver / DriverDSLExposedInterface / startWebserver
      +
      +

      startWebserver

      + +abstract fun startWebserver(handle: NodeHandle): ListenableFuture<HostAndPort> +

      Starts a web server for a node

      +

      Parameters

      + +

      +handle - The handle for the node that this webserver connects to via RPC. + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.driver/-driver-d-s-l-internal-interface/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.driver/-driver-d-s-l-internal-interface/index.html index 738855d73b..405be092c5 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.driver/-driver-d-s-l-internal-interface/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.driver/-driver-d-s-l-internal-interface/index.html @@ -47,6 +47,14 @@ +startWebserver + +abstract fun startWebserver(handle: NodeHandle): ListenableFuture<HostAndPort> +

      Starts a web server for a node

      + + + + waitForAllNodesToFinish abstract fun waitForAllNodesToFinish(): Unit diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.driver/-driver-d-s-l/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.driver/-driver-d-s-l/index.html index 56f588008d..2708bdc4dd 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.driver/-driver-d-s-l/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.driver/-driver-d-s-l/index.html @@ -105,6 +105,14 @@ +startWebserver + +open fun startWebserver(handle: NodeHandle): ListenableFuture<HostAndPort> +

      Starts a web server for a node

      + + + + waitForAllNodesToFinish open fun waitForAllNodesToFinish(): Unit diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.driver/-driver-d-s-l/start-webserver.html b/docs/build/html/api/kotlin/corda/net.corda.node.driver/-driver-d-s-l/start-webserver.html new file mode 100644 index 0000000000..81bce7e17f --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.driver/-driver-d-s-l/start-webserver.html @@ -0,0 +1,20 @@ + + + +DriverDSL.startWebserver - corda + + + +corda / net.corda.node.driver / DriverDSL / startWebserver
      +
      +

      startWebserver

      + +open fun startWebserver(handle: NodeHandle): ListenableFuture<HostAndPort> +

      Overrides DriverDSLExposedInterface.startWebserver

      +

      Starts a web server for a node

      +

      Parameters

      + +

      +handle - The handle for the node that this webserver connects to via RPC. + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.driver/-node-handle/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.node.driver/-node-handle/-init-.html index a106457c31..6993f7af9e 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.driver/-node-handle/-init-.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.driver/-node-handle/-init-.html @@ -8,6 +8,6 @@ corda / net.corda.node.driver / NodeHandle / <init>

      <init>

      -NodeHandle(nodeInfo: NodeInfo, configuration: FullNodeConfiguration, process: Process) +NodeHandle(nodeInfo: NodeInfo, rpc: CordaRPCOps, configuration: FullNodeConfiguration, process: Process) diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.driver/-node-handle/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.driver/-node-handle/index.html index c362848880..570943e644 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.driver/-node-handle/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.driver/-node-handle/index.html @@ -16,7 +16,7 @@ <init> -NodeHandle(nodeInfo: NodeInfo, configuration: FullNodeConfiguration, process: Process) +NodeHandle(nodeInfo: NodeInfo, rpc: CordaRPCOps, configuration: FullNodeConfiguration, process: Process) @@ -41,6 +41,12 @@ val process: Process + + +rpc + +val rpc: CordaRPCOps +

      Functions

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.driver/-node-handle/rpc.html b/docs/build/html/api/kotlin/corda/net.corda.node.driver/-node-handle/rpc.html new file mode 100644 index 0000000000..097aa13cde --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.driver/-node-handle/rpc.html @@ -0,0 +1,14 @@ + + + +NodeHandle.rpc - corda + + + +corda / net.corda.node.driver / NodeHandle / rpc
      +
      +

      rpc

      + +val rpc: CordaRPCOps + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/-init-.html deleted file mode 100644 index 7efcb0d527..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/-init-.html +++ /dev/null @@ -1,13 +0,0 @@ - - - -APIServerImpl.<init> - corda - - - -corda / net.corda.node.internal / APIServerImpl / <init>
      -
      -

      <init>

      -APIServerImpl(node: AbstractNode) - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/build-transaction.html b/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/build-transaction.html deleted file mode 100644 index 077dd4cbb8..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/build-transaction.html +++ /dev/null @@ -1,18 +0,0 @@ - - - -APIServerImpl.buildTransaction - corda - - - -corda / net.corda.node.internal / APIServerImpl / buildTransaction
      -
      -

      buildTransaction

      - -fun buildTransaction(type: ContractDefRef, steps: List<TransactionBuildStep>): SerializedBytes<WireTransaction> -

      Overrides APIServer.buildTransaction

      -

      TransactionBuildSteps would be invocations of contract.generateXXX() methods that all share a common TransactionBuilder -and a common contract type (e.g. Cash or CommercialPaper) -which would automatically be passed as the first argument (we'd need that to be a criteria/pattern of the generateXXX methods).

      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/commit-transaction.html b/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/commit-transaction.html deleted file mode 100644 index c49efd749f..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/commit-transaction.html +++ /dev/null @@ -1,17 +0,0 @@ - - - -APIServerImpl.commitTransaction - corda - - - -corda / net.corda.node.internal / APIServerImpl / commitTransaction
      -
      -

      commitTransaction

      - -fun commitTransaction(tx: SerializedBytes<WireTransaction>, signatures: List<WithKey>): SecureHash -

      Overrides APIServer.commitTransaction

      -

      Attempt to commit transaction (returned from build transaction) with the necessary signatures for that to be -successful, otherwise exception is thrown.

      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/fetch-flows-requiring-attention.html b/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/fetch-flows-requiring-attention.html deleted file mode 100644 index 538092e50f..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/fetch-flows-requiring-attention.html +++ /dev/null @@ -1,16 +0,0 @@ - - - -APIServerImpl.fetchFlowsRequiringAttention - corda - - - -corda / net.corda.node.internal / APIServerImpl / fetchFlowsRequiringAttention
      -
      -

      fetchFlowsRequiringAttention

      - -fun fetchFlowsRequiringAttention(query: StatesQuery): Map<StateRef, FlowRequiringAttention> -

      Overrides APIServer.fetchFlowsRequiringAttention

      -

      Fetch flows that require a response to some prompt/question by a human (on the "bank" side).

      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/fetch-states.html b/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/fetch-states.html deleted file mode 100644 index 2185d37014..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/fetch-states.html +++ /dev/null @@ -1,15 +0,0 @@ - - - -APIServerImpl.fetchStates - corda - - - -corda / net.corda.node.internal / APIServerImpl / fetchStates
      -
      -

      fetchStates

      - -fun fetchStates(states: List<StateRef>): Map<StateRef, TransactionState<ContractState>?> -

      Overrides APIServer.fetchStates

      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/fetch-transactions.html b/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/fetch-transactions.html deleted file mode 100644 index 83db2d92ca..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/fetch-transactions.html +++ /dev/null @@ -1,22 +0,0 @@ - - - -APIServerImpl.fetchTransactions - corda - - - -corda / net.corda.node.internal / APIServerImpl / fetchTransactions
      -
      -

      fetchTransactions

      - -fun fetchTransactions(txs: List<SecureHash>): Map<SecureHash, SignedTransaction?> -

      Overrides APIServer.fetchTransactions

      -

      Query for immutable transactions (results can be cached indefinitely by their id/hash).

      -

      Parameters

      - -

      -txs - The hashes (from StateRef.txhash returned from queryStates) you would like full transactions for. -

      Return
      -null values indicate missing transactions from the requested list.

      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/generate-transaction-signature.html b/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/generate-transaction-signature.html deleted file mode 100644 index 1b70331583..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/generate-transaction-signature.html +++ /dev/null @@ -1,16 +0,0 @@ - - - -APIServerImpl.generateTransactionSignature - corda - - - -corda / net.corda.node.internal / APIServerImpl / generateTransactionSignature
      -
      -

      generateTransactionSignature

      - -fun generateTransactionSignature(tx: SerializedBytes<WireTransaction>): WithKey -

      Overrides APIServer.generateTransactionSignature

      -

      Generate a signature for this transaction signed by us.

      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/index.html deleted file mode 100644 index 1933ba5a96..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/index.html +++ /dev/null @@ -1,141 +0,0 @@ - - - -APIServerImpl - corda - - - -corda / net.corda.node.internal / APIServerImpl
      -
      -

      APIServerImpl

      -class APIServerImpl : APIServer -

      Constructors

      - - - - - - - -
      -<init> -APIServerImpl(node: AbstractNode)
      -

      Properties

      - - - - - - - -
      -node -val node: AbstractNode
      -

      Functions

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -buildTransaction -fun buildTransaction(type: ContractDefRef, steps: List<TransactionBuildStep>): SerializedBytes<WireTransaction> -

      TransactionBuildSteps would be invocations of contract.generateXXX() methods that all share a common TransactionBuilder -and a common contract type (e.g. Cash or CommercialPaper) -which would automatically be passed as the first argument (we'd need that to be a criteria/pattern of the generateXXX methods).

      -
      -commitTransaction -fun commitTransaction(tx: SerializedBytes<WireTransaction>, signatures: List<WithKey>): SecureHash -

      Attempt to commit transaction (returned from build transaction) with the necessary signatures for that to be -successful, otherwise exception is thrown.

      -
      -fetchFlowsRequiringAttention -fun fetchFlowsRequiringAttention(query: StatesQuery): Map<StateRef, FlowRequiringAttention> -

      Fetch flows that require a response to some prompt/question by a human (on the "bank" side).

      -
      -fetchStates -fun fetchStates(states: List<StateRef>): Map<StateRef, TransactionState<ContractState>?>
      -fetchTransactions -fun fetchTransactions(txs: List<SecureHash>): Map<SecureHash, SignedTransaction?> -

      Query for immutable transactions (results can be cached indefinitely by their id/hash).

      -
      -generateTransactionSignature -fun generateTransactionSignature(tx: SerializedBytes<WireTransaction>): WithKey -

      Generate a signature for this transaction signed by us.

      -
      -info -fun info(): NodeInfo -

      Report this node's configuration and identities. -Currently tunnels the NodeInfo as an encoding of the Kryo serialised form. -TODO this functionality should be available via the RPC

      -
      -invokeFlowSync -fun invokeFlowSync(type: FlowRef, args: Map<String, Any?>): Any? -

      This method would not return until the flow is finished (hence the "Sync").

      -
      -provideFlowResponse -fun provideFlowResponse(flow: FlowInstanceRef, choice: SecureHash, args: Map<String, Any?>): Unit -

      Provide the response that a flow is waiting for.

      -
      -queryStates -fun queryStates(query: StatesQuery): List<StateRef> -

      Query your "local" states (containing only outputs involving you) and return the hashes & indexes associated with them -to probably be later inflated by fetchLedgerTransactions() or fetchStates() although because immutable you can cache them -to avoid calling fetchLedgerTransactions() many times.

      -
      -serverTime -fun serverTime(): LocalDateTime -

      Report current UTC time as understood by the platform.

      -
      -status -fun status(): Response -

      Report whether this node is started up or not.

      -
      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/invoke-flow-sync.html b/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/invoke-flow-sync.html deleted file mode 100644 index b000d51435..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/invoke-flow-sync.html +++ /dev/null @@ -1,19 +0,0 @@ - - - -APIServerImpl.invokeFlowSync - corda - - - -corda / net.corda.node.internal / APIServerImpl / invokeFlowSync
      -
      -

      invokeFlowSync

      - -fun invokeFlowSync(type: FlowRef, args: Map<String, Any?>): Any? -

      Overrides APIServer.invokeFlowSync

      -

      This method would not return until the flow is finished (hence the "Sync").

      -

      Longer term we'd add an Async version that returns some kind of FlowInvocationRef that could be queried and -would appear on some kind of event message that is broadcast informing of progress.

      -

      Will throw exception if flow fails.

      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/node.html b/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/node.html deleted file mode 100644 index 8ab67a5ca7..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/node.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -APIServerImpl.node - corda - - - -corda / net.corda.node.internal / APIServerImpl / node
      -
      -

      node

      - -val node: AbstractNode - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/provide-flow-response.html b/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/provide-flow-response.html deleted file mode 100644 index cb3a6f8755..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/provide-flow-response.html +++ /dev/null @@ -1,26 +0,0 @@ - - - -APIServerImpl.provideFlowResponse - corda - - - -corda / net.corda.node.internal / APIServerImpl / provideFlowResponse
      -
      -

      provideFlowResponse

      - -fun provideFlowResponse(flow: FlowInstanceRef, choice: SecureHash, args: Map<String, Any?>): Unit -

      Overrides APIServer.provideFlowResponse

      -

      Provide the response that a flow is waiting for.

      -

      Parameters

      - -

      -flow - Should refer to a previously supplied FlowRequiringAttention. -

      -stepId - Which step of the flow are we referring too. -

      -choice - Should be one of the choices presented in the FlowRequiringAttention. -

      -args - Any arguments required. - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/query-states.html b/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/query-states.html deleted file mode 100644 index e76df7186a..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/query-states.html +++ /dev/null @@ -1,24 +0,0 @@ - - - -APIServerImpl.queryStates - corda - - - -corda / net.corda.node.internal / APIServerImpl / queryStates
      -
      -

      queryStates

      - -fun queryStates(query: StatesQuery): List<StateRef> -

      Overrides APIServer.queryStates

      -

      Query your "local" states (containing only outputs involving you) and return the hashes & indexes associated with them -to probably be later inflated by fetchLedgerTransactions() or fetchStates() although because immutable you can cache them -to avoid calling fetchLedgerTransactions() many times.

      -

      Parameters

      - -

      -query - Some "where clause" like expression. -

      Return
      -Zero or more matching States.

      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-abstract-node/_services-that-accept-uploads.html b/docs/build/html/api/kotlin/corda/net.corda.node.internal/-abstract-node/_services-that-accept-uploads.html deleted file mode 100644 index 7edbca6e4e..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-abstract-node/_services-that-accept-uploads.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -AbstractNode._servicesThatAcceptUploads - corda - - - -corda / net.corda.node.internal / AbstractNode / _servicesThatAcceptUploads
      -
      -

      _servicesThatAcceptUploads

      - -protected val _servicesThatAcceptUploads: ArrayList<AcceptsFileUpload> - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-abstract-node/api.html b/docs/build/html/api/kotlin/corda/net.corda.node.internal/-abstract-node/api.html deleted file mode 100644 index 433b94f30d..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-abstract-node/api.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -AbstractNode.api - corda - - - -corda / net.corda.node.internal / AbstractNode / api
      -
      -

      api

      - -lateinit var api: APIServer - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-abstract-node/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.internal/-abstract-node/index.html index 2e02e98011..48eaf1576c 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-abstract-node/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.internal/-abstract-node/index.html @@ -49,24 +49,12 @@ I/O), or a mock implementation suitable for unit test environments.

      -_servicesThatAcceptUploads - -val _servicesThatAcceptUploads: ArrayList<AcceptsFileUpload> - - - advertisedServices val advertisedServices: Set<ServiceInfo> -api - -lateinit var api: APIServer - - - busyNodeLatch val busyNodeLatch: ReusableLatch @@ -235,12 +223,6 @@ I/O), or a mock implementation suitable for unit test environments.

      -servicesThatAcceptUploads - -val servicesThatAcceptUploads: List<AcceptsFileUpload> - - - smm lateinit var smm: StateMachineManager @@ -372,7 +354,7 @@ I/O), or a mock implementation suitable for unit test environments.

      makeServiceEntries -fun makeServiceEntries(): List<ServiceEntry> +open fun makeServiceEntries(): List<ServiceEntry>

      A service entry contains the advertised ServiceInfo along with the service identity. The identity name is taken from the configuration or, if non specified, generated by combining the node's legal name and the service id.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-abstract-node/make-service-entries.html b/docs/build/html/api/kotlin/corda/net.corda.node.internal/-abstract-node/make-service-entries.html index b3be8cd609..af72e156ed 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-abstract-node/make-service-entries.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.internal/-abstract-node/make-service-entries.html @@ -9,7 +9,7 @@

      makeServiceEntries

      -protected fun makeServiceEntries(): List<ServiceEntry> +protected open fun makeServiceEntries(): List<ServiceEntry>

      A service entry contains the advertised ServiceInfo along with the service identity. The identity name is taken from the configuration or, if non specified, generated by combining the node's legal name and the service id.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-abstract-node/services-that-accept-uploads.html b/docs/build/html/api/kotlin/corda/net.corda.node.internal/-abstract-node/services-that-accept-uploads.html deleted file mode 100644 index cb318b35b8..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-abstract-node/services-that-accept-uploads.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -AbstractNode.servicesThatAcceptUploads - corda - - - -corda / net.corda.node.internal / AbstractNode / servicesThatAcceptUploads
      -
      -

      servicesThatAcceptUploads

      - -val servicesThatAcceptUploads: List<AcceptsFileUpload> - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-corda-r-p-c-ops-impl/current-node-time.html b/docs/build/html/api/kotlin/corda/net.corda.node.internal/-corda-r-p-c-ops-impl/current-node-time.html index a3ae838133..6b7c15a9bc 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-corda-r-p-c-ops-impl/current-node-time.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.internal/-corda-r-p-c-ops-impl/current-node-time.html @@ -11,6 +11,6 @@ fun currentNodeTime(): Instant

      Overrides CordaRPCOps.currentNodeTime

      -

      Returns the node-local current time.

      +

      Returns the node's current time.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-corda-r-p-c-ops-impl/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.internal/-corda-r-p-c-ops-impl/index.html index 4f6eab4669..6bd72af7bf 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-corda-r-p-c-ops-impl/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.internal/-corda-r-p-c-ops-impl/index.html @@ -78,7 +78,7 @@ thread (i.e. serially). Arguments are serialised and deserialised automatically. currentNodeTime fun currentNodeTime(): Instant -

      Returns the node-local current time.

      +

      Returns the node's current time.

      @@ -155,6 +155,12 @@ such mappings as well.

      +uploadFile + +fun uploadFile(dataType: String, name: String?, file: InputStream): String + + + vaultAndUpdates fun vaultAndUpdates(): Pair<List<StateAndRef<ContractState>>, Observable<Update>> @@ -169,6 +175,15 @@ such mappings as well.

      Returns a pair of all recorded transactions and an observable of future recorded ones.

      + + +waitUntilRegisteredWithNetworkMap + +fun waitUntilRegisteredWithNetworkMap(): ListenableFuture<Unit> +

      Returns a ListenableFuture which completes when the node has registered wih the network map service. It can also +complete with an exception if it is unable to.

      + +

      Extension Functions

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-corda-r-p-c-ops-impl/upload-file.html b/docs/build/html/api/kotlin/corda/net.corda.node.internal/-corda-r-p-c-ops-impl/upload-file.html new file mode 100644 index 0000000000..8a4100f202 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.internal/-corda-r-p-c-ops-impl/upload-file.html @@ -0,0 +1,15 @@ + + + +CordaRPCOpsImpl.uploadFile - corda + + + +corda / net.corda.node.internal / CordaRPCOpsImpl / uploadFile
      +
      +

      uploadFile

      + +fun uploadFile(dataType: String, name: String?, file: InputStream): String +

      Overrides CordaRPCOps.uploadFile

      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-corda-r-p-c-ops-impl/wait-until-registered-with-network-map.html b/docs/build/html/api/kotlin/corda/net.corda.node.internal/-corda-r-p-c-ops-impl/wait-until-registered-with-network-map.html new file mode 100644 index 0000000000..712475bd8a --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.internal/-corda-r-p-c-ops-impl/wait-until-registered-with-network-map.html @@ -0,0 +1,17 @@ + + + +CordaRPCOpsImpl.waitUntilRegisteredWithNetworkMap - corda + + + +corda / net.corda.node.internal / CordaRPCOpsImpl / waitUntilRegisteredWithNetworkMap
      +
      +

      waitUntilRegisteredWithNetworkMap

      + +fun waitUntilRegisteredWithNetworkMap(): ListenableFuture<Unit> +

      Overrides CordaRPCOps.waitUntilRegisteredWithNetworkMap

      +

      Returns a ListenableFuture which completes when the node has registered wih the network map service. It can also +complete with an exception if it is unable to.

      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-node/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.internal/-node/index.html index a641a72fbc..2607ac0a42 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-node/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.internal/-node/index.html @@ -67,12 +67,6 @@ loads important data off disk and starts listening for connections.

      val serverThread: ServiceAffinityExecutor - - -webServer - -lateinit var webServer: Server -

      Inherited Properties

      @@ -86,24 +80,12 @@ loads important data off disk and starts listening for connections.

      -_servicesThatAcceptUploads - -val _servicesThatAcceptUploads: ArrayList<AcceptsFileUpload> - - - advertisedServices val advertisedServices: Set<ServiceInfo> -api - -lateinit var api: APIServer - - - busyNodeLatch val busyNodeLatch: ReusableLatch @@ -248,12 +230,6 @@ loads important data off disk and starts listening for connections.

      -servicesThatAcceptUploads - -val servicesThatAcceptUploads: List<AcceptsFileUpload> - - - smm lateinit var smm: StateMachineManager @@ -448,7 +424,7 @@ encountered when trying to connect to the network map node.

      makeServiceEntries -fun makeServiceEntries(): List<ServiceEntry> +open fun makeServiceEntries(): List<ServiceEntry>

      A service entry contains the advertised ServiceInfo along with the service identity. The identity name is taken from the configuration or, if non specified, generated by combining the node's legal name and the service id.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-node/web-server.html b/docs/build/html/api/kotlin/corda/net.corda.node.internal/-node/web-server.html deleted file mode 100644 index 29ce21a8af..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-node/web-server.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -Node.webServer - corda - - - -corda / net.corda.node.internal / Node / webServer
      -
      -

      webServer

      - -lateinit var webServer: Server - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.internal/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.internal/index.html index 576d34a96c..a3c31ca539 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.internal/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.internal/index.html @@ -13,12 +13,6 @@ -APIServerImpl - -class APIServerImpl : APIServer - - - AbstractNode abstract class AbstractNode : SingletonSerializeAsToken diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.services.api/-accepts-file-upload/accepts.html b/docs/build/html/api/kotlin/corda/net.corda.node.services.api/-accepts-file-upload/accepts.html new file mode 100644 index 0000000000..126325507f --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.services.api/-accepts-file-upload/accepts.html @@ -0,0 +1,17 @@ + + + +AcceptsFileUpload.accepts - corda + + + +corda / net.corda.node.services.api / AcceptsFileUpload / accepts
      +
      +

      accepts

      + +open fun accepts(prefix: String): Boolean +

      Overrides FileUploader.accepts

      +

      Check if this service accepts this type of upload. For example if you are uploading interest rates this could +be "my-service-interest-rates". Type here does not refer to file extentions or MIME types.

      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.services.api/-accepts-file-upload/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.services.api/-accepts-file-upload/index.html index 3e08517eae..fedca30705 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.services.api/-accepts-file-upload/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.services.api/-accepts-file-upload/index.html @@ -8,7 +8,7 @@ corda / net.corda.node.services.api / AcceptsFileUpload

      AcceptsFileUpload

      -interface AcceptsFileUpload +interface AcceptsFileUpload : FileUploader

      A service that implements AcceptsFileUpload can have new binary data provided to it via an HTTP upload.

      TODO: In future, also accept uploads over the MQ interface too.

      Properties

      @@ -37,9 +37,23 @@ -upload +accepts -abstract fun upload(data: InputStream): String +open fun accepts(prefix: String): Boolean +

      Check if this service accepts this type of upload. For example if you are uploading interest rates this could +be "my-service-interest-rates". Type here does not refer to file extentions or MIME types.

      + + + + +

      Inherited Functions

      + + + + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.services.api/-accepts-file-upload/upload.html b/docs/build/html/api/kotlin/corda/net.corda.node.services.api/-accepts-file-upload/upload.html deleted file mode 100644 index de383ed665..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.services.api/-accepts-file-upload/upload.html +++ /dev/null @@ -1,16 +0,0 @@ - - - -AcceptsFileUpload.upload - corda - - - -corda / net.corda.node.services.api / AcceptsFileUpload / upload
      -
      -

      upload

      - -abstract fun upload(data: InputStream): String -

      Accepts the data in the given input stream, and returns some sort of useful return message that will be sent -back to the user in the response.

      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.services.api/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.services.api/index.html index 55dc1c1356..df7f5575c5 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.services.api/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.services.api/index.html @@ -23,7 +23,7 @@ diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.services.events/-node-scheduler-service/-run-scheduled/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.services.events/-node-scheduler-service/-run-scheduled/index.html index ad2d3e589a..1b45e90c99 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.services.events/-node-scheduler-service/-run-scheduled/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.services.events/-node-scheduler-service/-run-scheduled/index.html @@ -133,8 +133,8 @@ will do as long as the other side registers with it.

      @@ -149,9 +149,9 @@ will do as long as the other side registers with it.

      @@ -48,6 +48,12 @@ useful tasks. See the documentation for proxy or review + + + +
      +upload +abstract fun upload(file: InputStream): String

      Accepts the data in the given input stream, and returns some sort of useful return message that will be sent back to the user in the response.

      AcceptsFileUpload -interface AcceptsFileUpload +interface AcceptsFileUpload : FileUploader

      A service that implements AcceptsFileUpload can have new binary data provided to it via an HTTP upload.

      fun <R : Any> receive(otherParty: Party): UntrustworthyData<R>

      Suspends until the specified otherParty sends us a message of type R.

      -open fun <T : Any> receive(receiveType: Class<T>, otherParty: Party): UntrustworthyData<T> -

      Suspends until the specified otherParty sends us a message of type receiveType.

      +open fun <R : Any> receive(receiveType: Class<R>, otherParty: Party): UntrustworthyData<R> +

      Suspends until the specified otherParty sends us a message of type receiveType.

      sendAndReceive -open fun <T : Any> sendAndReceive(receiveType: Class<T>, otherParty: Party, payload: Any): UntrustworthyData<T> -

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response -is received, which must be of the given receiveType. Remember that when receiving data from other parties the data +open fun <R : Any> sendAndReceive(receiveType: Class<R>, otherParty: Party, payload: Any): UntrustworthyData<R> +

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response +is received, which must be of the given receiveType. Remember that when receiving data from other parties the data should not be trusted until it's been thoroughly verified for consistency and that all expectations are satisfied, as a malicious peer may send you subtly corrupted data in order to exploit your code.

      fun <R : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<R> diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.services.messaging/-corda-r-p-c-client/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.node.services.messaging/-corda-r-p-c-client/-init-.html index 097af2fbaa..318cf61537 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.services.messaging/-corda-r-p-c-client/-init-.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.services.messaging/-corda-r-p-c-client/-init-.html @@ -8,7 +8,7 @@ corda / net.corda.node.services.messaging / CordaRPCClient / <init>

      <init>

      -CordaRPCClient(host: HostAndPort, config: SSLConfiguration?) +CordaRPCClient(host: HostAndPort, config: SSLConfiguration?, serviceConfigurationOverride: ServerLocator.() -> Unit = null)

      An RPC client connects to the specified server and allows you to make calls to the server that perform various useful tasks. See the documentation for proxy or review the docsite to learn more about how this API works.

      Parameters

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.services.messaging/-corda-r-p-c-client/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.services.messaging/-corda-r-p-c-client/index.html index aa8ca43dde..c4509676f9 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.services.messaging/-corda-r-p-c-client/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.services.messaging/-corda-r-p-c-client/index.html @@ -24,7 +24,7 @@ useful tasks. See the documentation for proxy or review
      <init> -CordaRPCClient(host: HostAndPort, config: SSLConfiguration?) +CordaRPCClient(host: HostAndPort, config: SSLConfiguration?, serviceConfigurationOverride: ServerLocator.() -> Unit = null)

      An RPC client connects to the specified server and allows you to make calls to the server that perform various useful tasks. See the documentation for proxy or review the docsite to learn more about how this API works.

      val host: HostAndPort
      +serviceConfigurationOverride +val serviceConfigurationOverride: ServerLocator.() -> Unit

      Functions

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.services.messaging/-corda-r-p-c-client/service-configuration-override.html b/docs/build/html/api/kotlin/corda/net.corda.node.services.messaging/-corda-r-p-c-client/service-configuration-override.html new file mode 100644 index 0000000000..7eba969c8c --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.services.messaging/-corda-r-p-c-client/service-configuration-override.html @@ -0,0 +1,14 @@ + + + +CordaRPCClient.serviceConfigurationOverride - corda + + + +corda / net.corda.node.services.messaging / CordaRPCClient / serviceConfigurationOverride
      +
      +

      serviceConfigurationOverride

      + +val serviceConfigurationOverride: ServerLocator.() -> Unit + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.services.messaging/-node-messaging-client/-a-m-q_-d-e-l-a-y.html b/docs/build/html/api/kotlin/corda/net.corda.node.services.messaging/-node-messaging-client/-a-m-q_-d-e-l-a-y.html new file mode 100644 index 0000000000..2e3718da15 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.services.messaging/-node-messaging-client/-a-m-q_-d-e-l-a-y.html @@ -0,0 +1,14 @@ + + + +NodeMessagingClient.AMQ_DELAY - corda + + + +corda / net.corda.node.services.messaging / NodeMessagingClient / AMQ_DELAY
      +
      +

      AMQ_DELAY

      + +val AMQ_DELAY: Int + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.services.messaging/-node-messaging-client/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.services.messaging/-node-messaging-client/index.html index 62987b3a2e..74d0d0dbae 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.services.messaging/-node-messaging-client/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.services.messaging/-node-messaging-client/index.html @@ -215,6 +215,12 @@ unfortunately Artemis tends to bury the exception when the password is wrong.

      +AMQ_DELAY + +val AMQ_DELAY: Int + + + SESSION_ID_PROPERTY const val SESSION_ID_PROPERTY: String diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.services.network/-in-memory-network-map-cache/get-node-by-legal-identity-key.html b/docs/build/html/api/kotlin/corda/net.corda.node.services.network/-in-memory-network-map-cache/get-node-by-legal-identity-key.html new file mode 100644 index 0000000000..c33f645471 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.services.network/-in-memory-network-map-cache/get-node-by-legal-identity-key.html @@ -0,0 +1,16 @@ + + + +InMemoryNetworkMapCache.getNodeByLegalIdentityKey - corda + + + +corda / net.corda.node.services.network / InMemoryNetworkMapCache / getNodeByLegalIdentityKey
      +
      +

      getNodeByLegalIdentityKey

      + +open fun getNodeByLegalIdentityKey(compositeKey: CompositeKey): NodeInfo? +

      Overrides NetworkMapCache.getNodeByLegalIdentityKey

      +

      Look up the node info for a specific peer key.

      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.services.network/-in-memory-network-map-cache/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.services.network/-in-memory-network-map-cache/index.html index 97f22f177b..6449d5a760 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.services.network/-in-memory-network-map-cache/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.services.network/-in-memory-network-map-cache/index.html @@ -119,6 +119,14 @@ updates.

      +getNodeByLegalIdentityKey + +open fun getNodeByLegalIdentityKey(compositeKey: CompositeKey): NodeInfo? +

      Look up the node info for a specific peer key.

      + + + + getPartyInfo open fun getPartyInfo(party: Party): PartyInfo? @@ -171,14 +179,6 @@ first subscriber is registered so as to avoid racing with early updates.

      -getNodeByLegalIdentityKey - -open fun getNodeByLegalIdentityKey(compositeKey: CompositeKey): NodeInfo? -

      Look up the node info for a specific peer key.

      - - - - getNodeByLegalName open fun getNodeByLegalName(name: String): NodeInfo? diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.services.persistence/-data-vending/-service/-notify-transaction-handler/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.services.persistence/-data-vending/-service/-notify-transaction-handler/index.html index ab5d977ce2..c8a4dc15d3 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.services.persistence/-data-vending/-service/-notify-transaction-handler/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.services.persistence/-data-vending/-service/-notify-transaction-handler/index.html @@ -116,8 +116,8 @@ will do as long as the other side registers with it.

      fun <R : Any> receive(otherParty: Party): UntrustworthyData<R>

      Suspends until the specified otherParty sends us a message of type R.

      -open fun <T : Any> receive(receiveType: Class<T>, otherParty: Party): UntrustworthyData<T> -

      Suspends until the specified otherParty sends us a message of type receiveType.

      +open fun <R : Any> receive(receiveType: Class<R>, otherParty: Party): UntrustworthyData<R> +

      Suspends until the specified otherParty sends us a message of type receiveType.

      @@ -135,9 +135,9 @@ will do as long as the other side registers with it.

      fun <R : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<R>

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response is received, which must be of the given R type.

      -open fun <T : Any> sendAndReceive(receiveType: Class<T>, otherParty: Party, payload: Any): UntrustworthyData<T> -

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response -is received, which must be of the given receiveType. Remember that when receiving data from other parties the data +open fun <R : Any> sendAndReceive(receiveType: Class<R>, otherParty: Party, payload: Any): UntrustworthyData<R> +

      Serializes and queues the given payload object for sending to the otherParty. Suspends until a response +is received, which must be of the given receiveType. Remember that when receiving data from other parties the data should not be trusted until it's been thoroughly verified for consistency and that all expectations are satisfied, as a malicious peer may send you subtly corrupted data in order to exploit your code.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.services.persistence/-data-vending/-service/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.services.persistence/-data-vending/-service/index.html index 691383b96a..1a04d7dab6 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.services.persistence/-data-vending/-service/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.services.persistence/-data-vending/-service/index.html @@ -53,16 +53,5 @@ glue that sits between the network layer and the database layer.

      -

      Companion Object Properties

      - - - - - - - -
      -logger -val logger: Logger
      diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.services.persistence/-data-vending/-service/logger.html b/docs/build/html/api/kotlin/corda/net.corda.node.services.persistence/-data-vending/-service/logger.html deleted file mode 100644 index 54ff8d5d5a..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.services.persistence/-data-vending/-service/logger.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -DataVending.Service.logger - corda - - - -corda / net.corda.node.services.persistence / DataVending / Service / logger
      -
      -

      logger

      - -val logger: Logger - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.services.persistence/-node-attachment-service/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.services.persistence/-node-attachment-service/index.html index 31d334c923..3a021c0145 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.services.persistence/-node-attachment-service/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.services.persistence/-node-attachment-service/index.html @@ -109,5 +109,19 @@ back to the user in the response.

      +

      Inherited Functions

      + + + + + + + +
      +accepts +open fun accepts(prefix: String): Boolean +

      Check if this service accepts this type of upload. For example if you are uploading interest rates this could +be "my-service-interest-rates". Type here does not refer to file extentions or MIME types.

      +
      diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.services.persistence/-node-attachment-service/upload.html b/docs/build/html/api/kotlin/corda/net.corda.node.services.persistence/-node-attachment-service/upload.html index 412b9551e4..7d3d835514 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.services.persistence/-node-attachment-service/upload.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.services.persistence/-node-attachment-service/upload.html @@ -10,7 +10,7 @@

      upload

      fun upload(data: InputStream): String -

      Overrides AcceptsFileUpload.upload

      +

      Overrides FileUploader.upload

      Accepts the data in the given input stream, and returns some sort of useful return message that will be sent back to the user in the response.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.services.persistence/-storage-service-impl/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.services.persistence/-storage-service-impl/index.html index 790ae15cb1..37da32af4b 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.services.persistence/-storage-service-impl/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.services.persistence/-storage-service-impl/index.html @@ -39,6 +39,12 @@ +uploaders + +open lateinit var uploaders: List<FileUploader> + + + validatedTransactions open val validatedTransactions: TransactionStorage @@ -49,6 +55,17 @@ the transaction data to other nodes that need it.

      +

      Functions

      + + + + + + + +
      +initUploaders +fun initUploaders(uploadersList: List<FileUploader>): Unit

      Inherited Functions

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.services.persistence/-storage-service-impl/init-uploaders.html b/docs/build/html/api/kotlin/corda/net.corda.node.services.persistence/-storage-service-impl/init-uploaders.html new file mode 100644 index 0000000000..a2c2c240a0 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.services.persistence/-storage-service-impl/init-uploaders.html @@ -0,0 +1,14 @@ + + + +StorageServiceImpl.initUploaders - corda + + + +corda / net.corda.node.services.persistence / StorageServiceImpl / initUploaders
      +
      +

      initUploaders

      + +fun initUploaders(uploadersList: List<FileUploader>): Unit + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.services.persistence/-storage-service-impl/uploaders.html b/docs/build/html/api/kotlin/corda/net.corda.node.services.persistence/-storage-service-impl/uploaders.html new file mode 100644 index 0000000000..c386ac5bb9 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.services.persistence/-storage-service-impl/uploaders.html @@ -0,0 +1,15 @@ + + + +StorageServiceImpl.uploaders - corda + + + +corda / net.corda.node.services.persistence / StorageServiceImpl / uploaders
      +
      +

      uploaders

      + +open lateinit var uploaders: List<FileUploader> +

      Overrides StorageService.uploaders

      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-flow-session-exception/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-flow-session-exception/-init-.html new file mode 100644 index 0000000000..4056a764e1 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-flow-session-exception/-init-.html @@ -0,0 +1,13 @@ + + + +FlowSessionException.<init> - corda + + + +corda / net.corda.node.services.statemachine / FlowSessionException / <init>
      +
      +

      <init>

      +FlowSessionException(message: String) + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-flow-session-exception/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-flow-session-exception/index.html new file mode 100644 index 0000000000..6f68841cba --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-flow-session-exception/index.html @@ -0,0 +1,35 @@ + + + +FlowSessionException - corda + + + +corda / net.corda.node.services.statemachine / FlowSessionException
      +
      +

      FlowSessionException

      +class FlowSessionException : RuntimeException +

      Constructors

      +
      + + + + + + +
      +<init> +FlowSessionException(message: String)
      +

      Extension Properties

      + + + + + + + +
      +rootCause +val Throwable.rootCause: Throwable
      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-flow-state-machine-impl/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-flow-state-machine-impl/index.html index 8ce911bc2a..9220f4748f 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-flow-state-machine-impl/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-flow-state-machine-impl/index.html @@ -8,7 +8,7 @@ corda / net.corda.node.services.statemachine / FlowStateMachineImpl

      FlowStateMachineImpl

      -class FlowStateMachineImpl<R> : Fiber<R>, FlowStateMachine<R> +class FlowStateMachineImpl<R> : Fiber<Unit>, FlowStateMachine<R>

      Constructors

      @@ -70,7 +70,7 @@ +fun run(): Unit +SessionEnd(recipientSessionId: Long, errorResponse: FlowException?)
      run -fun run(): R
      diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-flow-state-machine-impl/run.html b/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-flow-state-machine-impl/run.html index d4d4ab58aa..65c1a87fb2 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-flow-state-machine-impl/run.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-flow-state-machine-impl/run.html @@ -9,6 +9,6 @@

      run

      -@Suspendable protected fun run(): R +@Suspendable protected fun run(): Unit diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-session-end/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-session-end/-init-.html index cd53f94cbb..11f2e890bd 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-session-end/-init-.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-session-end/-init-.html @@ -8,6 +8,6 @@ corda / net.corda.node.services.statemachine / SessionEnd / <init>

      <init>

      -SessionEnd(recipientSessionId: Long) +SessionEnd(recipientSessionId: Long, errorResponse: FlowException?) diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-session-end/error-response.html b/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-session-end/error-response.html new file mode 100644 index 0000000000..9ee82427a8 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-session-end/error-response.html @@ -0,0 +1,14 @@ + + + +SessionEnd.errorResponse - corda + + + +corda / net.corda.node.services.statemachine / SessionEnd / errorResponse
      +
      +

      errorResponse

      + +val errorResponse: FlowException? + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-session-end/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-session-end/index.html index 98fc324e28..371c066896 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-session-end/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-session-end/index.html @@ -16,7 +16,7 @@
      <init> -SessionEnd(recipientSessionId: Long)
      @@ -25,6 +25,12 @@ +errorResponse + +val errorResponse: FlowException? + + + recipientSessionId val recipientSessionId: Long diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-state-machine-manager/-flow-session/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-state-machine-manager/-flow-session/-init-.html index c4413a04d5..12ec12ef68 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-state-machine-manager/-flow-session/-init-.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-state-machine-manager/-flow-session/-init-.html @@ -8,6 +8,6 @@ corda / net.corda.node.services.statemachine / StateMachineManager / FlowSession / <init>

      <init>

      -FlowSession(flow: FlowLogic<*>, ourSessionId: Long, state: FlowSessionState, waitingForResponse: Boolean = false) +FlowSession(flow: FlowLogic<*>, ourSessionId: Long, initiatingParty: Party?, state: FlowSessionState, waitingForResponse: Boolean = false) diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-state-machine-manager/-flow-session/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-state-machine-manager/-flow-session/index.html index 6d7242d24d..12458c2dfe 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-state-machine-manager/-flow-session/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-state-machine-manager/-flow-session/index.html @@ -16,7 +16,7 @@ <init> -FlowSession(flow: FlowLogic<*>, ourSessionId: Long, state: FlowSessionState, waitingForResponse: Boolean = false) +FlowSession(flow: FlowLogic<*>, ourSessionId: Long, initiatingParty: Party?, state: FlowSessionState, waitingForResponse: Boolean = false) @@ -37,6 +37,12 @@ +initiatingParty + +val initiatingParty: Party? + + + ourSessionId val ourSessionId: Long diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-state-machine-manager/-flow-session/initiating-party.html b/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-state-machine-manager/-flow-session/initiating-party.html new file mode 100644 index 0000000000..bc3e3a2d81 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/-state-machine-manager/-flow-session/initiating-party.html @@ -0,0 +1,14 @@ + + + +StateMachineManager.FlowSession.initiatingParty - corda + + + +corda / net.corda.node.services.statemachine / StateMachineManager / FlowSession / initiatingParty
      +
      +

      initiatingParty

      + +val initiatingParty: Party? + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/index.html index 1f5989008f..ed60cdeec0 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.services.statemachine/index.html @@ -27,7 +27,7 @@ FlowStateMachineImpl -class FlowStateMachineImpl<R> : Fiber<R>, FlowStateMachine<R> +class FlowStateMachineImpl<R> : Fiber<Unit>, FlowStateMachine<R> @@ -123,6 +123,12 @@ Each such object represents an instantiation of a (two-party) flow that has reac +FlowSessionException + +class FlowSessionException : RuntimeException + + + StackSnapshot class StackSnapshot : Throwable diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-attachment-download-servlet/do-get.html b/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-attachment-download-servlet/do-get.html deleted file mode 100644 index 58f540ceff..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-attachment-download-servlet/do-get.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -AttachmentDownloadServlet.doGet - corda - - - -corda / net.corda.node.servlets / AttachmentDownloadServlet / doGet
      -
      -

      doGet

      - -protected fun doGet(req: HttpServletRequest, resp: HttpServletResponse): Unit - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-config/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-config/-init-.html deleted file mode 100644 index fdc7ba05d5..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-config/-init-.html +++ /dev/null @@ -1,15 +0,0 @@ - - - -Config.<init> - corda - - - -corda / net.corda.node.servlets / Config / <init>
      -
      -

      <init>

      -Config(services: ServiceHub) -

      Primary purpose is to install Kotlin extensions for Jackson ObjectMapper so data classes work -and to organise serializers / deserializers for java.time.* classes as necessary.

      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-config/get-context.html b/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-config/get-context.html deleted file mode 100644 index 9970e4d4a3..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-config/get-context.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -Config.getContext - corda - - - -corda / net.corda.node.servlets / Config / getContext
      -
      -

      getContext

      - -fun getContext(type: Class<*>): ObjectMapper - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-config/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-config/index.html deleted file mode 100644 index bd1c9eba2b..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-config/index.html +++ /dev/null @@ -1,57 +0,0 @@ - - - -Config - corda - - - -corda / net.corda.node.servlets / Config
      -
      -

      Config

      -@Provider class Config : ContextResolver<ObjectMapper> -

      Primary purpose is to install Kotlin extensions for Jackson ObjectMapper so data classes work -and to organise serializers / deserializers for java.time.* classes as necessary.

      -

      Constructors

      - - - - - - - -
      -<init> -Config(services: ServiceHub) -

      Primary purpose is to install Kotlin extensions for Jackson ObjectMapper so data classes work -and to organise serializers / deserializers for java.time.* classes as necessary.

      -
      -

      Properties

      - - - - - - - - - - - -
      -defaultObjectMapper -val defaultObjectMapper: ObjectMapper
      -services -val services: ServiceHub
      -

      Functions

      - - - - - - - -
      -getContext -fun getContext(type: Class<*>): ObjectMapper
      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-config/services.html b/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-config/services.html deleted file mode 100644 index 397aa063d9..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-config/services.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -Config.services - corda - - - -corda / net.corda.node.servlets / Config / services
      -
      -

      services

      - -val services: ServiceHub - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-data-upload-servlet/do-post.html b/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-data-upload-servlet/do-post.html deleted file mode 100644 index bf77d9e710..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-data-upload-servlet/do-post.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -DataUploadServlet.doPost - corda - - - -corda / net.corda.node.servlets / DataUploadServlet / doPost
      -
      -

      doPost

      - -protected fun doPost(req: HttpServletRequest, resp: HttpServletResponse): Unit - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-response-filter/filter.html b/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-response-filter/filter.html deleted file mode 100644 index 4510006bc8..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-response-filter/filter.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -ResponseFilter.filter - corda - - - -corda / net.corda.node.servlets / ResponseFilter / filter
      -
      -

      filter

      - -fun filter(requestContext: ContainerRequestContext, responseContext: ContainerResponseContext): Unit - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-identity-object-mapper/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-identity-object-mapper/-init-.html new file mode 100644 index 0000000000..b6e2a78b2c --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-identity-object-mapper/-init-.html @@ -0,0 +1,13 @@ + + + +JsonSupport.IdentityObjectMapper.<init> - corda + + + +corda / net.corda.node.utilities / JsonSupport / IdentityObjectMapper / <init>
      +
      +

      <init>

      +IdentityObjectMapper(identityService: IdentityService) + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-identity-object-mapper/identity-service.html b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-identity-object-mapper/identity-service.html new file mode 100644 index 0000000000..0c9820173b --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-identity-object-mapper/identity-service.html @@ -0,0 +1,14 @@ + + + +JsonSupport.IdentityObjectMapper.identityService - corda + + + +corda / net.corda.node.utilities / JsonSupport / IdentityObjectMapper / identityService
      +
      +

      identityService

      + +val identityService: IdentityService + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-identity-object-mapper/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-identity-object-mapper/index.html new file mode 100644 index 0000000000..20dc83924c --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-identity-object-mapper/index.html @@ -0,0 +1,46 @@ + + + +JsonSupport.IdentityObjectMapper - corda + + + +corda / net.corda.node.utilities / JsonSupport / IdentityObjectMapper
      +
      +

      IdentityObjectMapper

      +class IdentityObjectMapper : PartyObjectMapper, ObjectMapper +

      Constructors

      + + + + + + + +
      +<init> +IdentityObjectMapper(identityService: IdentityService)
      +

      Properties

      + + + + + + + +
      +identityService +val identityService: IdentityService
      +

      Functions

      + + + + + + + +
      +partyFromName +fun partyFromName(partyName: String): Party?
      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-identity-object-mapper/party-from-name.html b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-identity-object-mapper/party-from-name.html new file mode 100644 index 0000000000..05576a334c --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-identity-object-mapper/party-from-name.html @@ -0,0 +1,15 @@ + + + +JsonSupport.IdentityObjectMapper.partyFromName - corda + + + +corda / net.corda.node.utilities / JsonSupport / IdentityObjectMapper / partyFromName
      +
      +

      partyFromName

      + +fun partyFromName(partyName: String): Party? +

      Overrides PartyObjectMapper.partyFromName

      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-no-party-object-mapper/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-no-party-object-mapper/-init-.html new file mode 100644 index 0000000000..4b8654eab4 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-no-party-object-mapper/-init-.html @@ -0,0 +1,13 @@ + + + +JsonSupport.NoPartyObjectMapper.<init> - corda + + + +corda / net.corda.node.utilities / JsonSupport / NoPartyObjectMapper / <init>
      +
      +

      <init>

      +NoPartyObjectMapper() + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-no-party-object-mapper/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-no-party-object-mapper/index.html new file mode 100644 index 0000000000..14609a0d78 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-no-party-object-mapper/index.html @@ -0,0 +1,35 @@ + + + +JsonSupport.NoPartyObjectMapper - corda + + + +corda / net.corda.node.utilities / JsonSupport / NoPartyObjectMapper
      +
      +

      NoPartyObjectMapper

      +class NoPartyObjectMapper : PartyObjectMapper, ObjectMapper +

      Constructors

      + + + + + + + +
      +<init> +NoPartyObjectMapper()
      +

      Functions

      + + + + + + + +
      +partyFromName +fun partyFromName(partyName: String): Nothing
      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-no-party-object-mapper/party-from-name.html b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-no-party-object-mapper/party-from-name.html new file mode 100644 index 0000000000..e2a1838d75 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-no-party-object-mapper/party-from-name.html @@ -0,0 +1,15 @@ + + + +JsonSupport.NoPartyObjectMapper.partyFromName - corda + + + +corda / net.corda.node.utilities / JsonSupport / NoPartyObjectMapper / partyFromName
      +
      +

      partyFromName

      + +fun partyFromName(partyName: String): Nothing +

      Overrides PartyObjectMapper.partyFromName

      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-party-object-mapper/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-party-object-mapper/index.html new file mode 100644 index 0000000000..d808837fa5 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-party-object-mapper/index.html @@ -0,0 +1,47 @@ + + + +JsonSupport.PartyObjectMapper - corda + + + +corda / net.corda.node.utilities / JsonSupport / PartyObjectMapper
      +
      +

      PartyObjectMapper

      +interface PartyObjectMapper +

      Functions

      + + + + + + + +
      +partyFromName +abstract fun partyFromName(partyName: String): Party?
      +

      Inheritors

      + + + + + + + + + + + + + + + +
      +IdentityObjectMapper +class IdentityObjectMapper : PartyObjectMapper, ObjectMapper
      +NoPartyObjectMapper +class NoPartyObjectMapper : PartyObjectMapper, ObjectMapper
      +RpcObjectMapper +class RpcObjectMapper : PartyObjectMapper, ObjectMapper
      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-party-object-mapper/party-from-name.html b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-party-object-mapper/party-from-name.html new file mode 100644 index 0000000000..01f7a1f91b --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-party-object-mapper/party-from-name.html @@ -0,0 +1,14 @@ + + + +JsonSupport.PartyObjectMapper.partyFromName - corda + + + +corda / net.corda.node.utilities / JsonSupport / PartyObjectMapper / partyFromName
      +
      +

      partyFromName

      + +abstract fun partyFromName(partyName: String): Party? + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-rpc-object-mapper/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-rpc-object-mapper/-init-.html new file mode 100644 index 0000000000..88a8e3d329 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-rpc-object-mapper/-init-.html @@ -0,0 +1,13 @@ + + + +JsonSupport.RpcObjectMapper.<init> - corda + + + +corda / net.corda.node.utilities / JsonSupport / RpcObjectMapper / <init>
      +
      +

      <init>

      +RpcObjectMapper(rpc: CordaRPCOps) + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-rpc-object-mapper/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-rpc-object-mapper/index.html new file mode 100644 index 0000000000..8ff190c50a --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-rpc-object-mapper/index.html @@ -0,0 +1,46 @@ + + + +JsonSupport.RpcObjectMapper - corda + + + +corda / net.corda.node.utilities / JsonSupport / RpcObjectMapper
      +
      +

      RpcObjectMapper

      +class RpcObjectMapper : PartyObjectMapper, ObjectMapper +

      Constructors

      + + + + + + + +
      +<init> +RpcObjectMapper(rpc: CordaRPCOps)
      +

      Properties

      + + + + + + + +
      +rpc +val rpc: CordaRPCOps
      +

      Functions

      + + + + + + + +
      +partyFromName +fun partyFromName(partyName: String): Party?
      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-rpc-object-mapper/party-from-name.html b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-rpc-object-mapper/party-from-name.html new file mode 100644 index 0000000000..a15265bf97 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-rpc-object-mapper/party-from-name.html @@ -0,0 +1,15 @@ + + + +JsonSupport.RpcObjectMapper.partyFromName - corda + + + +corda / net.corda.node.utilities / JsonSupport / RpcObjectMapper / partyFromName
      +
      +

      partyFromName

      + +fun partyFromName(partyName: String): Party? +

      Overrides PartyObjectMapper.partyFromName

      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-rpc-object-mapper/rpc.html b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-rpc-object-mapper/rpc.html new file mode 100644 index 0000000000..886744f008 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-rpc-object-mapper/rpc.html @@ -0,0 +1,14 @@ + + + +JsonSupport.RpcObjectMapper.rpc - corda + + + +corda / net.corda.node.utilities / JsonSupport / RpcObjectMapper / rpc
      +
      +

      rpc

      + +val rpc: CordaRPCOps + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-service-hub-object-mapper/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-service-hub-object-mapper/-init-.html deleted file mode 100644 index c65bb3018f..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-service-hub-object-mapper/-init-.html +++ /dev/null @@ -1,13 +0,0 @@ - - - -JsonSupport.ServiceHubObjectMapper.<init> - corda - - - -corda / net.corda.node.utilities / JsonSupport / ServiceHubObjectMapper / <init>
      -
      -

      <init>

      -ServiceHubObjectMapper(identities: IdentityService) - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-service-hub-object-mapper/identities.html b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-service-hub-object-mapper/identities.html deleted file mode 100644 index 73713acd02..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-service-hub-object-mapper/identities.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -JsonSupport.ServiceHubObjectMapper.identities - corda - - - -corda / net.corda.node.utilities / JsonSupport / ServiceHubObjectMapper / identities
      -
      -

      identities

      - -val identities: IdentityService - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-service-hub-object-mapper/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-service-hub-object-mapper/index.html deleted file mode 100644 index b56276a223..0000000000 --- a/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/-service-hub-object-mapper/index.html +++ /dev/null @@ -1,35 +0,0 @@ - - - -JsonSupport.ServiceHubObjectMapper - corda - - - -corda / net.corda.node.utilities / JsonSupport / ServiceHubObjectMapper
      -
      -

      ServiceHubObjectMapper

      -class ServiceHubObjectMapper : ObjectMapper -

      Constructors

      - - - - - - - -
      -<init> -ServiceHubObjectMapper(identities: IdentityService)
      -

      Properties

      - - - - - - - -
      -identities -val identities: IdentityService
      - - diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/create-default-mapper.html b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/create-default-mapper.html index 2cf839cc62..1265a2a7ba 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/create-default-mapper.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/create-default-mapper.html @@ -8,7 +8,7 @@ corda / net.corda.node.utilities / JsonSupport / createDefaultMapper

      createDefaultMapper

      - -fun createDefaultMapper(identities: IdentityService): ObjectMapper + +fun createDefaultMapper(rpc: CordaRPCOps): ObjectMapper diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/create-in-memory-mapper.html b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/create-in-memory-mapper.html new file mode 100644 index 0000000000..754762c5c7 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/create-in-memory-mapper.html @@ -0,0 +1,14 @@ + + + +JsonSupport.createInMemoryMapper - corda + + + +corda / net.corda.node.utilities / JsonSupport / createInMemoryMapper
      +
      +

      createInMemoryMapper

      + +fun createInMemoryMapper(identityService: IdentityService): ObjectMapper + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/create-non-rpc-mapper.html b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/create-non-rpc-mapper.html new file mode 100644 index 0000000000..b6bc79ce0e --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/create-non-rpc-mapper.html @@ -0,0 +1,14 @@ + + + +JsonSupport.createNonRpcMapper - corda + + + +corda / net.corda.node.utilities / JsonSupport / createNonRpcMapper
      +
      +

      createNonRpcMapper

      + +fun createNonRpcMapper(): ObjectMapper + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/index.html index 53776cf7bf..aa8ca54125 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/-json-support/index.html @@ -11,6 +11,7 @@ object JsonSupport

      Utilities and serialisers for working with JSON representations of basic types. This adds Jackson support for the java.time API, some core types, and Kotlin data classes.

      +

      TODO: This does not belong in node. It should be moved to the client module or a dedicated webserver module.

      Types

      @@ -34,6 +35,12 @@ the java.time API, some core types, and Kotlin data classes.

      + + + + @@ -46,6 +53,12 @@ the java.time API, some core types, and Kotlin data classes.

      + + + + @@ -64,6 +77,12 @@ the java.time API, some core types, and Kotlin data classes.

      + + + + @@ -82,6 +101,12 @@ the java.time API, some core types, and Kotlin data classes.

      + + + + - - - - @@ -132,7 +151,19 @@ the java.time API, some core types, and Kotlin data classes.

      +fun createDefaultMapper(rpc: CordaRPCOps): ObjectMapper + + + + + + + +
      +IdentityObjectMapper +class IdentityObjectMapper : PartyObjectMapper, ObjectMapper
      LocalDateDeserializer object LocalDateDeserializer : JsonDeserializer<LocalDate>
      +NoPartyObjectMapper +class NoPartyObjectMapper : PartyObjectMapper, ObjectMapper
      NodeInfoDeserializer object NodeInfoDeserializer : JsonDeserializer<NodeInfo>
      +PartyObjectMapper +interface PartyObjectMapper
      PartySerializer object PartySerializer : JsonSerializer<Party>
      +RpcObjectMapper +class RpcObjectMapper : PartyObjectMapper, ObjectMapper
      SecureHashDeserializer class SecureHashDeserializer<T : SecureHash> : JsonDeserializer<T> @@ -96,12 +121,6 @@ the java.time API, some core types, and Kotlin data classes.

      -ServiceHubObjectMapper -class ServiceHubObjectMapper : ObjectMapper
      ToStringSerializer object ToStringSerializer : JsonSerializer<Any> createDefaultMapper -fun createDefaultMapper(identities: IdentityService): ObjectMapper
      +createInMemoryMapper +fun createInMemoryMapper(identityService: IdentityService): ObjectMapper
      +createNonRpcMapper +fun createNonRpcMapper(): ObjectMapper
      diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.utilities/com.typesafe.config.-config/get-host-and-port.html b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/com.typesafe.config.-config/get-host-and-port.html new file mode 100644 index 0000000000..1e8f034c59 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/com.typesafe.config.-config/get-host-and-port.html @@ -0,0 +1,14 @@ + + + +getHostAndPort - corda + + + +corda / net.corda.node.utilities / com.typesafe.config.Config / getHostAndPort
      +
      +

      getHostAndPort

      + +fun Config.getHostAndPort(name: String): HostAndPort + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.utilities/com.typesafe.config.-config/get-path.html b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/com.typesafe.config.-config/get-path.html new file mode 100644 index 0000000000..7d607ff8d5 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/com.typesafe.config.-config/get-path.html @@ -0,0 +1,14 @@ + + + +getPath - corda + + + +corda / net.corda.node.utilities / com.typesafe.config.Config / getPath
      +
      +

      getPath

      + +fun Config.getPath(name: String): Path + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.utilities/com.typesafe.config.-config/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/com.typesafe.config.-config/index.html new file mode 100644 index 0000000000..414484849d --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/com.typesafe.config.-config/index.html @@ -0,0 +1,28 @@ + + + +net.corda.node.utilities.com.typesafe.config.Config - corda + + + +corda / net.corda.node.utilities / com.typesafe.config.Config
      +
      +

      Extensions for com.typesafe.config.Config

      + + + + + + + + + + + +
      +getHostAndPort +fun Config.getHostAndPort(name: String): HostAndPort
      +getPath +fun Config.getPath(name: String): Path
      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.utilities/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/index.html index 2078c5ec6f..752d37d489 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.utilities/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/index.html @@ -220,6 +220,12 @@ our environment:

      +com.typesafe.config.Config + + + + + java.time.Clock @@ -322,6 +328,12 @@ our environment:

      fun serializeToBlob(value: Any, finalizables: MutableList<() -> Unit>): Blob + + +timed + +fun <R> timed(action: () -> R): Pair<R, Double> + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.utilities/timed.html b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/timed.html new file mode 100644 index 0000000000..50893bfcc2 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.utilities/timed.html @@ -0,0 +1,14 @@ + + + +timed - corda + + + +corda / net.corda.node.utilities / timed
      +
      +

      timed

      + +fun <R> timed(action: () -> R): Pair<R, Double> + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-a-p-i-server/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-a-p-i-server/index.html new file mode 100644 index 0000000000..cce6f1e605 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-a-p-i-server/index.html @@ -0,0 +1,56 @@ + + + +APIServer - corda + + + +corda / net.corda.node.webserver.api / APIServer
      +
      +

      APIServer

      +@Path("") interface APIServer +

      Top level interface to external interaction with the distributed ledger.

      +

      Wherever a list is returned by a fetchXXX method that corresponds with an input list, that output list will have optional elements +where a null indicates "missing" and the elements returned will be in the order corresponding with the input list.

      +

      Functions

      + + + + + + + + + + + + + + + +
      +info +abstract fun info(): NodeInfo +

      Report this node's configuration and identities.

      +
      +serverTime +abstract fun serverTime(): LocalDateTime +

      Report current UTC time as understood by the platform.

      +
      +status +abstract fun status(): Response +

      Report whether this node is started up or not.

      +
      +

      Inheritors

      + + + + + + + +
      +APIServerImpl +class APIServerImpl : APIServer
      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/info.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-a-p-i-server/info.html similarity index 69% rename from docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/info.html rename to docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-a-p-i-server/info.html index f92c46f36a..f519a115fc 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/info.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-a-p-i-server/info.html @@ -5,13 +5,11 @@ -corda / net.corda.node.api / APIServer / info
      +corda / net.corda.node.webserver.api / APIServer / info

      info

      - + @GET @Path("info") @Produces(["application/json"]) abstract fun info(): NodeInfo -

      Report this node's configuration and identities. -Currently tunnels the NodeInfo as an encoding of the Kryo serialised form. -TODO this functionality should be available via the RPC

      +

      Report this node's configuration and identities.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/server-time.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-a-p-i-server/server-time.html similarity index 82% rename from docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/server-time.html rename to docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-a-p-i-server/server-time.html index e1e9cf0315..6ca0f3a070 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/server-time.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-a-p-i-server/server-time.html @@ -5,10 +5,10 @@ -corda / net.corda.node.api / APIServer / serverTime
      +corda / net.corda.node.webserver.api / APIServer / serverTime

      serverTime

      - + @GET @Path("servertime") @Produces(["application/json"]) abstract fun serverTime(): LocalDateTime

      Report current UTC time as understood by the platform.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/status.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-a-p-i-server/status.html similarity index 82% rename from docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/status.html rename to docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-a-p-i-server/status.html index f07565b0c2..6fbfac0711 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-a-p-i-server/status.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-a-p-i-server/status.html @@ -5,10 +5,10 @@ -corda / net.corda.node.api / APIServer / status
      +corda / net.corda.node.webserver.api / APIServer / status

      status

      - + @GET @Path("status") @Produces(["text/plain"]) abstract fun status(): Response

      Report whether this node is started up or not.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-states-query/-criteria/-all-deals.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-states-query/-criteria/-all-deals.html similarity index 70% rename from docs/build/html/api/kotlin/corda/net.corda.node.api/-states-query/-criteria/-all-deals.html rename to docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-states-query/-criteria/-all-deals.html index 53a434bdf7..e1107cb332 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-states-query/-criteria/-all-deals.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-states-query/-criteria/-all-deals.html @@ -5,7 +5,7 @@ -corda / net.corda.node.api / StatesQuery / Criteria / AllDeals
      +corda / net.corda.node.webserver.api / StatesQuery / Criteria / AllDeals

      AllDeals

      object AllDeals : Criteria diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-states-query/-criteria/-deal/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-states-query/-criteria/-deal/-init-.html new file mode 100644 index 0000000000..4bbefc4e2a --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-states-query/-criteria/-deal/-init-.html @@ -0,0 +1,13 @@ + + + +StatesQuery.Criteria.Deal.<init> - corda + + + +corda / net.corda.node.webserver.api / StatesQuery / Criteria / Deal / <init>
      +
      +

      <init>

      +Deal(ref: String) + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-states-query/-criteria/-deal/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-states-query/-criteria/-deal/index.html similarity index 67% rename from docs/build/html/api/kotlin/corda/net.corda.node.api/-states-query/-criteria/-deal/index.html rename to docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-states-query/-criteria/-deal/index.html index 51a0edd5fd..cb67794904 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-states-query/-criteria/-deal/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-states-query/-criteria/-deal/index.html @@ -5,7 +5,7 @@ -corda / net.corda.node.api / StatesQuery / Criteria / Deal
      +corda / net.corda.node.webserver.api / StatesQuery / Criteria / Deal

      Deal

      data class Deal : Criteria @@ -16,7 +16,7 @@ <init> -Deal(ref: String) +Deal(ref: String) diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-states-query/-criteria/-deal/ref.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-states-query/-criteria/-deal/ref.html similarity index 56% rename from docs/build/html/api/kotlin/corda/net.corda.node.api/-states-query/-criteria/-deal/ref.html rename to docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-states-query/-criteria/-deal/ref.html index 4f5949efda..b0dc63c7bd 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-states-query/-criteria/-deal/ref.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-states-query/-criteria/-deal/ref.html @@ -5,10 +5,10 @@ -corda / net.corda.node.api / StatesQuery / Criteria / Deal / ref
      +corda / net.corda.node.webserver.api / StatesQuery / Criteria / Deal / ref

      ref

      - + val ref: String diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-states-query/-criteria/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-states-query/-criteria/index.html similarity index 91% rename from docs/build/html/api/kotlin/corda/net.corda.node.api/-states-query/-criteria/index.html rename to docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-states-query/-criteria/index.html index 5cda20a12a..81a7d3f7c1 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-states-query/-criteria/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-states-query/-criteria/index.html @@ -5,7 +5,7 @@ -corda / net.corda.node.api / StatesQuery / Criteria
      +corda / net.corda.node.webserver.api / StatesQuery / Criteria

      Criteria

      interface Criteria diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-states-query/-selection/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-states-query/-selection/-init-.html new file mode 100644 index 0000000000..fd13cbb65b --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-states-query/-selection/-init-.html @@ -0,0 +1,13 @@ + + + +StatesQuery.Selection.<init> - corda + + + +corda / net.corda.node.webserver.api / StatesQuery / Selection / <init>
      +
      +

      <init>

      +Selection(criteria: Criteria) + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-states-query/-selection/criteria.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-states-query/-selection/criteria.html similarity index 63% rename from docs/build/html/api/kotlin/corda/net.corda.node.api/-states-query/-selection/criteria.html rename to docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-states-query/-selection/criteria.html index 88be3c71ac..cca2ad372b 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-states-query/-selection/criteria.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-states-query/-selection/criteria.html @@ -5,10 +5,10 @@ -corda / net.corda.node.api / StatesQuery / Selection / criteria
      +corda / net.corda.node.webserver.api / StatesQuery / Selection / criteria

      criteria

      - + val criteria: Criteria diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-states-query/-selection/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-states-query/-selection/index.html similarity index 67% rename from docs/build/html/api/kotlin/corda/net.corda.node.api/-states-query/-selection/index.html rename to docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-states-query/-selection/index.html index 56bc0d8ce0..937d1e5489 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-states-query/-selection/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-states-query/-selection/index.html @@ -5,7 +5,7 @@ -corda / net.corda.node.api / StatesQuery / Selection
      +corda / net.corda.node.webserver.api / StatesQuery / Selection

      Selection

      data class Selection : StatesQuery @@ -16,7 +16,7 @@ <init> -Selection(criteria: Criteria) +Selection(criteria: Criteria) diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.api/-states-query/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-states-query/index.html similarity index 75% rename from docs/build/html/api/kotlin/corda/net.corda.node.api/-states-query/index.html rename to docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-states-query/index.html index 3145b32524..163e557a9b 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.api/-states-query/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-states-query/index.html @@ -5,7 +5,7 @@ -corda / net.corda.node.api / StatesQuery
      +corda / net.corda.node.webserver.api / StatesQuery

      StatesQuery

      interface StatesQuery @@ -34,7 +34,7 @@ select -fun select(criteria: Criteria): Selection +fun select(criteria: Criteria): Selection diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-states-query/select.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-states-query/select.html new file mode 100644 index 0000000000..5694197e28 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/-states-query/select.html @@ -0,0 +1,14 @@ + + + +StatesQuery.select - corda + + + +corda / net.corda.node.webserver.api / StatesQuery / select
      +
      +

      select

      + +fun select(criteria: Criteria): Selection + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/index.html new file mode 100644 index 0000000000..d84bb88843 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.api/index.html @@ -0,0 +1,33 @@ + + + +net.corda.node.webserver.api - corda + + + +corda / net.corda.node.webserver.api
      +
      +

      Package net.corda.node.webserver.api

      +

      Types

      + + + + + + + + + + + +
      +APIServer +interface APIServer +

      Top level interface to external interaction with the distributed ledger.

      +
      +StatesQuery +interface StatesQuery +

      Extremely rudimentary query language which should most likely be replaced with a product.

      +
      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.webserver.internal/-a-p-i-server-impl/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.internal/-a-p-i-server-impl/-init-.html new file mode 100644 index 0000000000..0d407f9f58 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.internal/-a-p-i-server-impl/-init-.html @@ -0,0 +1,13 @@ + + + +APIServerImpl.<init> - corda + + + +corda / net.corda.node.webserver.internal / APIServerImpl / <init>
      +
      +

      <init>

      +APIServerImpl(rpcOps: CordaRPCOps) + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.webserver.internal/-a-p-i-server-impl/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.internal/-a-p-i-server-impl/index.html new file mode 100644 index 0000000000..2d896a13a2 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.internal/-a-p-i-server-impl/index.html @@ -0,0 +1,64 @@ + + + +APIServerImpl - corda + + + +corda / net.corda.node.webserver.internal / APIServerImpl
      +
      +

      APIServerImpl

      +class APIServerImpl : APIServer +

      Constructors

      + + + + + + + +
      +<init> +APIServerImpl(rpcOps: CordaRPCOps)
      +

      Properties

      + + + + + + + +
      +rpcOps +val rpcOps: CordaRPCOps
      +

      Functions

      + + + + + + + + + + + + + + + +
      +info +fun info(): NodeInfo +

      Report this node's configuration and identities.

      +
      +serverTime +fun serverTime(): LocalDateTime +

      Report current UTC time as understood by the platform.

      +
      +status +fun status(): Response +

      This endpoint is for polling if the webserver is serving. It will always return 200.

      +
      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/info.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.internal/-a-p-i-server-impl/info.html similarity index 52% rename from docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/info.html rename to docs/build/html/api/kotlin/corda/net.corda.node.webserver.internal/-a-p-i-server-impl/info.html index 9645176f60..5840298ca8 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/info.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.internal/-a-p-i-server-impl/info.html @@ -5,14 +5,12 @@ -corda / net.corda.node.internal / APIServerImpl / info
      +corda / net.corda.node.webserver.internal / APIServerImpl / info

      info

      - + fun info(): NodeInfo -

      Overrides APIServer.info

      -

      Report this node's configuration and identities. -Currently tunnels the NodeInfo as an encoding of the Kryo serialised form. -TODO this functionality should be available via the RPC

      +

      Overrides APIServer.info

      +

      Report this node's configuration and identities.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.webserver.internal/-a-p-i-server-impl/rpc-ops.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.internal/-a-p-i-server-impl/rpc-ops.html new file mode 100644 index 0000000000..2d59c4636a --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.internal/-a-p-i-server-impl/rpc-ops.html @@ -0,0 +1,14 @@ + + + +APIServerImpl.rpcOps - corda + + + +corda / net.corda.node.webserver.internal / APIServerImpl / rpcOps
      +
      +

      rpcOps

      + +val rpcOps: CordaRPCOps + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/server-time.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.internal/-a-p-i-server-impl/server-time.html similarity index 65% rename from docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/server-time.html rename to docs/build/html/api/kotlin/corda/net.corda.node.webserver.internal/-a-p-i-server-impl/server-time.html index 414f3c5668..2db73f6204 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/server-time.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.internal/-a-p-i-server-impl/server-time.html @@ -5,12 +5,12 @@ -corda / net.corda.node.internal / APIServerImpl / serverTime
      +corda / net.corda.node.webserver.internal / APIServerImpl / serverTime

      serverTime

      - + fun serverTime(): LocalDateTime -

      Overrides APIServer.serverTime

      +

      Overrides APIServer.serverTime

      Report current UTC time as understood by the platform.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/status.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.internal/-a-p-i-server-impl/status.html similarity index 57% rename from docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/status.html rename to docs/build/html/api/kotlin/corda/net.corda.node.webserver.internal/-a-p-i-server-impl/status.html index 2fd2e47106..c1699cc895 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.internal/-a-p-i-server-impl/status.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.internal/-a-p-i-server-impl/status.html @@ -5,12 +5,12 @@ -corda / net.corda.node.internal / APIServerImpl / status
      +corda / net.corda.node.webserver.internal / APIServerImpl / status

      status

      - + fun status(): Response -

      Overrides APIServer.status

      -

      Report whether this node is started up or not.

      +

      Overrides APIServer.status

      +

      This endpoint is for polling if the webserver is serving. It will always return 200.

      diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.webserver.internal/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.internal/index.html new file mode 100644 index 0000000000..0a1453c094 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.internal/index.html @@ -0,0 +1,23 @@ + + + +net.corda.node.webserver.internal - corda + + + +corda / net.corda.node.webserver.internal
      +
      +

      Package net.corda.node.webserver.internal

      +

      Types

      + + + + + + + +
      +APIServerImpl +class APIServerImpl : APIServer
      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-attachment-download-servlet/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-attachment-download-servlet/-init-.html similarity index 86% rename from docs/build/html/api/kotlin/corda/net.corda.node.servlets/-attachment-download-servlet/-init-.html rename to docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-attachment-download-servlet/-init-.html index d2570bea76..abbea99001 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-attachment-download-servlet/-init-.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-attachment-download-servlet/-init-.html @@ -5,7 +5,7 @@ -corda / net.corda.node.servlets / AttachmentDownloadServlet / <init>
      +corda / net.corda.node.webserver.servlets / AttachmentDownloadServlet / <init>

      <init>

      AttachmentDownloadServlet() diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-attachment-download-servlet/do-get.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-attachment-download-servlet/do-get.html new file mode 100644 index 0000000000..031d9df99f --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-attachment-download-servlet/do-get.html @@ -0,0 +1,14 @@ + + + +AttachmentDownloadServlet.doGet - corda + + + +corda / net.corda.node.webserver.servlets / AttachmentDownloadServlet / doGet
      +
      +

      doGet

      + +protected fun doGet(req: HttpServletRequest, resp: HttpServletResponse): Unit + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-attachment-download-servlet/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-attachment-download-servlet/index.html similarity index 66% rename from docs/build/html/api/kotlin/corda/net.corda.node.servlets/-attachment-download-servlet/index.html rename to docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-attachment-download-servlet/index.html index feb532f609..dcbbed5c7a 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-attachment-download-servlet/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-attachment-download-servlet/index.html @@ -5,7 +5,7 @@ -corda / net.corda.node.servlets / AttachmentDownloadServlet
      +corda / net.corda.node.webserver.servlets / AttachmentDownloadServlet

      AttachmentDownloadServlet

      class AttachmentDownloadServlet : HttpServlet @@ -35,7 +35,7 @@ TODO: Provide an endpoint that exposes attachment file listings, to make attachm doGet -fun doGet(req: HttpServletRequest, resp: HttpServletResponse): Unit +fun doGet(req: HttpServletRequest, resp: HttpServletResponse): Unit diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-data-upload-servlet/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-data-upload-servlet/-init-.html similarity index 79% rename from docs/build/html/api/kotlin/corda/net.corda.node.servlets/-data-upload-servlet/-init-.html rename to docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-data-upload-servlet/-init-.html index 53607fba91..d3cdfcb340 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-data-upload-servlet/-init-.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-data-upload-servlet/-init-.html @@ -5,7 +5,7 @@ -corda / net.corda.node.servlets / DataUploadServlet / <init>
      +corda / net.corda.node.webserver.servlets / DataUploadServlet / <init>

      <init>

      DataUploadServlet() diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-data-upload-servlet/do-post.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-data-upload-servlet/do-post.html new file mode 100644 index 0000000000..31f450179d --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-data-upload-servlet/do-post.html @@ -0,0 +1,14 @@ + + + +DataUploadServlet.doPost - corda + + + +corda / net.corda.node.webserver.servlets / DataUploadServlet / doPost
      +
      +

      doPost

      + +protected fun doPost(req: HttpServletRequest, resp: HttpServletResponse): Unit + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-data-upload-servlet/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-data-upload-servlet/index.html similarity index 59% rename from docs/build/html/api/kotlin/corda/net.corda.node.servlets/-data-upload-servlet/index.html rename to docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-data-upload-servlet/index.html index d2022d72ac..3a9c9a28c7 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-data-upload-servlet/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-data-upload-servlet/index.html @@ -5,7 +5,7 @@ -corda / net.corda.node.servlets / DataUploadServlet
      +corda / net.corda.node.webserver.servlets / DataUploadServlet

      DataUploadServlet

      class DataUploadServlet : HttpServlet @@ -30,7 +30,7 @@ doPost -fun doPost(req: HttpServletRequest, resp: HttpServletResponse): Unit +fun doPost(req: HttpServletRequest, resp: HttpServletResponse): Unit diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-object-mapper-config/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-object-mapper-config/-init-.html new file mode 100644 index 0000000000..586de63253 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-object-mapper-config/-init-.html @@ -0,0 +1,15 @@ + + + +ObjectMapperConfig.<init> - corda + + + +corda / net.corda.node.webserver.servlets / ObjectMapperConfig / <init>
      +
      +

      <init>

      +ObjectMapperConfig(rpc: CordaRPCOps) +

      Primary purpose is to install Kotlin extensions for Jackson ObjectMapper so data classes work +and to organise serializers / deserializers for java.time.* classes as necessary.

      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-config/default-object-mapper.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-object-mapper-config/default-object-mapper.html similarity index 55% rename from docs/build/html/api/kotlin/corda/net.corda.node.servlets/-config/default-object-mapper.html rename to docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-object-mapper-config/default-object-mapper.html index cfcd56091f..3e31801d2c 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-config/default-object-mapper.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-object-mapper-config/default-object-mapper.html @@ -1,14 +1,14 @@ -Config.defaultObjectMapper - corda +ObjectMapperConfig.defaultObjectMapper - corda -corda / net.corda.node.servlets / Config / defaultObjectMapper
      +corda / net.corda.node.webserver.servlets / ObjectMapperConfig / defaultObjectMapper

      defaultObjectMapper

      - + val defaultObjectMapper: ObjectMapper diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-object-mapper-config/get-context.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-object-mapper-config/get-context.html new file mode 100644 index 0000000000..30c6966bea --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-object-mapper-config/get-context.html @@ -0,0 +1,14 @@ + + + +ObjectMapperConfig.getContext - corda + + + +corda / net.corda.node.webserver.servlets / ObjectMapperConfig / getContext
      +
      +

      getContext

      + +fun getContext(type: Class<*>): ObjectMapper + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-object-mapper-config/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-object-mapper-config/index.html new file mode 100644 index 0000000000..d83db205b5 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-object-mapper-config/index.html @@ -0,0 +1,51 @@ + + + +ObjectMapperConfig - corda + + + +corda / net.corda.node.webserver.servlets / ObjectMapperConfig
      +
      +

      ObjectMapperConfig

      +@Provider class ObjectMapperConfig : ContextResolver<ObjectMapper> +

      Primary purpose is to install Kotlin extensions for Jackson ObjectMapper so data classes work +and to organise serializers / deserializers for java.time.* classes as necessary.

      +

      Constructors

      + + + + + + + +
      +<init> +ObjectMapperConfig(rpc: CordaRPCOps) +

      Primary purpose is to install Kotlin extensions for Jackson ObjectMapper so data classes work +and to organise serializers / deserializers for java.time.* classes as necessary.

      +
      +

      Properties

      + + + + + + + +
      +defaultObjectMapper +val defaultObjectMapper: ObjectMapper
      +

      Functions

      + + + + + + + +
      +getContext +fun getContext(type: Class<*>): ObjectMapper
      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-response-filter/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-response-filter/-init-.html similarity index 75% rename from docs/build/html/api/kotlin/corda/net.corda.node.servlets/-response-filter/-init-.html rename to docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-response-filter/-init-.html index ec7ceceafb..382dd82fe3 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-response-filter/-init-.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-response-filter/-init-.html @@ -5,7 +5,7 @@ -corda / net.corda.node.servlets / ResponseFilter / <init>
      +corda / net.corda.node.webserver.servlets / ResponseFilter / <init>

      <init>

      ResponseFilter() diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-response-filter/filter.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-response-filter/filter.html new file mode 100644 index 0000000000..dfd9c17eba --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-response-filter/filter.html @@ -0,0 +1,14 @@ + + + +ResponseFilter.filter - corda + + + +corda / net.corda.node.webserver.servlets / ResponseFilter / filter
      +
      +

      filter

      + +fun filter(requestContext: ContainerRequestContext, responseContext: ContainerResponseContext): Unit + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-response-filter/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-response-filter/index.html similarity index 53% rename from docs/build/html/api/kotlin/corda/net.corda.node.servlets/-response-filter/index.html rename to docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-response-filter/index.html index 08fe83d773..1d6a341e47 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.servlets/-response-filter/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/-response-filter/index.html @@ -5,7 +5,7 @@ -corda / net.corda.node.servlets / ResponseFilter
      +corda / net.corda.node.webserver.servlets / ResponseFilter

      ResponseFilter

      @Provider class ResponseFilter : ContainerResponseFilter @@ -30,7 +30,7 @@ filter -fun filter(requestContext: ContainerRequestContext, responseContext: ContainerResponseContext): Unit +fun filter(requestContext: ContainerRequestContext, responseContext: ContainerResponseContext): Unit diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.servlets/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/index.html similarity index 79% rename from docs/build/html/api/kotlin/corda/net.corda.node.servlets/index.html rename to docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/index.html index fd4eaa5219..25d3ccbe88 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node.servlets/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver.servlets/index.html @@ -1,13 +1,13 @@ -net.corda.node.servlets - corda +net.corda.node.webserver.servlets - corda -corda / net.corda.node.servlets
      +corda / net.corda.node.webserver.servlets

      -

      Package net.corda.node.servlets

      +

      Package net.corda.node.webserver.servlets

      Types

      @@ -21,15 +21,6 @@ - - - - + + + + +CmdLineOptions(baseDirectory: Path, configFile: Path?, help: Boolean, logToConsole: Boolean, isWebserver: Boolean)
      -Config -class Config : ContextResolver<ObjectMapper> -

      Primary purpose is to install Kotlin extensions for Jackson ObjectMapper so data classes work -and to organise serializers / deserializers for java.time.* classes as necessary.

      -
      DataUploadServlet class DataUploadServlet : HttpServlet @@ -38,6 +29,15 @@ and to organise serializers / deserializers for java.time.* classes as necessary
      +ObjectMapperConfig +class ObjectMapperConfig : ContextResolver<ObjectMapper> +

      Primary purpose is to install Kotlin extensions for Jackson ObjectMapper so data classes work +and to organise serializers / deserializers for java.time.* classes as necessary.

      +
      ResponseFilter class ResponseFilter : ContainerResponseFilter diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.webserver/-web-server/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver/-web-server/-init-.html new file mode 100644 index 0000000000..b10fad8e68 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver/-web-server/-init-.html @@ -0,0 +1,13 @@ + + + +WebServer.<init> - corda + + + +corda / net.corda.node.webserver / WebServer / <init>
      +
      +

      <init>

      +WebServer(config: FullNodeConfiguration) + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.webserver/-web-server/address.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver/-web-server/address.html new file mode 100644 index 0000000000..f43958d455 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver/-web-server/address.html @@ -0,0 +1,14 @@ + + + +WebServer.address - corda + + + +corda / net.corda.node.webserver / WebServer / address
      +
      +

      address

      + +val address: HostAndPort + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.webserver/-web-server/config.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver/-web-server/config.html new file mode 100644 index 0000000000..6a9161576a --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver/-web-server/config.html @@ -0,0 +1,14 @@ + + + +WebServer.config - corda + + + +corda / net.corda.node.webserver / WebServer / config
      +
      +

      config

      + +val config: FullNodeConfiguration + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.webserver/-web-server/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver/-web-server/index.html new file mode 100644 index 0000000000..428eeb03b9 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver/-web-server/index.html @@ -0,0 +1,83 @@ + + + +WebServer - corda + + + +corda / net.corda.node.webserver / WebServer
      +
      +

      WebServer

      +class WebServer +

      Constructors

      + + + + + + + +
      +<init> +WebServer(config: FullNodeConfiguration)
      +

      Properties

      + + + + + + + + + + + + + + + +
      +address +val address: HostAndPort
      +config +val config: FullNodeConfiguration
      +pluginRegistries +val pluginRegistries: List<CordaPluginRegistry> +

      Fetch CordaPluginRegistry classes registered in META-INF/services/net.corda.core.node.CordaPluginRegistry files that exist in the classpath

      +
      +

      Functions

      + + + + + + + + + + + +
      +run +fun run(): Unit
      +start +fun start(): Unit
      +

      Companion Object Properties

      + + + + + + + + + + + +
      +log +val log: Logger
      +retryDelay +val retryDelay: Long
      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.webserver/-web-server/log.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver/-web-server/log.html new file mode 100644 index 0000000000..a4295171aa --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver/-web-server/log.html @@ -0,0 +1,14 @@ + + + +WebServer.log - corda + + + +corda / net.corda.node.webserver / WebServer / log
      +
      +

      log

      + +val log: Logger + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.webserver/-web-server/plugin-registries.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver/-web-server/plugin-registries.html new file mode 100644 index 0000000000..b5bced7fce --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver/-web-server/plugin-registries.html @@ -0,0 +1,18 @@ + + + +WebServer.pluginRegistries - corda + + + +corda / net.corda.node.webserver / WebServer / pluginRegistries
      +
      +

      pluginRegistries

      + +val pluginRegistries: List<CordaPluginRegistry> +

      Fetch CordaPluginRegistry classes registered in META-INF/services/net.corda.core.node.CordaPluginRegistry files that exist in the classpath

      +

      Getter
      +

      Fetch CordaPluginRegistry classes registered in META-INF/services/net.corda.core.node.CordaPluginRegistry files that exist in the classpath

      +

      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.webserver/-web-server/retry-delay.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver/-web-server/retry-delay.html new file mode 100644 index 0000000000..9231ff9a55 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver/-web-server/retry-delay.html @@ -0,0 +1,14 @@ + + + +WebServer.retryDelay - corda + + + +corda / net.corda.node.webserver / WebServer / retryDelay
      +
      +

      retryDelay

      + +val retryDelay: Long + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.webserver/-web-server/run.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver/-web-server/run.html new file mode 100644 index 0000000000..9f87c90e01 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver/-web-server/run.html @@ -0,0 +1,14 @@ + + + +WebServer.run - corda + + + +corda / net.corda.node.webserver / WebServer / run
      +
      +

      run

      + +fun run(): Unit + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.webserver/-web-server/start.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver/-web-server/start.html new file mode 100644 index 0000000000..6807b23d2a --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver/-web-server/start.html @@ -0,0 +1,14 @@ + + + +WebServer.start - corda + + + +corda / net.corda.node.webserver / WebServer / start
      +
      +

      start

      + +fun start(): Unit + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node.webserver/index.html b/docs/build/html/api/kotlin/corda/net.corda.node.webserver/index.html new file mode 100644 index 0000000000..b8a200058e --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node.webserver/index.html @@ -0,0 +1,23 @@ + + + +net.corda.node.webserver - corda + + + +corda / net.corda.node.webserver
      +
      +

      Package net.corda.node.webserver

      +

      Types

      + + + + + + + +
      +WebServer +class WebServer
      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node/-client/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.node/-client/-init-.html new file mode 100644 index 0000000000..322b4fa257 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node/-client/-init-.html @@ -0,0 +1,13 @@ + + + +Client.<init> - corda + + + +corda / net.corda.node / Client / <init>
      +
      +

      <init>

      +Client(serverHostAndPort: HostAndPort) + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node/-client/consumer.html b/docs/build/html/api/kotlin/corda/net.corda.node/-client/consumer.html new file mode 100644 index 0000000000..e7c04fded6 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node/-client/consumer.html @@ -0,0 +1,14 @@ + + + +Client.consumer - corda + + + +corda / net.corda.node / Client / consumer
      +
      +

      consumer

      + +var consumer: ClientConsumer + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node/-client/index.html b/docs/build/html/api/kotlin/corda/net.corda.node/-client/index.html new file mode 100644 index 0000000000..6b48fa29f9 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node/-client/index.html @@ -0,0 +1,64 @@ + + + +Client - corda + + + +corda / net.corda.node / Client
      +
      +

      Client

      +class Client +

      Constructors

      + + + + + + + +
      +<init> +Client(serverHostAndPort: HostAndPort)
      +

      Properties

      + + + + + + + + + + + + + + + +
      +consumer +var consumer: ClientConsumer
      +producer +var producer: ClientProducer
      +session +var session: ClientSession
      +

      Functions

      + + + + + + + + + + + +
      +run +fun run(): Unit
      +send +fun send(message: String, queueName: String): Unit
      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node/-client/producer.html b/docs/build/html/api/kotlin/corda/net.corda.node/-client/producer.html new file mode 100644 index 0000000000..0da28457a6 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node/-client/producer.html @@ -0,0 +1,14 @@ + + + +Client.producer - corda + + + +corda / net.corda.node / Client / producer
      +
      +

      producer

      + +var producer: ClientProducer + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node/-client/run.html b/docs/build/html/api/kotlin/corda/net.corda.node/-client/run.html new file mode 100644 index 0000000000..b201a36d2a --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node/-client/run.html @@ -0,0 +1,14 @@ + + + +Client.run - corda + + + +corda / net.corda.node / Client / run
      +
      +

      run

      + +fun run(): Unit + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node/-client/send.html b/docs/build/html/api/kotlin/corda/net.corda.node/-client/send.html new file mode 100644 index 0000000000..a5dd6db4ab --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node/-client/send.html @@ -0,0 +1,14 @@ + + + +Client.send - corda + + + +corda / net.corda.node / Client / send
      +
      +

      send

      + +fun send(message: String, queueName: String): Unit + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node/-client/session.html b/docs/build/html/api/kotlin/corda/net.corda.node/-client/session.html new file mode 100644 index 0000000000..49c9f119c9 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node/-client/session.html @@ -0,0 +1,14 @@ + + + +Client.session - corda + + + +corda / net.corda.node / Client / session
      +
      +

      session

      + +var session: ClientSession + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node/-cmd-line-options/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.node/-cmd-line-options/-init-.html index d2285be0d6..ecaa27f801 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node/-cmd-line-options/-init-.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node/-cmd-line-options/-init-.html @@ -8,6 +8,6 @@ corda / net.corda.node / CmdLineOptions / <init>

      <init>

      -CmdLineOptions(baseDirectory: Path, configFile: Path?, help: Boolean, logToConsole: Boolean) +CmdLineOptions(baseDirectory: Path, configFile: Path?, help: Boolean, logToConsole: Boolean, isWebserver: Boolean) diff --git a/docs/build/html/api/kotlin/corda/net.corda.node/-cmd-line-options/index.html b/docs/build/html/api/kotlin/corda/net.corda.node/-cmd-line-options/index.html index a5891195d4..4988b017d1 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node/-cmd-line-options/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node/-cmd-line-options/index.html @@ -16,7 +16,7 @@
      <init> -CmdLineOptions(baseDirectory: Path, configFile: Path?, help: Boolean, logToConsole: Boolean)
      @@ -43,6 +43,12 @@ +isWebserver + +val isWebserver: Boolean + + + logToConsole val logToConsole: Boolean diff --git a/docs/build/html/api/kotlin/corda/net.corda.node/-cmd-line-options/is-webserver.html b/docs/build/html/api/kotlin/corda/net.corda.node/-cmd-line-options/is-webserver.html new file mode 100644 index 0000000000..277dbc6bde --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node/-cmd-line-options/is-webserver.html @@ -0,0 +1,14 @@ + + + +CmdLineOptions.isWebserver - corda + + + +corda / net.corda.node / CmdLineOptions / isWebserver
      +
      +

      isWebserver

      + +val isWebserver: Boolean + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node/-connection-direction/-inbound.html b/docs/build/html/api/kotlin/corda/net.corda.node/-connection-direction/-inbound.html new file mode 100644 index 0000000000..5feb1af58d --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node/-connection-direction/-inbound.html @@ -0,0 +1,13 @@ + + + +ConnectionDirection.Inbound - corda + + + +corda / net.corda.node / ConnectionDirection / Inbound
      +
      +

      Inbound

      +object Inbound : ConnectionDirection + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node/-connection-direction/-outbound/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.node/-connection-direction/-outbound/-init-.html new file mode 100644 index 0000000000..deb10f2b5b --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node/-connection-direction/-outbound/-init-.html @@ -0,0 +1,13 @@ + + + +ConnectionDirection.Outbound.<init> - corda + + + +corda / net.corda.node / ConnectionDirection / Outbound / <init>
      +
      +

      <init>

      +Outbound(expectedCommonName: String? = null) + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node/-connection-direction/-outbound/expected-common-name.html b/docs/build/html/api/kotlin/corda/net.corda.node/-connection-direction/-outbound/expected-common-name.html new file mode 100644 index 0000000000..b64350072d --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node/-connection-direction/-outbound/expected-common-name.html @@ -0,0 +1,14 @@ + + + +ConnectionDirection.Outbound.expectedCommonName - corda + + + +corda / net.corda.node / ConnectionDirection / Outbound / expectedCommonName
      +
      +

      expectedCommonName

      + +val expectedCommonName: String? + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node/-connection-direction/-outbound/index.html b/docs/build/html/api/kotlin/corda/net.corda.node/-connection-direction/-outbound/index.html new file mode 100644 index 0000000000..7f7362a321 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node/-connection-direction/-outbound/index.html @@ -0,0 +1,35 @@ + + + +ConnectionDirection.Outbound - corda + + + +corda / net.corda.node / ConnectionDirection / Outbound
      +
      +

      Outbound

      +class Outbound : ConnectionDirection +

      Constructors

      + + + + + + + +
      +<init> +Outbound(expectedCommonName: String? = null)
      +

      Properties

      + + + + + + + +
      +expectedCommonName +val expectedCommonName: String?
      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node/-connection-direction/index.html b/docs/build/html/api/kotlin/corda/net.corda.node/-connection-direction/index.html new file mode 100644 index 0000000000..734b124856 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node/-connection-direction/index.html @@ -0,0 +1,47 @@ + + + +ConnectionDirection - corda + + + +corda / net.corda.node / ConnectionDirection
      +
      +

      ConnectionDirection

      +sealed class ConnectionDirection +

      Types

      + + + + + + + + + + + +
      +Inbound +object Inbound : ConnectionDirection
      +Outbound +class Outbound : ConnectionDirection
      +

      Inheritors

      + + + + + + + + + + + +
      +Inbound +object Inbound : ConnectionDirection
      +Outbound +class Outbound : ConnectionDirection
      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node/-p2-p_-q-u-e-u-e.html b/docs/build/html/api/kotlin/corda/net.corda.node/-p2-p_-q-u-e-u-e.html new file mode 100644 index 0000000000..15bc54c509 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node/-p2-p_-q-u-e-u-e.html @@ -0,0 +1,14 @@ + + + +P2P_QUEUE - corda + + + +corda / net.corda.node / P2P_QUEUE
      +
      +

      P2P_QUEUE

      + +const val P2P_QUEUE: String + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node/-server/-init-.html b/docs/build/html/api/kotlin/corda/net.corda.node/-server/-init-.html new file mode 100644 index 0000000000..21cb6661c1 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node/-server/-init-.html @@ -0,0 +1,13 @@ + + + +Server.<init> - corda + + + +corda / net.corda.node / Server / <init>
      +
      +

      <init>

      +Server(baseDir: String, myHostPort: HostAndPort) + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node/-server/base-dir.html b/docs/build/html/api/kotlin/corda/net.corda.node/-server/base-dir.html new file mode 100644 index 0000000000..8740e586fc --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node/-server/base-dir.html @@ -0,0 +1,14 @@ + + + +Server.baseDir - corda + + + +corda / net.corda.node / Server / baseDir
      +
      +

      baseDir

      + +val baseDir: String + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node/-server/index.html b/docs/build/html/api/kotlin/corda/net.corda.node/-server/index.html new file mode 100644 index 0000000000..680279ca32 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node/-server/index.html @@ -0,0 +1,47 @@ + + + +Server - corda + + + +corda / net.corda.node / Server
      +
      +

      Server

      +class Server +

      Constructors

      + + + + + + + +
      +<init> +Server(baseDir: String, myHostPort: HostAndPort)
      +

      Properties

      + + + + + + + + + + + + + + + +
      +baseDir +val baseDir: String
      +log +val log: Logger
      +myHostPort +val myHostPort: HostAndPort
      + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node/-server/log.html b/docs/build/html/api/kotlin/corda/net.corda.node/-server/log.html new file mode 100644 index 0000000000..326d33de73 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node/-server/log.html @@ -0,0 +1,14 @@ + + + +Server.log - corda + + + +corda / net.corda.node / Server / log
      +
      +

      log

      + +val log: Logger + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node/-server/my-host-port.html b/docs/build/html/api/kotlin/corda/net.corda.node/-server/my-host-port.html new file mode 100644 index 0000000000..d8bce64b1e --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node/-server/my-host-port.html @@ -0,0 +1,14 @@ + + + +Server.myHostPort - corda + + + +corda / net.corda.node / Server / myHostPort
      +
      +

      myHostPort

      + +val myHostPort: HostAndPort + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node/index.html b/docs/build/html/api/kotlin/corda/net.corda.node/index.html index d2a4c96aac..8f83cc9f90 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node/index.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node/index.html @@ -19,10 +19,45 @@ +Client + +class Client + + + CmdLineOptions data class CmdLineOptions + + +ConnectionDirection + +sealed class ConnectionDirection + + + +Server + +class Server + + + +

      Properties

      + + + + + + + + + +
      +P2P_QUEUE +const val P2P_QUEUE: String
      +nameToAddress +val nameToAddress: Map<String, String>

      Functions

      @@ -32,6 +67,7 @@ main +fun main(args: Array<String>): Unit
      fun main(args: Array<String>): Unit @@ -42,6 +78,12 @@

      Used for useful info that we always want to show, even when not logging to the console

      + + +tcpTransport + +fun tcpTransport(direction: ConnectionDirection, host: String, port: Int): TransportConfiguration + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node/main.html b/docs/build/html/api/kotlin/corda/net.corda.node/main.html index a826c9f4f8..ce0c1eb541 100644 --- a/docs/build/html/api/kotlin/corda/net.corda.node/main.html +++ b/docs/build/html/api/kotlin/corda/net.corda.node/main.html @@ -9,6 +9,8 @@

      main

      +fun main(args: Array<String>): Unit
      + fun main(args: Array<String>): Unit diff --git a/docs/build/html/api/kotlin/corda/net.corda.node/name-to-address.html b/docs/build/html/api/kotlin/corda/net.corda.node/name-to-address.html new file mode 100644 index 0000000000..eba57fed03 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node/name-to-address.html @@ -0,0 +1,14 @@ + + + +nameToAddress - corda + + + +corda / net.corda.node / nameToAddress
      +
      +

      nameToAddress

      + +val nameToAddress: Map<String, String> + + diff --git a/docs/build/html/api/kotlin/corda/net.corda.node/tcp-transport.html b/docs/build/html/api/kotlin/corda/net.corda.node/tcp-transport.html new file mode 100644 index 0000000000..1cb8a4ce66 --- /dev/null +++ b/docs/build/html/api/kotlin/corda/net.corda.node/tcp-transport.html @@ -0,0 +1,14 @@ + + + +tcpTransport - corda + + + +corda / net.corda.node / tcpTransport
      +
      +

      tcpTransport

      + +fun tcpTransport(direction: ConnectionDirection, host: String, port: Int): TransportConfiguration + + diff --git a/docs/build/html/azure-vm.html b/docs/build/html/azure-vm.html index 0aab6096d4..5bdb65a310 100644 --- a/docs/build/html/azure-vm.html +++ b/docs/build/html/azure-vm.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/building-the-docs.html b/docs/build/html/building-the-docs.html index 427bdedc92..9da2aafb33 100644 --- a/docs/build/html/building-the-docs.html +++ b/docs/build/html/building-the-docs.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/clauses.html b/docs/build/html/clauses.html index e4543e0870..85c61c4046 100644 --- a/docs/build/html/clauses.html +++ b/docs/build/html/clauses.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/clientrpc.html b/docs/build/html/clientrpc.html index c5fb9ad427..24d65c4a3e 100644 --- a/docs/build/html/clientrpc.html +++ b/docs/build/html/clientrpc.html @@ -34,9 +34,6 @@ - - @@ -127,6 +124,7 @@ API reference: Kotlin/ Client RPC
      • Security
      • Observables
      • +
      • Futures
      • Versioning
      • Thread safety
      • Error handling
      • @@ -274,6 +272,13 @@ a warning printed to the logs and the proxy will be closed for you. But don̵ collection is non-deterministic.

        +
        +

        Futures

        +

        A method can also return a ListenableFuture in its object graph and it will be treated in a similar manner to +observables, including needing to mark the RPC with the @RPCReturnsObservables annotation. Unlike for an observable, +once the single value (or an exception) has been received all server-side resources will be released automatically. Calling +the cancel method on the future will unsubscribe it from any future value and release any resources.

        +

        Versioning

        The client RPC protocol is versioned with a simple incrementing integer. When a proxy is created the server is diff --git a/docs/build/html/codestyle.html b/docs/build/html/codestyle.html index 53cbe4d608..9169c2165a 100644 --- a/docs/build/html/codestyle.html +++ b/docs/build/html/codestyle.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/contract-catalogue.html b/docs/build/html/contract-catalogue.html index 5abf21c0f3..f70ae1763c 100644 --- a/docs/build/html/contract-catalogue.html +++ b/docs/build/html/contract-catalogue.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/contract-irs.html b/docs/build/html/contract-irs.html index 43e314a22c..2d3ae16e4a 100644 --- a/docs/build/html/contract-irs.html +++ b/docs/build/html/contract-irs.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/corda-configuration-file.html b/docs/build/html/corda-configuration-file.html index 2eef745c50..618325b89f 100644 --- a/docs/build/html/corda-configuration-file.html +++ b/docs/build/html/corda-configuration-file.html @@ -34,9 +34,6 @@ - - @@ -346,7 +343,7 @@ here must be externally accessible when running nodes across a cluster of machin  

        The address of the ArtemisMQ broker instance. If not provided the node will run one locally.

        -webAddress:

        The host and port on which the node is available for web operations.

        +webAddress:

        The host and port on which the bundled webserver will listen if it is started.

        Note

        If HTTPS is enabled then the browser security checks will require that the accessing url host name is one @@ -354,6 +351,11 @@ of either the machine name, fully qualified machine name, or server IP address t Names contained within the development certificates. This is addition to requiring the /config/dev/corda_dev_ca.cer root certificate be installed as a Trusted CA.

        +
        +

        Note

        +

        The driver will not automatically create a webserver instance, but the Cordformation will. If this field +is present the web server will start.

        +
        extraAdvertisedServiceIds: diff --git a/docs/build/html/corda-plugins.html b/docs/build/html/corda-plugins.html index d4aee0732e..c1c16ee452 100644 --- a/docs/build/html/corda-plugins.html +++ b/docs/build/html/corda-plugins.html @@ -34,9 +34,6 @@ - - @@ -250,20 +247,15 @@ of the node internal subsystems.

        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 access 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 cannot 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.)

        +classes. These classes will be constructed by the bundled web server +and must have a single argument constructor taking a CordaRPCOps +reference. This will allow it to communicate with the node process +via the RPC interface. These web APIs will not be available if the +bundled web server is not started.

        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.)

        +jars. These static serving directories will not be available if the +bundled web server is not started.

        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 diff --git a/docs/build/html/creating-a-cordapp.html b/docs/build/html/creating-a-cordapp.html index 78de10bc35..3ebd89cd06 100644 --- a/docs/build/html/creating-a-cordapp.html +++ b/docs/build/html/creating-a-cordapp.html @@ -34,9 +34,6 @@ - - @@ -251,10 +248,10 @@ contained in separate JARs from the node server JAR that are created and distrib

        To create an app plugin you must you must extend from CordaPluginRegistry. The JavaDoc contains specific details of the implementation, but you can extend the server in the following ways:

          -
        1. Required flows: Specify which flows will be whitelisted for use in your web APIs.
        2. +
        3. Required flows: Specify which flows will be whitelisted for use in your RPC calls.
        4. Service plugins: Register your services (see below).
        5. -
        6. Web APIs: You may register your own endpoints under /api/ of the built-in web server.
        7. -
        8. Static web endpoints: You may register your own static serving directories for serving web content.
        9. +
        10. Web APIs: You may register your own endpoints under /api/ of the bundled web server.
        11. +
        12. Static web endpoints: You may register your own static serving directories for serving web content from the web server.
        13. Registering your additional classes used in RPC.
        diff --git a/docs/build/html/event-scheduling.html b/docs/build/html/event-scheduling.html index 93e7858dd4..9e9c91559f 100644 --- a/docs/build/html/event-scheduling.html +++ b/docs/build/html/event-scheduling.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/flow-state-machines.html b/docs/build/html/flow-state-machines.html index 277847a9d9..0eeca5a664 100644 --- a/docs/build/html/flow-state-machines.html +++ b/docs/build/html/flow-state-machines.html @@ -34,9 +34,6 @@ - - @@ -149,6 +146,7 @@ API reference: Kotlin/ Suspendable functions
      • Starting your flow
      • Implementing the seller
      • +
      • Exception handling
      • Sub-flows
      • Implementing the buyer
      • Progress tracking
      • @@ -326,8 +324,8 @@ write them and the approach is the same.

        object TwoPartyTradeFlow {
         
        -    class UnacceptablePriceException(val givenPrice: Amount<Currency>) : Exception("Unacceptable price: $givenPrice")
        -    class AssetMismatchException(val expectedTypeName: String, val typeName: String) : Exception() {
        +    class UnacceptablePriceException(val givenPrice: Amount<Currency>) : FlowException("Unacceptable price: $givenPrice")
        +    class AssetMismatchException(val expectedTypeName: String, val typeName: String) : FlowException() {
                 override fun toString() = "The submitted asset didn't match the expected type: $expectedTypeName vs $typeName"
             }
         
        @@ -449,15 +447,15 @@ is a seller (Seller::classImplementing the seller
         

        Let’s implement the Seller.call method. This will be run when the flow is invoked.

        -
        @Suspendable
        -override fun call(): SignedTransaction {
        -    val partialTX: SignedTransaction = receiveAndCheckProposedTransaction()
        -    val ourSignature: DigitalSignature.WithKey = computeOurSignature(partialTX)
        -    val allPartySignedTx = partialTX + ourSignature
        -    val notarySignature = getNotarySignature(allPartySignedTx)
        -    val result: SignedTransaction = sendSignatures(allPartySignedTx, ourSignature, notarySignature)
        -    return result
        -}
        +
            @Suspendable
        +    override fun call(): SignedTransaction {
        +        val partialTX: SignedTransaction = receiveAndCheckProposedTransaction()
        +        val ourSignature: DigitalSignature.WithKey = calculateOurSignature(partialTX)
        +        val allPartySignedTx: SignedTransaction = partialTX + ourSignature
        +        val notarySignature: DigitalSignature.WithKey = getNotarySignature(allPartySignedTx)
        +        val result: SignedTransaction = sendSignatures(allPartySignedTx, ourSignature, notarySignature)
        +        return result
        +    }
         
        @@ -470,29 +468,36 @@ as the notary may validate the signatures as well as verifying for itself the tr Finally, we hand back to the code that invoked the flow the finished transaction.

        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 myPublicKey = myKeyPair.public.composite
        -    val hello = SellerTradeInfo(assetToSell, price, myPublicKey)
        +
            @Suspendable
        +    private fun receiveAndCheckProposedTransaction(): SignedTransaction {
        +        progressTracker.currentStep = AWAITING_PROPOSAL
         
        -    val maybeSTX = sendAndReceive<SignedTransaction>(otherSide, hello)
        +        val myPublicKey = myKeyPair.public.composite
        +        // Make the first message we'll send to kick off the flow.
        +        val hello = SellerTradeInfo(assetToSell, price, myPublicKey)
         
        -    maybeSTX.unwrap {
        -        // Check that the tx proposed by the buyer is valid.
        -        val wtx: WireTransaction = it.verifySignatures(myPublicKey, notaryNode.notaryIdentity.owningKey)
        -        logger.trace { "Received partially signed transaction: ${it.id}" }
        +        val maybeSTX = sendAndReceive<SignedTransaction>(otherParty, hello)
         
        -        // 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, otherParty))
        +        progressTracker.currentStep = VERIFYING
         
        -        if (wtx.outputs.map { it.data }.sumCashBy(myPublicKey).withoutIssuer() != price)
        -            throw IllegalArgumentException("Transaction is not sending us the right amount of cash")
        +        maybeSTX.unwrap {
        +            progressTracker.nextStep()
         
        -        return it
        +            // Check that the tx proposed by the buyer is valid.
        +            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, otherParty))
        +
        +            if (wtx.outputs.map { it.data }.sumCashBy(myPublicKey).withoutIssuer() != price) {
        +                throw FlowException("Transaction is not sending us the right amount of cash")
        +            }
        +
        +            return it
        +        }
             }
        -}
         
        @@ -536,15 +541,34 @@ because of course we didn’t sign it yet, and also the signature of the not
      • We verify that the transaction is paying us the demanded price.
      • +
        +

        Exception handling

        +

        Flows can throw exceptions to prematurely terminate their execution. The flow framework gives special treatment to +FlowException and its subtypes. These exceptions are treated as error responses of the flow and are propagated +to all counterparties it is communicating with. The receiving flows will throw the same exception the next time they do +a receive or sendAndReceive and thus end the flow session. If the receiver was invoked via subFlow (details below) +then the exception can be caught there enabling re-invocation of the sub-flow.

        +

        If the exception thrown by the erroring flow is not a FlowException it will still terminate but will not propagate to +the other counterparties. Instead they will be informed the flow has terminated and will themselves be terminated with a +generic exception.

        +
        +

        Note

        +

        A future version will extend this to give the node administrator more control on what to do with such erroring +flows.

        +
        +

        Throwing a FlowException enables a flow to reject a piece of data it has received back to the sender. This is typically +done in the unwrap method of the received UntrustworthyData. In the above example the seller checks the price +and throws FlowException if it’s invalid. It’s then up to the buyer to either try again with a better price or give up.

        +

        Sub-flows

        Flows can be composed via nesting. Invoking a sub-flow looks similar to an ordinary function call:

        -
        @Suspendable
        -private fun getNotarySignature(stx: SignedTransaction): DigitalSignature.LegallyIdentifiable {
        -    progressTracker.currentStep = NOTARY
        -    return subFlow(NotaryFlow.Client(stx))
        -}
        +
            @Suspendable
        +    private fun getNotarySignature(stx: SignedTransaction): DigitalSignature.WithKey {
        +        progressTracker.currentStep = NOTARY
        +        return subFlow(NotaryFlow.Client(stx))
        +    }
         
        @@ -569,16 +593,23 @@ leak will come later.

        well (but having handled the fact that some signatures are missing ourselves).

        Here’s the rest of the code:

        -
        open fun calculateOurSignature(partialTX: SignedTransaction) = myKeyPair.signWithECDSA(partialTX.id)
        +
            open fun calculateOurSignature(partialTX: SignedTransaction): DigitalSignature.WithKey {
        +        progressTracker.currentStep = SIGNING
        +        return myKeyPair.signWithECDSA(partialTX.id)
        +    }
         
        -@Suspendable
        -private fun sendSignatures(allPartySignedTX: SignedTransaction, ourSignature: DigitalSignature.WithKey,
        -                           notarySignature: DigitalSignature.WithKey): SignedTransaction {
        -    val fullySigned = allPartySignedTX + notarySignature
        -    logger.trace { "Built finished transaction, sending back to secondary!" }
        -    send(otherSide, SignaturesFromSeller(ourSignature, notarySignature))
        -    return fullySigned
        -}
        +    @Suspendable
        +    private fun sendSignatures(allPartySignedTx: SignedTransaction,
        +                               ourSignature: DigitalSignature.WithKey,
        +                               notarySignature: DigitalSignature.WithKey): SignedTransaction {
        +        progressTracker.currentStep = SENDING_SIGS
        +        val fullySigned = allPartySignedTx + notarySignature
        +
        +        logger.trace { "Built finished transaction, sending back to secondary!" }
        +
        +        send(otherParty, SignaturesFromSeller(ourSignature, notarySignature))
        +        return fullySigned
        +    }
         
        @@ -603,95 +634,95 @@ future version of the code.

        Implementing the buyer

        OK, let’s do the same for the buyer side:

        -
        @Suspendable
        -override fun call(): SignedTransaction {
        -    val tradeRequest = receiveAndValidateTradeRequest()
        +
            @Suspendable
        +    override fun call(): SignedTransaction {
        +        val tradeRequest = receiveAndValidateTradeRequest()
         
        -    progressTracker.currentStep = SIGNING
        -    val (ptx, cashSigningPubKeys) = assembleSharedTX(tradeRequest)
        -    val stx = signWithOurKeys(cashSigningPubKeys, ptx)
        +        progressTracker.currentStep = SIGNING
        +        val (ptx, cashSigningPubKeys) = assembleSharedTX(tradeRequest)
        +        val stx = signWithOurKeys(cashSigningPubKeys, ptx)
         
        -    val signatures = swapSignaturesWithSeller(stx)
        +        val signatures = swapSignaturesWithSeller(stx)
         
        -    logger.trace { "Got signatures from seller, verifying ... " }
        +        logger.trace { "Got signatures from seller, verifying ... " }
         
        -    val fullySigned = stx + signatures.sellerSig + signatures.notarySig
        -    fullySigned.verifySignatures()
        +        val fullySigned = stx + signatures.sellerSig + signatures.notarySig
        +        fullySigned.verifySignatures()
         
        -    logger.trace { "Signatures received are valid. Trade complete! :-)" }
        -    return fullySigned
        -}
        -
        -@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)
        -
        -    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}" }
        -
        -        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), otherParty))
        -
        -        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>(otherParty, stx).unwrap { it }
        -}
        -
        -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))
        +        logger.trace { "Signatures received are valid. Trade complete! :-)" }
        +        return fullySigned
             }
         
        -    return ptx.toSignedTransaction(checkSufficientSignatures = false)
        -}
        +    @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)
         
        -private fun assembleSharedTX(tradeRequest: SellerTradeInfo): Pair<TransactionBuilder, List<CompositeKey>> {
        -    val ptx = TransactionType.General.Builder(notary)
        +        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}" }
         
        -    // 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)
        +            if (it.price > acceptablePrice)
        +                throw UnacceptablePriceException(it.price)
        +            if (!typeToBuy.isInstance(asset))
        +                throw AssetMismatchException(typeToBuy.name, assetTypeName)
         
        -    // Add inputs/outputs/a command for the movement of the asset.
        -    tx.addInputState(tradeRequest.assetForSale)
        +            // 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))
         
        -    // 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)
        +            return it
        +        }
        +    }
         
        -    // 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)
        -}
        +    @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>(otherParty, stx).unwrap { it }
        +    }
        +
        +    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))
        +        }
        +
        +        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)
        +    }
         
        @@ -730,11 +761,8 @@ approved”, “Downloading and verifying data” etc.

        val typeToBuy: Class<out OwnableState>) : FlowLogic<SignedTransaction>() { object RECEIVING : ProgressTracker.Step("Waiting for seller trading info") - object VERIFYING : ProgressTracker.Step("Verifying seller assets") - object SIGNING : ProgressTracker.Step("Generating and signing transaction proposal") - object SWAPPING_SIGNATURES : ProgressTracker.Step("Swapping signatures with the seller") override val progressTracker = ProgressTracker(RECEIVING, VERIFYING, SIGNING, SWAPPING_SIGNATURES) @@ -824,7 +852,7 @@ flows for this reason (see “
      • Identity based addressing
      • -
      • Exception propagation and management, with a “flow hospital” tool to manually provide solutions to unavoidable +
      • Exception 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 RPC
      • Being able to interact with people, either via some sort of external ticketing system, or email, or a custom UI. diff --git a/docs/build/html/flow-testing.html b/docs/build/html/flow-testing.html index 1cb8d1b918..ed3468242c 100644 --- a/docs/build/html/flow-testing.html +++ b/docs/build/html/flow-testing.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/further-notes-on-kotlin.html b/docs/build/html/further-notes-on-kotlin.html index b523dc1dd9..e7601726f0 100644 --- a/docs/build/html/further-notes-on-kotlin.html +++ b/docs/build/html/further-notes-on-kotlin.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/genindex.html b/docs/build/html/genindex.html index d0154aaa3b..56012bed83 100644 --- a/docs/build/html/genindex.html +++ b/docs/build/html/genindex.html @@ -35,9 +35,6 @@ - - diff --git a/docs/build/html/getting-set-up-fault-finding.html b/docs/build/html/getting-set-up-fault-finding.html index feb16d4858..2b4facabe5 100644 --- a/docs/build/html/getting-set-up-fault-finding.html +++ b/docs/build/html/getting-set-up-fault-finding.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/getting-set-up.html b/docs/build/html/getting-set-up.html index 47c04a59e9..10f647ea03 100644 --- a/docs/build/html/getting-set-up.html +++ b/docs/build/html/getting-set-up.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/glossary.html b/docs/build/html/glossary.html index 6c409bc510..3f701a27b4 100644 --- a/docs/build/html/glossary.html +++ b/docs/build/html/glossary.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/index.html b/docs/build/html/index.html index 027f690c67..3f238f44d6 100644 --- a/docs/build/html/index.html +++ b/docs/build/html/index.html @@ -34,9 +34,6 @@ - - @@ -225,10 +222,10 @@ API reference: Kotlin/

        Warning

        This build of the docs is from the “latest” branch, not a milestone release. It may not reflect the -current state of the code. Read the docs for milestone release M7.

        +current state of the code. Read the docs for milestone release M8.

      • Corda is an open-source distributed ledger platform. The latest milestone (i.e. stable) -release is M7. The codebase is on GitHub, and our community can be found on +release is M8. The codebase is on GitHub, and our community can be found on Slack and in our forum.

        If you’re new to Corda, you should start by learning about its motivating vision and architecture. A good introduction is the Introduction to Corda webinar and the Introductory white paper. As @@ -251,8 +248,8 @@ platform itself. Find out more about

        Documentation Contents:

        -
        -

        Getting started

        +
        +

        Getting started

        • What’s included?
        • Getting set up
            @@ -285,8 +282,8 @@ platform itself. Find out more about -

            Key concepts

            +
            +

            Key concepts

            -
            -

            CorDapps

            +
            +

            CorDapps

            • CorDapp basics
              • App plugins
              • @@ -353,12 +350,13 @@ platform itself. Find out more about -

                The Corda node

                +
                +

                The Corda node

                • Client RPC
                • Node Explorer
                    @@ -419,8 +418,8 @@ platform itself. Find out more about -

                    Tutorials

                    +
                    +

                    Tutorials

                    • Writing a contract
                      • Where to put your code
                      • @@ -479,6 +478,7 @@ platform itself. Find out more about Suspendable functions
                      • Starting your flow
                      • Implementing the seller
                      • +
                      • Exception handling
                      • Sub-flows
                      • Implementing the buyer
                      • Progress tracking
                      • @@ -511,8 +511,8 @@ platform itself. Find out more about -

                        Other

                        +
                        +

                        Other

                        • Network Simulator
                          • What it is and is not
                          • @@ -533,8 +533,8 @@ platform itself. Find out more about -

                            Component library

                            +
                            +

                            Component library

                            • Contract catalogue
                              • Cash
                              • @@ -551,8 +551,8 @@ platform itself. Find out more about -

                                Appendix

                                +
                                +

                                Appendix

                                • Load testing
                                  • Configuration of the load testing cluster
                                  • @@ -619,8 +619,8 @@ platform itself. Find out more about -

                                    Glossary

                                    +
                                    +

                                    Glossary

                                    diff --git a/docs/build/html/inthebox.html b/docs/build/html/inthebox.html index ea4e5641cb..49e895f5a1 100644 --- a/docs/build/html/inthebox.html +++ b/docs/build/html/inthebox.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/key-concepts-consensus-notaries.html b/docs/build/html/key-concepts-consensus-notaries.html index a3cea12b24..c0bd2b2005 100644 --- a/docs/build/html/key-concepts-consensus-notaries.html +++ b/docs/build/html/key-concepts-consensus-notaries.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/key-concepts-core-types.html b/docs/build/html/key-concepts-core-types.html index cb72956a21..ca906012b7 100644 --- a/docs/build/html/key-concepts-core-types.html +++ b/docs/build/html/key-concepts-core-types.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/key-concepts-data-model.html b/docs/build/html/key-concepts-data-model.html index 722202b995..d70aeae348 100644 --- a/docs/build/html/key-concepts-data-model.html +++ b/docs/build/html/key-concepts-data-model.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/key-concepts-ecosystem.html b/docs/build/html/key-concepts-ecosystem.html index 31498adced..2f4a5ddfae 100644 --- a/docs/build/html/key-concepts-ecosystem.html +++ b/docs/build/html/key-concepts-ecosystem.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/key-concepts-financial-model.html b/docs/build/html/key-concepts-financial-model.html index 17204568ce..43e891ade1 100644 --- a/docs/build/html/key-concepts-financial-model.html +++ b/docs/build/html/key-concepts-financial-model.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/key-concepts-flow-framework.html b/docs/build/html/key-concepts-flow-framework.html index 3e319dd8a7..a73cc16a3b 100644 --- a/docs/build/html/key-concepts-flow-framework.html +++ b/docs/build/html/key-concepts-flow-framework.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/key-concepts-security-model.html b/docs/build/html/key-concepts-security-model.html index 29f99c6a91..1c7f651869 100644 --- a/docs/build/html/key-concepts-security-model.html +++ b/docs/build/html/key-concepts-security-model.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/key-concepts-vault.html b/docs/build/html/key-concepts-vault.html index d496b282eb..fa1c981898 100644 --- a/docs/build/html/key-concepts-vault.html +++ b/docs/build/html/key-concepts-vault.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/key-concepts.html b/docs/build/html/key-concepts.html index 45b6fc9f63..b2d11fed22 100644 --- a/docs/build/html/key-concepts.html +++ b/docs/build/html/key-concepts.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/loadtesting.html b/docs/build/html/loadtesting.html index f9606af73e..df85b935a2 100644 --- a/docs/build/html/loadtesting.html +++ b/docs/build/html/loadtesting.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/merkle-trees.html b/docs/build/html/merkle-trees.html index 0692db7bdd..4ca095d213 100644 --- a/docs/build/html/merkle-trees.html +++ b/docs/build/html/merkle-trees.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/messaging.html b/docs/build/html/messaging.html index a67be36d85..aa0816e63c 100644 --- a/docs/build/html/messaging.html +++ b/docs/build/html/messaging.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/network-simulator.html b/docs/build/html/network-simulator.html index d615831924..3552ed2acb 100644 --- a/docs/build/html/network-simulator.html +++ b/docs/build/html/network-simulator.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/node-administration.html b/docs/build/html/node-administration.html index e47e495863..53116cbb17 100644 --- a/docs/build/html/node-administration.html +++ b/docs/build/html/node-administration.html @@ -34,9 +34,6 @@ - - @@ -231,8 +228,9 @@ API reference: Kotlin/

                                    Node administration

                                    -

                                    When a node is running, it exposes an embedded database server, an embedded web server that lets you monitor it, -you can upload and download attachments, access a REST API and so on.

                                    +

                                    When a node is running, it exposes an RPC interface that lets you monitor it, +you can upload and download attachments, access a REST API and so on. A bundled +Jetty web server exposes the same interface over HTTP.

                                    Logging

                                    In the default configuration logs are stored to the logs subdirectory of the node directory and are rotated from time to time. You can diff --git a/docs/build/html/node-explorer.html b/docs/build/html/node-explorer.html index d3506146a9..ceec23006a 100644 --- a/docs/build/html/node-explorer.html +++ b/docs/build/html/node-explorer.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/node-services.html b/docs/build/html/node-services.html index bdc5106a01..331337e50c 100644 --- a/docs/build/html/node-services.html +++ b/docs/build/html/node-services.html @@ -34,9 +34,6 @@ - - @@ -167,6 +164,7 @@ API reference: Kotlin/ NodeSchemaService and HibernateObserver

                                • +
                                • Node Web Server
                              • Node Explorer
                              • @@ -578,6 +576,14 @@ tables. To enable these features the contract state must implement the QueryableState interface to define the mappings.

                            +
                            +

                            Node Web Server

                            +

                            A web server comes bundled with the node by default, but is not started +automatically. This web server exposes both RPC backed API calls and +static content serving. The web server is not automatically started, +you must explicitly start it in the node driver or define a web port +in your `Cordformation`_ configuration.

                            +
                        diff --git a/docs/build/html/objects.inv b/docs/build/html/objects.inv index a0758322adb0a7cd06fde546e44f01b08df7f049..33386b4fcdf12a1125f574a8ac7a3c0530896e5a 100644 GIT binary patch delta 1478 zcmV;%1v&b~3$YB4eScU@k0U1#z4I%GHd0PR$~BkO#50Mk-N}w-HrZo@yUR8*4K1KO z>-_o@pWXDwZ1(1^di8(;UKQSb+_S4?`}+rKUHfaR8_Is6yJG$M>^kYc>D5yFCcN)K zwc=}lOMU?91B7bfYrwwyk=`W;;r|W>*tMHdXImuxqRmC96Muab?o8bo=uVrK(|hPN z)r#JEFn#3a0(i2P|8_Z)e!x&+TCc&{87Ocpg9XJKD?@27z$!%zDtPJ;>C$Bts2;&n`9{nKZ>awgJV z4kw}Pk|{Z2_~&vwqnREJ@8A_raHQ#b`^Kff$a@bVjeh|g8xN_UXb7vuU3hakLpVKf zD;i7S>UZBZXJ`lMkM@LO?u!Hu-bzO+IZFM?EZzfP9dFJ;)z@Ifovy4Aeu4pDBa6eW znoVMAU&c}I!QjE*l{8Fg{ARdU7wvFv70)^(QvM#DG&sFpdC()(aevTm?q9;OjQgXGBgGGn4b_I$o;Y@i21kc}7R-)(kPeTnYG*lp3zv?l(ZfN4 zJ!|ceNb}))kCj&C4y9*$!w?g zIO9)OFjoPuWG1f4g0h442bdcHn=C8PBBaqyxoT`P=^_QuB62pC{&s{)h&e zETjW-k$7AT)F*0c&x*s9#oCSc8l$;k`gpV$k3w;p4Oxt-8iRXH-Jd_$#Y=F_E9%{c z1WknIQDY&4q~j`*VX5jdp?DD+sKe{QQGX%Q@Yr1TnC=i!Sghy<$(=US=`WnsGU!V- z6NP)mc-sjjtc!g{#j|uz+LPK5x!`Lr@wS=;OLk1+ACf6Xrc~HPWOk$m85QN|71&@- z(_TjTR-s8vV4|^0lQmm1)g?X}Cvl-lZx@zN-cNckov;>1pB(lxHS&K9!puJUGLQ39HCz17i{g)R7>_z6f5 zKETX|CtG*}$$1yLg_+2tZ|Os)G=F-LI(ACfC8a)^rR!UhZ=uE}gbJ*?@imYY;5|VJ z=)R{LdD%Zc29bNx#vQd3I=*lj*wuMa<1T1|X^uHQ+&gp?5v8=pS@lYih~E%xN! zk%7-4BDQ2@+T1yOS@>mEd%ot68xq$uF^^p1(|;^T>#VED`5y%n*EmLb?=#+uRqhHg z|5t$CJ?#sWEH-bQaJsWaUwL^lFKO7yUmBaBEm}H+OefTIki~;_?yKI);mL}fT#uCz zMjEU%a7xefmEPnn-1z@MazB)wr9^oHYpqqT+)<9B=>Q g+E%;qE{28syVD(ZT%m34IaV>hA*lNQ0RYu5Kp)KKI{*Lx delta 1369 zcmV-f1*ZD348;qOeScR=Z`?KzzVlbGNP(VMpx0gk*LI6V;?{`M<`~e@>@H!76i8~F z?XU00haS{wljbIVGxKpY|?C$Ql5ACn5ZMgV_-%jYy$I$7x<|ogwX7b;` zkvMfr^%2X;pR9XP=D=T7IP!2LersJT`5kqZTf=XnGJlZng?~b?Wkc+FP`ZVMfU*Fk zUvggv^CrI)IBfuU=*R>alr^l;a`04<6sY`6UO-R5#`R6DS-?>@F8PPYTh`c?d^l^W z)JL$WW6879VNfl>sOzm)fy4`)vrAe&la97PL}N`ueen1|1jD&6PQLjOT*Z{XgDIHc zmTZD(WRTh(hJTeGYw74v#`%QLM9TS13gFpzX979=9(NL6_*dCSH*l8G?Y%k-E(Kid z)jBBKI+^v)7^6y9NP9gTl<}8LMUc%uP8TY}eD7pOuefupaRfeGmAE-H`o7}2kd7g8 zcTx3OdewMFCmgu&&5_zc#|yTgSj#fOeMI?;vc0yi!hhp7lIUb}RHnX+8{(2UPDKZk zg3l}g;a@qi#4qi5l)!j!NDL>8#abZ#FE+rpif3CTQ~sWXJPBjgzDq)OAfrr6U+SAY zqT{u}Cp1Hfwx=M5>L6-Kw)rDt92g(^m9f~%K?htR)2?FiHNA3OoE@Gu`J=T_lO446 zUb=I|Qh%`GN?Eb_M~mL#A3u>sY7-B3QQ@jG^aJc6dbTTyj1`un3_p2*jUHNR-!i10 zXk(qM!s`ZOrV0q@R3dgCo_GYv<&u8X7kMlJEN3`pbA+>n^CmQL9H z-haa$nSNMpIf12JQFtu_O}yBXl;NK@N@1S@w5Svh7F~f#Q8bwhb-zbIk%$e|=Jn=C z@v=SUr5@o<788qC-JoT#Zt4Dou=)-DG{Vf_%!F(^Wt0!O5m!8y;zj?i1(}P!^cvaf zE?7pv!v4NM*|LPfUs#TUGV`IL>|+Uah<|B0%Upj=n!AcJvlwG^%~qhgUuJN&>&bP> zd+@HVL?x)>S&1TpM^wl(w6Y)JZ2dR`tVe%R{um2}WZ6552yEIGQEgp7Hnt|2yFt}f*RsNpQ7-vtQEv4`m)qj1Ti`^N9)AH5 zW**7i9P6aY*jTcX{81i=rIJR7Yg%Q0Kt}LrEDoMM=z> z{F>H0A8>_^ng`)Ax8E`(clSMm!qe{IA(gL3>%!h@W%F}PaQPxr^mYb0fxd%xSsbcw z4yc`RmPvXnO{dQ!A2nrTq} z=};b(8w11F^yXJ>5ln-`WEBC?dc8?G3a|coRAA}%Hw$7dsjlU^7-C9S`}6 - diff --git a/docs/build/html/permissioning.html b/docs/build/html/permissioning.html index 47615e10e1..94c389f9a9 100644 --- a/docs/build/html/permissioning.html +++ b/docs/build/html/permissioning.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/persistence.html b/docs/build/html/persistence.html index 499c629708..27809bbbac 100644 --- a/docs/build/html/persistence.html +++ b/docs/build/html/persistence.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/publishing-corda.html b/docs/build/html/publishing-corda.html index 407d5a262b..c4f3ae8957 100644 --- a/docs/build/html/publishing-corda.html +++ b/docs/build/html/publishing-corda.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/release-notes.html b/docs/build/html/release-notes.html index 21a42d326a..28bcd61ace 100644 --- a/docs/build/html/release-notes.html +++ b/docs/build/html/release-notes.html @@ -34,9 +34,6 @@ - - @@ -238,14 +235,37 @@ API reference: Kotlin/

                        Milestone 8

                          -
                        • API:

                          +
                        • Node memory usage and performance improvements, demo nodes now only require 200 MB heap space to run.

                          +
                        • +
                        • The Corda node no longer runs an internal web server, it’s now run in a separate process. Driver and Cordformation have +been updated to reflect this change. +Existing CorDapps should be updated with additional calls to the new startWebserver() interface in their Driver logic (if they use the driver e.g. in integration tests). +See the IRS demo for an example.

                          +
                        • +
                        • Data model: Party equality is now based on the owning key, rather than the owning key and name. This is important for +party anonymisation to work, as each key must identify exactly one party.

                          +
                        • +
                        • Contracts: created new composite clauses called AllOf, AnyOf and FirstOf to replace AllComposition, AnyComposition +and FirstComposition, as this is significantly clearer in intent. AnyOf also enforces that at least one subclause +must match, whereas AnyComposition would accept no matches.

                          +
                        • +
                        • Explorer: the user can now configure certificate path and keystore/truststore password on the login screen.

                          +
                        • +
                        • Documentation:

                            -
                          • Party equality is now based on the owning key, rather than the owning key and name. This is important for -party anonymisation to work, as each key must identify exactly one party.
                          • +
                          • Key Concepts section revamped with new structure and content.
                          • +
                          • Added more details to Getting set up page.
                        • +
                        • Flow framework: improved exception handling with the introduction of FlowException. If this or a subtype is thrown +inside a flow it will propagate to all counterparty flows and subsequently be thrown by them as well. Existing flows such as +NotaryFlow.Client/Service and others have been modified to throw a FlowException (in this particular case a +NotaryException) instead of sending back error responses.

                          +
                        • +
                        • Notary flow: provide complete details of underlying error when contract validation fails.

                          +
                    diff --git a/docs/build/html/release-process.html b/docs/build/html/release-process.html index 20070635ba..130ff414d0 100644 --- a/docs/build/html/release-process.html +++ b/docs/build/html/release-process.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/running-a-notary.html b/docs/build/html/running-a-notary.html index 5b133545c0..2ab11689b6 100644 --- a/docs/build/html/running-a-notary.html +++ b/docs/build/html/running-a-notary.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/running-the-demos.html b/docs/build/html/running-the-demos.html index 4ee101c4a9..eeb1a1c7ad 100644 --- a/docs/build/html/running-the-demos.html +++ b/docs/build/html/running-the-demos.html @@ -34,9 +34,6 @@ - - @@ -415,7 +412,7 @@ major version - even if still in beta.

                  • The H2 web console should start up in a web browser tab. To connect we first need to obtain a JDBC connection string. Each node outputs its connection string in the terminal window as it starts up. In a terminal window where a node is running, look for the following string:

                    -

                    Database connection url is              : jdbc:h2:tcp://10.18.0.150:56736/node

                    +

                    Database connection url is              : jdbc:h2:tcp://10.18.0.150:56736/node

                    You can use the string on the right to connect to the h2 database: just paste it into the JDBC URL field and click Connect. You will be presented with a web application that enumerates all the available tables and provides an interface for you to query them using SQL

                  • diff --git a/docs/build/html/search.html b/docs/build/html/search.html index 63ce4c284f..ac6f77aed1 100644 --- a/docs/build/html/search.html +++ b/docs/build/html/search.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/searchindex.js b/docs/build/html/searchindex.js index 0681a33a95..6d1bd08a09 100644 --- a/docs/build/html/searchindex.js +++ b/docs/build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({envversion:49,filenames:["CLI-vs-IDE","azure-vm","building-the-docs","clauses","clientrpc","codestyle","contract-catalogue","contract-irs","corda-configuration-file","corda-plugins","creating-a-cordapp","event-scheduling","flow-state-machines","flow-testing","further-notes-on-kotlin","getting-set-up","getting-set-up-fault-finding","glossary","index","inthebox","key-concepts","key-concepts-consensus-notaries","key-concepts-core-types","key-concepts-data-model","key-concepts-ecosystem","key-concepts-financial-model","key-concepts-flow-framework","key-concepts-security-model","key-concepts-vault","loadtesting","merkle-trees","messaging","network-simulator","node-administration","node-explorer","node-services","oracles","permissioning","persistence","publishing-corda","release-notes","release-process","running-a-notary","running-the-demos","secure-coding-guidelines","setting-up-a-corda-network","tutorial-attachments","tutorial-building-transactions","tutorial-clientrpc-api","tutorial-contract","tutorial-contract-clauses","tutorial-cordapp","tutorial-integration-testing","tutorial-test-dsl","using-a-notary"],objects:{},objnames:{},objtypes:{},terms:{"00z":49,"0_xx":16,"10000l":29,"100l":52,"14gb":1,"17t16":49,"1mb":12,"200mb":33,"3rd":43,"5000l":29,"500mb":33,"5xxx":0,"abstract":[3,9,12,35,36,38,40,49,50,51],"boolean":[13,29,40,48,49,50],"break":[12,16,36,41,47],"byte":[5,12,23,36,40,53],"case":[3,5,9,10,12,13,15,21,22,23,29,31,36,38,40,43,46,49,50,51],"catch":[5,12,40,44],"class":[],"default":[1,4,5,6,8,9,10,12,15,16,17,22,23,29,30,32,33,34,35,37,40,43,44,45,49,51],"enum":[40,48],"export":[12,33,38],"fa\u00e7ad":33,"final":[7,9,12,13,21,30,36,40,43,45,47,48,49,50,52,53],"float":[6,7,11],"function":[],"import":[3,5,11,12,15],"instanceof":[49,50],"int":[5,29,38,49,54],"long":[5,6,9,11,28,29,38,47,49,50,51],"new":[0,1,5,7,8,9,10,12,14,18,21,22,23,24,31,32,33,34,35,37,39,40,41,43,46,47,48,49,50,51,52,53,54],"null":[8,11,13,29,36,38,46,49,50,53,54],"public":[1,5,8,10,12,17,19,22,23,31,33,35,37,40,43,45,49,50,51,53],"return":[3,4,5,7,9,11,12,13,21,29,33,35,36,38,40,44,46,47,48,49,50,51,52,53,54],"short":[3,11,41,43],"static":[9,10,12,28,36,43,49,51,53],"super":[3,5,50],"switch":[12,40,49],"throw":[3,4,5,12,26,29,30,36,47,49,50,54],"transient":12,"true":[8,13,17,21,24,29,36,37,45,48,49,50,51],"try":[0,4,5,12],"var":[13,38,47,48],"void":[49,50,53],"while":[15,22,32,43,48,53],___:51,____:51,______:51,_________:51,_foo:5,_unless_:39,abil:[23,28,32,40],abl:[1,8,10,12,21,27,30,31,33,34,35,36,37,40,43,49,51,54],abort:[21,36,47],about:[],abov:[1,3,5,7,12,23,26,30,31,33,36,43,45,48,49,50,51,52,53],absent:[3,8],absolut:[8,21],abstractnod:[9,35],abstractstatereplacementprotocol:40,accept:[5,6,15,17,21,23,36,43,47,49],acceptablepric:12,acceptsfileupload:36,access:[],accid:12,accident:[5,44,47],accompani:[5,49],accord:[3,23,47],accordingli:[45,50],account:[1,22,23,29,39,40,46],accrual:7,accur:[21,43],achiev:[21,22,23,24,30],ack:40,acknowledg:[12,35],acquir:43,acronym:43,across:[],act:[3,8,12,21,35,36,40,43],action:[3,11,23,29,35,36,42,43,47,49,52],activ:[7,8,9,11,15,22,24,26,27,29,32,35,38,40,43,47,49,51],actor:[5,12],actual:[7,12,21,29,35,36,43,44,46,49,50,53,54],adapt:[5,12,36],add:[3,5,10,12,17,29,30,31,33,35,36,42,44,46,47,48,49,51,52,53,54],addattach:[13,46],addcommand:[12,36,47,49,54],added:40,addedg:48,addfix:36,adding:[],addinputst:[12,49],addit:[0,5,8,10,21,22,23,25,28,31,35,38,40,47,48,49,51],addition:[12,14,15,16,27,38,41,43,51],addmessagehandl:40,addnod:48,addoutputst:[12,49,54],address:[0,1,8,10,12,24,31,34,35,40,45,49,51],addsignatureuncheck:36,adequ:3,adjust:[1,5,7,41,49],admin:[34,35,37,39],administ:1,administr:[],admiss:[24,27],advertis:[4,8,31,35,40,42,43,49,52,54],advertisedservic:[10,43,48,51,52],advic:41,advis:[0,36],aesthet:43,affect:[16,36,45],affinityexecutor:5,afraid:5,after:[0,3,6,7,9,10,11,12,13,14,17,18,21,29,30,35,36,43,47,49,51,53],again:[7,12,13],against:[],agent:[24,29,33,35],agentlib:10,aggreg:[40,43,49,50],agil:21,agre:[1,7,11,12,17,23,43,44,47,51],agree:[7,43],agreement:[],ahead:[12,49],aid:[23,40,47,51],aim:[5,29],aka:[],albeit:40,albertsen:40,alert:16,algorithm:[19,21,22,23,27,40,49],alia:[8,39],alic:[52,53],alice:[17,22,34,48,49,52,53,54],alice_key:46,alice_pubkey:53,alicecli:52,aliceparti:54,aliceproxi:52,alicevaultupd:52,align:[16,40,47,51],aliv:[12,43],all:[1,2,3,4,5,6,7,8,9,10,12,13,14,15,17,21,22,23,24,26,27,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,47,49,50,51,52,54],allaslist:52,allevi:21,alloc:43,allow:[0,4,5,6,7,8,9,10,11,12,17,21,22,24,29,31,34,35,36,37,38,39,40,43,44,47,48,49,51,52,53],allpartysignedtx:[12,47],almost:49,along:[1,3,12,13,21,24,36,49,51,54],alongsid:49,alreadi:[5,10,11,12,21,27,30,36,37,39,40,43,46,47,49,50,51,53,54],alright:12,also:[0,3,4,5,6,7,8,9,10,11,12,13,15,16,17,18,21,22,23,25,28,29,30,31,32,33,34,35,36,37,38,40,43,46,47,49,50,51,52,53,54],alter:[8,12,33,47],altern:[1,2,5,8,22,31,32,33,34,49,51,52],although:[7,8,12,23,34,35,40,46,49,51],alwai:[5,11,12,16,22,23,33,38,45,47,49,51],amend:47,aml:24,among:51,amongst:[0,27],amount:[],amountrequir:47,amqp:[24,31,40],analysi:3,analyt:43,ancestor:23,ani:[0,1,3,4,5,6,7,9,11,12,13,15,17,21,22,23,24,25,27,28,31,33,34,35,36,37,38,40,41,42,43,44,45,46,47,48,49,50,51,52,54],annot:[4,5,9,12,31,38],announc:[36,41],annual:1,anonym:35,anonymis:[35,40],anoth:[1,4,5,10,12,16,17,21,23,24,28,31,33,34,35,36,37,40,43,46,49,50,53,54],another:47,answer:[5,36],answere:50,anti:51,anticip:5,any:[3,4,6,11,33,35,39,43,47,50],anycompost:50,anyon:[21,31,49],anyth:[12,13,22,23,25,44,49,50,51],anywher:[36,40,49],apach:31,apart:[21,40,47],api:[],app:[],appear:[16,36,43,49,51],append:[8,12,23,33],appendix:18,apple:[],appli:[5,6,7,10,27,29,34,47,49],applic:[9,10,17,23,24,25,31,35,36,40,43,44,49,51],applicat:[15,17],applyfix:7,appoint:21,approach:[],appropri:[1,5,28,31,35,36,38,40,42,47,51],approv:[11,12,37,39,47],approxim:21,april:40,apt:16,arbitrari:[3,5,12,22,23,36,44,48],arbitrarili:[23,52],architectur:[4,18,36],archiv:28,area:[0,27,38],aren:[4,11,19,49],arg:[10,40,48,51],argument:[4,5,9,10,12,23,29,48,49],aris:15,around:[12,13,21,22,25,30,40,41,47,48,49,51,52],arrai:[48,51],arrang:[12,24],arraylist:36,arriv:[12,17,36,52],arrow:[7,51],art:25,artemi:[10,17,31,51],artemisaddress:[8,45,51],artemismq:[8,35],artemisport:[10,51],articl:[11,12,21,36,40,49],artifact:10,artifactid:51,ascertain:[43,51],ask:[5,12,27,36,39,49],aspect:[12,23],assembl:[0,3,30,49],assemblesharedtx:12,assert:[],assertequ:[13,46,52],asset:[],assetforsal:12,assetmismatchexcept:12,assettosel:12,assettypenam:12,assign:[],assist:[11,12,22,26,27,38],associ:[3,11,21,22,23,25,31,36,38,40,45,47,48,49,51],assum:[12,21,23,27,29,30,31,36,39,44,47,49,54],assume:[12,30,36,51],assumpt:[12,27],assur:43,asynchron:[26,29,47],atom:[12,21,40,43,49],attach:[],attachment:[],attachmentdemo:46,attachmentexist:46,attachmentstorag:35,attack:[21,40,44],attch:30,attempt:[21,31,36,44],attent:[12,51],attest:[21,23,27],attribut:[5,28],audit:[28,47],augment:23,authent:[1,4,21,24,27,31,35,40,48],authenticatedobject:[3,22,49,50],author:[5,21,24,27,35,41,54],authoris:[8,12,22,27,35,48],authorit:28,auto:[5,49],autoclos:4,autom:[11,24,49],automat:[0,2,4,8,10,11,12,21,23,27,28,31,32,34,35,36,37,38,40,46,49,51,54],auxiliari:35,avail:[0,1,2,7,8,10,11,12,15,18,21,28,31,32,33,35,36,39,40,41,43,44,48,49,51,54],avoid:[4,5,12,36,38],awai:[4,12,48],await:[10,43,47],awar:[4,5,11,12,35,40,49,50],awg:41,awkward:[5,12],axi:7,back:[1,4,5,9,12,24,26,28,35,36,40,43,44,47,49,52],backend:40,background:[],backoff:31,backport:41,backward:[12,41],bad:[5,12,49,53],balanc:[3,6,21,23,28,34,40,47,49],banana:22,bananast:22,banco:40,band:12,bandwidth:5,banish:17,bank:[],bankrupt:49,bankruptci:[21,23,36,43],banner:[1,45],bar:[1,16],barreca:40,barrel:[25,40],base:[5,7,8,10,11,12,17,21,22,25,27,29,31,33,35,36,37,40,43,45,48,49,51,54],basedir:[8,45],basedirectori:48,basi:[1,7,11,15,24,32,33,35,51],basic:[],bat:[0,10,15,32,34,37,51],batch:[29,51],bbva:40,bear:12,becaus:[5,11,12,16,21,22,33,35,36,47,49,50,51,53,54],becom:[5,7,11,12,18,22,36,41,47,51],been:[7,8,12,15,16,17,21,22,27,31,36,37,40,41,43,47,49,50,51,54],befor:[],beforesign:36,begin:[1,5,35,47,49,51],behalf:43,behav:49,behaviour:[3,6,8,21,29,33,47,50,51,53],behind:[12,17,20,31,49],believ:40,belong:[30,45],below:[1,5,7,8,10,11,12,15,22,30,31,35,43,47,49,51],beneath:17,beneficiari:6,benefit:[12,21],best:[5,15,47],bet:36,beta:43,better:[5,14,40,49],between:[1,5,7,11,12,17,21,23,25,26,31,32,35,36,37,38,40,41,44,47,48,49,51],beyond:[23,25,27,47],bft:[27,40],big:[5,12,40,43,49],bigdecim:[25,36],bilater:[6,7,40],bill:49,bin:[43,48,51],binari:[30,35,36,39,48],bind:[],bintrai:39,bintrayupload:39,bit:[22,40,46,49,51,53,54],bitcoin:[12,17,23,40,43,49],bitcoinj:12,blah:5,blank:[5,33,34,37,49],block:[3,4,5,10,12,21,23,26,35,36,40,43,44,46,47,51,52],blockchain:[12,19,30,49],bloom:5,bloomfilt:5,blotter:43,blue:[7,30],bob:[17,22,34,49,52,53],bob_pubkey:53,bobclient:52,bobproxi:52,bobvaultupd:52,bodi:[5,43],boil:29,boilerpl:10,bond:[49,50],bookkeep:49,bookmark:43,boost:19,boot:51,bootstrap:[8,10,51],bore:49,borrow:53,boss:51,both:[0,6,7,12,13,14,15,17,21,25,26,28,29,32,36,38,40,43,44,46,47,48,49,50,51],bottom:[16,23],bounc:13,bound:[12,21,23,40,45,47,49],box:[1,39],branch:[15,16,18,30,40,41,51],branch_nam:51,brand:40,breadth:23,breakdown:28,breakpoint:51,breviti:[0,50],bridg:[31,35],brief:[],briefli:[31,36,51],bring:[29,40,43,46,52],broadcast:[1,23,24,26,27,47,49,54],broadcasttransactionflow:54,broader:45,broke:5,broken:[40,51],broker:[8,31,35,40,51],brought:47,brows:[33,43],browser:[1,8,43,51],bubbl:15,bucket:22,buffer:[4,33],bug:[5,15,16,40,41],bugfix:41,bui:[1,12],build:[],buildcertsigningrequestutilityjar:37,buildcordajar:[8,37,45],builder:[12,13,22,40,44,46,47,54],buildfilteredtransact:47,buildmerkletransact:[30,36],buildscript:[10,17,51],buildsrc:51,buildtradepropos:47,built:[0,8,10,12,30,40,44,46,49,51],bulk:47,bullet:5,bunch:51,bundl:[16,23],busi:[11,12,17,19,22,23,24,26,36,38,40,47,49],businesscalendar:22,button:[1,39,43,51],bytearrai:38,bytecod:[12,23,49],cach:[31,46,51,54],calcul:[7,11,12,21,22,30,40,43,44,49],calculateoursignatur:12,calendar:[7,22,36],call:[0,3,4,5,7,9,12,14,21,22,23,24,25,26,33,35,36,40,41,43,44,46,47,48,49,53,54],callback:[4,5,12,35,40],caller:[36,47,49,54],came:12,camel:5,can:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43,44,45,46,47,48,49,50,51,52,53,54],candid:38,cannot:[3,6,9,17,21,23,25,32,36,40,44,47,49,51,54],capabl:[24,49],capit:5,capitan:2,capsul:32,capsule_cache_dir:10,captur:[9,11,47],cardon:40,care:[5,9,12,13,21,44,47,53],carefulli:14,carri:[0,25,35,47],cash:[],cash_stat:38,cashcommand:[29,48,52],cashflow:[48,52],cashflowresult:52,cashkt:49,cashprotocol:[8,45],cashschema:38,cashschemav1:38,cashsigningpubkei:12,cashstat:47,cast:4,catastroph:43,categori:45,caught:4,caus:[5,12,15,16,17,33,43,49,51],cbc:29,ccy_cod:38,cent:25,center:49,central:[],centralis:24,ceo:22,cer:8,certain:[3,5,9,40,43,47,49],certainli:10,certainti:21,certif:[],certificatesigningservic:[8,37,45],certsigningrequestutil:[37,45],chain:[],chaincommercialpap:53,chaincommercialpaperdoublespend:53,chaincommercialpapertweak:53,chanc:[5,12],chang:[],changenotari:21,channel:12,charact:[5,8],characterist:17,charg:36,charli:22,chart:50,check:[],checkabl:[36,40],checkfixisnearexpect:36,checknotnul:49,checkout:[15,16,51],checkpoint:[9,26,35,40],checksignatur:36,checkstat:49,checksufficientsignatur:[12,22,47,54],child:[0,12,22],childprogresstrack:12,children:[12,22],childrenfor:12,choic:[1,5,21,49,51],choos:[0,1,15,16,21,34,40,49,54],choreographi:[17,24],chosen:[0,12,21,29,54],christma:51,chronolog:11,chronounit:53,chunk:[49,50],circl:32,citi:51,cl1:3,cl2:3,cl4:3,cl5:3,claim:[23,49],clarifi:49,clash:[5,38,51],classic:49,classpath:[4,9,10,23],clauseverifi:50,clean:[0,12,34,40],cleaner:40,cleanup:40,clear:[0,3,4,12,29,44],cleardatabasebeforerun:29,clearer:12,clearli:[5,16,47],click:[1,15,16,34,39,43,51],client:[],clint:1,clock:[1,11,12,21,23,36,43,47],clone:[0,1,5,15,16,49,51],close:[4,6,21,51],closeabl:4,closer:21,closest:1,closur:[5,53],cloud:33,cluster:[],cmd:[30,49,50],code:[],codebas:[1,5,18,38,39],coin:28,collabor:40,collaps:29,colleagu:5,collect:[4,5,17,29,33,38,40,42,47,49,50],collector:[5,12,33],collis:5,colon:0,column:[10,33,38],com:[2,15,37,39,40,43,51],combin:[17,22,24,28,49,50],come:[4,12,13,33,40,41,44,49],comfort:40,commanddata:[3,36,49,50],commenc:34,commerci:[],commercial_pap:[49,50],commercialpap:[3,6,38,49,50,53],commercialpaperlegaci:49,commercialpapertest:53,commit:[],committe:43,committing:12,common:[3,6,7,8,9,12],commonleg:7,commonli:47,commun:[8,12,15,17,18,24,26,31,35,40,44,45,51],compani:[23,25,36,37,50],companion:[12,36,49,50],compar:[1,30,43,49,51],comparison:[23,44,49],compat:[4,17,21,41],compel:21,compet:23,complementari:11,complet:[],completetx:47,complex:[5,6,13,23,25,26,38,43,46,49,52],complic:[12,36,47,49,50],compon:[0,3,9,10,11,17,18,24,28,31,35,40],compos:[3,12,21,23,40,49,50],compositeclaus:[3,50],compositekei:[],compound:40,compris:[7,51],comput:[7,17,36,51],computeoursignatur:12,concaten:30,concept:[3,6,11,12,18,20,21,23,26,30,36,40,49,50],concern:[12,49],concis:40,conclus:36,concret:[9,35],concurr:29,concurrenthashmap:5,condit:[3,9,21,29,35,36,40,50,53],conf:[8,10,35,37,45,51],config:[8,10,29,33,37,40,43,48,51],configur:[],configurationfil:33,confirm:[16,17,21,43,47],conflict:[21,23,29,54],confus:[0,12],conjunct:34,connect:[],consensu:[],consequ:47,conserv:[3,47],conserveamount:3,consid:[5,7,11,17,22,23,24,28,36,40,41,47,49,50],consider:[47,49],consist:[7,8,12,17,23,24,29,35,36,40,43,45,47,50],consol:[],consortium:17,constant:[5,38,49],constantli:[36,51],constraint:[12,36,40,49,51,52],construct:[],constructing_offer:12,constructor:[3,9,11,12,36],consum:[4,11,17,21,22,23,27,28,33,35,40,43,47,49,54],consumedcommand:3,consumingtx:54,consumpt:[11,36,47],contact:[12,35,40],contain:[1,3,7,8,9,10,12,17,21,22,23,25,28,30,31,33,34,35,36,37,40,41,43,46,47,49,50,51,53,54],content:[],context:[5,22,33,35,36,47,54],contextclassload:46,contin:36,continu:[],contract:[],contracthash:50,contractreject:53,contractst:[3,11,21,22,25,30,38,40,47,49],contractu:47,contrast:[12,36],contribut:[1,18,22],control:[],conveni:[3,5,22,36,46,47,49],convent:[7,12],convers:[22,34],convert:[3,6,7,13,21,22,27,35,38,40,47,49],convinc:[12,22,30],coordin:[8,39],copi:[0,5,12,31,33,35,47,49,51,53,54],copycat:42,copyonwritearraylist:5,copyright:5,copyvault:29,cor:18,corda:[],corda_bintray_gpg_passphrase:39,corda_bintray_key:39,corda_bintray_user:39,corda_dev_ca:8,corda_gradle_plugins_vers:10,corda_vers:[10,51],cordaapp:51,cordacadevpass:[8,45],cordapluginregistri:[9,10,36,48,51],cordapp:[],cordarpccli:[4,46],cordarpcop:[4,12,46,48],cordarpcopsimpl:35,cordform:[],core:[],corner:[1,16],corp:[34,37],corpor:[43,50],correct:[6,12,16,36,40,41,43,47,49,51,53],correctli:[12,17,23,35,36,40,47,49],correspond:[4,17,22,29,31,43,49,50],correspondingli:[5,46],cost:[1,4,36,49],could:[5,6,12,21,22,29,36,44,47,49],couldn:[30,36],count:[7,43],countabl:[25,40],counter:[5,12,51],counterparti:[1,6,7,17,24,31,43,44,46,47],counterparty:51,countri:[22,36,51],coupl:[12,13,29,48,51],cours:[12,29,33,36,38,49],coven:49,cover:[6,12,21,36,43,49,51],cpu:29,crash:[12,35,36],crazi:51,creat:[],createcommand:54,createdummyirs:7,createsomenod:13,creation:[7,30,49],creator:36,credenti:[34,39,48,51],credit:[40,43],crisi:43,crisp:49,criteria:6,critic:41,cross:27,crude:25,cryptic:15,crypto:[40,51],cryptocurr:28,cryptograph:[17,22,30],cryptographi:[],csr:40,ctrl:51,curl:[33,51],currenc:[3,6,7,12,25,28,29,34,38,40,47,49],current:[0,4,5,7,8,10,11,12,15,18,19,21,22,23,25,27,28,29,30,31,32,34,35,36,37,38,40,41,42,44,48,49,51,53,54],currentstep:[12,36],currentthread:46,currenttim:12,currentvault:47,curv:7,custodi:[13,22],custom:[4,8,9,12,21,22,23,26,28,33,35,38,40,43],customis:[4,38,48],cut:[],cutoff:29,cycl:[5,12,49],dai:[7,12,21,22,26,33,36,41,53],daili:51,daniel:40,danks:40,dao:40,dashboard:[33,34],data:[],databas:[],databaseschema:38,databasetransact:13,dataset:[7,43],datasourc:[8,45],datasourceclassnam:[8,45],datasourceproperti:[8,45],datastructur:29,date:[],dateoffset:40,daterollconvent:22,david:40,days:53,dcapsul:10,dead:31,deadlin:[22,36],deal:[1,5,12,22,25,28,36,43,49],dealstat:25,debt:[6,43],debugg:10,decd098666b9657314870e192ced0c3519c2c9d395507a238338f8d003929de9:33,decd:33,decentralis:[27,36,40],decid:[26,30,36,38,47,49],decis:[21,47,49],declar:[5,8,9,12,35,53],deconflict:27,dedic:[1,5],dedupl:[35,40],defaultissu:49,defaultref:53,defens:47,defin:[3,5,9,12,13,19,21,22,23,24,25,29,33,35,38,40,48,49,50,51,53],definit:[3,12,17,21,25,40,49],delai:[7,36],deleg:[47,50,54],delet:[5,12,25,35,40,49],deliber:53,deliv:[6,13,35,51],deliveri:[12,19,27,31,43,51],deliveryaddress:51,deliveryd:51,demand:[1,12,21,24,40],demo:[],demonstr:[0,27,34,40,43,51,52],denial:21,denot:30,dens:5,depend:[0,1,5,10,11,12,13,16,17,21,23,24,27,36,40,43,45,47,49,51],dependson:[10,51],depict:[23,26],deploi:[],deploy:[0,1,10,17,23,32,51],deploynod:[8,10,43,46,48,51],deployvisualis:32,deposit:49,deprec:40,depth:21,deregist:31,deriv:[0,7,12,17,22,38,40,49],describ:[5,11,12,16,18,20,21,22,23,25,28,29,30,31,35,43,44,48,49,51,54],descript:[1,3,5,27,28],deserv:[29,41],design:[5,14,17,18,21,24,27,36,40,44,49,50,51],desir:[9,12,22],desktop:33,despit:[12,46,49],destin:31,destroi:[6,23,47,49],destructur:49,detail:[],detect:5,determin:[0,3,6,7,11,17,24,31,47,49,50,51,52],determinist:[4,23,27,29,40,52],dev:[8,29,33],develop:[0,1,5,8,10,12,14,15,16,18,23,24,25,26,28,33,35,37,38,40,41,43,47,49,51],developer:51,devic:[8,27],devmod:[8,37,45],diagnos:45,diagram:[7,23,24,25,26,28,49],dialog:1,dialogu:51,diamond:17,did:30,didn:[5,12,30,41,49,51,53],differ:[1,3,5,6,7,8,9,10,11,12,21,22,23,25,27,29,31,34,36,38,40,43,47,48,49,50,51,52,53],differenti:[37,54],difficult:12,difficulti:50,digit:[12,23,36,40,47,49],digitalsignatur:[12,36,47,54],dir:[37,45],direct:[1,5,17,24,35,38],directli:[0,4,5,12,13,15,17,22,25,26,28,31,33,35,40,43,47,48,49,50,51,52,54],directori:[0,1,2,8,10,16,18,29,33,35,37,43,45,51],directthreadexecutor:5,dirti:49,disabl:[22,35],disagr:43,disambigu:38,discard:44,discoveri:32,discuss:[12,22,36,47,51],disk:[1,12,22,31,40],disobei:36,dispens:43,displai:[0,1,21,40,43,48],disput:[7,21,49],disrupt:[29,31,40],disruptionpattern:29,disruptionspec:29,distinct:[5,45],distribut:[8,9,10,12,17,18,19,20,21,23,24,27,28,36,40,42,43,47],distrust:[12,21],dive:18,divid:21,divis:25,dlog4j:33,doc:[0,2,4,5,16,18,40,43,48,51,52],docker:33,docsit:[2,18,41,51],document:[],doe:[5,6,7,8,10,11,12,13,19,23,31,33,35,36,37,38,40,43,44,46,47,49,51,52,54],doesn:[3,5,8,12,13,16,19,21,33,36,44,46,49,53,54],dokka:2,dollar:[25,49,52],dollars:[49,52,53],domain:[17,22,40,49],domicil:49,domino:43,don:[4,5,12,14,22,29,34,36,41,43,44,49,50,53],done:[2,3,4,12,13,15,23,29,30,31,37,40,48,49,51],doorman:31,dot:[7,30],doubl:[12,19,21,34,35,45,49,51,53],doubt:[5,16],down:[1,5,8,12,29,34,47,49,50,51,52],download:[],downsid:5,drain:[4,12],draw:[40,48],drawn:48,drive:47,driver:[0,8,33,38,40,48,51,52],driverdirectori:48,drm:36,drop:[1,51],dsl:[0,10,17,40,51,52,53],dt_socket:[0,10,51],due:[0,5,7,11,12,14,15,21,35,38,43,49,50],dummi:[6,13,46,53],dummy1:13,dummy2:13,dummy_notary_key:13,dummy_pubkey_1:[49,53],dummycontract:[13,54],dump:48,duplic:[12,25,30],durat:[11,36,47],durationsecond:29,dure:[5,7,8,9,10,12,32,33,35,40,49],dynam:[9,23,40,49],each:[0,1,3,4,5,7,8,9,10,11,12,17,21,22,23,24,26,27,29,30,31,32,35,36,38,40,41,43,46,47,48,49,50,51,52,53],earli:[5,6,35],earlier:[0,15,44],earliest:[7,11],easi:[0,1,5,14,36,40,49],easier:[5,10,12,15,40,49],easiest:[4,49],easili:[5,12,18,28,43,49,51],echo:51,econom:[1,7],ecosystem:[],ed25519:40,edg:48,edge:48,edit:[0,22,33,39,45,51],edition:15,editor:1,effect:[7,8,12,13,38,43,53],effort:[],either:[0,3,4,5,6,7,8,9,12,16,17,21,22,23,29,30,34,38,43,48,49,51,53],elbonia:22,element:[5,17,30,36,47,49,51],elementari:[50,51],elimin:[19,23,40],els:[12,13,21,25,28,35,36,46,47,48,49,50,54],elsewher:9,elucid:47,email:12,emailaddress:37,emb:26,embed:[8,9,19,23,26,30,33,36,40,51],embedd:31,emit:[4,40,52],emoji:46,empti:[8,34,40,49,53],emptyledg:53,emptyset:3,enabl:[0,8,9,10,21,26,35,40,50],enact:43,enc:29,encapsul:[3,5,22,36],enclos:5,encod:[31,36,47],encount:[1,11,15,35,47],encourag:[18,38,46],encrypt:[37,47],encumb:49,encumberedst:49,encumbr:[40,49],encumbranc:[],end:[3,5,7,12,18,21,23,29,31,35,36,41,47,50,51,53],endeavour:51,endpoint:[10,31,33,51],enforc:[3,5,23,49],enforceverifyorfail:53,engin:43,england:50,english:[5,49],enhanc:40,enjoy:40,enorm:12,enough:[5,12,13,43,47,49],ensur:[3,5,9,12,15,17,21,22,23,28,30,35,37,40,41,44,47,49,50,51],ensure:[1,16,21,36,43,51],enter:[10,26,39,43,51,52,53],entir:[7,12,21,35,36,49,51],entireti:[7,23],entiti:[21,22,23,30,36,37,38,49],entitl:[27,48],entri:[7,8,10,12,23,38,40,44,49,50],enumer:[7,38,43,47,51],environ:[0,1,5,10,12,24,34,36,39,47],envis:18,envisag:[23,49],equal:[3,12,21,22,25,40,47,49,50],equiti:38,equival:[5,7,22,25,34,35,42,47,49],eras:15,error:[],escal:36,especi:[22,47],essenti:[0,33,35,36,47,49,50],establish:[11,31,43,45,52],estim:1,etc:[0,5,6,7,12,17,19,21,22,24,25,33,34,36,40,41,43,45,49,50,51],ethereum:[12,23,49],eur:1,euribor:[1,33,36],euro:25,evalu:[7,33,36,50],even:[4,12,14,15,21,26,30,35,36,38,40,43,49,50,53],event:[],eventu:[29,35,45],eventual:[21,41],ever:5,everi:[0,3,4,9,12,21,22,23,24,27,29,30,31,35,36,38,40,41,43,44,49,50],everyon:[21,36,49],everyth:[15,21,44,48,49],evid:[36,47],evolut:[23,28,50],evolv:[22,38,40,45,48,49,51],exact:[0,21],exactli:[22,23,35,36,40,49],examin:[5,10,13,49],exampl:[],exampleapi:51,exampleclientrpc:51,exampleflow:51,exampleplugin:51,examplerpccordapluginregistri:48,examplerpcvalu:48,exampleservic:51,exampletest:51,exampleweb:51,exce:29,excel:36,except:[3,4,5,9,12,21,26,31,44,47,49],exception:[0,5,12],excess:[5,33],exchang:[7,12,17,25,35,47],exclud:[8,38,47],exclus:6,execut:[],executor:[5,24],exemplifi:53,exhaust:[35,40],exist:[1,5,6,7,8,10,11,21,22,23,25,32,35,37,38,40,49,51,53],exit:[3,6,8,13,25,34,35,37,40,43,48,49],exitcash:48,expand:[34,47,51],expect:[1,4,5,6,8,11,12,21,22,24,29,35,36,37,38,40,41,44,46,47,49,50,51,52,53],expectedtypenam:12,expectev:52,expens:[4,5],experi:[10,40,41,51],experiment:[5,40,43],expir:37,explain:[5,11,12,29,32,37,40,51],explan:[3,5,32,36,48],explicit:[5,12,47,49],explicitli:[5,9,23,26,28,43,47,53],explor:[5,13,19,33,34,40,43,47,49,51],explorer:[],expos:[5,9,10,11,12,22,23,27,28,33,35,38,40,47,48,54],expose:22,exposur:[6,7,17],expound:[],express:[7,17,21,22,23,40,49,53],ext:[10,51],extend:[],extens:[0,5,9,12,17,28,32,33,35,36,40,44,47,49],extern:[8,12,35,45,47,51],extraadvertisedserviceid:[8,35,42,45],extract:[22,28,33,36,43,47,49],extractcommand:50,extrem:[14,17,21,29],face:[16,49,50,53],facevalu:[3,49,53],facil:[17,28,35],facilit:51,fact:[0,5,7,12,17,21,23,24,36,40,45,49,51,53],factor:[7,43],fail:[3,9,49,50,53],failswith:53,failur:[12,17,53],fairli:[5,13,43],fall:31,fals:[5,8,12,13,22,36,45,47,49,54],famili:38,familiar:[4,18,49,51,54],famou:40,fanci:49,far:[12,36,43,47,49,50,52],fashion:[5,38,43],fast:13,faster:33,faucet:43,fault:12,fear:17,featur:[],fed:[25,32],feed:[21,36],feedback:40,feel:[49,51],fetch:[31,33,35,36,46],fetchtransactionsflow:46,few:[0,5,12,14,33,36,41,43,47,49,50,51],fiber:[12,35,36],fiction:[23,34],field:[],file:[],fill:[5,12,43,47,49],filter:[3,5,29,30,36,38,40,47],filtercommand:[30,36],filteredleav:[30,36],filteredtransact:[30,36,47],filterfun:[30,36],filterisinst:49,filterst:3,finalis:[7,12,40],finalityflow:[12,46,47,54],financ:[10,12,24,25,40,51],financi:[],find:[0,2,12,13,14,16,18,19,33,36,44,47,51],fine:[4,15,33,53],finish:[12,40,51,52],fire:12,firm:28,first:[0,3,4,5,7,8,10,11,12,13,14,15,16,17,21,23,31,33,36,37,38,39,40,43,46,47,48,49,50,51,52,54],firstli:[9,34,43,46,49,51],fit:[5,23],fix:[],fixedleg:7,fixedlegpaymentschedul:7,fixedratepaymentev:7,fixer:36,fixingflow:36,fixingroledecid:11,fixingsessioninitiationhandl:11,fixof:[30,36],fixqueryflow:36,fixqueryhandl:36,fixsignflow:36,fixsignhandl:36,flag:[8,33,37],flat:38,flesh:22,flexibl:[21,22,23],flight:4,floatingleg:[7,11],floatinglegpaymentschedul:7,floatingratepaymentev:7,flow:[],flowhandl:[12,52],flowlog:[11,12,26,35,36],flowlogicreffactori:[9,11],flowstatemachineimpl:35,flowtrack:12,flux:10,fly:12,focu:30,focus:[3,50],fold:[5,48],folder:[2,8,10,35,37,43,47,51],follow:[1,2,5,8,10,11,12,15,16,18,20,21,23,24,25,26,27,28,29,32,33,34,35,36,37,39,42,43,47,48,49,50,51,53,54],font:5,foo:[5,48],foobrokenexcept:5,foot:44,fooutil:49,forc:[33,40,49,53],fordai:[11,36],foreach:48,foreign:47,foreignexchangeflow:47,forev:41,forget:[12,36,49],form:[4,10,11,12,24,26,27,28,30,31,35,36,43,47,49,50,51],format:[],former:48,formerli:40,formula:40,forth:[4,12,47],fortun:43,forum:[15,18],forward:[12,31,35,36,41,43],found:[3,8,12,15],four:[31,43,45,49,51],fourpmtimelock:49,fraction:25,frame:[5,12,35,43],free:[12,15,21,23,43],freed:4,freeli:36,freez:47,frequenc:[1,7],fresh:[34,36,49,53],freshkei:12,freshli:[22,51],friend:45,friendli:35,from:[],fromcountri:22,front:[49,51],frontend:19,ftx:[30,36],fulfil:6,full:[5,6,8,9,12,21,27,30,31,32,35,40,43,47,48,49,50],fulli:[5,8,9,12,17,21,22,27,32,35,38,40,45,47,51,52],fullysign:12,fun:[3,11,12,13,21,29,30,36,38,46,47,48,49,50,51,53,54],fund:[43,47,49],fundament:[20,21,49],fungibl:[3,6,17,25,26,28,47,49,50,51],fungibleasset:[6,25,40,47,50],further:[],furthermor:21,futur:[],futuretransact:48,fuzz:40,fxrespons:47,fxtransactionbuildtutori:47,fxtransactionbuildtutorialtest:47,gain:[19,27],garbag:[4,5,12,33],gatewai:24,gather:[],gatherfrequ:29,gatherourinput:47,gatherremotest:29,gave:36,gbp:[3,34,50],gear:41,gener:[],generatecount:29,generatefix:36,generateiniti:13,generateirsandfixsom:7,generateissu:[49,50],generatemappedobject:38,generatemov:[49,50],generateredeem:[49,50],generatespend:[12,47,49],generatetransact:48,generatexxx:47,genuin:5,geograph:1,get:[],getalice_pubkey:53,getanynotari:54,getbefor:49,getbloomfilters:5,getbob_pubkey:53,getclass:49,getcommand:[49,50],getcontract:49,getdummy_pubkey_1:53,getencumbr:49,getfacevalu:49,getfix:7,getflowtrack:12,getinput:[40,49],getinstat:40,getissuanc:49,getkei:49,getlegalcontractrefer:[49,50],getmaturityd:49,getmega_corp:53,getmega_corp_pubkey:53,getnotari:54,getnotarysignatur:12,getorthrow:[13,52],getoutput:[40,49],getoutst:40,getowner:[49,50],getpap:53,getparticip:49,getprotocolvers:4,getrequiredcommand:50,getresourceasstream:46,getresultorthrow:29,getsign:[49,50],getsubtyp:43,getter:[38,49],gettest_tx_time:53,gettimestamp:49,gettransact:13,getvalu:[49,50],gigabyt:33,github:[1,2,15,18,43,51],giusepp:40,give:[10,13,15,21,31,33,35,36,40,47,49],given:[0,1,3,9,12,21,22,23,30,31,36,38,40,42,48,49,50,54],givenpric:12,glanc:34,global:[1,5,21,22,23,24,27,40,53],glue:12,gnu:2,goal:[5,17,19,41,50],goe:4,gone:[12,40,49],good:[0,5,12,13,18,30,49,50],got:[12,30,33,36,52],govern:[23,25,43],gpg:39,gps:21,gr1:3,gr2:3,gr3:3,grab:51,gradlew:[0,10,15,29,32,34,37,39,43,45,48,51,52],grain:[4,33],grammar:5,graph:[1,4,13,19,23,24,26,27,33,38,40,48],graphit:33,graphstream:48,great:[0,40,43],greater:5,green:[26,51],grei:23,grip:[],ground:27,group:[],groupclaus:50,groupid:51,groupingkei:[3,50],groupstat:[3,49,50],grow:48,guarante:[17,22,23,24,31,41],guava:[5,49],gui:[12,16,40,51],guidelin:[],h2databas:43,hack:40,had:[12,13,21,22,40,49],hand:[1,11,12,15,23,27,28,32,35,45,47,49,51],handa:40,handi:13,handler:[10,11,12,35],handshak:[31,36],happen:[],happi:[43,46],happili:[33,36],hard:[5,12,41],harder:[44,49],hardwar:[1,8,27],hash:[12,13,17,19,22,23,27,30,33,36,40,46,47,49],hashcod:[3,49],hashmap:29,haskel:40,hasn:29,hassl:12,hat:41,have:[0,1,3,4,5,6,7,9,10,11,12,13,15,16,17,19,21,22,23,26,27,29,30,31,33,34,35,36,38,39,40,41,42,43,44,45,46,47,48,49,50,51,53,54],haven:[49,51],head:[1,3],heap:[12,33],hear:15,heart:49,heavi:41,heavili:23,hedg:[6,7],held:[35,38,49],hell:12,hello:12,help:[5,11,12,32,36,43,47,49,51],helper:[3,7,9,12,22,35,46,47,49,53,54],henc:[7,21,35],her:[49,53],here:[0,1,5,8,10,12,13,14,15,16,17,21,22,25,30,31,32,33,36,38,40,47,48,49,50,51],herself:48,hidden:[31,35],hide:[],hierarch:[0,12],hierarchi:[5,12,25],high:[12,40],higher:[4,5,21,33,51],highli:[0,40],highlight:[24,40],hint:0,histor:36,histori:42,hoc:40,hocon:8,hold:[3,9,22,29,30,35,40,47],holder:[5,49],holidai:[7,22,36],home:[16,43],homepath:[10,51],hood:53,hope:35,hospit:[12,26],host1:29,host2:29,host:[8,10,24,29,31,32,35,36,37,39,40,45,51],hostil:44,hostnam:45,hotspot:5,hour:12,hous:34,how:[],howev:[0,6,7,8,12,15,21,30,35,36,37,38,42,46,47,49,50,51,53],html:[2,5,43,51],http:[],https:8,hub:[12,17],human:[8,12,21,23,26,36,43],hundr:12,hurt:[12,36],icommercialpaperst:53,icon:1,idea:[0,5,12],ideal:[12,49],idempot:40,ident:[],identicon:40,identifi:[1,7,9,12,16,17,21,22,23,25,30,31,33,35,36,38,40,43,47,52],identiti:[12,21,22,27,35,54],identityless:23,identityservic:35,ifmatch:40,ifnotmatch:40,ignor:[12,48,49,50,51],iii:9,illegalargumentexcept:[5,12,36,49,50,53],illegalstateexcept:[3,5,47,49,50,53],illustr:[1,22,23,24,25,26,28,32,49],illustrat:5,imag:[1,30,51],imagin:[3,5,12,49,50],immedi:[4,35,47],immut:[5,7,23,28,36,49],immutabl:5,immutablelist:49,imper:5,implement:[],impli:[12,24,31,38],implic:[12,21,23],implicit:52,implicitli:7,important:41,importantli:47,impos:[36,49],imposs:[30,36],improv:[21,28,40,41,49,50],improvement:40,inact:35,inadvert:49,inbound:31,includ:[],include:9,inclus:[3,30],incom:[35,40],incompat:53,incomplet:29,inconsist:0,inconveni:49,incorpor:[31,36],increas:[5,40,43],increment:[0,4],inde:36,indent:5,independ:[21,36,38,43,50],index:[7,11,23,38,41,49,51,54],indexsourc:11,indic:[4,5,7,8,11,12,22,40,45,47,49],indicat:29,indirectli:26,individu:[],indivis:25,industri:[14,15,17,33,43],inf:[9,51],infer:53,influenc:33,info:[12,13,38,48],inform:[1,5,8,9,12,13,15,16,21,22,24,26,31,34,35,36,37,40,43,46,49,51,52],infrastructur:[4,13,19,23,24,33,35,40,49],ingredi:47,inherit:[5,49],init:36,initi:[9,12,16,22,29,31,35,36,40,43,45,47,48],initial:[],initialis:[13,32,35,38,54],inlin:[12,47],inmemorynetworkmapservic:35,inoutgroup:[3,49,50],input:[],inputindex:54,inputpap:53,inputslist:47,inputst:54,inquisit:51,insert:[5,13,21,33,35,36,38,47],insid:[4,9,12,13,23,30,35,43,44,47,49],inspect:[29,51,52],instal:[0,2,8,10,11,15,16,39,40,43,48,49,51],installdist:[43,48],instanc:[],instance:53,instant:[5,11,12,22,36,47,49],instanti:[9,11,12,33,40],instat:53,instead:[1,5,12,13,15,16,19,22,23,31,35,40,49,54],instigat:21,instruct:[15,16,17,18,33,43,46,48,49,51],instruction:15,instrument:[6,7,11,35,47,51],insuffici:47,insufficientbalanceexcept:49,integ:[4,25,40,49,54],integer:49,integr:[0,5,8,12,15,23,30,33,36,38,40,43,51,52],integrat:[],integrationtest:52,integrationtestingtutori:52,intellig:5,intend:[5,6,10,12,13,22,23,24,25,33,34,35,36,38,44,46,51,53],intent:[3,9,32,36,40,49],intention:5,inter:[24,40],interact:[],interchang:[17,25,47],interest:[],interest_r:[8,45],interfac:[],interior:40,interleav:29,interledg:40,intermedi:47,intermediari:[22,43],intern:[5,9,10,12,28,31,33,35,38,40,49,51],internalis:5,interop:[14,40,49],interoper:35,interpol:22,interpret:[5,23,29],intersect:49,interv:[22,29],intervent:35,intesa:40,introduc:[5,11,17,23,36,40,49],introductori:[18,51],intuit:[5,34],invalid:[12,21,22,23,36,49],invari:[29,49,52],investig:12,invoc:[4,12],invoic:46,invok:[4,5,9,11,12,23,26,33,35,36,40,51],invoke:12,involv:[6,12,18,21,22,35,42,47,49,52,54],ipsa:36,irrelev:11,irsdemo:[1,8,30,43],irsexport:7,irstest:7,irsutil:7,isbefor:49,isconsist:29,isda:[40,43],isdebug:51,isempti:[36,47,49],isinstanc:12,isn:[4,5,12,22,31,44,49],isnotari:48,isnotempti:[46,48],isol:50,issu:[],issuanc:[6,22,23,25,28,29,40,43,49,50,53],issue:[3,6,17,29,43,48,49,50,53],issuecash:[29,48,52],issuecommand:50,issuedbi:[52,53],issuer:[6,12,13,25,28,34,40,43,47,49,50,53],issuer_kei:38,issuer_ref:38,issueref:[48,52],issuerparti:38,issuerref:38,issuetransact:54,istribut:18,item:[17,47,49,51],iter:[12,40,41,49],iterabl:38,iterat:[36,47],itself:[4,7,8,11,12,15,18,21,23,31,33,34,35,36,38,40,43,46,47,48,49,53],jar:[0,2,8,9,10,23,32,33,37,40,45,46,47,51],jarandsourc:10,jav:16,java:[0,3,4,5,9,10,11,12,14],javaag:47,javaclass:[12,38],javacommercialpap:[49,53],javadoc:[5,10,51],javadocjar:10,javafx:[],javatesthelp:53,javax:38,jax:9,jcenter:[],jdbc:[8,10,28,33,38,40,43,45,51],jdbcdatasourc:[8,45],jdbcx:[8,45],jdk1:16,jdk:15,jdwp:10,jersey_vers:51,jetbrain:[14,15,16,51],jms:31,jmx2graphit:33,jmx:33,jmxtran:33,job:[12,29],jobs:29,johann:40,join:[8,28,31,38,40,49],jolokia:33,jpa:38,json:[8,33,35,51],judgement:5,junit:51,just:[4,5,12,15,16,22,23,29,31,33,36,40,43,44,46,47,48,49,51,53,54],jvm:[],kdoc:5,keep:[12,15,23,28,47,49,51],kei:[],kept:[12,37,54],keymanagementservic:[12,35,36],keypair:[12,35,36,49,54],keystor:[8,35,37],keystorepassword:[8,45],keyword:[5,53],kick:12,kill:[26,29],kind:[12,22,36,44,49,51],knob:29,know:[1,4,11,12,13,14,21,24,27,30,36,44,47,49,50,51,53,54],knowledg:36,known:[1,7,13,15,17,23,24,30,35,36,40,41,43],knownfix:36,koan:[],korea:49,kotlin:[],kotlin_vers:51,kyc:24,label:[12,53],lack:[],lambda:[12,33,53],land:7,lang:[9,53],languag:[4,5,10,12,14,15,16,17,22,23,25,40,49,51],larg:[12,22,25,31,36,40,46,47,49],larger:[5,23,44],last:[12,26,29,36,41,53],lastli:51,late:15,lateinit:13,latenc:21,later:[4,5,12,13,19,22,36,38,40,44,48,49,50,51,52],latest:[5,9,15,16,18,40,47,51],latestrecord:47,latex:40,latter:[5,48,49],launch:[11,34,36,43,48],layer:[8,12,13,31,35,36,38,40,42],layout:[10,32,40,51],lazi:36,lazili:33,ldap:40,lead:[5,50],leader:8,leaf:[17,30],leak:[4,12,21,36],learn:[12,13,14,18,22,49],least:[1,8,29,43,46,49,50,51],leav:[1,3,5,12,16,22,30,34,36],ledger:[1,6,7,12,17,18,20,21,22,23,24,25,26,28,33,34,36,38,40,43,45,46,47,49,51,52,53],ledgertransact:[12,22,40],leewai:44,left:[1,12,32,37,43,50,51,53],leg:[7,11],legaci:35,legal:[8,21,23,31,35,36,37,40,47,49,51,54],legalcontractrefer:[49,50],legalident:[13,47,48,52,54],legalidentitykei:[47,54],legallyidentifi:[12,36],legalnam:[8,45,51],legitim:23,less:[12,33,40,46,50,53],lesser:49,let:[1,3,5,11,12,13,22,29,30,31,33,36,40,47,48,49,50,51,53,54],letmein:[8,45],letter:[5,31],level:[0,3,5,7,9,12,16,21,22,27,29,30,31,33,34,35,40,43,44,47,49,50,53],lib:[2,10,32,37,45,47,51],liber:5,libopenjfx:16,libor:[7,33,36],librari:[0,4,5,12,17,18,22,25,26,33,35,36,40,43,48,49,51],licat:18,licens:[5,43],license:51,life:[12,49],lifecycl:[],lifetim:[7,9,22],lightweight:[13,17],like:[3,4,5,7,11,12,13,21,22,23,25,28,29,30,31,32,33,36,40,41,43,47,48,49,51],likewis:[36,49],limit:[3,6,17,29,33,49,54],linear:[25,28,35],linearhead:47,linearheadsoftyp:47,linearid:47,linearst:[25,47],liner:5,link:[5,12,16,23,36,39,40,45,51,52],linkag:23,linux:[10,15,33,40],list:[0,2,3,8,9,12,22,23,27,29,30,31,35,36,38,40,41,42,43,47,48,49,50,51,54],listen:[0,1,5,31,35,40,48,51],listof:[13,36,38,47,48,49,51,52],littl:[5,12,49,53],live:[7,9,12,35,40,43],lizard:17,llc:37,load:[],loadtest:29,loan:[6,7,36],local:[],local_branch_nam:51,localcertificatesbasedirectori:29,locald:36,localhost:[1,8,33,34,43,45,51],localtunnelstartingport:29,locat:[],lock:[5,6,8,28,38,49],log4j2:[33,45],log4j:[40,51],log:[],logger:[12,33],loggerfor:33,logic:[3,11,12,13,17,21,22,23,24,31,38,40,44,46,47,49,50],login:[10,34,39,43,48],loglevel:33,london:[8,10,37,45,46,51],longer:[0,5,7,8,12,37,40],longrang:29,look:[0,1,3,5,7,12,13,22,29,31,33,36,41,43,46,49,50,51,53],lookup:[8,31],loop:[5,7,29,48,49,52],loquitur:36,loss:36,lot:[5,7,40,43,44,49],low:[12,21],lower:[5,12,15,27,47],lowest:31,lurch:12,machin:[],macos:[10,40],made:[5,7,12,22,35,36,40,41,46,47,48,51],magicnumb:54,mai:[0,1,4,5,10,12,15,16,17,18,21,22,23,24,25,26,27,28,29,31,32,33,34,35,36,38,40,41,43,44,45,47,48,49,50,51,52,53],mail:41,mailbox:35,main:[0,8,11,12,16,23,29,31,35,40,46,48,50,51],mainstream:19,maintain:[17,21,36,49,54],mainten:31,major:[0,12,40,41,43],make:[],maker:14,maketransact:13,malici:[12,27,40,44,47],man:40,manag:[],managa:28,mandatori:49,mani:[5,10,11,12,13,16,21,22,23,25,27,29,36,40,46,49,51],manifest:0,manipul:[22,25,47],manner:[12,23,31,40,48,49,50],manual:[0,10,11,12,26,32,47,54],map:[],mappabl:49,mappedschema:38,mappedtyp:38,margin:[],mark:[4,5,6,12,17,38,49],markdown:5,marker:[12,44],market:51,marshal:4,master:[15,16,41,51],match:[3,4,8,12,22,23,24,30,31,36,44,47,48,50,52],materi:50,math:[],mathemat:22,matter:[12,36,43,49],matur:[6,7,21,27,32,33,36,49,53],maturityd:[49,53],maven:[],mavenloc:10,mavenpubl:10,maximis:23,maybestx:12,maybetraderequest:12,mbean:33,mean:[4,5,9,11,12,13,16,17,21,23,25,26,27,29,30,36,40,43,47,48,50],meandref:48,meaning:[6,21],meaningfulli:46,meant:[12,29,51],meantim:52,meanwhil:[48,50],measur:[7,28,43],mechan:[9,17,28,31,36,40],meet:[3,35,47,49,51],mega:37,mega_corp:[13,53],mega_corp_key:13,mega_corp_pubkey:53,megacorp:[13,53],member:[7,8,40,43],membership:26,memori:[],menlo:5,mention:[11,12,36,49],menu:[1,51],mere:7,merg:[25,28,40,47,49,51],mergeabl:49,merkl:[],merkleroot:[30,36],merkletreeexcept:[30,36],mess:12,messag:[],messagingserveraddress:[8,35],messagingservic:[31,35],met:[9,22,51],meta:[9,51],metadata:[33,46,51,54],method:[3,4,5,8,9,11,12,13,21,22,25,29,33,35,36,38,40,44,45,46,47,49,54],metric:[33,43],micro:[40,50],microsoft:1,mid:21,middl:[5,12,40],middlewar:[17,35],midpoint:51,might:[5,7,12,36,38,44,47,49,51],migrat:47,mileston:[],million:26,min:48,mind:[5,12,36],miner:23,mini_corp_pubkey:13,minim:[3,12,15],minimis:[6,21,31],minimum:[4,7,22,23,47],minor:[31,40,41],minu:49,minut:[0,1,12,14,36,39,51],mismatch:[49,53],miss:[],mission:33,mistak:[40,44,47],mix:[0,5,40],mobil:23,mock:[13,51],mocknetwork:[13,32],mocknod:[13,35],mockservic:22,modal:51,mode:[8,32,34,37,40],model:[],modif:[35,47,49],modifi:[1,6,7,9,10,12,17,22,47,49,51,53],modul:[5,8,13],moment:[12,13,40],monei:[36,47,49],monitor:[],month:[7,12,41],monthli:51,more:[0,1,3,4,5,6,7,8,10,12,13,14,16,17,18,21,22,23,24,25,27,30,31,32,33,35,36,37,38,40,42,43,46,47,48,49,50,51,52,54],moreexecutor:5,mortensen:40,most:[0,3,5,7,12,15,31,32,33,45,49,50,51],mostli:[23,49],motiv:[18,51],move:[3,6,9,12,13,23,34,40,41,43,47,48,49,50,51,53,54],movement:[12,25,49],movetransact:54,movetransactionbuild:54,much:[5,12,14,27,36,38,40,44,47,49],multi:[],multigraph:48,multilater:[6,40],multipl:[],multipli:7,must:[3,4,5,6,8,9,10,11,12,21,22,23,25,27,31,33,35,36,38,39,40,44,45,46,47,48,49,50,51],mustafa:40,mutabl:[5,22,49],mutablelistof:47,mutat:[35,47],mutual:[6,12,21,44],myfil:33,myident:[36,54],myinfo:[36,47,54],mykei:22,mykeypair:12,mylegalnam:[8,37,45],mynodeinfo:36,mypublickei:12,mysigningkei:[36,54],mysql:19,nail:5,name:[],namedbyhash:[],namespac:12,narrow:[3,5,34],nativ:[12,47],natixi:40,natur:[0,23,47,49],naval:21,navig:[1,10,39,43,51],navistar:21,nearestc:[8,10,37,45,51],neat:53,necessari:[5,17,24,36,40,41,51],necessarili:[22,38],nee:40,need:[0,1,2,3,5,7,9,11,12,13,15,16,17,21,22,23,24,25,29,30,33,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54],neg:[25,51],negoti:[22,47],neither:12,nest:[12,52],net:[3,6,7,8,9,10,12,13,33,35,37,38,39,40,42,43,45,46,47,48,49,51,52,53],network:[],networkmap:[10,31,51],networkmapcach:[8,9,12,35,54],networkmapservic:[],networkmapupd:48,neutral:19,never:[5,17,21,49],newdeal:36,newli:[11,51,54],newnotari:21,newowner:[49,54],newsecurerandom:40,newstat:47,nextdoubl:48,nextfixingof:11,nextlong:48,nextscheduledact:11,nfinal:46,nice:[36,49],nio:5,noddi:33,node:[],node_dir:10,node_directory:45,nodea:[1,10,51],nodeb:[1,10,51],nodec:[1,51],nodefilt:29,nodehandl:[29,52],nodehost:29,nodeident:48,nodeinfo:[8,12,35,52],nodeinterestr:[9,36,47],nodenam:51,nodex:51,nodisruptionwindowm:29,non:[],nonc:50,nondeterminist:52,none:[3,11,12,30,36,38,43,50],nonemptyset:40,nordea:40,normal:[3,4,6,7,9,10,12,22,29,30,31,32,34,35,40,46,47,49,50,54],north:49,notabl:[5,51],notari:[],notaris:[],notary:12,notary_committed_states:43,notarychang:[40,47],notarychangeflow:21,notaryclusteraddress:[8,35],notaryexcept:54,notaryflow:[12,26,35,40,47,54],notaryident:[12,13,48,52],notarynod:[12,13],notarynodeaddress:8,notarysig:12,notarysignatur:[12,54],notarytous:22,note:[],noth:[5,11,12,23,40,44,49,51],notic:[5,43,50,53],notif:[26,29,31,35,46],notifi:[31,32,54],notion:[],notnul:[49,50],now:[1,5,10,12,13,22,30,33,39,40,43,45,47,48,49,51,52,53,54],nugget:49,nullabl:[12,49],nullpublickei:49,number:[0,3,5,6,7,13,15,17,22,25,29,31,34,35,36,38,39,41,43,45,47,49,51],numer:9,obj:[49,50],object:[],oblig:[6,7,25,40,47,51],obligat:[],obligor:6,observ:[4,7,11,12,21,26,29,32,40,46,51],observatori:21,obsolet:[11,40],obtain:[5,8,11,12,13,15,21,24,27,30,36,37,40,43,51,54],obviou:[5,21,36],obvious:[0,7,17,32],occasion:0,occur:[11,12,21,35,49,52],occurr:[12,21],odd:49,off:[],offer:[12,27,35,38,51],offici:15,offlin:31,offset:7,ofsecond:47,often:[5,6,7,12,16,36,47,49],oftenor:36,oil:[25,40],old:[12,17,21,39,40,47,49,54],older:15,omit:[11,43],onc:[4,5,9,12,17,21,22,26,37,41,47,49,52],once:[1,2,7,10,11,12,15,17,18,22,31,32,37,38,39,43,45,46,47,49,51],one:[3,21,24,30,36,43,47,51],ongo:4,onledgerasset:[6,49],onli:[0,3,4,5,7,8,10,11,12,14,17,21,22,23,24,25,30,31,32,33,34,35,36,37,40,41,43,44,45,47,48,49,50,51,52,53,54],only:[12,31,35,39,45],onto:[4,5,12,31,49,53],opaquebyt:[40,48,52,53],open:[0,1,3,4,10,12,15,16,18,21,23,31,33,35,40,43,48,51,52],opengamma:[40,43],openjdk:[15,16],openjfx:[15,16],openssl:29,oper:[1,7,8,11,12,17,24,25,31,33,35,36,40,44,45,47,48,49,54],oppos:0,opposit:3,opt:[1,10,29,51],optim:5,optimis:[28,40],option:[0,1,2,5,7,8,11,12,17,29,32,36,37,38,40,47,49,50,51,52,54],optional:[8,47],oracl:[],oracleparti:36,orang:26,orchestr:[19,23,40],ordain:7,order:[0,2,4,5,6,7,12,19,21,22,23,24,28,29,32,35,36,38,40,43,45,46,48,49,50,51,52],ordernumb:51,ordinari:[12,23,40,49],ordinarili:36,org:[2,8,45,49,50,51],organis:[0,16,28,38,39],orient:[],origin:[23,30,38,40,46,47,49,50,51,53],originalst:21,orm:[38,40],osx:51,otc:38,other:[],otherparti:[12,36],othersid:[12,46],otherwis:[1,4,5,8,9,10,11,12,31,35,36,44,47,48,49,52],our:[0,5,11,12,13,14,15,18,22,29,30,31,35,36,39,40,41,46,47,48,49,50,51,54],ourkei:47,ournotari:54,ourselv:[12,36,49,54],oursign:47,oursignatur:12,ourstat:47,out:[0,3,5,6,11,12,15,16,18,21,22,23,30,31,33,35,36,40,41,42,43,44,46,47,49,50,51,54],outcom:12,outer:50,outlin:[12,36,40],output:[],outref:[13,47],outsid:[10,12,23,35,36,45],outstand:6,over:[0,1,5,7,8,10,12,13,17,21,22,23,24,29,30,31,33,36,38,40,43,47,49,51],overal:[11,21,47,53],overdu:11,overflow:5,overhead:33,overidden:[8,10],overload:[12,25],overlord:17,overnight:22,overrid:[3,9,11,12,29,36,38,48,49,50],overridden:[9,10],overutilis:29,overview:[],overwrit:39,own:[],ownablest:[12,22,49],ownedquant:48,owner:[11,12,22,28,38,47,49,50,53,54],owner_kei:38,ownership:[12,13,43,49,54],owningkei:[12,30,36,47,49,54],ozturk:40,p2p:[31,40],pack:49,packag:[9,15,22,25,38,40,51],packet:23,page:[1,8,15,16,36,41,43,51],pai:[],paid:[6,7,43,49],pair:[1,12,13,22,35,36,37,47,49],pan:40,pane:16,paper:[],paragraph:29,parallel:[4,29,36,40,52],param:[29,38,54],paramet:[4,5,9,11,12,22,29,33,36,40,46,47,49,50],parameteris:[23,29,47],parent:[12,17],pars:[22,36,49],part:[0,3,4,5,6,8,9,10,11,12,21,22,23,29,30,31,34,35,36,37,38,40,44,45,47,49,50,51],parti:[],partial:[],partialmerkletx:36,partialtx:[12,30],particip:[21,22,23,24,26,27,28,34,35,36,40,49,54],particular:[],partner:[43,47],partyandrefer:[5,25,48,49,53],partyfromnam:46,partynod:13,partyrefer:[5,49],pascal:5,pass:[1,3,9,12,22,26,28,29,30,33,35,36,38,40,43,46,47,49,50,52,54],passphras:39,password:[1,4,8,10,27,31,33,34,37,40,43,45,48],past:[1,5,43,49,51],patch:[5,40],path:[5,8,9,10,11,16,29,31,33,40,43,47,48,49,51],path_to_loadtest_conf:29,pattern:[5,47,48],paus:[10,26,32],paycash:[48,52],payer:7,payload:36,payment:[1,6,7,11,12,17,34,36,43,49],pdf:[36,46],peer:[12,19,24,30,31,34,35,36,49,51],penni:[25,38,49],peopl:[5,12,14,17,26,49],per:[],perfect:50,perform:[0,1,5,7,11,12,17,21,22,23,26,27,28,29,31,36,40,43,46,49,50,51],perhap:[5,31,45,49],period:[7,37,43,47],perman:[12,46,47,49,53],permiss:[],persist:[],persistentcashst:38,persistentst:38,perspect:[12,23,27,35,49],pertin:51,pervas:27,phase:40,phrase:36,physic:[1,21,35,40,45],pick:[0,12,15,31,40,41,49],piec:[5,12,17,21,23,25,29,45,49,53],pip:2,pki:[23,40],place:[2,5,7,9,11,12,19,22,23,24,30,31,36,40,41,43,48,49,50,51],plai:[],plain:8,plan:[12,23,36,39,40],platform:[7,9,10,11,12,14,15,18,20,21,22,23,24,30,40,43,44,49,51],plc:34,pleas:[1,5,8,15],ploadtest:29,plu:[8,22,35,53],pluggabl:[21,24,27,40],plugin:[],pluginservicehub:[9,10,12,35,36,40],pluginserviceregistri:51,point:[4,5,6,9,10,12,16,17,21,22,23,29,33,35,36,38,40,41,44,47,48,49,50,51],pointer:[12,22],pointless:5,polish:40,polit:43,poll:[29,37],pool:5,pop:[16,51],popul:[35,47],popular:14,popup:[15,16],port:[0,1,8,10,29,34,35,40,41,43,45,51],portal:1,portfolio:[],portion:[23,47],posit:[5,12,18,49,54],possess:[12,21,54],possibl:[3,12,15,16,23,28,29,35,36,37,40,43,46,47,49,53],post:[24,35,51],postgr:19,potenti:[5,12,14,21,26,36,43,49,51],pound:[25,49],pour:25,power:35,practic:[8,40,43,47,49],preced:[0,49],precis:[19,21,23],precondit:[5,49],predic:52,predict:29,predominantli:[],prefer:[0,1,5,16,34,38,51],prefix:[5,38],preliminari:43,prepar:[40,49],prescrib:45,present:[1,3,4,6,7,8,9,10,12],preserv:[21,28,47],press:51,pretend:[22,33,40],pretti:12,prevent:[28,31,40,43,44,47,49],previou:[12,22,29,40,50,51,53,54],previous:[7,11,21,22,23,36,40,51,54],price:[12,23,36],primari:[23,36],primarili:[0,6,15],primit:[22,53],print:[4,33,40,43,44,45,46,48,52],println:[46,48,52],printorvisualis:48,prior:54,privaci:[5,12,19,21,23,27,28,36,40,47,49],privat:[1,5,8,9,12,13,24,27,28,31,36,37,38,45,47,49,51,53],privatefoo:5,privatekei:[12,35],probabl:[0,49],problem:[12,15,16,36,45],proce:[1,12],procedur:[12,37,49],process:[],processor:29,produc:[2,11,16,23,32,47,49,52,53],product:[0,5,10,11,14,19,25,40,41,43,47,51],profil:[33,39],program:[4,5,22,23,33,35,40,43,49],programmat:48,progress:[],progresstrack:[12,36],project:[],prolif:40,promis:40,prompt:[15,51],proof:[6,23,30],propag:[4,12,33,49,50,51,53],properli:[12,35,44],properti:[],proport:43,propos:[12,23,35,44,47,51],proprietari:[24,40,43],prose:[23,36,49],prospectus_hash:46,protect:[12,27,35,37,43],protocolhandl:46,protocolvers:4,prototyp:[5,19,36,40,42,49],provabl:47,prove:[21,49],proven:[27,43],provid:[],provis:24,provision:22,proxi:[4,46,48,52],prune:[27,28],pseudo:36,pseudonym:22,ptx:[12,36,46],pubkei:53,publicfoo:5,publickei:[12,35,49],publish:[],publishtomavenloc:39,pull:[47,51],punish:36,purchas:[1,12,43,51],purchaseord:51,purchaseordercontract:51,purchaseorderst:51,pure:[6,23,36,52],purpos:[1,6,12,17,21,22,27,28,31,38,42,43,45,47,48,49,51,52],push:[4,31,41],put:[],putti:1,python:[2,40,51],qualifi:[8,9,38],qualiti:47,quantifi:25,quantiti:[3,25,28,29,47,48,49,51,52],quasar:[9,10,12,17,35,36,47,51],quasar_vers:51,queri:[],queryablest:[35,38],queryrequest:36,question:[5,11,21,22,31,36,50],queu:[17,31],queue:[],quick:[36,51],quickcheck:40,quickli:[17,37,44,49],quit:[4,5,12,21,49],r3cev:29,r3corda:[10,40,51],r3dlg:41,r3prototyp:[2,47],radic:23,raft:[],rais:[3,21,43,50],ran:0,random63bitvalu:50,random:[11,22,23,29,31,34,40,43,47,48,54],randomis:[27,40,46],randomli:[29,34,48],rang:[1,3,21,38,51],rapid:[5,10,19,41],rare:[8,25],rate:[],ratesfixflow:[30,36,47],rather:[3,5,12,15,16,31,32,40,45,47,48,49],rational:20,raw:[1,31,33,43],rdbms:[38,40],rdms:40,reach:[7,11,21,23,24,27,36,40,43],reachabl:12,react:29,reactiv:40,read:[1,5,8,10,12,14,18,19,30,33,35,36,40,49,51],readabl:[8,12,14,23,43],reader:18,readi:[1,3,41,49,51],readili:50,readm:[18,51],readme:[5,51],real:[5,22,32,36,37,40,43,47,49],realis:12,realist:22,realiti:[7,52],realli:[5,12,30,36,49],reason:[5,7,12,21,23,25,29,40,44,49],reassign:49,recal:7,receipt:[35,43],receiv:[4,6,7,9,12,17,26,29,31,35,36,40,41,43,44,46,47,49,51,52],receiveandcheckproposedtransact:12,receiveandvalidatetraderequest:12,received:36,receiving:12,recent:[1,40,51],recheck:47,recipi:[6,43,46,49,52],recognis:[9,12,23,49],recommend:[0,1,5,15,31,42,43,51],record:[11,13,17,21,25,26,28,35,38,43,46,47,51,54],recordtransact:[13,35,47,54],recreat:[12,16],red:[7,30,51],redeem:[3,6,34,49,50],redempt:49,redeploi:51,redesign:40,redirect:45,redownload:16,reduc:[5,10,43],redund:5,ref:[12,13,22,36,47,48,52,53],refactor:40,refer:[],referenc:[46,51],refin:40,reflect:[1,12,18,29,40,47,49,50,51],refresh:[0,15,40,51],refus:16,regard:[21,45,47],regardless:12,regener:[7,41],regist:[],registerflowiniti:[9,12,36],registerrpckryotyp:[9,48],registr:[9,35],registri:9,regress:40,regul:[23,47,49],regular:[1,12,17,25,33,43,45,49],reifi:47,reissu:49,reject:[8,21,23,31,35,36,37,47,49],rel:[8,14,33,36,40,47],relabelablestep:12,relai:46,relat:[],relationship:[35,49],relax:[29,37,40],releas:[],relev:[3,9,10,11,17,22,23,28,35,36,40,47,49,50,54],reli:[4,10,23,40,43,44],reliabl:35,relic:33,religi:5,remain:[10,11,12,36,40,47,49,51],rememb:[5,11,44,47],remind:[12,44,50],remot:[0,9,10,16,27,29,32,35,43,45,47,51],remote_branch_nam:51,remotemessagingport:29,remotenodedirectori:29,remotesystemdservicenam:29,remov:[12,30,34,40,41,49],renam:[12,40],render:[5,12,32,34,40],renderifsupport:46,repair:26,repay:50,repeat:[0,5,7,12,46],replac:[4,7,22,33,40,41,43,47,48,49,51],replai:40,replic:[8,42,43],repo:[0,1,15,16,18,51],repoint:21,report:[12,26,28,34,40,50],repositori:[0,5,10,16,39,40,41,43,51],repres:[1,5,6,7,9,12,22,23,24,25,28,29,34,35,36,38,40,47,48,49],represent:[],reproduc:47,republish:51,request:[],requestingparti:54,requir:[],requiredcommand:[3,40,50],requiredflow:9,requiresinglecommand:[49,50],requirethat:[49,50],research:40,resel:36,resend:35,resent:35,reserv:28,reset:[7,32],resid:35,residu:47,residualamount:47,residualoutput:47,resolut:[12,23,26,40,54],resolv:[5,12,13,22,27,36,43,45,49],resolvetransact:23,resolvetransactionsflow:[12,13,26,46],resolvetransactionsflowtest:13,resourc:[0,1,4,8,9,12,23,29,36,46,47,51],resp:36,respect:[0,5,12,22,28,47,51,52],respond:[12,35],respons:[4,9,11,12,16,21,23,28,31,35,36,38,47,48,51,52,54],rest:[9,12,19,23,31,33,40,50,51],restart:[9,12,26,35,37],restor:[9,12,17],restrict:[1,3,5,23,32,43,47],restructur:[40,50,51],restructuredtext:2,result:[5,7,8,12,13,21,23,34,35,36,37,38,40,43,44,46,47,49,51,54],resultfutur:13,resum:[12,35,37,40],resurrect:12,resync:15,retain:31,rethrown:4,retri:[12,19,31],retriev:[7,12,37,42,46],retrieveoutput:53,returnvalu:[46,52],reus:[4,23],reusabl:[3,17,23,36,40,46,49],reveal:[12,21,27,30,36,40],revers:[12,35],revert:6,review:[5,12,23,27,40,41,51],revis:[7,27,47],rewrit:12,richer:10,right:[1,5,12,15,16,22,33,36,40,41,43,44,47,51],rightmost:30,rigidli:5,risk:[12,43],robert:40,robust:40,rogerwilli:51,role:[11,27,34,35,43,48],roll:[7,12,40,43],rollov:[22,49],root:[1,8,10,24,27,30,31,35,37,41,45,47,51],roothash:36,rotat:[33,40],roughli:[21,41],rout:[12,13,27,31,40],row:[23,33,34,38,43,49],rpcclienttonod:[48,52],rpcexception:4,rpckryo:4,rpcreturnsobserv:4,rpcsincevers:4,rpcuser:[8,34,45,48,51,52],rui:40,ruin:53,rule:[5,12,23,28,35,36,40,43,49],run:[],runbuy:43,runconfigur:[15,16],rundemonod:[34,40],runexampleclientrpc:51,runnetwork:13,runnod:[0,10,40,43,48,51],runparamet:29,runrecipi:43,runrpccashissu:43,runsel:43,runsend:[0,43],runshellcommandgetoutput:29,runsimulationnod:34,runtim:[5,12,51],runwebcashissu:43,sacrif:51,safe:[4,5,9,12,37,44,48,52],sai:[5,21,29,43,45,49,50,54],sake:[43,52],sale:49,same:[0,1,4,5,6,7,8,10,11,12,21,22,23,25,28,29,31,35,36,37,40,43,45,47,48,49,50,51,53],sampl:[0,9,10,12,15,16,18,26,32,33,34,40,43,46,51],sanction:49,sandbox:[11,19,23,27,40,44],saniti:12,santiago:40,sate:54,satisfi:[22,43,49,50],save:[5,12,40,49],saw:52,scala:[14,49],scalabl:[5,21],scale:[7,44],scenario:[22,26,27,32,35,47,51,52],scene:[12,49],schedul:[],schedulablest:[11,22,35],scheduledact:11,schedulerservic:35,schema:[],schemafamili:38,schemaopt:38,schemaservic:38,scheme:[30,35],schroeter:40,scienc:51,scope:[3,9,34,46,50],scotiabank:40,scotland:50,scrape:33,scratch:[22,49,51],screen:[1,5,15,16,34,40,49],script:[0,2,10,40,43,46,51],scroll:43,scrub:12,seamless:14,seamlessli:[],search:[1,23,34,35,47,49],sec:51,second:[3,7,9,12,13,22,29,36,43,46,47,49,51,52],secondari:12,secp256r1:40,secret:8,section:[8,20,21,26,27,28,29,36,40,41,47,51,54],securehash:[13,22,30,36,49,50,54],securerandom:40,see:[1,2,3,4,5,6,7,8,10,11,12,13,15,16,21,22,23,24,25,27,29,30,32,36,37,38,39,40,42,43,45,46,47,48,49,50,51,52],seed:12,seek:40,seen:[5,7,9,12,36,49],segment:10,select:[1,3,16,21,27,28,38,40,43,47,49,50,51],selector:3,selectschema:38,self:[10,28,29,40,43,52],selfissuecommand:29,selfissuest:29,selfissuetest:29,selfsignedtx:47,sell:[12,47,49,50,53],sellamount:47,sellerownerkei:12,sellersig:12,sellertradeinfo:12,semant:26,semi:[1,24,27],send:[1,5,12,13,21,24,26,28,30,31,33,35,36,40,41,43,46,47,49,51,52,54],sendandrec:[12,36],sender:[12,43,46],sending:36,sending_offer_and_receiving_partial_transaction:12,sendrec:26,sendsignatur:12,sens:[7,36,49,50],sensit:[11,21,23,30,43,44],sent:[11,12,22,26,31,36,40,46,47,49],separ:[0,1,3,8,9,10,12,22,30,31,33,36,40,43,47,49,51],septemb:43,sequenc:[26,35,40,52],sequenti:[12,52],seri:[12,22],serial:[4,9,19,35,49],serialis:[4,5,9,12,17,19,36,40,49],seriou:41,serv:[10,51,52],server:[4,8,9,10,19,31,33,35,37,40,48,51],servic:[],servicehub:[9,10,12,31,35,36,47,54],servicehubintern:40,serviceident:36,serviceinfo:[43,48,51,52],serviceload:[9,36],serviceplugin:[9,36],servicetyp:[8,35,43,54],servlet:51,session:[11,31,35,40],sessionid:11,set:[],setlifecycl:3,setof:[3,12,13,43,46,47,48,50,51,52,54],setter:[38,49],settim:[12,22,36,47],settl:[3,6,13,25,46],settlement:[6,12],setup:[],sever:[0,8,10,12,31,35,36,38,42,43,45,48,49,52,53],sha256:[22,30,49,50],sha256sum:33,sha:[23,33],shade:23,shadow:28,share:[0,1,6,7,12,17,22,23,24,25,35,36,40,44,46,47,49,51],shasum:33,she:49,shell:[29,51],ship:[1,23],shoot:44,shortcut:19,shorthand:53,shortli:0,should:[0,1,3,5,6,9,10,11,12,15,16,18,19,21,22,24,26,29,30,35,36,37,38,39,40,43,44,45,46,47,48,49,50,51,52,53],shoulder:5,shouldn:[12,23,30,47,49,51],shoutout:40,show:[1,14,23,32,34,35,40,43,49,50,51],shown:[1,4,8,12,13,22,32,47,51],shut:52,shutdown:[12,35],side:[4,11,12,15,25,26,32,36,43,44,46,47,51],sidebar:32,sidenot:45,sig:[36,40,49],sign:[],signal:[17,47],signatori:47,signatur:[],signaturesfromsel:12,signedtransact:[],signer:[30,36,43,47,49,50,53],signfirsttx:13,signific:[0,36,40],significantli:[7,21,22,29,46],signing:[12,36],signingkei:36,signrequest:36,signwith:[12,13,22,46,47,49,54],signwithecdsa:[12,36],signwithourkei:12,silver:5,similar:[5,12,31,36,40,47,48,49,50],similarli:[27,38,47],simmvaluationdemo:[1,43],simpl:[],simplecp:53,simplecpdoesntcompil:53,simplecpmov:53,simplecpmovefail:53,simplecpmovesuccess:53,simpleissuancewithtweak:53,simpleissuancewithtweaktopleveltx:53,simplenam:38,simpler:[14,23,50],simplest:[12,49],simpli:[1,5,10,12,13,22,29,35,38,40,42,49,51,53],simplic:47,simplif:40,simplifi:[3,5,6,23,25,35,42,47,49],simul:[],simultan:[12,22,28,43,49],sinc:[49,50,51],singl:[],singlemessagerecipi:31,singleownerst:54,singleton:[9,12,36,49,50],singletonserializeastoken:[9,36],site:[5,40,41],situat:[5,30,40,47],size:[1,5,7,12,33,36,49,50,51],skeleton:13,skip:[12,22,49,51],sl4j:33,slack:[15,18],sleep:[29,48],slf4j:12,slightli:[0,42,47,49],slip:41,slot:40,slow:[5,29],small:[3,4,11,12,23,24,25,33,36,40,44,46,49],smaller:[3,40,50],smallest:25,smart:[],smooth:49,snapshot:[],snapshots:51,snide:2,snippet:[12,51],socket:33,soft:28,softwar:12,sofu:40,sold:[12,22],sole:[21,31,40],solut:[12,27],solv:[12,16,36],solvenc:36,some:[0,1,4,5,6,9,11,12,13,16,18,19,21,22,23,24,25,26,29,30,33,34,35,36,38,40,43,45,47,48,49,50,51,52,53,54],somed:49,somehow:29,someon:[21,28,49,54],someth:[4,5,7,12,36,40,49],sometim:[0,12,17,22,23,33,47],someusernam:29,somewhat:[4,12,29,40,43],somewher:49,sonatyp:39,soon:[40,49],sophist:[],sort:[12,36,40],sound:[5,12,49],sourc:[],sourcejar:10,sourcenotari:47,sourceset:33,sparingli:5,spawn:[9,52],speak:40,spec:40,special:[3,4,12,21,23,50,53],specif:[3,4,6,9,10,11,12,17,21,22,23,25,28,29,31,33,35,40,47,49,50,51,52],specifi:[1,2,3,4,5,6,8,10,12,17,19,21,22,23,29,30,37,38,40,45,46,47,49,50,51,52,53,54],speed:[12,14,51],spend:[12,13,19,21,26,28,34,35,44,45,47,49,52,53],spent:[23,28,49,53],sphere:23,sphinx:2,sphinx_rtd_them:2,spin:29,spirit:40,splash:[15,16],spline:22,split:[3,25,28,30,31,40,47,49,50],splittabl:49,splittablerandom:[29,48],spot:40,spread:[12,21],spreadsheet:36,spuriou:3,sql:[19,24,38,40,43,51],src:[8,12,35,46,51,52],ssd:1,ssh:[1,29],sshuser:29,ssl:[8,40],sslkeystor:[8,37,51],stabil:51,stabilis:41,stabl:[4,9,16,18,41,48,51],stack:[9,12,33,35,36],stage:[5,6,12,22,26,47,49],stai:[23,35,47,49,50],standalon:[24,32,36,40,48],standard:[3,5,9,10,12,15,17,21,22,25,28,32,33,35,40,43,45,47,48,49,50,51],standardis:[3,22,47],start:[],startflow:[12,13,40,46,48,52],startflowdynam:[12,48],startflowpermiss:[48,52],startnod:[48,51,52],startprotocol:[8,45],startup:[8,9,33,40],startwith:48,state:[],stateandref:[12,21,22,36,40,47,49,54],statehistori:54,statemachinemanag:[],statemachinerunid:12,statement:[5,12,36,49],stateref:[11,22,25,30,38,47,54],statesoftyp:[47,49],staticservedir:9,statist:33,statu:[47,51],status:23,stdlib:51,stem:49,stereotyp:47,still:[11,12,16,21,32,36,40,43,47,49],stock:[23,28,36],stone:29,stood:38,stop:[5,12,35,51],stopnod:13,storag:[],store:[8,9,10,12,13,16,21,22,28,33,35,37,40,42,43,47,49,51,54],stori:[5,40],straight:1,straightforward:[12,49],strain:29,straincpu:29,stream:[4,12,31,32,40,46,48,52],strength:15,stress:[5,29,40],strictli:[7,9],string:[0,8,12,22,29,36,38,43,48,49,51,54],strip:49,strong:14,strongli:15,stub:[40,43],stuck:18,studi:49,stuff:5,stx1:13,stx2:13,stx:[12,22,46],sub:[],subclass:[6,12,22,38,49],subclaus:50,subcompon:27,subdirectori:33,subflow:[9,12,21,35,36,47,54],subfold:[9,35],subgroup:23,subject:[8,10,17,27,31,43,51],submiss:36,submit:[1,5,12,21,29,31,37,40,43,51],subnet:51,subscrib:[4,31,40,46,48],subscript:1,subsequ:[17,28,37,47,49,52,53],subset:[6,30,40,50],substanc:51,substitut:[8,9,47],subsystem:[9,31],subtask:12,subtl:5,subtract:25,subvert:44,success:[3,28,31,43,47,52],successfulli:[23,43,45,46,48],successor:[11,14,21],succinct:5,sudo:[2,16],suffer:43,suffic:12,suffici:[22,31,36,40,41,43,47,48],suffix:51,suggest:[10,15,31,33,49],suggestinterestrateannouncementtimewindow:[11,36],suit:[40,46],suitabl:[11,31,35,36,41],suitablecashst:47,sukrit:40,sum:[29,43,47,48,49,51],sumcashbi:[12,49],summari:[],sumorthrow:3,sumorzero:3,sun:5,superclass:[6,40],superior:5,superset:8,supertyp:49,suppli:[6,29,48],support:[],supportedschema:38,suppos:[12,23,49],suppress:[5,40],suppresswarn:5,sure:[15,18,21,39,40,41,44,46,49,51,52],surfac:12,surround:5,surviv:12,suspend:[],suspens:[9,35],swap:[],swapping_signatures:12,swapsignatureswithsel:12,sync:[35,49,51],synchronis:[5,21,35,43],syntax:[0,14,49],system:[0,4,8,10,12,19,21,27,28,29,30,31,33,34,35,38,40,49,51],systemd:[29,45],systemus:31,tab:[1,5,10,15,16,40,43,51],tabl:[10,33,34,35,38,40,43,51],tableprefix:38,tackl:40,tag:[4,5,17,41,51],tag_nam:51,take:[1,3,5,7,9,11,12,13,19,22,23,24,26,29,30,33,36,37,40,41,43,44,47,49,50,51,53],taken:[1,9,49],talk:[13,50],tamper:12,target:[2,5,8,13,14,15,23,32,33,51],tasknam:15,tcp:[10,33,43,51],tear:[],teardown:13,techniqu:[5,19,27,36,51],tell:[2,12,48,51],templat:[],tempor:23,temporari:[10,12,31],temporarili:[12,41],tempt:[44,49],ten:49,tend:17,tenor:[7,22,33,36],term:[1,3,6,8,11,17,22,25,27,31,43,45,50],termin:[7,10,12,33,35,40,43,48,51],test:[],test_tx_time:53,testcompil:51,testnam:29,testnet:[8,10,37,40,45,51],testpassword:52,testtimelock:49,testuser:52,texa:25,text:[1,5,33,40,51,53],textual:28,than:[3,4,5,10,12,15,16,21,22,23,27,31,32,33,36,37,40,47,49,51,53],thank:40,thei:[0,1,3,4,5,6,7,9,10,11,12,16,17,18,21,23,24,25,26,27,29,30,31,32,33,35,36,38,40,41,43,44,46,47,49,50,51],theirsign:47,theirstat:47,them:[],theme:[40,44],themselv:[4,12,13,22,29,31,32,35,36,43,44,48,49,50,51],therefor:[0,4,9,10,12,17,19,35,41,43,44,47,49],thi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54],thin:31,thing:[],think:[5,12,20,31,44,49],third:[24,30,40,43,51],thisstateref:11,thoma:40,thorough:12,those:[0,1,4,11,12,21,23,24,33,36,43,44,49,50,51],though:[12,30,33,36,49],thought:[14,23,24],threadsaf:5,three:[1,3,10,12,23,30,34,43,49,50,52],threshold:[17,22,33,35,40],through:[3,4,7,9,11,12,23,24,25,31,32,33,35,36,40,47,49,51,53],throughout:51,throughput:21,thrown:[4,12,44,49],thu:[3,5,8,11,21,22,23,27,28,33,35,36,40,47,49,50],tick:51,ticket:12,tidi:13,tighten:49,tightli:12,time:[],timelin:49,timem:49,timeout:4,timestamp:[],titl:16,tls1:35,tls:[8,24,27,31,40],toblock:[46,52],todo:[5,12,36,46,49],togeth:[1,3,6,9,23,28,30,40,49,50,51],toinstant:51,token:[3,9,12,25,47,50],tokeypair:36,told:5,toledgertransact:[22,47],toler:[11,21],tolist:47,too:[5,12,15,40,47,49],took:[12,50],tool:[0,12,14,15,17,23,24,29,31,32,33,34,38,40,43,46,51],toolbar:[],top:[1,3,5,9,12,16,29,31,34,40,43,48,50,51,53],topic:[21,31,49],topicsess:[31,40],topolog:34,topriv:12,torn:40,toset:47,tosignedtransact:[12,13,22,46,47,49,54],tostateandref:47,tostr:[5,12,38,49],total:[0,22,29,33,47],totypedarrai:47,touch:[15,18],toward:[40,41],towiretransact:[22,30,36],trace:[12,33,50],track:[],tracker:[12,26,40],trade:[],tradeapprovalcontract:47,tradeoff:[5,36,40],trader:[],traderequest:12,traffic:[8,32],transact:[],transactionbuild:[12,22,36,40,46,47,49,54],transactionforcontract:[3,49,50],transactionforverif:49,transactionst:[21,22,30,40],transactionstorag:35,transactiontyp:[12,40,46,47,54],transactionverificationexcept:53,transfer:[28,43,44,47,49,53,54],transferedfundsoutput:47,transform:26,transit:[22,23,25,27,35,44,47,49],translat:35,transmit:[],transport:[0,8,10,51],travel:49,treat:[10,31,40,44,49],tree:[],tri:[0,40,49],tricki:12,trigger:[3,6,11,12,29,35,36,43,50],trivial:[5,46],troubl:16,trust:[6,8,23,27,35,37,44,47],trustpass:[8,45],truststor:[8,35,51],truststorepassword:[8,45],truth:12,tune:[],tunnel:45,tupl:5,ture:23,turn:[3,12,25,49,50,53],tutori:[],tweak:[29,40,53],twice:53,two:[],twopartydealflow:11,twopartytradeflow:[12,26],txb:22,txhash:[12,48,49,54],txid:47,txstate:36,txt:[33,51],type:[],typenam:12,typeonlycommanddata:[49,50],typetobui:12,typic:[0,1,9,11,12,22,25,31,33,35,36,38,44,46,47,49],ugli:12,ultim:[35,47],ultimat:33,unaccept:12,unacceptablepriceexcept:12,unavoid:12,uncertain:43,unchang:40,unclutt:12,unconfirm:47,unconsum:[28,35,38],undelet:[15,16],under:[2,10,22,29,35,40,41,43,48,49,50,53],undergo:40,underli:[6,7,12,22,25,27,40],underpin:20,underscor:5,understand:[0,32,33,36,47,49,50,51],unencrypt:8,unexpect:[12,44,51],unfamiliar:15,unfinish:12,unfortun:[12,33,44,49],unicredit:40,unifi:40,uniform:11,unilater:47,unindex:16,union:47,uniqu:[11,12,21,22,23,24,25,31,35,36,37,39,40,46],uniqueidentifi:[],uniquenessprovid:35,unit:[0,3,12,13,21,22,28,29,31,35,36,40,47,49,51,53],univers:40,unknow:21,unknown:[22,47],unknownfix:36,unless:[5,12,36,41,49,51],unlik:[35,49],unlike:[6,9],unlink:16,unlock:8,unmerg:51,unpack:[10,35,49],unpars:23,unprocess:[3,50],unread:12,unrecognis:49,unrel:[49,50,51],unresolv:[],unschedul:11,unserialis:12,unset:7,unspecifi:52,unspent:[17,23,28],unstabl:15,unstarted:12,unsubscrib:4,unsubscript:4,unsupportedoperationexcept:[4,49],until:[4,7,11,12,13,21,35,36,40,41,43,45,51,53],untrust:12,untrustworthi:27,untrustworthydata:[12,40,44],unverifiedtransact:53,unwrap:[12,36,40,47],upcom:[11,40],updat:[4,9,10,12,15,16,23,28,29,31,35,40,41,47,48,49,51,52],update:52,upgrad:[12,16,26,38,40,49],upgrade:40,uphold:49,upload:[],uploadattach:46,uploadrat:43,upon:[7,10,12,16,17,24,28,35,43,47,49,51],upward:41,urandom:29,url:[8,10,15,33,37,40,43,45,51],usa:34,usabl:[0,40,41,49],usag:[],usage:[3,48],usb:51,usd:[29,34,48],use:[1,5,6,34,43,51],usehttps:[8,45],useless:49,user1:[8,34,43,45,51],usernam:[1,4,8,27,31,33,34,39,43,48],using:[],usr:2,usual:[5,10,16,23,28,43,47,49,50,51],usualli:[3,41,50,51],utc:11,util:[],utilis:[32,48],utiliti:37,utxo:[11,17,23],uuid:[22,40],vagu:5,val:[3,5,11,12,13,21,22,29,30,36,38,46,47,48,49,50,51,52,53,54],valid:[],validatedtransact:13,validfrom:49,valu:[5,6,7,8,9,12,21,28,30,34,35,36,40,42,43,47,49,50,51,53],valuabl:36,valueof:48,vanilla:[6,7],vari:[],variabl:[5,7,10,12,39,49],variant:[35,49],variou:[5,9,12,23,31,33,35,40,43,44,49,51],vault:[],vaultandupdat:[48,52],vaultservic:[9,12,35,47],vaultsselfissu:29,vcs:[],vega:40,vendor:[19,33],verbos:49,verdict:47,veri:[5,6,8,12,17,33,35,36,43,44,49,53],verif:[],verifi:[],verifiedtransact:[46,48],verifyclaus:[3,50],verifying:12,verifylifecycl:3,verifypropos:40,verifysignatur:[12,47],versa:[6,7,12,23,25],versionnumb:51,versu:12,vertic:5,vet:44,vice:[6,7,12,23,25],video:40,virtual:[1,9,17,23,44],visibl:[],vision:[18,51],visit:[1,8],visual:[34,40,43],visualis:[31,32,48,51],visualvm:33,vital:12,vpn:45,wai:[3,4,5,10,11,12,15,16,17,21,23,29,30,31,33,34,36,38,40,43,45,47,49,51,53],wait:[11,12,13,16,29,35,36,40,43,46,51,52],waitforallnodestofinish:[48,51],wake:40,walk:23,wallet:[11,12,17,28,40,49],want:[0,3,4,5,12,15,18,22,29,30,33,36,40,43,44,49,50,51,52,53,54],warn:[],watch:[18,44,46],weak:[22,36],wear:41,web:[],webaddress:[8,45],webapi:9,webapp:40,webinar:18,webport:[10,51],webserv:[40,45],websit:[1,15,16],week:14,weekend:7,weight:22,well:[0,2,5,7,9,11,12,17,19,23,24,30,33,35,38,40,46,47,49,50,51],went:5,were:[3,5,12,35,36,43,47,49,51],west:25,what:[],whatev:[5,12,25,32,35,36,47],when:[0,1,3,4,5,6,7,8,9,10,11,12,13,15,16,21,22,23,25,26,29,31,32,33,34,35,36,37,38,40,43,44,46,47,48,49,50,51,53],whenev:[5,15],where:[],wherea:[7,43],wherebi:[1,50],wherev:33,whether:[3,4,6,12,21,22,26,29,35,36,40,45,49,50],which:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,35,36,38,40,41,43,45,46,47,48,49,50,51,52,53,54],whilst:[12,32,35,36,40,44,49],white:[9,18,20,21,23,26,27,28,40,51],whitelist:[6,9,10,11,12,48],who:[5,8,12,14,21,22,23,27,31,36,40,43,49,51],whole:[30,35,42,53],whom:6,whose:[6,21,33],why:[],wide:[4,5,30],widescreen:5,widespread:5,widget:[34,51],width:5,wiki:[49,50],wikipedia:[49,50],wipe:16,wiretransact:[],wish:[1,10,12,25,36,38,39,40,43,47,49,51],wit:45,withattach:13,within:[],withitem:[22,47,49],withkei:[12,47],withnewown:[12,49],without:[],withoutissu:[12,49],withoutown:[49,50],withowner:[49,53],won:[12,16,31,34,36,40,48,49,51,52,53],word:[5,8,21],work:[],worker:5,workflow:[1,9,23,26,47],workflowtransactionbuildtutori:47,workflowtransactionbuildtutorialtest:47,working:36,workspac:[8,9,10,35,37,47],world:[8,12,23,32,34,36,43,45,47,49,53],worn:49,worri:[5,12,49,51],worth:[5,44,49,50,51],worthless:36,would:[0,4,5,6,7,9,10,12,17,19,22,23,32,33,36,43,44,46,47,49,50,51,52,54],wouldn:36,wow:51,wrap:[3,5,12,22,25,31,33,35,40,44,49,50],wrapper:[0,5,12,15,21,48,51],write:[],written:[2,3,4,7,14,15,23,26,36,40,47,49,51,52],wrong:[4,5,12,53],wtx:[12,30,36,46,47],www:2,xcode:[],xml:33,xmx1024m:33,xsrf:51,xss:51,xterm:10,year:[7,12],yellow:26,yet:[5,7,12,17,19,22,28,32,34,37,40,47,52],yield:[23,33],york:10,you:[0,1,2,3,4,5,10,11,12,13,14,15,16,18,19,22,25,29,30,31,32,33,34,36,37,38,39,40,42,43,44,45,48,49,50,51,52,53],your:[],yourself:[11,18,22,44,50,51],zero:[3,17,23,24,36,49,51],zip:[23,33,43,46],zone:11,zoneddatetim:11,zoom:40},titles:["CLI vs IDE","Working with the Corda Demo on Azure Marketplace","Building the documentation","Clauses","Client RPC","Code style guide","Contract catalogue","Interest rate swaps","Node configuration","The Corda plugin framework","CorDapp basics","Event scheduling","Writing flows","Writing flow tests","Further notes on Kotlin","Getting set up","Troubleshooting","Glossary","Welcome to the Corda documentation!","What’s included?","Overview","Consensus and notaries","Core types","Data model","Corda ecosystem","Financial model","Flow framework","Security model","Vault","Load testing","Transaction tear-offs","Networking and messaging","Network Simulator","Node administration","Node Explorer","Brief introduction to the node services","Writing oracle services","Network permissioning","Persistence","Publishing Corda","Release notes","Release process","Running a notary service","Running the demos","Secure coding guidelines","What is a corda network?","Using attachments","Building transactions","Client RPC API tutorial","Writing a contract","Writing a contract using clauses","The CorDapp template","Integration testing","Writing a contract test","Using a notary service"],titleterms:{"class":[4,36,48,49,50],"function":[12,49],"import":16,"try":16,about:16,abstractconserveamount:3,abstractissu:3,access:33,across:51,adding:49,administr:33,advanc:1,again:16,against:10,agreement:43,aka:43,allof:3,amount:25,anyof:3,api:[48,49],app:10,approach:36,artemismessagingserv:35,assert:36,assertion:5,asset:49,assign:54,attach:[33,46],attachment:[43,46],azure:1,background:[43,51],bank:43,basic:[3,10,36,47],befor:39,bind:36,brief:35,build:[2,10,37,47,51],buyer:12,cash:6,catalogu:6,central:39,certif:[37,45],chain:53,chang:21,check:49,claus:[3,49,50],cli:0,client:[4,36,48,51],cluster:29,code:[5,15,44,49],command:[0,16,47,49,51],comment:5,commerci:[6,49,50],commit:47,commod:6,common:16,compil:5,complain:16,complet:47,composit:[3,22],compositekei:22,configur:[8,16,29,45,51],connect:45,consensu:21,consol:51,construct:49,content:18,continu:36,contract:[6,23,44,49,50,53],control:[],corda:[1,9,10,15,18,24,30,39,43,45],cordapp:[10,15,24,36,48,51],cordform:10,core:[22,36],creat:7,cryptographi:22,cut:41,data:[23,30,36],databas:33,date:22,dbcheckpointstorag:35,dbtransactionmappingstorag:35,dbtransactionstorag:35,debug:[0,10,50,51],demo:[1,34,43,46],deploi:[1,51],detail:7,document:[2,18],download:33,e2etestkeymanagementservic:35,ecosystem:24,encumbranc:49,error:[4,5],event:[11,35],exampl:[8,11,30,51],execut:43,explorer:34,extend:51,featur:12,field:8,file:[8,16,51],filteron:3,financi:25,firstof:3,fix:33,flow:[12,13,26,35,36,44],format:8,found:16,framework:[9,26,35],frequent:0,from:[36,48,51],further:14,futur:12,gather:47,gener:[5,47,49],get:[15,39,51],git:15,glossari:17,gradl:[0,10,15,16,51],group:[49,50],groupclauseverifi:3,guid:5,guidelin:44,handl:4,happen:[43,49],hibernateobserv:35,hide:[30,36],how:[11,29,49,50],http:51,ide:[0,15],idea:[15,16],ident:35,implement:[11,12,35,36],includ:19,individu:29,initial:43,inmemoryidentityservic:35,inmemorynetworkmapcach:35,inmemorystatemachinerecordedtransactionmappingstorag:35,inmemoryuniquenessprovid:35,input:47,install:10,installat:[],instanc:7,integrat:52,intellij:[0,51],interact:51,interest:[6,7,33],interfac:[32,34],introduct:[11,12,35,36,43,47],irs:[1,43],issu:16,java:16,javafx:16,jcenter:39,jdk:16,jvm:15,kei:[22,35],kotlin:[14,15,16],kryo:[4,48],lack:16,length:5,lifecycl:[7,22,47],line:[0,5,51],load:29,local:[39,51],locat:8,log:[1,33,45],mac:0,machin:51,make:[16,49],manag:35,map:[31,38],margin:43,marketplac:1,math:22,maven:39,memori:33,merkl:30,messag:[31,35],mileston:[16,40,51],miss:16,model:[21,23,25,27],modul:16,monitor:33,multi:[22,49],multipl:21,name:5,namedbyhash:22,network:[31,32,35,36,37,45],networkmapservic:35,next:[1,15],node:[8,10,33,34,35,45,51],nodeattachmentservic:35,nodemessagingcli:35,nodeschedulerservic:35,nodeschemaservic:35,nodevaultservic:35,non:[16,49],notari:[21,35,42,43,54],notaris:54,notaryservic:35,note:[14,40],notion:43,nozerosizedoutput:3,object:38,obligat:6,observabl:4,off:30,opene:[15,51],oracl:[16,36],orient:49,other:[3,16],outdat:16,output:47,overview:[20,23],own:45,pai:36,paper:[6,49,50],parti:[12,22,49],partial:47,particular:49,per:36,permiss:37,persist:[10,35,38],persistentkeymanagementservic:35,persistentnetworkmapservic:35,persistentuniquenessprovid:35,plai:36,pleas:16,plugin:[9,10,16,36],portfolio:43,pre:1,present:16,process:41,progress:12,project:[16,51],properti:5,protocol:4,provid:[36,51],publish:39,put:49,queri:36,queue:31,raft:43,raftuniquenessprovid:35,raftvalidatingnotaryservic:35,rate:[6,7,33],refer:[16,22],regist:[4,48],relat:[16,35,38],releas:[16,40,41,51],represent:23,request:37,requir:[2,15,49],requisit:1,rpc:[4,48,51],run:[16,29,34,37,42,43,51],safeti:4,schedul:[11,35],schema:38,sdk:16,secur:[4,27,31,44,48],seller:12,servic:[10,31,35,36,42,51,54],set:[15,45],setup:39,sign:[36,37],signatur:22,signedtransact:47,simm:[1,43],simpl:50,simplenotaryservic:35,simul:32,singl:53,smart:49,snapshot:51,softwar:15,sourc:[15,16],space:5,start:[10,12,45,49,51],state:[10,22,23,25,49],statemachinemanag:35,step:[1,15,41,43],storag:35,storageserviceimpl:35,structur:[3,51],style:5,sub:[12,36],summari:50,support:22,suspend:12,swap:[6,7],task:0,tear:30,technic:7,templat:[10,51],test:[13,29,49,52,53],them:50,theori:12,thing:49,thread:[4,5],time:49,timestamp:21,track:12,trade:12,trader:43,transact:[22,23,30,36,47,49,53,54],transmit:49,tree:30,troubleshoot:16,tune:33,tutori:48,two:[12,36],type:[3,22,31],unabl:16,uniqueidentifi:22,unix:0,unresolv:16,upload:33,usag:[30,33],used:0,user:1,using:[10,36,46,49,51,54],util:37,valid:[21,23],validatingnotaryservic:35,valuat:1,vari:36,vault:[28,35],verif:22,verifi:49,version:[4,12],via:[0,36,51],view:[1,10],visibl:47,warn:5,web:51,welcom:18,what:[19,32,43,45,50],where:49,why:50,window:0,wire:4,wiretransact:47,within:35,without:[],work:[1,50,51],write:[12,13,29,36,49,50,53],xterm:16,your:[10,12,33,45,48,49,51]}}) \ No newline at end of file +Search.setIndex({envversion:49,filenames:["CLI-vs-IDE","azure-vm","building-the-docs","clauses","clientrpc","codestyle","contract-catalogue","contract-irs","corda-configuration-file","corda-plugins","creating-a-cordapp","event-scheduling","flow-state-machines","flow-testing","further-notes-on-kotlin","getting-set-up","getting-set-up-fault-finding","glossary","index","inthebox","key-concepts","key-concepts-consensus-notaries","key-concepts-core-types","key-concepts-data-model","key-concepts-ecosystem","key-concepts-financial-model","key-concepts-flow-framework","key-concepts-security-model","key-concepts-vault","loadtesting","merkle-trees","messaging","network-simulator","node-administration","node-explorer","node-services","oracles","permissioning","persistence","publishing-corda","release-notes","release-process","running-a-notary","running-the-demos","secure-coding-guidelines","setting-up-a-corda-network","tutorial-attachments","tutorial-building-transactions","tutorial-clientrpc-api","tutorial-contract","tutorial-contract-clauses","tutorial-cordapp","tutorial-integration-testing","tutorial-test-dsl","using-a-notary"],objects:{},objnames:{},objtypes:{},terms:{"00z":49,"0_xx":16,"10000l":29,"100l":52,"14gb":1,"17t16":49,"1mb":12,"200mb":33,"3rd":43,"5000l":29,"500mb":33,"5xxx":0,"___":51,"____":51,"______":51,"_________":51,"_foo":5,"_unless_":39,"abstract":[3,9,12,35,36,38,40,49,50,51],"boolean":[13,29,40,48,49,50],"break":[12,16,36,41,47],"byte":[5,12,23,36,40,53],"case":[3,5,9,10,12,13,15,21,22,23,29,31,36,38,40,43,46,49,50,51],"catch":[5,12,40,44],"class":3,"default":[1,4,5,6,8,9,10,12,15,16,17,22,23,29,30,32,33,34,35,37,40,43,44,45,49,51],"enum":[40,48],"export":[12,33,38],"fa\u00e7ad":33,"final":[7,9,12,13,21,30,36,40,43,45,47,48,49,50,52,53],"float":[6,7,11],"function":[0,3,5,6,7,9],"import":[3,5,11,12,15],"instanceof":[49,50],"int":[5,29,38,49,54],"long":[5,6,9,11,28,29,38,47,49,50,51],"new":[0,1,5,7,8,9,10,12,14,18,21,22,23,24,31,32,33,34,35,37,39,40,41,43,46,47,48,49,50,51,52,53,54],"null":[8,11,13,29,36,38,46,49,50,53,54],"public":[1,5,8,10,12,17,19,22,23,31,33,35,37,40,43,45,49,50,51,53],"return":[3,4,5,7,9,11,12,13,21,29,33,35,36,38,40,44,46,47,48,49,50,51,52,53,54],"short":[3,11,41,43],"static":[9,10,12,28,35,36,43,49,51,53],"super":[3,5,50],"switch":[12,40,49],"throw":[3,4,5,12,26,29,30,36,40,47,49,50,54],"transient":12,"true":[8,13,17,21,24,29,36,37,45,48,49,50,51],"try":[0,4,5,12],"var":[13,38,47,48],"void":[49,50,53],"while":[15,22,32,43,48,53],abil:[23,28,32,40],abl:[1,8,10,12,21,27,30,31,33,34,35,36,37,40,43,49,51,54],abort:[21,36,47],about:[0,1,5,9,12,14,15],abov:[1,3,5,7,12,23,26,30,31,33,36,43,45,48,49,50,51,52,53],absent:[3,8],absolut:[8,21],abstractnod:[9,35],abstractstatereplacementprotocol:40,accept:[5,6,15,17,21,23,36,40,43,47,49],acceptablepric:12,acceptsfileupload:36,access:[1,4,5,8,9,12,15,18,28,29,31],accid:12,accident:[5,44,47],accompani:[5,49],accord:[3,23,47],accordingli:[45,50],account:[1,22,23,29,39,40,46],accrual:7,accur:[21,43],achiev:[21,22,23,24,30],ack:40,acknowledg:[12,35],acquir:43,acronym:43,across:[6,8,23,26,29,35,38,40,43,46,47],act:[3,8,12,21,35,36,40,43],action:[3,11,23,29,35,36,42,43,47,49,52],activ:[7,8,9,11,15,22,24,26,27,29,32,35,38,40,43,47,49,51],actor:[5,12],actual:[7,12,21,29,35,36,43,44,46,49,50,53,54],adapt:[5,12,36],add:[3,5,10,12,17,29,30,31,33,35,36,42,44,46,47,48,49,51,52,53,54],addattach:[13,46],addcommand:[12,36,47,49,54],added:40,addedg:48,addfix:36,adding:18,addinputst:[12,49],addit:[0,5,8,10,21,22,23,25,28,31,35,38,40,47,48,49,51],addition:[12,14,15,16,27,38,41,43,51],addmessagehandl:40,addnod:48,addoutputst:[12,49,54],address:[0,1,8,10,12,24,31,34,35,40,45,49,51],addsignatureuncheck:36,adequ:3,adjust:[1,5,7,41,49],admin:[34,35,37,39],administ:1,administr:[1,12,18,19,26],admiss:[24,27],advertis:[4,8,31,35,40,42,43,49,52,54],advertisedservic:[10,43,48,51,52],advic:41,advis:[0,36],aesthet:43,affect:[16,36,45],affinityexecutor:5,afraid:5,after:[0,3,6,7,9,10,11,12,13,14,17,18,21,29,30,35,36,43,47,49,51,53],again:[7,12,13],against:7,agent:[24,29,33,35],agentlib:10,aggreg:[40,43,49,50],agil:21,agre:[1,7,11,12,17,23,43,44,47,51],agree:[7,43],agreement:[7,17,18,23,24,25],ahead:[12,49],aid:[23,40,47,51],aim:[5,29],aka:[17,18,24],albeit:40,albertsen:40,alert:16,algorithm:[19,21,22,23,27,40,49],alia:[8,39],alic:[52,53],alice:[17,22,34,48,49,52,53,54],alice_key:46,alice_pubkey:53,alicecli:52,aliceparti:54,aliceproxi:52,alicevaultupd:52,align:[16,40,47,51],aliv:[12,43],all:[1,2,3,4,5,6,7,8,9,10,12,13,14,15,17,21,22,23,24,26,27,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,47,49,50,51,52,54],allaslist:52,allcomposit:40,allevi:21,alloc:43,allow:[0,4,5,6,7,8,9,10,11,12,17,21,22,24,29,31,34,35,36,37,38,39,40,43,44,47,48,49,51,52,53],allpartysignedtx:[12,47],almost:49,along:[1,3,12,13,21,24,36,49,51,54],alongsid:49,alreadi:[5,10,11,12,21,27,30,36,37,39,40,43,46,47,49,50,51,53,54],alright:12,also:[0,3,4,5,6,7,8,9,10,11,12,13,15,16,17,18,21,22,23,25,28,29,30,31,32,33,34,35,36,37,38,40,43,46,47,49,50,51,52,53,54],alter:[8,12,33,47],altern:[1,2,5,8,22,31,32,33,34,49,51,52],although:[7,8,12,23,34,35,40,46,49,51],alwai:[5,11,12,16,22,23,33,38,45,47,49,51],amend:47,aml:24,among:51,amongst:[0,27],amount:[3,4,6,7,12,18,22],amountrequir:47,amqp:[24,31,40],analysi:3,analyt:43,ancestor:23,ani:[0,1,3,4,5,6,7,9,11,12,13,15,17,21,22,23,24,25,27,28,31,33,34,35,36,37,38,40,41,42,43,44,45,46,47,48,49,50,51,52,54],annot:[4,5,9,12,31,38],announc:[36,41],annual:1,anonym:35,anonymis:[35,40],anoth:[1,4,5,10,12,16,17,21,23,24,28,31,33,34,35,36,37,40,43,46,49,50,53,54],another:47,answer:[5,36],answere:50,anti:51,anticip:5,any:[3,4,6,11,33,35,39,43,47,50],anycomposit:40,anycompost:50,anyon:[21,31,49],anyth:[12,13,22,23,25,44,49,50,51],anywher:[36,40,49],apach:31,apart:[21,40,47],api:[0,2,4,5,9,10,12,13,17,18,19,24,26,27,28,33,35,38,39,40,41,43,45,47],app:4,appear:[16,36,43,49,51],append:[8,12,23,33],appendix:18,appli:[5,6,7,10,27,29,34,47,49],applic:[9,10,17,23,24,25,31,35,36,40,43,44,49,51],applicat:[15,17],applyfix:7,appoint:21,approach:[11,12],appropri:[1,5,28,31,35,36,38,40,42,47,51],approv:[11,12,37,39,47],approxim:21,april:40,apt:16,arbitrari:[3,5,12,22,23,36,44,48],arbitrarili:[23,52],architectur:[4,18,36],archiv:28,area:[0,27,38],aren:[4,11,19,49],arg:[10,40,48,51],argument:[4,5,9,10,12,23,29,48,49],aris:15,around:[12,13,21,22,25,30,40,41,47,48,49,51,52],arrai:[48,51],arrang:[12,24],arraylist:36,arriv:[12,17,36,52],arrow:[7,51],art:25,artemi:[10,17,31,51],artemisaddress:[8,45,51],artemismq:[8,35],artemisport:[10,51],articl:[11,12,21,36,40,49],artifact:10,artifactid:51,ascertain:[43,51],ask:[5,12,27,36,39,49],aspect:[12,23],assembl:[0,3,30,49],assemblesharedtx:12,assert:[5,12],assertequ:[13,46,52],asset:[3,6,12,18,22,24,25,26,28,40,43,44,47],assetforsal:12,assetmismatchexcept:12,assettosel:12,assettypenam:12,assign:[13,18,23,36,47],assist:[11,12,22,26,27,38],associ:[3,11,21,22,23,25,31,36,38,40,45,47,48,49,51],assum:[12,21,23,27,29,30,31,36,39,44,47,49,54],assume:[12,30,36,51],assumpt:[12,27],assur:43,asynchron:[26,29,47],atom:[12,21,40,43,49],attach:[0,10,12,17,18,22,23,28,30],attachment:[17,18,23,33],attachmentdemo:46,attachmentexist:46,attachmentstorag:35,attack:[21,40,44],attch:30,attempt:[21,31,36,44],attent:[12,51],attest:[21,23,27],attribut:[5,28],audit:[28,47],augment:23,authent:[1,4,21,24,27,31,35,40,48],authenticatedobject:[3,22,49,50],author:[5,21,24,27,35,41,54],authoris:[8,12,22,27,35,48],authorit:28,auto:[5,49],autoclos:4,autom:[11,24,49],automat:[0,2,4,8,10,11,12,21,23,27,28,31,32,34,35,36,37,38,40,46,49,51,54],auxiliari:35,avail:[0,1,2,7,8,9,10,11,12,15,18,21,28,31,32,33,35,36,39,40,41,43,44,48,49,51,54],avoid:[4,5,12,36,38],awai:[4,12,48],await:[10,43,47],awaiting_proposal:12,awar:[4,5,11,12,35,40,49,50],awg:41,awkward:[5,12],axi:7,back:[1,4,5,9,12,24,26,28,35,36,40,43,44,47,49,52],backend:40,background:[0,4,5,18,28],backoff:31,backport:41,backward:[12,41],bad:[5,12,49,53],balanc:[3,6,21,23,28,34,40,47,49],banana:22,bananast:22,banco:40,band:12,bandwidth:5,banish:17,bank:[1,7,8,18,22,23,25,34,40],bankrupt:49,bankruptci:[21,23,36,43],banner:[1,45],bar:[1,16],barreca:40,barrel:[25,40],base:[5,7,8,10,11,12,17,21,22,25,27,29,31,33,35,36,37,40,43,45,48,49,51,54],basedir:[8,45],basedirectori:48,basi:[1,7,11,15,24,32,33,35,51],basic:1,bat:[0,10,15,32,34,37,51],batch:[29,51],bbva:40,bear:12,becaus:[5,11,12,16,21,22,33,35,36,47,49,50,51,53,54],becom:[5,7,11,12,18,22,36,41,47,51],been:[4,7,8,12,15,16,17,21,22,27,31,36,37,40,41,43,47,49,50,51,54],befor:[0,1,7,10,11,12,13,18,21,22,23,29,35,36],beforesign:36,begin:[1,5,35,47,49,51],behalf:43,behav:49,behaviour:[3,6,8,21,29,33,47,50,51,53],behind:[12,17,20,31,49],believ:40,belong:[30,45],below:[1,5,7,8,10,11,12,15,22,30,31,35,43,47,49,51],beneath:17,beneficiari:6,benefit:[12,21],best:[5,15,47],bet:36,beta:43,better:[5,12,14,40,49],between:[1,5,7,11,12,17,21,23,25,26,31,32,35,36,37,38,40,41,44,47,48,49,51],beyond:[23,25,27,47],bft:[27,40],big:[5,12,40,43,49],bigdecim:[25,36],bilater:[6,7,40],bill:49,bin:[43,48,51],binari:[30,35,36,39,48],bind:[8,21,23,32,33],bintrai:39,bintrayupload:39,bit:[22,40,46,49,51,53,54],bitcoin:[12,17,23,40,43,49],bitcoinj:12,blah:5,blank:[5,33,34,37,49],block:[3,4,5,10,12,21,23,26,35,36,40,43,44,46,47,51,52],blockchain:[12,19,30,49],bloom:5,bloomfilt:5,blotter:43,blue:[7,30],bob:[17,22,34,49,52,53],bob_pubkey:53,bobclient:52,bobproxi:52,bobvaultupd:52,bodi:[5,43],boil:29,boilerpl:10,bond:[49,50],bookkeep:49,bookmark:43,boost:19,boot:51,bootstrap:[8,10,51],bore:49,borrow:53,boss:51,both:[0,6,7,12,13,14,15,17,21,25,26,28,29,32,35,36,38,40,43,44,46,47,48,49,50,51],bottom:[16,23],bounc:13,bound:[12,21,23,40,45,47,49],box:[1,39],branch:[15,16,18,30,40,41,51],branch_nam:51,brand:40,breadth:23,breakdown:28,breakpoint:51,breviti:[0,50],bridg:[31,35],brief:[4,18],briefli:[31,36,51],bring:[29,40,43,46,52],broadcast:[1,23,24,26,27,47,49,54],broadcasttransactionflow:54,broader:45,broke:5,broken:[40,51],broker:[8,31,35,40,51],brought:47,brows:[33,43],browser:[1,8,43,51],bubbl:15,bucket:22,buffer:[4,33],bug:[5,15,16,40,41],bugfix:41,bui:[1,12],build:0,buildcertsigningrequestutilityjar:37,buildcordajar:[8,37,45],builder:[12,13,22,40,44,46,47,54],buildfilteredtransact:47,buildmerkletransact:[30,36],buildscript:[10,17,51],buildsrc:51,buildtradepropos:47,built:[0,8,12,30,40,44,46,49,51],bulk:47,bullet:5,bunch:51,bundl:[8,9,10,16,23,33,35],busi:[11,12,17,19,22,23,24,26,36,38,40,47,49],businesscalendar:22,button:[1,39,43,51],bytearrai:38,bytecod:[12,23,49],cach:[31,46,51,54],calcul:[7,11,12,21,22,30,40,43,44,49],calculateoursignatur:12,calendar:[7,22,36],call:[0,3,4,5,7,9,10,12,14,21,22,23,24,25,26,33,35,36,40,41,43,44,46,47,48,49,53,54],callback:[4,5,12,35,40],caller:[36,47,49,54],came:12,camel:5,can:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43,44,45,46,47,48,49,50,51,52,53,54],cancel:4,candid:38,cannot:[3,6,17,21,23,25,32,36,40,44,47,49,51,54],capabl:[24,49],capit:5,capitan:2,capsul:32,capsule_cache_dir:10,captur:[9,11,47],cardon:40,care:[5,9,12,13,21,44,47,53],carefulli:14,carri:[0,25,35,47],cash:3,cash_stat:38,cashcommand:[29,48,52],cashflow:[48,52],cashkt:49,cashprotocol:[8,45],cashschema:38,cashschemav1:38,cashsigningpubkei:12,cashstat:47,cast:4,catastroph:43,categori:45,caught:[4,12],caus:[5,12,15,16,17,33,43,49,51],cbc:29,ccy_cod:38,cent:25,center:49,central:[18,24,25,26,34],centralis:24,ceo:22,cer:8,certain:[3,5,9,40,43,47,49],certainli:10,certainti:21,certif:[8,18,24,27,29,31,35],certificatesigningservic:[8,37,45],certsigningrequestutil:[37,45],chain:[6,12,13,18,22,23,28,35,36,40,49],chaincommercialpap:53,chaincommercialpaperdoublespend:53,chaincommercialpapertweak:53,chanc:[5,12],chang:[0,2,4,5,6,7,8,10,12,16,17],changenotari:21,channel:12,charact:[5,8],characterist:17,charg:36,charli:22,chart:50,check:[3,5,8,11,12,13,15,16,18,21,22,23,27,29,30,31,32,35,36,39,40,44,45,46,47,48],checkabl:[36,40],checkfixisnearexpect:36,checknotnul:49,checkout:[15,16,51],checkpoint:[9,26,35,40],checksignatur:36,checkstat:49,checksufficientsignatur:[12,22,47,54],child:[0,12,22],childprogresstrack:12,children:[12,22],childrenfor:12,choic:[1,5,21,49,51],choos:[0,1,15,16,21,34,40,49,54],choreographi:[17,24],chosen:[0,12,21,29,54],christma:51,chronolog:11,chronounit:53,chunk:[49,50],circl:32,citi:51,cl1:3,cl2:3,cl4:3,cl5:3,claim:[23,49],clarifi:49,clash:[5,38,51],classic:49,classpath:[4,9,10,23],clauseverifi:50,clean:[0,12,34,40],cleaner:40,cleanup:40,clear:[0,3,4,12,29,44],cleardatabasebeforerun:29,clearer:[12,40],clearli:[5,16,47],click:[1,15,16,34,39,43,51],client:1,clint:1,clock:[1,11,12,21,23,36,43,47],clone:[0,1,5,15,16,49,51],close:[4,6,21,51],closeabl:4,closer:21,closest:1,closur:[5,53],cloud:33,cluster:[8,18,21],cmd:[30,49,50],code:[0,2,3],codebas:[1,5,18,38,39],coin:28,collabor:40,collaps:29,colleagu:5,collect:[4,5,17,29,33,38,40,42,47,49,50],collector:[5,12,33],collis:5,colon:0,column:[10,33,38],com:[2,15,37,39,40,43,51],combin:[17,22,24,28,49,50],come:[4,12,13,33,35,40,41,44,49],comfort:40,commanddata:[3,36,49,50],commenc:34,commerci:3,commercial_pap:[49,50],commercialpap:[3,6,38,49,50,53],commercialpaperlegaci:49,commercialpapertest:53,commit:[8,11,12,13,18,21,35,41,42,43],committe:43,committing:12,common:[3,6,7,8,9,12],commonleg:7,commonli:47,commun:[8,9,12,15,17,18,24,26,31,35,40,44,45,51],compani:[23,25,36,37,50],companion:[12,36,49,50],compar:[1,30,43,49,51],comparison:[23,44,49],compat:[4,17,21,41],compel:21,compet:23,complementari:11,complet:[0,1,4,11,12,18,22,23,25,35,37,40,43,46],completetx:47,complex:[5,6,13,23,25,26,38,43,46,49,52],complic:[12,36,47,49,50],compon:[0,3,9,10,11,17,18,24,28,31,35,40],compos:[3,12,21,23,40,49,50],compositeclaus:[3,50],compositekei:[12,18],compound:40,compris:[7,51],comput:[7,17,36,51],concaten:30,concept:[3,6,11,12,18,20,21,23,26,30,36,40,49,50],concern:[12,49],concis:40,conclus:36,concret:[9,35],concurr:29,concurrenthashmap:5,condit:[3,9,21,29,35,36,40,50,53],conf:[8,10,35,37,45,51],config:[8,10,29,33,37,40,43,48,51],configur:[0,1,4],configurationfil:33,confirm:[16,17,21,43,47],conflict:[21,23,29,54],confus:[0,12],conjunct:34,connect:[0,1,4,8,10,19,29,31,33,34,35,37,40,43],consensu:[12,17,18,20],consequ:47,conserv:[3,47],conserveamount:3,consid:[5,7,11,17,22,23,24,28,36,40,41,47,49,50],consider:[47,49],consist:[7,8,12,17,23,24,29,35,36,40,43,45,47,50],consol:[0,33,40,43,45,48],consortium:17,constant:[5,38,49],constantli:[36,51],constraint:[12,36,40,49,51,52],construct:[3,5,9,10,12,18,21,22,23,30,31,35,38,40,44,47],constructing_offer:12,constructor:[3,9,11,12,36],consum:[4,11,17,21,22,23,27,28,33,35,40,43,47,49,54],consumedcommand:3,consumingtx:54,consumpt:[11,36,47],contact:[12,35,40],contain:[1,3,7,8,9,10,12,17,21,22,23,25,28,30,31,33,34,35,36,37,40,41,43,46,47,49,50,51,53,54],content:[1,5,9,10,11,13,16],context:[5,22,33,35,36,47,54],contextclassload:46,contin:36,continu:[1,7,12,16,18,25,31],contract:[3,4],contracthash:50,contractreject:53,contractst:[3,11,21,22,25,30,38,40,47,49],contractu:47,contrast:[12,36],contribut:[1,18,22],control:[0,4,5,8,10,12,15,16,21,22,26,33,35,38,40,43,44,49,51],conveni:[3,5,22,36,46,47,49],convent:[7,12],convers:[22,34],convert:[3,6,7,13,21,22,27,35,38,40,47,49],convinc:[12,22,30],coordin:[8,39],copi:[0,5,12,31,33,35,47,49,51,53,54],copycat:42,copyonwritearraylist:5,copyright:5,copyvault:29,cor:18,corda:0,corda_bintray_gpg_passphrase:39,corda_bintray_key:39,corda_bintray_user:39,corda_dev_ca:8,corda_gradle_plugins_vers:10,corda_vers:[10,51],cordaapp:51,cordacadevpass:[8,45],cordapluginregistri:[9,10,36,48,51],cordapp:[0,4,9],cordarpccli:[4,46],cordarpcop:[4,9,12,46,48],cordarpcopsimpl:35,cordform:[0,8],core:[1,6,9,10,12,18,20],corner:[1,16],corp:[34,37],corpor:[43,50],correct:[6,12,16,36,40,41,43,47,49,51,53],correctli:[12,17,23,35,36,40,47,49],correspond:[4,17,22,29,31,43,49,50],correspondingli:[5,46],cost:[1,4,36,49],could:[5,6,12,21,22,29,36,44,47,49],couldn:[30,36],count:[7,43],countabl:[25,40],counter:[5,12,51],counterparti:[1,6,7,12,17,24,31,40,43,44,46,47],counterparty:51,countri:[22,36,51],coupl:[12,13,29,48,51],cours:[12,29,33,36,38,49],coven:49,cover:[6,12,21,36,43,49,51],cpu:29,crash:[12,35,36],crazi:51,creat:[1,4,5],createcommand:54,createdummyirs:7,createsomenod:13,creation:[7,30,49],creator:36,credenti:[34,39,48,51],credit:[40,43],crisi:43,crisp:49,criteria:6,critic:41,cross:27,crude:25,cryptic:15,crypto:[40,51],cryptocurr:28,cryptograph:[17,22,30],cryptographi:18,csr:40,ctrl:51,curl:[33,51],currenc:[3,6,7,12,25,28,29,34,38,40,47,49],current:[0,4,5,7,8,10,11,12,15,18,19,21,22,23,25,27,28,29,30,31,32,34,35,36,37,38,40,41,42,44,48,49,51,53,54],currentstep:[12,36],currentthread:46,currenttim:12,currentvault:47,curv:7,custodi:[13,22],custom:[4,8,9,12,21,22,23,26,28,33,35,38,40,43],customis:[4,38,48],cut:18,cutoff:29,cycl:[5,12,49],dai:[7,12,21,22,26,33,36,41,53],daili:51,daniel:40,danks:40,dao:40,dashboard:[33,34],data:[1,2,5,6,7,9,10,12,17,18,19,20,21,22],databas:[8,10,13,18,19,23,24,26,27,28,29],databaseschema:38,databasetransact:13,dataset:[7,43],datasourc:[8,45],datasourceclassnam:[8,45],datasourceproperti:[8,45],datastructur:29,date:[6,7,11,16,18,21],dateoffset:40,daterollconvent:22,david:40,days:53,dcapsul:10,dead:31,deadlin:[22,36],deal:[1,5,12,22,25,28,36,43,49],dealstat:25,debt:[6,43],debugg:10,decd098666b9657314870e192ced0c3519c2c9d395507a238338f8d003929de9:33,decd:33,decentralis:[27,36,40],decid:[26,30,36,38,47,49],decis:[21,47,49],declar:[5,8,9,12,35,53],deconflict:27,dedic:[1,5],dedupl:[35,40],defaultissu:49,defaultref:53,defens:47,defin:[3,5,9,12,13,19,21,22,23,24,25,29,33,35,38,40,48,49,50,51,53],definit:[3,12,17,21,25,40,49],delai:[7,36],deleg:[47,50,54],delet:[5,12,25,35,40,49],deliber:53,deliv:[6,13,35,51],deliveri:[12,19,27,31,43,51],deliveryaddress:51,deliveryd:51,demand:[1,12,21,24,40],demo:0,demonstr:[0,27,34,40,43,51,52],denial:21,denot:30,dens:5,depend:[0,1,5,10,11,12,13,16,17,21,23,24,27,36,40,43,45,47,49,51],dependson:[10,51],depict:[23,26],deploi:0,deploy:[0,1,10,17,23,32,51],deploynod:[8,10,43,46,48,51],deployvisualis:32,deposit:49,deprec:40,depth:21,deregist:31,deriv:[0,7,12,17,22,38,40,49],describ:[5,11,12,16,18,20,21,22,23,25,28,29,30,31,35,43,44,48,49,51,54],descript:[1,3,5,27,28],deserv:[29,41],design:[5,14,17,18,21,24,27,36,40,44,49,50,51],desir:[9,12,22],desktop:33,despit:[12,46,49],destin:31,destroi:[6,23,47,49],destructur:49,detail:[1,3,4,5,6],detect:5,determin:[0,3,6,7,11,17,24,31,47,49,50,51,52],determinist:[4,23,27,29,40,52],dev:[8,29,33],develop:[0,1,5,8,10,12,14,15,16,18,23,24,25,26,28,33,35,37,38,40,41,43,47,49,51],developer:51,devic:[8,27],devmod:[8,37,45],diagnos:45,diagram:[7,23,24,25,26,28,49],dialog:1,dialogu:51,diamond:17,did:30,didn:[5,12,30,41,49,51,53],differ:[1,3,5,6,7,8,9,10,11,12,21,22,23,25,27,29,31,34,36,38,40,43,47,48,49,50,51,52,53],differenti:[37,54],difficult:12,difficulti:50,digit:[12,23,36,40,47,49],digitalsignatur:[12,36,47,54],dir:[37,45],direct:[1,5,17,24,35,38],directli:[0,4,5,12,13,15,17,22,25,26,28,31,33,35,40,43,47,48,49,50,51,52,54],directori:[0,1,2,8,9,10,16,18,29,33,35,37,43,45,51],directthreadexecutor:5,dirti:49,disabl:[22,35],disagr:43,disambigu:38,discard:44,discoveri:32,discuss:[12,22,36,47,51],disk:[1,12,22,31,40],disobei:36,dispens:43,displai:[0,1,21,40,43,48],disput:[7,21,49],disrupt:[29,31,40],disruptionpattern:29,disruptionspec:29,distinct:[5,45],distribut:[8,9,10,12,17,18,19,20,21,23,24,27,28,36,40,42,43,47],distrust:[12,21],dive:18,divid:21,divis:25,dlog4j:33,doc:[0,2,4,5,16,18,40,43,48,51,52],docker:33,docsit:[2,18,41,51],document:0,doe:[5,6,7,8,10,11,12,13,19,23,31,33,35,36,37,38,40,43,44,46,47,49,51,52,54],doesn:[3,5,8,12,13,16,19,21,33,36,44,46,49,53,54],dokka:2,dollar:[25,49,52],dollars:[49,52,53],domain:[17,22,40,49],domicil:49,domino:43,don:[4,5,12,14,22,29,34,36,41,43,44,49,50,53],done:[2,3,4,12,13,15,23,29,30,31,37,40,48,49,51],doorman:31,dot:[7,30],doubl:[12,19,21,34,35,45,49,51,53],doubt:[5,16],down:[1,5,8,12,29,34,47,49,50,51,52],download:[0,4,12,13,15,16,18,23],downsid:5,drain:[4,12],draw:[40,48],drawn:48,drive:47,driver:[0,8,33,35,38,40,48,51,52],driverdirectori:48,drm:36,drop:[1,51],dsl:[0,10,17,40,51,52,53],dt_socket:[0,10,51],due:[0,5,7,11,12,14,15,21,35,38,43,49,50],dummi:[6,13,46,53],dummy1:13,dummy2:13,dummy_notary_key:13,dummy_pubkey_1:[49,53],dummycontract:[13,54],dump:48,duplic:[12,25,30],durat:[11,36,47],durationsecond:29,dure:[5,7,8,9,10,12,32,33,35,40,49],dynam:[9,23,40,49],each:[0,1,3,4,5,7,8,9,10,11,12,17,21,22,23,24,26,27,29,30,31,32,35,36,38,40,41,43,46,47,48,49,50,51,52,53],earli:[5,6,35],earlier:[0,15,44],earliest:[7,11],easi:[0,1,5,14,36,40,49],easier:[5,10,12,15,40,49],easiest:[4,49],easili:[5,12,18,28,43,49,51],echo:51,econom:[1,7],ecosystem:[18,20],ed25519:40,edg:48,edge:48,edit:[0,22,33,39,45,51],edition:15,editor:1,effect:[7,8,12,13,38,43,53],either:[0,3,4,5,6,7,8,9,12,16,17,21,22,23,29,30,34,38,43,48,49,51,53],elbonia:22,element:[5,17,30,36,47,49,51],elementari:[50,51],elimin:[19,23,40],els:[12,13,21,25,28,35,36,46,47,48,49,50,54],elsewher:9,elucid:47,email:12,emailaddress:37,emb:26,embed:[8,19,23,26,30,36,40,51],embedd:31,emit:[4,40,52],emoji:46,empti:[8,34,40,49,53],emptyledg:53,emptyset:3,enabl:[0,8,9,10,12,21,26,35,40,50],enact:43,enc:29,encapsul:[3,5,22,36],enclos:5,encod:[31,36,47],encount:[1,11,15,35,47],encourag:[18,38,46],encrypt:[37,47],encumb:49,encumberedst:49,encumbr:[40,49],encumbranc:18,end:[3,5,7,12,18,21,23,29,31,35,36,41,47,50,51,53],endeavour:51,endpoint:[10,31,33,51],enforc:[3,5,23,40,49],enforceverifyorfail:53,engin:43,england:50,english:[5,49],enhanc:40,enjoy:40,enorm:12,enough:[5,12,13,43,47,49],ensur:[3,5,9,12,15,17,21,22,23,28,30,35,37,40,41,44,47,49,50,51],ensure:[1,16,21,36,43,51],enter:[10,26,39,43,51,52,53],entir:[7,12,21,35,36,49,51],entireti:[7,23],entiti:[21,22,23,30,36,37,38,49],entitl:[27,48],entri:[7,8,10,12,23,38,40,44,49,50],enumer:[7,38,43,47,51],environ:[0,1,5,10,12,24,34,36,39,47],envis:18,envisag:[23,49],equal:[3,12,21,22,25,40,47,49,50],equiti:38,equival:[5,7,22,25,34,35,42,47,49],eras:15,error:[0,1,3],escal:36,especi:[22,47],essenti:[0,33,35,36,47,49,50],establish:[11,31,43,45,52],estim:1,etc:[0,5,6,7,12,17,19,21,22,24,25,33,34,36,40,41,43,45,49,50,51],ethereum:[12,23,49],eur:1,euribor:[1,33,36],euro:25,evalu:[7,33,36,50],even:[4,12,14,15,21,26,30,35,36,38,40,43,49,50,53],event:[5,7],eventu:[29,35,45],eventual:[21,41],ever:5,everi:[0,3,4,9,12,21,22,23,24,27,29,30,31,35,36,38,40,41,43,44,49,50],everyon:[21,36,49],everyth:[15,21,44,48,49],evid:[36,47],evolut:[23,28,50],evolv:[22,38,40,45,48,49,51],exact:[0,21],exactli:[22,23,35,36,40,49],examin:[5,10,13,49],exampl:[0,1,2,3,4,5,6,7],exampleapi:51,exampleclientrpc:51,exampleflow:51,exampleplugin:51,examplerpccordapluginregistri:48,examplerpcvalu:48,exampleservic:51,exampletest:51,exampleweb:51,exce:29,excel:36,except:[3,4,5,9,12,21,26,31,40,44,47,49],exception:[0,5],excess:[5,33],exchang:[7,12,17,25,35,47],exclud:[8,38,47],exclus:6,execut:[0,3,10,11,12,17,21,22,23,24,26,27,29,32,34,35,40],executor:[5,24],exemplifi:53,exhaust:[35,40],exist:[1,5,6,7,8,10,11,21,22,23,25,32,35,37,38,40,49,51,53],exit:[3,6,8,13,25,34,35,37,40,43,48,49],exitcash:48,expand:[34,47,51],expect:[1,4,5,6,8,11,12,21,22,24,29,35,36,37,38,40,41,44,46,47,49,50,51,52,53],expectedtypenam:12,expectev:52,expens:[4,5],experi:[10,40,41,51],experiment:[5,40,43],expir:37,explain:[5,11,12,29,32,37,40,51],explan:[3,5,32,36,48],explicit:[5,12,47,49],explicitli:[5,9,23,26,28,35,43,47,53],explor:[5,13,19,33,34,40,43,47,49,51],explorer:18,expos:[5,9,10,11,12,22,23,27,28,33,35,38,40,47,48,54],expose:22,exposur:[6,7,17],express:[7,17,21,22,23,40,49,53],ext:[10,51],extend:[3,5,9,10,12,14,18,22,24,25,34,35,36,40,43,49,50],extens:[0,5,9,12,17,28,32,33,35,36,40,44,47,49],extern:[8,12,35,45,47,51],extraadvertisedserviceid:[8,35,42,45],extract:[22,28,33,36,43,47,49],extractcommand:50,extrem:[14,17,21,29],face:[16,49,50,53],facevalu:[3,49,53],facil:[17,28,35],facilit:51,fact:[0,5,7,12,17,21,23,24,36,40,45,49,51,53],factor:[7,43],fail:[3,9,40,49,50,53],failswith:53,failur:[12,17,53],fairli:[5,13,43],fall:31,fals:[5,8,12,13,22,36,45,47,49,54],famili:38,familiar:[4,18,49,51,54],famou:40,fanci:49,far:[12,36,43,47,49,50,52],fashion:[5,38,43],fast:13,faster:33,faucet:43,fault:12,fear:17,featur:[1,4,5,8,10],fed:[25,32],feed:[21,36],feedback:40,feel:[49,51],fetch:[31,33,35,36,46],fetchtransactionsflow:46,few:[0,5,12,14,33,36,41,43,47,49,50,51],fiber:[12,35,36],fiction:[23,34],field:[5,7],file:[1,2,4,5],fill:[5,12,43,47,49],filter:[3,5,29,30,36,38,40,47],filtercommand:[30,36],filteredleav:[30,36],filteredtransact:[30,36,47],filterfun:[30,36],filterisinst:49,filterst:3,finalis:[7,12,40],finalityflow:[12,46,47,54],financ:[10,12,24,25,40,51],financi:[11,17,18,20],find:[0,2,12,13,14,16,18,19,33,36,44,47,51],fine:[4,15,33,53],finish:[12,40,51,52],fire:12,firm:28,first:[0,3,4,5,7,8,10,11,12,13,14,15,16,17,21,23,31,33,36,37,38,39,40,43,46,47,48,49,50,51,52,54],firstcomposit:40,firstli:[9,34,43,46,49,51],fit:[5,23],fix:[1,5,6,7,11,12,16,18,29,30],fixedleg:7,fixedlegpaymentschedul:7,fixedratepaymentev:7,fixer:36,fixingflow:36,fixingroledecid:11,fixingsessioninitiationhandl:11,fixof:[30,36],fixqueryflow:36,fixqueryhandl:36,fixsignflow:36,fixsignhandl:36,flag:[8,33,37],flat:38,flesh:22,flexibl:[21,22,23],flight:4,floatingleg:[7,11],floatinglegpaymentschedul:7,floatingratepaymentev:7,flow:[5,7,9,10,11],flowexcept:[12,40],flowhandl:[12,52],flowlog:[11,12,26,35,36],flowlogicreffactori:[9,11],flowstatemachineimpl:35,flowtrack:12,flux:10,fly:12,focu:30,focus:[3,50],fold:[5,48],folder:[2,8,10,35,37,43,47,51],follow:[1,2,5,8,10,11,12,15,16,18,20,21,23,24,25,26,27,28,29,32,33,34,35,36,37,39,42,43,47,48,49,50,51,53,54],font:5,foo:[5,48],foobrokenexcept:5,foot:44,fooutil:49,forc:[33,40,49,53],fordai:[11,36],foreach:48,foreign:47,foreignexchangeflow:47,forev:41,forget:[12,36,49],form:[4,10,11,12,24,26,27,28,30,31,35,36,43,47,49,50,51],format:[2,4,5],former:48,formerli:40,formula:40,forth:[4,12,47],fortun:43,forum:[15,18],forward:[12,31,35,36,41,43],found:[3,8,12,15],four:[31,43,45,49,51],fourpmtimelock:49,fraction:25,frame:[5,12,35,43],free:[12,15,21,23,43],freed:4,freeli:36,freez:47,frequenc:[1,7],fresh:[34,36,49,53],freshkei:12,freshli:[22,51],friend:45,friendli:35,from:[0,1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,17,18,21,22,23,25,26,27,28,29,30,31,32,33,34,35],fromcountri:22,front:[49,51],frontend:19,ftx:[30,36],fulfil:6,full:[5,6,8,12,21,27,30,31,32,35,40,43,47,48,49,50],fulli:[5,8,9,12,17,21,22,27,32,35,38,40,45,47,51,52],fullysign:12,fun:[3,11,12,13,21,29,30,36,38,46,47,48,49,50,51,53,54],fund:[43,47,49],fundament:[20,21,49],fungibl:[3,6,17,25,26,28,47,49,50,51],fungibleasset:[6,25,40,47,50],further:[3,7,8],furthermor:21,futuretransact:48,fuzz:40,fxrespons:47,fxtransactionbuildtutori:47,fxtransactionbuildtutorialtest:47,gain:[19,27],garbag:[4,5,12,33],gatewai:24,gather:[18,22,29],gatherfrequ:29,gatherourinput:47,gatherremotest:29,gave:36,gbp:[3,34,50],gear:41,gener:[0,1,2,3,4],generatecount:29,generatefix:36,generateiniti:13,generateirsandfixsom:7,generateissu:[49,50],generatemappedobject:38,generatemov:[49,50],generateredeem:[49,50],generatespend:[12,47,49],generatetransact:48,generatexxx:47,genuin:5,geograph:1,get:[0,1,4,5,12],getalice_pubkey:53,getanynotari:54,getbefor:49,getbloomfilters:5,getbob_pubkey:53,getclass:49,getcommand:[49,50],getcontract:49,getdummy_pubkey_1:53,getencumbr:49,getfacevalu:49,getfix:7,getflowtrack:12,getinput:[40,49],getinstat:40,getissuanc:49,getkei:49,getlegalcontractrefer:[49,50],getmaturityd:49,getmega_corp:53,getmega_corp_pubkey:53,getnotari:54,getnotarysignatur:12,getorthrow:[13,52],getoutput:[40,49],getoutst:40,getowner:[49,50],getpap:53,getparticip:49,getprotocolvers:4,getrequiredcommand:50,getresourceasstream:46,getresultorthrow:29,getsign:[49,50],getsubtyp:43,getter:[38,49],gettest_tx_time:53,gettimestamp:49,gettransact:13,getvalu:[49,50],gigabyt:33,github:[1,2,15,18,43,51],giusepp:40,give:[10,12,13,15,21,31,33,35,36,40,47,49],given:[0,1,3,9,12,21,22,23,30,31,36,38,40,42,48,49,50,54],givenpric:12,glanc:34,global:[1,5,21,22,23,24,27,40,53],glue:12,gnu:2,goal:[5,17,19,41,50],goe:4,gone:[12,40,49],good:[0,5,12,13,18,30,49,50],got:[12,30,33,36,52],govern:[23,25,43],gpg:39,gps:21,gr1:3,gr2:3,gr3:3,grab:51,gradlew:[0,10,15,29,32,34,37,39,43,45,48,51,52],grain:[4,33],grammar:5,graph:[1,4,13,19,23,24,26,27,33,38,40,48],graphit:33,graphstream:48,great:[0,40,43],greater:5,green:[26,51],grei:23,ground:27,group:[1,3,6,8,10,18,23,27,30,31,34,35],groupclaus:50,groupid:51,groupingkei:[3,50],groupstat:[3,49,50],grow:48,guarante:[17,22,23,24,31,41],guava:[5,49],gui:[12,16,40,51],guidelin:[16,18,40],h2databas:43,hack:40,had:[12,13,21,22,40,49],hand:[1,11,12,15,23,27,28,32,35,45,47,49,51],handa:40,handi:13,handler:[10,11,12,35],handshak:[31,36],happen:[5,11,12,18,21,30,36,41],happi:[43,46],happili:[33,36],hard:[5,12,41],harder:[44,49],hardwar:[1,8,27],hash:[12,13,17,19,22,23,27,30,33,36,40,46,47,49],hashcod:[3,49],hashmap:29,haskel:40,hasn:29,hassl:12,hat:41,have:[0,1,3,4,5,6,7,9,10,11,12,13,15,16,17,19,21,22,23,26,27,29,30,31,33,34,35,36,38,39,40,41,42,43,44,45,46,47,48,49,50,51,53,54],haven:[49,51],head:[1,3],heap:[12,33,40],hear:15,heart:49,heavi:41,heavili:23,hedg:[6,7],held:[35,38,49],hell:12,hello:12,help:[5,11,12,32,36,43,47,49,51],helper:[3,7,12,22,35,46,47,49,53,54],henc:[7,21,35],her:[49,53],here:[0,1,5,8,10,12,13,14,15,16,17,21,22,25,30,31,32,33,36,38,40,47,48,49,50,51],herself:48,hidden:[31,35],hide:[18,21,23],hierarch:[0,12],hierarchi:[5,12,25],high:[12,40],higher:[4,5,21,33,51],highli:[0,40],highlight:[24,40],hint:0,histor:36,histori:42,hoc:40,hocon:8,hold:[3,9,22,29,30,35,40,47],holder:[5,49],holidai:[7,22,36],home:[16,43],homepath:[10,51],hood:53,hope:35,hospit:[12,26],host1:29,host2:29,host:[8,10,24,29,31,32,35,36,37,39,40,45,51],hostil:44,hostnam:45,hotspot:5,hour:12,hous:34,how:[0,1,3,4,5,6],howev:[0,6,7,8,12,15,21,30,35,36,37,38,42,46,47,49,50,51,53],html:[2,5,43,51],http:[1,2,8,15,33,35,36,37,39,43,45,46,49,50],https:8,hub:[12,17],human:[8,12,21,23,26,36,43],hundr:12,hurt:[12,36],icommercialpaperst:53,icon:1,idea:[0,5,12],ideal:[12,49],idempot:40,ident:[8,12,13,17,18,21,22,23,24,25,26,27,29,30,31],identicon:40,identifi:[1,7,12,16,17,21,22,23,25,30,31,33,35,36,38,40,43,47,52],identiti:[12,21,22,27,35,54],identityless:23,identityservic:35,ifmatch:40,ifnotmatch:40,ignor:[12,48,49,50,51],iii:9,illegalargumentexcept:[5,36,49,50,53],illegalstateexcept:[3,5,47,49,50,53],illustr:[1,22,23,24,25,26,28,32,49],illustrat:5,imag:[1,30,51],imagin:[3,5,12,49,50],immedi:[4,35,47],immut:[5,7,23,28,36,49],immutabl:5,immutablelist:49,imper:5,implement:[0,3,4,5,6,7,9,10],impli:[12,24,31,38],implic:[12,21,23],implicit:52,implicitli:7,important:41,importantli:47,impos:[36,49],imposs:[30,36],improv:[21,28,40,41,49,50],improvement:40,inact:35,inadvert:49,inbound:31,includ:[0,3,4,5,6,8,9,12,17,18],include:9,inclus:[3,30],incom:[35,40],incompat:53,incomplet:29,inconsist:0,inconveni:49,incorpor:[31,36],increas:[5,40,43],increment:[0,4],inde:36,indent:5,independ:[21,36,38,43,50],index:[7,11,23,38,41,49,51,54],indexsourc:11,indic:[4,5,7,8,11,12,22,40,45,47,49],indicat:29,indirectli:26,individu:[5,18,27],indivis:25,industri:[14,15,17,33,43],inf:[9,51],infer:53,influenc:33,info:[12,13,38,48],inform:[1,5,8,9,12,13,15,16,21,22,24,26,31,34,35,36,37,40,43,46,49,51,52],infrastructur:[4,13,19,23,24,33,35,40,49],ingredi:47,inherit:[5,49],init:36,initi:[9,12,16,22,29,31,35,36,40,43,45,47,48],initial:[17,18,24],initialis:[13,32,35,38,54],inlin:[12,47],inmemorynetworkmapservic:35,inoutgroup:[3,49,50],input:[3,6,12,17,18,21,23,27,29,30,34,36,40,42,43,46],inputindex:54,inputpap:53,inputslist:47,inputst:54,inquisit:51,insert:[5,13,21,33,35,36,38,47],insid:[4,9,12,13,23,30,35,40,43,44,47,49],inspect:[29,51,52],instal:[0,2,8,10,11,15,16,39,40,43,48,49,51],installat:15,installdist:[43,48],instanc:[3,5],instance:53,instant:[5,11,12,22,36,47,49],instanti:[9,11,12,33,40],instat:53,instead:[1,5,12,13,15,16,19,22,23,31,35,40,49,54],instigat:21,instruct:[15,16,17,18,33,43,46,48,49,51],instruction:15,instrument:[6,7,11,35,47,51],insuffici:47,insufficientbalanceexcept:49,integ:[4,25,40,49,54],integer:49,integr:[0,5,8,12,15,23,30,33,36,38,40,43,51,52],integrat:18,integrationtest:52,integrationtestingtutori:52,intellig:5,intend:[5,6,10,12,13,22,23,24,25,33,34,35,36,38,44,46,51,53],intent:[3,9,32,36,40,49],intention:5,inter:[24,40],interact:[4,5,12,13,18,23,26,27,31,36,40,47,49],interchang:[17,25,47],interest:[1,4],interest_r:[8,45],interfac:[0,1,4,5,6,9,11,18,19,22,25,26,31],interior:40,interleav:29,interledg:40,intermedi:47,intermediari:[22,43],intern:[5,9,10,12,28,31,33,35,38,40,49,51],internalis:5,interop:[14,40,49],interoper:35,interpol:22,interpret:[5,23,29],intersect:49,interv:[22,29],intervent:35,intesa:40,introduc:[5,11,17,23,36,40,49],introductori:[18,51],intuit:[5,34],invalid:[12,21,22,23,36,49],invari:[29,49,52],investig:12,invoc:[4,12],invoic:46,invok:[4,5,9,11,12,23,26,33,35,36,40,51],invoke:12,involv:[6,12,18,21,22,35,42,47,49,52,54],ipsa:36,irrelev:11,irsdemo:[1,8,30,43],irsexport:7,irstest:7,irsutil:7,isbefor:49,isconsist:29,isda:[40,43],isdebug:51,isempti:[36,47,49],isinstanc:12,isn:[4,5,12,22,31,44,49],isnotari:48,isnotempti:[46,48],isol:50,issu:[1,3,6,13,15],issuanc:[6,22,23,25,28,29,40,43,49,50,53],issue:[3,6,17,29,43,48,49,50,53],issuecash:[29,48,52],issuecommand:50,issuedbi:[52,53],issuer:[6,12,13,25,28,34,40,43,47,49,50,53],issuer_kei:38,issuer_ref:38,issueref:[48,52],issuerparti:38,issuerref:38,issuetransact:54,istribut:18,item:[17,47,49,51],iter:[12,40,41,49],iterabl:38,iterat:[36,47],itself:[4,7,8,11,12,15,18,21,23,31,33,34,35,36,38,40,43,46,47,48,49,53],jar:[0,2,8,9,10,23,32,33,37,40,45,46,47,51],jarandsourc:10,jav:16,java:[0,3,4,5,9,10,11,12,14],javaag:47,javaclass:[12,38],javacommercialpap:[49,53],javadoc:[5,10,51],javadocjar:10,javatesthelp:53,javax:38,jax:9,jcenter:18,jdbc:[8,10,28,33,38,40,43,45,51],jdbcdatasourc:[8,45],jdbcx:[8,45],jdk1:16,jdk:15,jdwp:10,jersey_vers:51,jetbrain:[14,15,16,51],jetti:33,jms:31,jmx2graphit:33,jmx:33,jmxtran:33,job:[12,29],jobs:29,johann:40,join:[8,28,31,38,40,49],jolokia:33,jpa:38,json:[8,33,35,51],judgement:5,junit:51,just:[4,5,12,15,16,22,23,29,31,33,36,40,43,44,46,47,48,49,51,53,54],jvm:[4,10,12,14],kdoc:5,keep:[12,15,23,28,47,49,51],kei:[1,3,5,6,8,9,12,13,17,18,19,21],kept:[12,37,54],keymanagementservic:[12,35,36],keypair:[12,35,36,49,54],keystor:[8,35,37,40],keystorepassword:[8,45],keyword:[5,53],kick:12,kill:[26,29],kind:[12,22,36,44,49,51],knob:29,know:[1,4,11,12,13,14,21,24,27,30,36,44,47,49,50,51,53,54],knowledg:36,known:[1,7,13,15,17,23,24,30,35,36,40,41,43],knownfix:36,korea:49,kotlin:[2,5,9,12],kotlin_vers:51,kyc:24,label:[12,53],lack:12,lambda:[12,33,53],land:7,lang:[9,53],languag:[4,5,10,12,14,15,16,17,22,23,25,40,49,51],larg:[12,22,25,31,36,40,46,47,49],larger:[5,23,44],last:[12,26,29,36,41,53],lastli:51,late:15,lateinit:13,latenc:21,later:[4,5,12,13,19,22,36,38,40,44,48,49,50,51,52],latest:[5,9,15,16,18,40,47,51],latestrecord:47,latex:40,latter:[5,48,49],launch:[11,34,36,43,48],layer:[8,12,13,31,35,36,38,40,42],layout:[10,32,40,51],lazi:36,lazili:33,ldap:40,lead:[5,50],leader:8,leaf:[17,30],leak:[4,12,21,36],learn:[12,13,14,18,22,49],least:[1,8,29,40,43,46,49,50,51],leav:[1,3,5,12,16,22,30,34,36],ledger:[1,6,7,12,17,18,20,21,22,23,24,25,26,28,33,34,36,38,40,43,45,46,47,49,51,52,53],ledgertransact:[12,22,40],leewai:44,left:[1,12,32,37,43,50,51,53],leg:[7,11],legaci:35,legal:[8,21,23,31,35,36,37,40,47,49,51,54],legalcontractrefer:[49,50],legalident:[13,47,48,52,54],legalidentitykei:[47,54],legallyidentifi:[12,36],legalnam:[8,45,51],legitim:23,less:[12,33,40,46,50,53],lesser:49,let:[1,3,5,11,12,13,22,29,30,31,33,36,40,47,48,49,50,51,53,54],letmein:[8,45],letter:[5,31],level:[0,3,5,7,9,12,16,21,22,27,29,30,31,33,34,35,40,43,44,47,49,50,53],lib:[2,10,32,37,45,47,51],liber:5,libopenjfx:16,libor:[7,33,36],librari:[0,4,5,12,17,18,22,25,26,33,35,36,40,43,48,49,51],licat:18,licens:[5,43],license:51,life:[12,49],lifecycl:6,lifetim:[7,22],lightweight:[13,17],like:[3,4,5,7,11,12,13,21,22,23,25,28,29,30,31,32,33,36,40,41,43,47,48,49,51],likewis:[36,49],limit:[3,6,17,29,33,49,54],linear:[25,28,35],linearhead:47,linearheadsoftyp:47,linearid:47,linearst:[25,47],liner:5,link:[5,12,16,23,36,39,40,45,51,52],linkag:23,linux:[10,15,33,40],list:[0,2,3,8,9,12,22,23,27,29,30,31,35,36,38,40,41,42,43,47,48,49,50,51,54],listen:[0,1,5,8,31,35,40,48,51],listenablefutur:4,listof:[13,36,38,47,48,49,51,52],littl:[5,12,49,53],live:[7,9,12,35,40,43],lizard:17,llc:37,load:[0,8,9,12,18,21,22,23],loadtest:29,loan:[6,7,36],local:[0,2,8,9,10,12,15,17,18,23,29,32,33,35,38],local_branch_nam:51,localcertificatesbasedirectori:29,locald:36,localhost:[1,8,33,34,43,45,51],localtunnelstartingport:29,locat:1,lock:[5,6,8,28,38,49],log4j2:[33,45],log4j:[40,51],log:0,logger:[12,33],loggerfor:33,logic:[3,11,12,13,17,21,22,23,24,31,38,40,44,46,47,49,50],login:[10,34,39,40,43,48],loglevel:33,london:[8,10,37,45,46,51],longer:[0,5,7,8,12,37,40],longrang:29,look:[0,1,3,5,7,12,13,22,29,31,33,36,41,43,46,49,50,51,53],lookup:[8,31],loop:[5,7,29,48,49,52],loquitur:36,loss:36,lot:[5,7,40,43,44,49],low:[12,21],lower:[5,12,15,27,47],lowest:31,lurch:12,machin:[1,8,11,12,15,16,17,23,26,29,40,45],macos:[10,40],made:[5,7,12,22,35,36,40,41,46,47,48,51],magicnumb:54,mai:[0,1,4,5,10,12,15,16,17,18,21,22,23,24,25,26,27,28,29,31,32,33,34,35,36,38,40,41,43,44,45,47,48,49,50,51,52,53],mail:41,mailbox:35,main:[0,8,11,12,16,23,29,31,35,40,46,48,50,51],mainstream:19,maintain:[17,21,36,49,54],mainten:31,major:[0,12,40,41,43],make:[0,1,2,4,5,7,8,10,12,13,15],maker:14,maketransact:13,malici:[12,27,40,44,47],man:40,manag:[8,12,17,18,24,28,29,31,33,34],managa:28,mandatori:49,mani:[5,10,11,12,13,16,21,22,23,25,27,29,36,40,46,49,51],manifest:0,manipul:[22,25,47],manner:[4,12,23,31,40,48,49,50],manual:[0,10,11,12,26,32,47,54],map:[0,1,3,5,7,8,9,12,13,17,18,24,29],mappabl:49,mappedschema:38,mappedtyp:38,margin:[17,18,24],mark:[4,5,6,12,17,38,49],markdown:5,marker:[12,44],market:51,marshal:4,master:[15,16,41,51],match:[3,4,8,12,22,23,24,30,31,36,40,44,47,48,50,52],materi:50,math:18,mathemat:22,matter:[12,36,43,49],matur:[6,7,21,27,32,33,36,49,53],maturityd:[49,53],maven:[0,10,16,18],mavenloc:10,mavenpubl:10,maximis:23,maybestx:12,maybetraderequest:12,mbean:33,mean:[4,5,9,11,12,13,16,17,21,23,25,26,27,29,30,36,40,43,47,48,50],meandref:48,meaning:[6,21],meaningfulli:46,meant:[12,29,51],meantim:52,meanwhil:[48,50],measur:[7,28,43],mechan:[17,28,31,36,40],meet:[3,35,47,49,51],mega:37,mega_corp:[13,53],mega_corp_key:13,mega_corp_pubkey:53,megacorp:[13,53],member:[7,8,40,43],membership:26,memori:[12,13,18,31],menlo:5,mention:[11,12,36,49],menu:[1,51],mere:7,merg:[25,28,40,47,49,51],mergeabl:49,merkl:[17,18,23,27],merkleroot:[30,36],merkletreeexcept:[30,36],mess:12,messag:[0,4,5,8,10,12,13,17,18,19,26,27,29],messagingserveraddress:[8,35],messagingservic:[31,35],met:[9,22,51],meta:[9,51],metadata:[33,46,51,54],method:[3,4,5,8,9,11,12,13,21,22,25,29,33,35,36,38,40,44,45,46,47,49,54],metric:[33,43],micro:[40,50],microsoft:1,mid:21,middl:[5,12,40],middlewar:[17,35],midpoint:51,might:[5,7,12,36,38,44,47,49,51],migrat:47,mileston:15,million:26,min:48,mind:[5,12,36],miner:23,mini_corp_pubkey:13,minim:[3,12,15],minimis:[6,21,31],minimum:[4,7,22,23,47],minor:[31,40,41],minu:49,minut:[0,1,12,14,36,39,51],mismatch:[49,53],miss:[5,8,12],mission:33,mistak:[40,44,47],mix:[0,5,40],mobil:23,mock:[13,51],mocknetwork:[13,32],mocknod:[13,35],mockservic:22,modal:51,mode:[8,32,34,37,40],model:[5,6,7,11,12,17,18,20],modif:[35,47,49],modifi:[1,6,7,9,10,12,17,22,40,47,49,51,53],modul:[5,8,13],moment:[12,13,40],monei:[36,47,49],monitor:[5,9,18],month:[7,12,41],monthli:51,more:[0,1,3,4,5,6,7,8,10,12,13,14,16,17,18,21,22,23,24,25,27,30,31,32,33,35,36,37,38,40,42,43,46,47,48,49,50,51,52,54],moreexecutor:5,mortensen:40,most:[0,3,5,7,12,15,31,32,33,45,49,50,51],mostli:[23,49],motiv:[18,51],move:[3,6,12,13,23,34,40,41,43,47,48,49,50,51,53,54],movement:[12,25,49],movetransact:54,movetransactionbuild:54,much:[5,12,14,27,36,38,40,44,47,49],multi:[5,12,18],multigraph:48,multilater:[6,40],multipl:[3,4,6,9,17],multipli:7,must:[3,4,5,6,8,9,10,11,12,21,22,23,25,27,31,33,35,36,38,39,40,44,45,46,47,48,49,50,51],mustafa:40,mutabl:[5,22,49],mutablelistof:47,mutat:[35,47],mutual:[6,12,21,44],myfil:33,myident:[36,54],myinfo:[36,47,54],mykei:22,mykeypair:12,mylegalnam:[8,37,45],mynodeinfo:36,mypublickei:12,mysigningkei:[36,54],mysql:19,nail:5,name:1,namedbyhash:18,namespac:12,narrow:[3,5,34],nativ:[12,47],natixi:40,natur:[0,23,47,49],naval:21,navig:[1,10,39,43,51],navistar:21,nearestc:[8,10,37,45,51],neat:53,necessari:[5,17,24,36,40,41,51],necessarili:[22,38],nee:40,need:[0,1,2,3,4,5,7,9,11,12,13,15,16,17,21,22,23,24,25,29,30,33,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54],neg:[25,51],negoti:[22,47],neither:12,nest:[12,52],net:[3,6,7,8,9,10,12,13,33,35,37,38,39,40,42,43,45,46,47,48,49,51,52,53],network:[1,8,11,12,13,17,18,19,21,22,23,24,26,27,29,30],networkmap:[10,31,51],networkmapcach:[8,12,35,54],networkmapservic:[8,10],networkmapupd:48,neutral:19,never:[5,17,21,49],newdeal:36,newli:[11,51,54],newnotari:21,newowner:[49,54],newsecurerandom:40,newstat:47,nextdoubl:48,nextfixingof:11,nextlong:48,nextscheduledact:11,nextstep:12,nfinal:46,nice:[36,49],nio:5,noddi:33,node:[0,1,4,6],node_dir:10,node_directory:45,nodea:[1,10,51],nodeb:[1,10,51],nodec:[1,51],nodefilt:29,nodehandl:[29,52],nodehost:29,nodeident:48,nodeinfo:[8,12,35,52],nodeinterestr:[9,36,47],nodenam:51,nodex:51,nodisruptionwindowm:29,non:[2,4,5,6,8,12],nonc:50,nondeterminist:52,none:[3,11,12,30,36,38,43,50],nonemptyset:40,nordea:40,normal:[3,4,6,7,9,10,12,22,29,30,31,32,34,35,40,46,47,49,50,54],north:49,notabl:[5,51],notari:[1,8,10,12,13,17,18,19,20],notaris:[12,18,21,22,23,26,27,40,43,47,49,51,52],notary:12,notary_committed_states:43,notarychang:[40,47],notarychangeflow:21,notaryclusteraddress:[8,35],notaryexcept:[40,54],notaryflow:[12,26,35,40,47,54],notaryident:[12,13,48,52],notarynod:[12,13],notarynodeaddress:8,notarysig:12,notarysignatur:[12,54],notarytous:22,note:[0,1,2,5,6,7,8,9,10,12,13],noth:[5,11,12,23,40,44,49,51],notic:[5,43,50,53],notif:[26,29,31,35,46],notifi:[31,32,54],notion:[7,40],notnul:[49,50],now:[1,5,10,12,13,22,30,33,39,40,43,45,47,48,49,51,52,53,54],nugget:49,nullabl:[12,49],nullpublickei:49,number:[0,3,5,6,7,13,15,17,22,25,29,31,34,35,36,38,39,41,43,45,47,49,51],numer:9,obj:[49,50],object:[3,4,5,6,7,8,11,12,13,17,18,19,22,23,24,25,26,27,31,33,36],oblig:[6,7,25,40,47,51],obligat:3,obligor:6,observ:[4,7,11,12,21,26,29,32,40,46,51],observatori:21,obsolet:[11,40],obtain:[5,8,11,12,13,15,21,24,27,30,36,37,40,43,51,54],obviou:[5,21,36],obvious:[0,7,17,32],occasion:0,occur:[11,12,21,35,49,52],occurr:[12,21],odd:49,off:[12,18,21,23,27,28],offer:[12,27,35,38,51],offici:15,offlin:31,offset:7,ofsecond:47,often:[5,6,7,12,16,36,47,49],oftenor:36,oil:[25,40],old:[12,17,21,39,40,47,49,54],older:15,omit:[11,43],onc:[4,5,9,12,17,21,22,26,37,41,47,49,52],once:[1,2,7,10,11,12,15,17,18,22,31,32,37,38,39,43,45,46,47,49,51],one:[3,21,24,30,36,43,47,51],ongo:4,onledgerasset:[6,49],onli:[0,3,4,5,7,8,10,11,12,14,17,21,22,23,24,25,30,31,32,33,34,35,36,37,40,41,43,44,45,47,48,49,50,51,52,53,54],only:[12,31,35,39,45],onto:[4,5,12,31,49,53],opaquebyt:[40,48,52,53],open:[0,1,3,4,10,12,15,16,18,21,23,31,33,35,40,43,48,51,52],opengamma:[40,43],openjdk:[15,16],openjfx:[15,16],openssl:29,oper:[1,7,8,11,12,17,24,25,31,33,35,36,40,44,45,47,48,49,54],oppos:0,opposit:3,opt:[1,10,29,51],optim:5,optimis:[28,40],option:[0,1,2,5,7,8,11,12,17,29,32,36,37,38,40,47,49,50,51,52,54],optional:[8,47],oracl:[1,7,9,15],oracleparti:36,orang:26,orchestr:[19,23,40],ordain:7,order:[0,2,4,5,6,7,12,19,21,22,23,24,28,29,32,35,36,38,40,43,45,46,48,49,50,51,52],ordernumb:51,ordinari:[12,23,40,49],ordinarili:36,org:[2,8,45,49,50,51],organis:[0,16,28,38,39],orient:18,origin:[23,30,38,40,46,47,49,50,51,53],originalst:21,orm:[38,40],osx:51,otc:38,other:0,otherparti:[12,36],othersid:46,otherwis:[1,4,5,8,9,10,11,12,31,35,36,44,47,48,49,52],our:[0,5,11,12,13,14,15,18,22,29,30,31,35,36,39,40,41,46,47,48,49,50,51,54],ourkei:47,ournotari:54,ourselv:[12,36,49,54],oursign:47,oursignatur:12,ourstat:47,out:[0,3,5,6,11,12,15,16,18,21,22,23,30,31,33,35,36,40,41,42,43,44,46,47,49,50,51,54],outcom:12,outer:50,outlin:[12,36,40],output:[0,3,6,10,12,17,18,21,23,28,30,34,36,40,43,46],outref:[13,47],outsid:[10,12,23,35,36,45],outstand:6,over:[0,1,5,7,8,10,12,13,17,21,22,23,24,29,30,31,33,36,38,40,43,47,49,51],overal:[11,21,47,53],overdu:11,overflow:5,overhead:33,overidden:[8,10],overload:[12,25],overlord:17,overnight:22,overrid:[3,9,11,12,29,36,38,48,49,50],overridden:[9,10],overutilis:29,overview:[1,18],overwrit:39,own:[1,5,6,10,11,12,15,18,21,22,23,25,29,31,32,33,34,35,36,38,40,41],ownablest:[12,22,49],ownedquant:48,owner:[11,12,22,28,38,47,49,50,53,54],owner_kei:38,ownership:[12,13,43,49,54],owningkei:[12,30,36,47,49,54],ozturk:40,p2p:[31,40],pack:49,packag:[9,15,22,25,38,40,51],packet:23,page:[1,8,15,16,36,40,41,43,51],pai:[6,12,34],paid:[6,7,43,49],pair:[1,12,13,22,35,36,37,47,49],pan:40,pane:16,paper:3,paragraph:29,parallel:[4,29,36,40,52],param:[29,38,54],paramet:[4,5,9,11,12,22,29,33,36,40,46,47,49,50],parameteris:[23,29,47],parent:[12,17],pars:[22,36,49],part:[0,3,4,5,6,8,9,10,11,12,21,22,23,29,30,31,34,35,36,37,38,40,44,45,47,49,50,51],parti:[1,5,6,7,11],partial:[12,18,21,23,27,30,36,44],partialmerkletx:36,partialtx:[12,30],particip:[21,22,23,24,26,27,28,34,35,36,40,49,54],particular:[3,5,9,12,17,18,21,22,30,33,36,38,40,47],partner:[43,47],partyandrefer:[5,25,48,49,53],partyfromnam:46,partynod:13,partyrefer:[5,49],pascal:5,pass:[1,3,9,12,22,26,28,29,30,33,35,36,38,40,43,46,47,49,50,52,54],passphras:39,password:[1,4,8,10,27,31,33,34,37,40,43,45,48],past:[1,5,43,49,51],patch:[5,40],path:[5,8,9,10,11,16,29,31,33,40,43,47,48,49,51],path_to_loadtest_conf:29,pattern:[5,47,48],paus:[10,26,32],paycash:[48,52],payer:7,payload:36,payment:[1,6,7,11,12,17,34,36,43,49],pdf:[36,46],peer:[12,19,24,30,31,34,35,36,49,51],penni:[25,38,49],peopl:[5,12,14,17,26,49],per:[5,10,11,31],perfect:50,perform:[0,1,5,7,11,12,17,21,22,23,26,27,28,29,31,36,40,43,46,49,50,51],perhap:[5,31,45,49],period:[7,37,43,47],perman:[12,46,47,49,53],permiss:[4,8,18,19,24,27,31],persist:8,persistentcashst:38,persistentst:38,perspect:[12,23,27,35,49],pertin:51,pervas:27,phase:40,phrase:36,physic:[1,21,35,40,45],pick:[0,12,15,31,40,41,49],piec:[5,12,17,21,23,25,29,45,49,53],pip:2,pki:[23,40],place:[2,5,7,9,11,12,19,22,23,24,30,31,36,40,41,43,48,49,50,51],plai:[27,29,34],plain:8,plan:[12,23,36,39,40],platform:[7,9,10,11,12,14,15,18,20,21,22,23,24,30,40,43,44,49,51],plc:34,pleas:[1,5,8,15],ploadtest:29,plu:[8,22,35,53],pluggabl:[21,24,27,40],plugin:[4,8],pluginservicehub:[9,10,12,35,36,40],pluginserviceregistri:51,point:[4,5,6,9,10,12,16,17,21,22,23,29,33,35,36,38,40,41,44,47,48,49,50,51],pointer:[12,22],pointless:5,polish:40,polit:43,poll:[29,37],pool:5,pop:[16,51],popul:[35,47],popular:14,popup:[15,16],port:[0,1,8,10,29,34,35,40,41,43,45,51],portal:1,portfolio:[1,18,24,40],portion:[23,47],posit:[5,12,18,49,54],possess:[12,21,54],possibl:[3,12,15,16,23,28,29,35,36,37,40,43,46,47,49,53],post:[24,35,51],postgr:19,potenti:[5,12,14,21,26,36,43,49,51],pound:[25,49],pour:25,power:35,practic:[8,40,43,47,49],preced:[0,49],precis:[19,21,23],precondit:[5,49],predic:52,predict:29,prefer:[0,1,5,16,34,38,51],prefix:[5,38],preliminari:43,prematur:12,prepar:[40,49],prescrib:45,present:[1,3,4,6,7,8,9,10,12],preserv:[21,28,47],press:51,pretend:[22,33,40],pretti:12,prevent:[28,31,40,43,44,47,49],previou:[12,22,29,40,50,51,53,54],previous:[7,11,21,22,23,36,40,51,54],price:[12,23,36],primari:[23,36],primarili:[0,6,15],primit:[22,53],print:[4,33,40,43,44,45,46,48,52],println:[46,48,52],printorvisualis:48,prior:54,privaci:[5,12,19,21,23,27,28,36,40,47,49],privat:[1,5,8,9,12,13,24,27,28,31,36,37,38,45,47,49,51,53],privatefoo:5,privatekei:[12,35],probabl:[0,49],problem:[12,15,16,36,45],proce:[1,12],procedur:[12,37,49],process:[0,1,3,4,7,8,9,10,11,12,18,19,21,22,23,24,28,33,34,35,36,37,40],processor:29,produc:[2,11,16,23,32,47,49,52,53],product:[0,5,10,11,14,19,25,40,41,43,47,51],profil:[33,39],program:[4,5,22,23,33,35,40,43,49],programmat:48,progress:[1,7],progresstrack:[12,36],project:[0,1,10,15],prolif:40,promis:40,prompt:[15,51],proof:[6,23,30],propag:[4,12,33,40,49,50,51,53],properli:[12,35,44],properti:4,proport:43,propos:[12,23,35,44,47,51],proprietari:[24,40,43],prose:[23,36,49],prospectus_hash:46,protect:[12,27,35,37,43],protocolhandl:46,protocolvers:4,prototyp:[5,19,36,40,42,49],provabl:47,prove:[21,49],proven:[27,43],provid:[0,1,2,3,4,5,6,7,8,9,10,12,13,15,16,17,21,22,23,24,25,26,27,29,30,31,32,33,34,35],provis:24,provision:22,proxi:[4,46,48,52],prune:[27,28],pseudo:36,pseudonym:22,ptx:[12,36,46],pubkei:53,publicfoo:5,publickei:[12,35,49],publish:[10,18,20,24,36],publishtomavenloc:39,pull:[47,51],punish:36,purchas:[1,12,43,51],purchaseord:51,purchaseordercontract:51,purchaseorderst:51,pure:[6,23,36,52],purpos:[1,6,12,17,21,22,27,28,31,38,42,43,45,47,48,49,51,52],push:[4,31,41],put:[5,12,17,18,29,41,47,48],putti:1,python:[2,40,51],qualifi:[8,9,38],qualiti:47,quantifi:25,quantiti:[3,25,28,29,47,48,49,51,52],quasar:[9,10,12,17,35,36,47,51],quasar_vers:51,queri:[4,7,8,11,24,28,35],queryablest:[35,38],queryrequest:36,question:[5,11,21,22,31,36,50],queu:[17,31],queue:[4,5,12,18],quick:[36,51],quickcheck:40,quickli:[17,37,44,49],quit:[4,5,12,21,49],r3cev:29,r3corda:[10,40,51],r3dlg:41,r3prototyp:[2,47],radic:23,raft:[8,18,21,27,35,40,42],rais:[3,21,43,50],ran:0,random63bitvalu:50,random:[11,22,23,29,31,34,40,43,47,48,54],randomis:[27,40,46],randomli:[29,34,48],rang:[1,3,21,38,51],rapid:[5,10,19,41],rare:[8,25],rate:[1,5],ratesfixflow:[30,36,47],rather:[3,5,12,15,16,31,32,40,45,47,48,49],rational:20,raw:[1,31,33,43],rdbms:[38,40],rdms:40,reach:[7,11,21,23,24,27,36,40,43],reachabl:12,react:29,reactiv:40,read:[1,5,8,10,12,14,18,19,30,33,35,36,40,49,51],readabl:[8,12,14,23,43],reader:18,readi:[1,3,41,49,51],readili:50,readm:[18,51],readme:[5,51],real:[5,22,32,36,37,40,43,47,49],realis:12,realist:22,realiti:[7,52],realli:[5,12,30,36,49],reason:[5,7,12,21,23,25,29,40,44,49],reassign:49,recal:7,receipt:[35,43],receiv:[4,6,7,9,12,17,26,29,31,35,36,40,41,43,44,46,47,49,51,52],receiveandcheckproposedtransact:12,receiveandvalidatetraderequest:12,received:36,receiving:12,recent:[1,40,51],recheck:47,recipi:[6,43,46,49,52],recognis:[9,12,23,49],recommend:[0,1,5,15,31,42,43,51],record:[11,13,17,21,25,26,28,35,38,43,46,47,51,54],recordtransact:[13,35,47,54],recreat:[12,16],red:[7,30,51],redeem:[3,6,34,49,50],redempt:49,redeploi:51,redesign:40,redirect:45,redownload:16,reduc:[5,10,43],redund:5,ref:[12,13,22,36,47,48,52,53],refactor:40,refer:[0,5,6,7,8,9,11,12,15],referenc:[46,51],refin:40,reflect:[1,12,18,29,40,47,49,50,51],refresh:[0,15,40,51],refus:16,regard:[21,45,47],regardless:12,regener:[7,41],regist:1,registerflowiniti:[9,12,36],registerrpckryotyp:[9,48],registr:[9,35],registri:9,regress:40,regul:[23,47,49],regular:[1,12,17,25,33,43,45,49],reifi:47,reissu:49,reject:[8,12,21,23,31,35,36,37,47,49],rel:[8,14,33,36,40,47],relabelablestep:12,relai:46,relat:[7,11],relationship:[35,49],relax:[29,37,40],releas:[4,15],relev:[3,9,10,11,17,22,23,28,35,36,40,47,49,50,54],reli:[4,10,23,40,43,44],reliabl:35,relic:33,religi:5,remain:[10,11,12,36,40,47,49,51],rememb:[5,11,44,47],remind:[12,44,50],remot:[0,9,10,16,27,29,32,35,43,45,47,51],remote_branch_nam:51,remotemessagingport:29,remotenodedirectori:29,remotesystemdservicenam:29,remov:[12,30,34,40,41,49],renam:[12,40],render:[5,12,32,34,40],renderifsupport:46,repair:26,repay:50,repeat:[0,5,7,12,46],replac:[4,7,22,33,40,41,43,47,48,49,51],replai:40,replic:[8,42,43],repo:[0,1,15,16,18,51],repoint:21,report:[12,26,28,34,40,50],repositori:[0,5,10,16,39,40,41,43,51],repres:[1,5,6,7,9,12,22,23,24,25,28,29,34,35,36,38,40,47,48,49],represent:[4,7,22],reproduc:47,republish:51,request:[0,4,8,9,12,18,21,23,26,27,29,31,35,36],requestingparti:54,requir:[0,1],requiredcommand:[3,40,50],requiredflow:9,requiresinglecommand:[49,50],requirethat:[49,50],research:40,resel:36,resend:35,resent:35,reserv:28,reset:[7,32],resid:35,residu:47,residualamount:47,residualoutput:47,resolut:[12,23,26,40,54],resolv:[5,12,13,22,27,36,43,45,49],resolvetransact:23,resolvetransactionsflow:[12,13,26,46],resolvetransactionsflowtest:13,resourc:[0,1,4,8,9,12,23,29,36,46,47,51],resp:36,respect:[0,5,12,22,28,47,51,52],respond:[12,35],respons:[4,9,11,12,16,21,23,28,31,35,36,38,40,47,48,51,52,54],rest:[9,12,19,23,31,33,40,50,51],restart:[9,12,26,35,37],restor:[9,12,17],restrict:[1,3,5,23,32,43,47],restructur:[40,50,51],restructuredtext:2,result:[5,7,8,12,13,21,23,34,35,36,37,38,40,43,44,46,47,49,51,54],resultfutur:13,resum:[12,35,37,40],resurrect:12,resync:15,retain:31,rethrown:4,retri:[12,19,31],retriev:[7,12,37,42,46],retrieveoutput:53,returnvalu:[46,52],reus:[4,23],reusabl:[3,17,23,36,40,46,49],revamp:40,reveal:[12,21,27,30,36,40],revers:[12,35],revert:6,review:[5,12,23,27,40,41,51],revis:[7,27,47],rewrit:12,richer:10,right:[1,5,12,15,16,22,33,36,40,41,43,44,47,51],rightmost:30,rigidli:5,risk:[12,43],robert:40,robust:40,rogerwilli:51,role:[11,27,34,35,43,48],roll:[7,12,40,43],rollov:[22,49],root:[1,8,10,24,27,30,31,35,37,41,45,47,51],roothash:36,rotat:[33,40],roughli:[21,41],rout:[12,13,27,31,40],row:[23,33,34,38,43,49],rpcclienttonod:[48,52],rpcexception:4,rpckryo:4,rpcreturnsobserv:4,rpcsincevers:4,rpcuser:[8,34,45,48,51,52],rui:40,ruin:53,rule:[5,12,23,28,35,36,40,43,49],run:[0,1,2,3,4,5,8,10,11,12,13,15],runbuy:43,runconfigur:[15,16],rundemonod:[34,40],runexampleclientrpc:51,runnetwork:13,runnod:[0,10,40,43,48,51],runparamet:29,runrecipi:43,runrpccashissu:43,runsel:43,runsend:[0,43],runshellcommandgetoutput:29,runsimulationnod:34,runtim:[5,12,51],runwebcashissu:43,sacrif:51,safe:[4,5,9,12,37,44,48,52],sai:[5,21,29,43,45,49,50,54],sake:[43,52],sale:49,same:[0,1,4,5,6,7,8,10,11,12,21,22,23,25,28,29,31,33,35,36,37,40,43,45,47,48,49,50,51,53],sampl:[0,9,10,12,15,16,18,26,32,33,34,40,43,46,51],sanction:49,sandbox:[11,19,23,27,40,44],saniti:12,santiago:40,sate:54,satisfi:[22,43,49,50],save:[5,12,40,49],saw:52,scala:[14,49],scalabl:[5,21],scale:[7,44],scenario:[22,26,27,32,35,47,51,52],scene:[12,49],schedul:[7,9],schedulablest:[11,22,35],scheduledact:11,schedulerservic:35,schema:[18,28],schemafamili:38,schemaopt:38,schemaservic:38,scheme:[30,35],schroeter:40,scienc:51,scope:[3,34,46,50],scotiabank:40,scotland:50,scrape:33,scratch:[22,49,51],screen:[1,5,15,16,34,40,49],script:[0,2,10,40,43,46,51],scroll:43,scrub:12,seamless:14,search:[1,23,34,35,47,49],sec:51,second:[3,7,9,12,13,22,29,36,43,46,47,49,51,52],secondari:12,secp256r1:40,secret:8,section:[8,20,21,26,27,28,29,36,40,41,47,51,54],securehash:[13,22,30,36,49,50,54],securerandom:40,see:[1,2,3,4,5,6,7,8,10,11,12,13,15,16,21,22,23,24,25,27,29,30,32,36,37,38,39,40,42,43,45,46,47,48,49,50,51,52],seed:12,seek:40,seen:[5,7,9,12,36,49],segment:10,select:[1,3,16,21,27,28,38,40,43,47,49,50,51],selector:3,selectschema:38,self:[10,28,29,40,43,52],selfissuecommand:29,selfissuest:29,selfissuetest:29,selfsignedtx:47,sell:[12,47,49,50,53],sellamount:47,sellerownerkei:12,sellersig:12,sellertradeinfo:12,semant:26,semi:[1,24,27],send:[1,5,12,13,21,24,26,28,30,31,33,35,36,40,41,43,46,47,49,51,52,54],sendandrec:[12,36],sender:[12,43,46],sending:36,sending_offer_and_receiving_partial_transaction:12,sending_sigs:12,sendrec:26,sendsignatur:12,sens:[7,36,49,50],sensit:[11,21,23,30,43,44],sent:[11,12,22,26,31,36,40,46,47,49],separ:[0,1,3,8,10,12,22,30,31,33,36,40,43,47,49,51],septemb:43,sequenc:[26,35,40,52],sequenti:[12,52],seri:[12,22],serial:[4,9,19,35,49],serialis:[4,5,9,12,17,19,36,40,49],seriou:41,serv:[9,10,35,51,52],server:[4,8,9,10,18,19,31,33],servic:[1,8,9],servicehub:[10,12,31,35,36,47,54],servicehubintern:40,serviceident:36,serviceinfo:[43,48,51,52],serviceload:[9,36],serviceplugin:[9,36],servicetyp:[8,35,43,54],servlet:51,session:[11,12,31,35,40],sessionid:11,set:[1,3,4,7,8,9,10,11,12],setlifecycl:3,setof:[3,12,13,43,46,47,48,50,51,52,54],setter:[38,49],settim:[12,22,36,47],settl:[3,6,13,25,46],settlement:[6,12],setup:[10,11,13,32,37],sever:[0,8,10,12,31,35,36,38,42,43,45,48,49,52,53],sha256:[22,30,49,50],sha256sum:33,sha:[23,33],shade:23,shadow:28,share:[0,1,6,7,12,17,22,23,24,25,35,36,40,44,46,47,49,51],shasum:33,she:49,shell:[29,51],ship:[1,23],shoot:44,shortcut:19,shorthand:53,shortli:0,should:[0,1,3,5,6,9,10,11,12,15,16,18,19,21,22,24,26,29,30,35,36,37,38,39,40,43,44,45,46,47,48,49,50,51,52,53],shoulder:5,shouldn:[12,23,30,47,49,51],shoutout:40,show:[1,14,23,32,34,35,40,43,49,50,51],shown:[1,4,8,12,13,22,32,47,51],shut:52,shutdown:[12,35],side:[4,11,12,15,25,26,32,36,43,44,46,47,51],sidebar:32,sidenot:45,sig:[36,40,49],sign:[7,8,12,13,17,18,19,21,22,23,24,26,27,30,31,35],signal:[17,47],signatori:47,signatur:[6,12,17,18,19,21],signaturesfromsel:12,signedtransact:[12,13,18,22],signer:[30,36,43,47,49,50,53],signfirsttx:13,signific:[0,36,40],significantli:[7,21,22,29,40,46],signing:[12,36],signingkei:36,signrequest:36,signwith:[12,13,22,46,47,49,54],signwithecdsa:[12,36],signwithourkei:12,silver:5,similar:[4,5,12,31,36,40,47,48,49,50],similarli:[27,38,47],simmvaluationdemo:[1,43],simpl:[0,4,5,6,7,8,9,12,13,15,16,18,19,22,27,29,33,35,36,40,42,43,46,47,48,49],simplecp:53,simplecpdoesntcompil:53,simplecpmov:53,simplecpmovefail:53,simplecpmovesuccess:53,simpleissuancewithtweak:53,simpleissuancewithtweaktopleveltx:53,simplenam:38,simpler:[14,23,50],simplest:[12,49],simpli:[1,5,10,12,13,22,29,35,38,40,42,49,51,53],simplic:47,simplif:40,simplifi:[3,5,6,23,25,35,42,47,49],simul:[1,8,18],simultan:[12,22,28,43,49],sinc:[49,50,51],singl:[3,4,5,6,9,12,13,18,22,23,28,29,32,33,35,36,40,42,43,45,46,47,49,50],singlemessagerecipi:31,singleownerst:54,singleton:[9,12,36,49,50],singletonserializeastoken:[9,36],site:[5,40,41],situat:[5,30,40,47],size:[1,5,7,12,33,36,49,50,51],skeleton:13,skip:[12,22,49,51],sl4j:33,slack:[15,18],sleep:[29,48],slf4j:12,slightli:[0,42,47,49],slip:41,slot:40,slow:[5,29],small:[3,4,11,12,23,24,25,33,36,40,44,46,49],smaller:[3,40,50],smallest:25,smart:[13,18,19,23,24,28,36,40,47],smooth:49,snapshot:[36,39,40,41,46,48],snapshots:51,snide:2,snippet:[12,51],socket:33,soft:28,softwar:12,sofu:40,sold:[12,22],sole:[21,31,40],solut:[12,27],solv:[12,16,36],solvenc:36,some:[0,1,4,5,6,9,11,12,13,16,18,19,21,22,23,24,25,26,29,30,33,34,35,36,38,40,43,45,47,48,49,50,51,52,53,54],somed:49,somehow:29,someon:[21,28,49,54],someth:[4,5,7,12,36,40,49],sometim:[0,12,17,22,23,33,47],someusernam:29,somewhat:[4,12,29,40,43],somewher:49,sonatyp:39,soon:[40,49],sort:[12,36,40],sound:[5,12,49],sourc:[1,7,10,11,12],sourcejar:10,sourcenotari:47,sourceset:33,sparingli:5,spawn:[9,52],speak:40,spec:40,special:[3,4,12,21,23,50,53],specif:[3,4,6,9,10,11,12,17,21,22,23,25,28,29,31,33,35,40,47,49,50,51,52],specifi:[1,2,3,4,5,6,8,10,12,17,19,21,22,23,29,30,37,38,40,45,46,47,49,50,51,52,53,54],speed:[12,14,51],spend:[12,13,19,21,26,28,34,35,44,45,47,49,52,53],spent:[23,28,49,53],sphere:23,sphinx:2,sphinx_rtd_them:2,spin:29,spirit:40,splash:[15,16],spline:22,split:[3,25,28,30,31,40,47,49,50],splittabl:49,splittablerandom:[29,48],spot:40,spread:[12,21],spreadsheet:36,spuriou:3,sql:[19,24,38,40,43,51],src:[8,12,35,46,51,52],ssd:1,ssh:[1,29],sshuser:29,ssl:[8,40],sslkeystor:[8,37,51],stabil:51,stabilis:41,stabl:[4,9,16,18,41,48,51],stack:[9,12,33,35,36],stage:[5,6,12,22,26,47,49],stai:[23,35,47,49,50],standalon:[24,32,36,40,48],standard:[3,5,9,10,12,15,17,21,22,25,28,32,33,35,40,43,45,47,48,49,50,51],standardis:[3,22,47],start:[0,1,4,5,7,8,9],startflow:[12,13,40,46,48,52],startflowdynam:[12,48],startflowpermiss:[48,52],startnod:[48,51,52],startprotocol:[8,45],startup:[8,9,33,40],startwebserv:40,startwith:48,state:[0,3,4,6,7,8,9],stateandref:[12,21,22,36,40,47,49,54],statehistori:54,statemachinemanag:[9,12],statemachinerunid:12,statement:[5,12,36,49],stateref:[11,22,25,30,38,47,54],statesoftyp:[47,49],staticservedir:9,statist:33,statu:[47,51],status:23,stdlib:51,stem:49,stereotyp:47,still:[11,12,16,21,32,36,40,43,47,49],stock:[23,28,36],stone:29,stood:38,stop:[5,12,35,51],stopnod:13,storag:[8,12,13,17,18,22,23],store:[8,9,10,12,13,16,21,22,28,33,35,37,40,42,43,47,49,51,54],stori:[5,40],straight:1,straightforward:[12,49],strain:29,straincpu:29,stream:[4,12,31,32,40,46,48,52],strength:15,stress:[5,29,40],strictli:[7,9],string:[0,8,12,22,29,36,38,43,48,49,51,54],strip:49,strong:14,strongli:15,stub:[40,43],stuck:18,studi:49,stuff:5,stx1:13,stx2:13,stx:[12,22,46],sub:[1,4,5],subclass:[6,12,22,38,49],subclaus:[40,50],subcompon:27,subdirectori:33,subflow:[9,12,21,35,36,47,54],subfold:[9,35],subgroup:23,subject:[8,10,17,27,31,43,51],submiss:36,submit:[1,5,12,21,29,31,37,40,43,51],subnet:51,subscrib:[4,31,40,46,48],subscript:1,subsequ:[17,28,37,40,47,49,52,53],subset:[6,30,40,50],substanc:51,substitut:[8,9,47],subsystem:[9,31],subtask:12,subtl:5,subtract:25,subtyp:[12,40],subvert:44,success:[3,28,31,43,47],successfulli:[23,43,45,46,48],successor:[11,14,21],succinct:5,sudo:[2,16],suffer:43,suffic:12,suffici:[22,31,36,40,41,43,47,48],suffix:51,suggest:[10,15,31,33,49],suggestinterestrateannouncementtimewindow:[11,36],suit:[40,46],suitabl:[11,31,35,36,41],suitablecashst:47,sukrit:40,sum:[29,43,47,48,49,51],sumcashbi:[12,49],summari:[1,18,22,40,41],sumorthrow:3,sumorzero:3,sun:5,superclass:[6,40],superior:5,superset:8,supertyp:49,suppli:[6,29,48],support:[3,4,5,6,7,8,10,12,14,15,18,19,21],supportedschema:38,suppos:[12,23,49],suppress:[5,40],suppresswarn:5,sure:[15,18,21,39,40,41,44,46,49,51,52],surfac:12,surround:5,surviv:12,suspend:10,suspens:[9,35],swap:1,swapping_signatures:12,swapsignatureswithsel:12,sync:[35,49,51],synchronis:[5,21,35,43],syntax:[0,14,49],system:[0,4,8,10,12,19,21,27,28,29,30,31,33,34,35,38,40,49,51],systemd:[29,45],systemus:31,tab:[1,5,10,15,16,40,43,51],tabl:[10,33,34,35,38,40,43,51],tableprefix:38,tackl:40,tag:[4,5,17,41,51],tag_nam:51,take:[1,3,5,7,9,11,12,13,19,22,23,24,26,29,30,33,36,37,40,41,43,44,47,49,50,51,53],taken:[1,9,49],talk:[13,50],tamper:12,target:[2,5,8,13,14,15,23,32,33,51],tasknam:15,tcp:[10,33,43,51],tear:[18,21,23,27],teardown:13,techniqu:[5,19,27,36,51],tell:[2,12,48,51],templat:[0,8],tempor:23,temporari:[10,12,31],temporarili:[12,41],tempt:[44,49],ten:49,tend:17,tenor:[7,22,33,36],term:[1,3,6,8,11,17,22,25,27,31,43,45,50],termin:[7,10,12,33,35,40,43,48,51],test:[0,1,2,3,6,8,10,12],test_tx_time:53,testcompil:51,testnam:29,testnet:[8,10,37,40,45,51],testpassword:52,testtimelock:49,testuser:52,texa:25,text:[1,5,33,40,51,53],textual:28,than:[3,4,5,10,12,15,16,21,22,23,27,31,32,33,36,37,40,47,49,51,53],thank:40,thei:[0,1,3,4,5,6,7,9,10,11,12,16,17,18,21,23,24,25,26,27,29,30,31,32,33,35,36,38,40,41,43,44,45,46,47,49,50,51],theirsign:47,theirstat:47,them:[0,3,4,5,7,8,9,11,12,13,16,18,19,21,22,23,29,30,31,33,35,36,38,40,41,43,45,46,47,48,49],theme:[40,44],themselv:[4,12,13,22,29,31,32,35,36,43,44,48,49,50,51],therefor:[0,4,9,10,12,17,19,35,41,43,44,47,49],thi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54],thin:31,thing:[0,5,11,12,13,18,19,22,23,25,29,33,36,40,44,46,48],think:[5,12,20,31,44,49],third:[24,30,40,43,51],thisstateref:11,thoma:40,thorough:12,those:[0,1,4,11,12,21,23,24,33,36,43,44,49,50,51],though:[12,30,33,36,49],thought:[14,23,24],threadsaf:5,three:[1,3,10,12,23,30,34,43,49,50,52],threshold:[17,22,33,35,40],through:[3,4,7,9,11,12,23,24,25,31,32,33,35,36,40,47,49,51,53],throughout:51,throughput:21,thrown:[4,12,40,44,49],thu:[3,5,8,11,12,21,22,23,27,28,33,35,36,40,47,49,50],tick:51,ticket:12,tidi:13,tighten:49,tightli:12,time:[0,1,5,6,7,10,11,12,13,15,16,17,18,21,22,23,24,32,33,35,36,37,38,40,43,46,47],timelin:49,timem:49,timeout:4,timestamp:[5,12,18,19],titl:16,tls1:35,tls:[8,24,27,31,40],toblock:46,todo:[5,12,36,46,49],togeth:[1,3,6,9,23,28,30,40,49,50,51],toinstant:51,token:[3,9,12,25,47,50],tokeypair:36,told:5,toledgertransact:[22,47],toler:[11,21],tolist:47,too:[5,12,15,40,47,49],took:[12,50],tool:[0,12,14,15,17,23,24,29,31,32,33,34,38,40,43,46,51],top:[1,3,5,9,12,16,29,31,34,40,43,48,50,51,53],topic:[21,31,49],topicsess:[31,40],topolog:34,topriv:12,torn:40,toset:47,tosignedtransact:[12,13,22,46,47,49,54],tostateandref:47,tostr:[5,12,38,49],total:[0,22,29,33,47],totypedarrai:47,touch:[15,18],toward:[40,41],towiretransact:[22,30,36],trace:[12,33,50],track:11,tracker:[12,26,40],trade:[1,7],tradeapprovalcontract:47,tradeoff:[5,36,40],trader:[18,24,34,40],traderequest:12,traffic:[8,32],transact:[1,3,6,11,12,13,17,18,21],transactionbuild:[12,22,36,40,46,47,49,54],transactionforcontract:[3,49,50],transactionforverif:49,transactionst:[21,22,30,40],transactionstorag:35,transactiontyp:[12,40,46,47,54],transactionverificationexcept:53,transfer:[28,43,44,47,49,53,54],transferedfundsoutput:47,transform:26,transit:[22,23,25,27,35,44,47,49],translat:35,transmit:[18,40],transport:[0,8,10,51],travel:49,treat:[4,10,12,31,40,44,49],treatment:12,tree:[12,17,18,22,23,27],tri:[0,40,49],tricki:12,trigger:[3,6,11,12,29,35,36,43,50],trivial:[5,46],troubl:16,troubleshoot:15,trust:[6,8,23,27,35,37,44,47],trustpass:[8,45],truststor:[8,35,40,51],truststorepassword:[8,45],truth:12,tune:18,tunnel:45,tupl:5,ture:23,turn:[3,12,25,49,50,53],tutori:[0,4,6,12,14,18,19,23,32,40,45,46],tweak:[29,40,53],twice:53,two:[1,3,5,6,7,10,11],twopartydealflow:11,twopartytradeflow:[12,26],txb:22,txhash:[12,48,49,54],txid:47,txstate:36,txt:[33,51],type:1,typenam:12,typeonlycommanddata:[49,50],typetobui:12,typic:[0,1,9,11,12,22,25,31,33,35,36,38,44,46,47,49],ugli:12,ultim:[35,47],ultimat:33,unaccept:12,unacceptablepriceexcept:12,unavoid:12,uncertain:43,unchang:40,unclutt:12,unconfirm:47,unconsum:[28,35,38],undelet:[15,16],under:[2,10,22,29,35,40,41,43,48,49,50,53],undergo:40,underli:[6,7,12,22,25,27,40],underpin:20,underscor:5,understand:[0,32,33,36,47,49,50,51],unencrypt:8,unexpect:[12,44,51],unfamiliar:15,unfinish:12,unfortun:[12,33,44,49],unicredit:40,unifi:40,uniform:11,unilater:47,unindex:16,union:47,uniqu:[11,12,21,22,23,24,25,31,35,36,37,39,40,46],uniqueidentifi:18,uniquenessprovid:35,unit:[0,3,12,13,21,22,28,29,31,35,36,40,47,49,51,53],univers:40,unknow:21,unknown:[22,47],unknownfix:36,unless:[5,12,36,41,49,51],unlik:[35,49],unlike:[4,6],unlink:16,unlock:8,unmerg:51,unpack:[10,35,49],unpars:23,unprocess:[3,50],unread:12,unrecognis:49,unrel:[49,50,51],unschedul:11,unserialis:12,unset:7,unspecifi:52,unspent:[17,23,28],unstabl:15,unstarted:12,unsubscrib:4,unsubscript:4,unsupportedoperationexcept:[4,49],until:[4,7,11,12,13,21,35,36,40,41,43,45,51,53],untrust:12,untrustworthi:27,untrustworthydata:[12,40,44],unverifiedtransact:53,unwrap:[12,36,40,47],upcom:[11,40],updat:[4,9,10,12,15,16,23,28,29,31,35,40,41,47,48,49,51,52],update:52,upgrad:[12,16,26,38,40,49],upgrade:40,uphold:49,upload:18,uploadattach:46,uploadrat:43,upon:[7,10,12,16,17,24,28,35,43,47,49,51],upward:41,urandom:29,url:[8,10,15,33,37,40,43,45,51],usa:34,usabl:[0,40,41,49],usag:[0,5,12,18],usage:[3,48],usb:51,usd:[29,34,48],use:[1,5,6,34,43,51],usehttps:[8,45],useless:49,user1:[8,34,43,45,51],usernam:[1,4,8,27,31,33,34,39,43,48],using:3,usr:2,usual:[5,10,16,23,28,43,47,49,50,51],usualli:[3,41,50,51],utc:11,util:[8,10,13,18,21,22,33,35],utilis:[32,48],utiliti:37,utxo:[11,17,23],uuid:[22,40],vagu:5,val:[3,5,11,12,13,21,22,29,30,36,38,46,47,48,49,50,51,52,53,54],valid:[1,4,7,8,10,12,13,17,18],validatedtransact:13,validfrom:49,valu:[4,5,6,7,8,9,12,21,28,30,34,35,36,40,42,43,47,49,50,51,53],valuabl:36,valueof:48,vanilla:[6,7],vari:18,variabl:[5,7,10,12,39,49],variant:[35,49],variou:[5,9,12,23,31,33,35,40,43,44,49,51],vault:[9,12,18,20,24,26],vaultandupdat:[48,52],vaultservic:[12,35,47],vaultsselfissu:29,vega:40,vendor:[19,33],verbos:49,verdict:47,veri:[5,6,8,12,17,33,35,36,43,44,49,53],verif:[0,3,6,8,17,19],verifi:[3,12,13,17,18,21,22,23,24,25,30,35,36,40,43,46,47],verifiedtransact:[46,48],verifyclaus:[3,50],verifying:12,verifylifecycl:3,verifypropos:40,verifysignatur:[12,47],versa:[6,7,12,23,25],versionnumb:51,versu:12,vertic:5,vet:44,vice:[6,7,12,23,25],video:40,virtual:[1,9,17,23,44],visibl:[1,18,23,27,30,34,35,43],vision:[18,51],visit:[1,8],visual:[34,40,43],visualis:[31,32,48,51],visualvm:33,vital:12,vpn:45,wai:[3,4,5,10,11,12,15,16,17,21,23,29,30,31,33,34,36,38,40,43,45,47,49,51,53],wait:[11,12,13,16,29,35,36,40,43,46,51,52],waitforallnodestofinish:[48,51],wake:40,walk:23,wallet:[11,12,17,28,40,49],want:[0,3,4,5,12,15,18,22,29,30,33,36,40,43,44,49,50,51,52,53,54],warn:4,watch:[18,44,46],weak:[22,36],wear:41,web:[1,8,9,10,18,19,27,33],webaddress:[8,45],webapi:9,webapp:40,webinar:18,webport:[10,51],webserv:[8,40,45],websit:[1,15,16],week:14,weekend:7,weight:22,well:[0,2,5,7,9,11,12,17,19,23,24,30,33,35,38,40,46,47,49,50,51],went:5,were:[3,5,12,35,36,43,47,49,51],west:25,what:[1,5,6,7,11,12,13,18],whatev:[5,12,25,32,35,36,47],when:[0,1,3,4,5,6,7,8,9,10,11,12,13,15,16,21,22,23,25,26,29,31,32,33,34,35,36,37,38,40,43,44,46,47,48,49,50,51,53],whenev:[5,15],where:[1,4,5,10,12,16,17,18,21,22,23,24,25,27,28,29,30,32,33,34,35,36,38,40,41,43,46,47],wherea:[7,40,43],wherebi:[1,50],wherev:33,whether:[3,4,6,12,21,22,26,29,35,36,40,45,49,50],which:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,35,36,38,40,41,43,45,46,47,48,49,50,51,52,53,54],whilst:[12,32,35,36,40,44,49],white:[9,18,20,21,23,26,27,28,40,51],whitelist:[6,9,10,11,12,48],who:[5,8,12,14,21,22,23,27,31,36,40,43,49,51],whole:[30,35,42,53],whom:6,whose:[6,21,33],why:[5,14,18],wide:[4,5,30],widescreen:5,widespread:5,widget:[34,51],width:5,wiki:[49,50],wikipedia:[49,50],wipe:16,wiretransact:[12,18,22,30],wish:[1,10,12,25,36,38,39,40,43,47,49,51],wit:45,withattach:13,within:[2,5,8,9,13,14,15,17,18,21,23,26,32,33,34],withitem:[22,47,49],withkei:[12,47],withnewown:[12,49],without:[0,5,12,17,19,22,23,26,27,31,32,35,40,42,43,44,47,49,50,51,54],withoutissu:[12,49],withoutown:[49,50],withowner:[49,53],won:[12,16,31,34,36,40,48,49,51,52,53],word:[5,8,21],work:0,worker:5,workflow:[1,9,23,26,47],workflowtransactionbuildtutori:47,workflowtransactionbuildtutorialtest:47,working:36,workspac:[8,9,10,35,37,47],world:[8,12,23,32,34,36,43,45,47,49,53],worn:49,worri:[5,12,49,51],worth:[5,44,49,50,51],worthless:36,would:[0,4,5,6,7,9,10,12,17,19,22,23,32,33,36,40,43,44,46,47,49,50,51,52,54],wouldn:36,wow:51,wrap:[3,5,12,22,25,31,33,35,40,44,49,50],wrapper:[0,5,12,15,21,48,51],write:[0,3,5,9],written:[2,3,4,7,14,15,23,26,36,40,47,49,51,52],wrong:[4,5,12,53],wtx:[12,30,36,46,47],www:2,xml:33,xmx1024m:33,xsrf:51,xss:51,xterm:10,year:[7,12],yellow:26,yet:[5,7,12,17,19,22,28,32,34,37,40,47,52],yield:[23,33],york:10,you:[0,1,2,3,4,5,10,11,12,13,14,15,16,18,19,22,25,29,30,31,32,33,34,35,36,37,38,39,40,42,43,44,45,48,49,50,51,52,53],your:[1,4,5,9],yourself:[11,18,22,44,50,51],zero:[3,17,23,24,36,49,51],zip:[23,33,43,46],zone:11,zoneddatetim:11,zoom:40},titles:["CLI vs IDE","Working with the Corda Demo on Azure Marketplace","Building the documentation","Clauses","Client RPC","Code style guide","Contract catalogue","Interest rate swaps","Node configuration","The Corda plugin framework","CorDapp basics","Event scheduling","Writing flows","Writing flow tests","Further notes on Kotlin","Getting set up","Troubleshooting","Glossary","Welcome to the Corda documentation!","What’s included?","Overview","Consensus and notaries","Core types","Data model","Corda ecosystem","Financial model","Flow framework","Security model","Vault","Load testing","Transaction tear-offs","Networking and messaging","Network Simulator","Node administration","Node Explorer","Brief introduction to the node services","Writing oracle services","Network permissioning","Persistence","Publishing Corda","Release notes","Release process","Running a notary service","Running the demos","Secure coding guidelines","What is a corda network?","Using attachments","Building transactions","Client RPC API tutorial","Writing a contract","Writing a contract using clauses","The CorDapp template","Integration testing","Writing a contract test","Using a notary service"],titleterms:{"class":[4,36,48,49,50],"function":[12,49],"import":16,"try":16,about:16,abstractconserveamount:3,abstractissu:3,access:33,across:51,adding:49,administr:33,advanc:1,again:16,against:10,agreement:43,aka:43,allof:3,amount:25,anyof:3,api:[48,49],app:10,approach:36,artemismessagingserv:35,assert:36,assertion:5,asset:49,assign:54,attach:[33,46],attachment:[43,46],azure:1,background:[43,51],bank:43,basic:[3,10,36,47],befor:39,bind:36,brief:35,build:[2,10,37,47,51],buyer:12,cash:6,catalogu:6,central:39,certif:[37,45],chain:53,chang:21,check:49,claus:[3,49,50],cli:0,client:[4,36,48,51],cluster:29,code:[5,15,44,49],command:[0,16,47,49,51],comment:5,commerci:[6,49,50],commit:47,commod:6,common:16,compil:5,complain:16,complet:47,composit:[3,22],compositekei:22,configur:[8,16,29,45,51],connect:45,consensu:21,consol:51,construct:49,content:18,continu:36,contract:[6,23,44,49,50,53],corda:[1,9,10,15,18,24,30,39,43,45],cordapp:[10,15,24,36,48,51],cordform:10,core:[22,36],creat:7,cryptographi:22,cut:41,data:[23,30,36],databas:33,date:22,dbcheckpointstorag:35,dbtransactionmappingstorag:35,dbtransactionstorag:35,debug:[0,10,50,51],demo:[1,34,43,46],deploi:[1,51],detail:7,document:[2,18],download:33,e2etestkeymanagementservic:35,ecosystem:24,encumbranc:49,error:[4,5],event:[11,35],exampl:[8,11,30,51],exception:12,execut:43,explorer:34,extend:51,featur:12,field:8,file:[8,16,51],filteron:3,financi:25,firstof:3,fix:33,flow:[12,13,26,35,36,44],format:8,found:16,framework:[9,26,35],frequent:0,from:[36,48,51],further:14,futur:[4,12],gather:47,gener:[5,47,49],get:[15,39,51],git:15,glossari:17,gradl:[0,10,15,16,51],group:[49,50],groupclauseverifi:3,guid:5,guidelin:44,handl:[4,12],happen:[43,49],hibernateobserv:35,hide:[30,36],how:[11,29,49,50],http:51,ide:[0,15],idea:[15,16],ident:35,implement:[11,12,35,36],includ:19,individu:29,initial:43,inmemoryidentityservic:35,inmemorynetworkmapcach:35,inmemorystatemachinerecordedtransactionmappingstorag:35,inmemoryuniquenessprovid:35,input:47,install:10,instanc:7,integrat:52,intellij:[0,51],interact:51,interest:[6,7,33],interfac:[32,34],introduct:[11,12,35,36,43,47],irs:[1,43],issu:16,java:16,javafx:16,jcenter:39,jdk:16,jvm:15,kei:[22,35],kotlin:[14,15,16],kryo:[4,48],lack:16,length:5,lifecycl:[7,22,47],line:[0,5,51],load:29,local:[39,51],locat:8,log:[1,33,45],mac:0,machin:51,make:[16,49],manag:35,map:[31,38],margin:43,marketplac:1,math:22,maven:39,memori:33,merkl:30,messag:[31,35],mileston:[16,40,51],miss:16,model:[21,23,25,27],modul:16,monitor:33,multi:[22,49],multipl:21,name:5,namedbyhash:22,network:[31,32,35,36,37,45],networkmapservic:35,next:[1,15],node:[8,10,33,34,35,45,51],nodeattachmentservic:35,nodemessagingcli:35,nodeschedulerservic:35,nodeschemaservic:35,nodevaultservic:35,non:[16,49],notari:[21,35,42,43,54],notaris:54,notaryservic:35,note:[14,40],notion:43,nozerosizedoutput:3,object:38,obligat:6,observabl:4,off:30,opene:[15,51],oracl:[16,36],orient:49,other:[3,16],outdat:16,output:47,overview:[20,23],own:45,pai:36,paper:[6,49,50],parti:[12,22,49],partial:47,particular:49,per:36,permiss:37,persist:[10,35,38],persistentkeymanagementservic:35,persistentnetworkmapservic:35,persistentuniquenessprovid:35,plai:36,pleas:16,plugin:[9,10,16,36],portfolio:43,pre:1,present:16,process:41,progress:12,project:[16,51],properti:5,protocol:4,provid:[36,51],publish:39,put:49,queri:36,queue:31,raft:43,raftuniquenessprovid:35,raftvalidatingnotaryservic:35,rate:[6,7,33],refer:[16,22],regist:[4,48],relat:[16,35,38],releas:[16,40,41,51],represent:23,request:37,requir:[2,15,49],requisit:1,rpc:[4,48,51],run:[16,29,34,37,42,43,51],safeti:4,schedul:[11,35],schema:38,sdk:16,secur:[4,27,31,44,48],seller:12,server:35,servic:[10,31,35,36,42,51,54],set:[15,45],setup:39,sign:[36,37],signatur:22,signedtransact:47,simm:[1,43],simpl:50,simplenotaryservic:35,simul:32,singl:53,smart:49,snapshot:51,softwar:15,sourc:[15,16],space:5,start:[10,12,45,49,51],state:[10,22,23,25,49],statemachinemanag:35,step:[1,15,41,43],storag:35,storageserviceimpl:35,structur:[3,51],style:5,sub:[12,36],summari:50,support:22,suspend:12,swap:[6,7],task:0,tear:30,technic:7,templat:[10,51],test:[13,29,49,52,53],them:50,theori:12,thing:49,thread:[4,5],time:49,timestamp:21,track:12,trade:12,trader:43,transact:[22,23,30,36,47,49,53,54],transmit:49,tree:30,troubleshoot:16,tune:33,tutori:48,two:[12,36],type:[3,22,31],unabl:16,uniqueidentifi:22,unix:0,unresolv:16,upload:33,usag:[30,33],used:0,user:1,using:[10,36,46,49,51,54],util:37,valid:[21,23],validatingnotaryservic:35,valuat:1,vari:36,vault:[28,35],verif:22,verifi:49,version:[4,12],via:[0,36,51],view:[1,10],visibl:47,warn:5,web:[35,51],welcom:18,what:[19,32,43,45,50],where:49,why:50,window:0,wire:4,wiretransact:47,within:35,work:[1,50,51],write:[12,13,29,36,49,50,53],xterm:16,your:[10,12,33,45,48,49,51]}}) \ No newline at end of file diff --git a/docs/build/html/secure-coding-guidelines.html b/docs/build/html/secure-coding-guidelines.html index 696532f386..91f2422907 100644 --- a/docs/build/html/secure-coding-guidelines.html +++ b/docs/build/html/secure-coding-guidelines.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/setting-up-a-corda-network.html b/docs/build/html/setting-up-a-corda-network.html index 9432a768b6..b01c95f5c7 100644 --- a/docs/build/html/setting-up-a-corda-network.html +++ b/docs/build/html/setting-up-a-corda-network.html @@ -34,9 +34,6 @@ - - @@ -287,13 +284,20 @@ devMode : true

        The most important fields regarding network configuration are:

        -
          -
        • artemisAddress: This specifies a host and port. Note that the address bound will NOT be my-corda-node, +
            +
          • artemisAddress: This specifies a host and port. Note that the address bound will NOT be my-corda-node, but rather :: (all addresses on all interfaces). The hostname specified is the hostname that must be externally -resolvable by other nodes in the network. In the above configuration this is the resolvable name of a machine in a vpn.

          • -
          • webAddress: The address the webserver should bind. Note that the port should be distinct from that of artemisAddress.
          • -
          • networkMapService: Details of the node running the network map service. If it’s this node that’s running the service -then this field must not be specified.
          • +resolvable by other nodes in the network. In the above configuration this is the resolvable name of a machine in a vpn.

            + +
          • +
            webAddress: The address the webserver should bind. Note that the port should be distinct from that of artemisAddress
            +

            if they are on the same machine.

            +
            +
            +
          • +
          • networkMapService: Details of the node running the network map service. If it’s this node that’s running the service +then this field must not be specified.

            +
        diff --git a/docs/build/html/tutorial-attachments.html b/docs/build/html/tutorial-attachments.html index 46d2c06c6f..c47bf1ebf2 100644 --- a/docs/build/html/tutorial-attachments.html +++ b/docs/build/html/tutorial-attachments.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/tutorial-building-transactions.html b/docs/build/html/tutorial-building-transactions.html index 91e6b09fe4..746383fc33 100644 --- a/docs/build/html/tutorial-building-transactions.html +++ b/docs/build/html/tutorial-building-transactions.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/tutorial-clientrpc-api.html b/docs/build/html/tutorial-clientrpc-api.html index 75f314b21e..6279e1578a 100644 --- a/docs/build/html/tutorial-clientrpc-api.html +++ b/docs/build/html/tutorial-clientrpc-api.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/tutorial-contract-clauses.html b/docs/build/html/tutorial-contract-clauses.html index 9fd893b4a9..698fdb1158 100644 --- a/docs/build/html/tutorial-contract-clauses.html +++ b/docs/build/html/tutorial-contract-clauses.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/tutorial-contract.html b/docs/build/html/tutorial-contract.html index 0e7c36970f..fd6046ba36 100644 --- a/docs/build/html/tutorial-contract.html +++ b/docs/build/html/tutorial-contract.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/tutorial-cordapp.html b/docs/build/html/tutorial-cordapp.html index fcb6309e26..3cd92501b4 100644 --- a/docs/build/html/tutorial-cordapp.html +++ b/docs/build/html/tutorial-cordapp.html @@ -34,9 +34,6 @@ - - @@ -703,7 +700,7 @@ section, above. Change directories to the bin folder:

        The h2 web console should start up in a web browser tab. To connect we first need to obtain a JDBC connection string. Each node outputs its connection string in the terminal window as it starts up. In a terminal window where a node is running, look for the following string:

        -

        Database connection URL is              : jdbc:h2:tcp://10.18.0.150:56736/node

        +

        Database connection URL is              : jdbc:h2:tcp://10.18.0.150:56736/node

        you can use the string on the right to connect to the h2 database: just paste it in to the JDBC URL field and click Connect. You will be presented with a web application that enumerates all the available tables and provides an interface for you to query them using SQL.

        diff --git a/docs/build/html/tutorial-integration-testing.html b/docs/build/html/tutorial-integration-testing.html index 84af20ff8f..ef6045509e 100644 --- a/docs/build/html/tutorial-integration-testing.html +++ b/docs/build/html/tutorial-integration-testing.html @@ -34,9 +34,6 @@ - - @@ -326,7 +323,7 @@ receiving 1,2,...10 dollars from Alice in some unspecified order.

        amount = i.DOLLARS.issuedBy(alice.nodeInfo.legalIdentity.ref(issueRef)), recipient = alice.nodeInfo.legalIdentity )) - assert(flowHandle.returnValue.toBlocking().first() is CashFlowResult.Success) + flowHandle.returnValue.getOrThrow() } aliceVaultUpdates.expectEvents { diff --git a/docs/build/html/tutorial-test-dsl.html b/docs/build/html/tutorial-test-dsl.html index 68da1ae5e1..71c124f20d 100644 --- a/docs/build/html/tutorial-test-dsl.html +++ b/docs/build/html/tutorial-test-dsl.html @@ -34,9 +34,6 @@ - - diff --git a/docs/build/html/using-a-notary.html b/docs/build/html/using-a-notary.html index e475d179b1..43a5ea9198 100644 --- a/docs/build/html/using-a-notary.html +++ b/docs/build/html/using-a-notary.html @@ -34,9 +34,6 @@ - - diff --git a/docs/source/index.rst b/docs/source/index.rst index e198c2450b..fdcb8a43a2 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -2,33 +2,33 @@ Welcome to the Corda documentation! =================================== .. warning:: This build of the docs is from the "|version|" branch, not a milestone release. It may not reflect the - current state of the code. `Read the docs for milestone release M7 `_. + current state of the code. `Read the docs for milestone release M8 `_. -`Corda `_ is an open-source distributed ledger platform. The latest *milestone* (i.e. stable) -release is M7. The codebase is on `GitHub `_, and our community can be found on +`Corda `_ is an open-source distributed ledger platform. The latest *milestone* (i.e. stable) +release is M8. The codebase is on `GitHub `_, and our community can be found on `Slack `_ and in our `forum `_. -If you're new to Corda, you should start by learning about its motivating vision and architecture. A good introduction -is the `Introduction to Corda webinar `_ and the `Introductory white paper`_. As -they become more familiar with Corda, readers with a technical background will also want to dive into the `Technical white paper`_, +If you're new to Corda, you should start by learning about its motivating vision and architecture. A good introduction +is the `Introduction to Corda webinar `_ and the `Introductory white paper`_. As +they become more familiar with Corda, readers with a technical background will also want to dive into the `Technical white paper`_, which describes the platform's envisioned end-state. -Corda is designed so that developers can easily extend its functionality by writing CorDapps -(**Cor**\ da **D**\ istributed **App**\ lication\ **s**\ ). Some example CorDapps are available in the Corda repo's -`samples `_ directory. To run these yourself, make -sure you follow the instructions in :doc:`getting-set-up`, then go to +Corda is designed so that developers can easily extend its functionality by writing CorDapps +(**Cor**\ da **D**\ istributed **App**\ lication\ **s**\ ). Some example CorDapps are available in the Corda repo's +`samples `_ directory. To run these yourself, make +sure you follow the instructions in :doc:`getting-set-up`, then go to :doc:`running-the-demos`. -If, after running the demos, you're interested in writing your own CorDapps, a template CorDapp is available on -`Github `_. To get it running, follow the instructions in the -`readme `_, or watch the +If, after running the demos, you're interested in writing your own CorDapps, a template CorDapp is available on +`Github `_. To get it running, follow the instructions in the +`readme `_, or watch the `Corda Developers Tutorial `_. -From there, you'll be in a position to start extending the example CorDapp yourself (e.g. by writing new states, contracts, -and/or flows). For this, you'll want to refer to this docsite, and to the `tutorials `_ +From there, you'll be in a position to start extending the example CorDapp yourself (e.g. by writing new states, contracts, +and/or flows). For this, you'll want to refer to this docsite, and to the `tutorials `_ in particular. If you get stuck, get in touch on `Slack `_ or the `forum `_. -Once you're familiar with Corda and CorDapp development, we'd encourage you to get involved in the development of the +Once you're familiar with Corda and CorDapp development, we'd encourage you to get involved in the development of the platform itself. Find out more about `contributing to Corda `_. .. _`Introductory white paper`: _static/corda-introductory-whitepaper.pdf From c3a9d4199818c423ebf932b520310f2c9d00516e Mon Sep 17 00:00:00 2001 From: Andrius Dagys Date: Tue, 7 Feb 2017 16:04:12 +0000 Subject: [PATCH 20/33] Update version to 0.9-SNAPSHOT --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 47af28a831..78c6cd1a9d 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ buildscript { file("publish.properties").withInputStream { props.load(it) } // Our version: bump this on release. - ext.corda_version = "0.8" + ext.corda_version = "0.9-SNAPSHOT" ext.gradle_plugins_version = props.getProperty("gradlePluginsVersion") // Dependency versions. Can run 'gradle dependencyUpdates' to find new versions of things. From b3e26b2022aa38ac52645045c2198b9f9a01a231 Mon Sep 17 00:00:00 2001 From: Joel Dudley Date: Wed, 8 Feb 2017 10:34:54 +0000 Subject: [PATCH 21/33] Changes docs to point to cordapp-tutorial instead of cordapp-template as appropriate. --- docs/source/creating-a-cordapp.rst | 2 +- docs/source/getting-set-up-fault-finding.rst | 2 +- docs/source/getting-set-up.rst | 10 +- docs/source/index.rst | 6 +- docs/source/tutorial-cordapp.rst | 227 ++++++++++--------- 5 files changed, 125 insertions(+), 122 deletions(-) diff --git a/docs/source/creating-a-cordapp.rst b/docs/source/creating-a-cordapp.rst index a95eef423a..f66aa317a3 100644 --- a/docs/source/creating-a-cordapp.rst +++ b/docs/source/creating-a-cordapp.rst @@ -201,7 +201,7 @@ deployment. To use this gradle plugin you must add a new task that is of the type ``net.corda.plugins.Cordform`` to your build.gradle and then configure the nodes you wish to deploy with the Node and nodes configuration DSL. -This DSL is specified in the `JavaDoc `_. An example of this is in the template-cordapp and below +This DSL is specified in the `JavaDoc `_. An example of this is in the CorDapp template and below is a three node example; .. code-block:: text diff --git a/docs/source/getting-set-up-fault-finding.rst b/docs/source/getting-set-up-fault-finding.rst index af1992dab3..fac286c5e1 100644 --- a/docs/source/getting-set-up-fault-finding.rst +++ b/docs/source/getting-set-up-fault-finding.rst @@ -4,7 +4,7 @@ Troubleshooting Milestone releases ------------------ -When you clone the corda or cordapp-template repos, they will default to the master branch. The master branch is being continuously developed upon, and its features may not align with the state of Corda as described in the docs. Additionally, the master branch of the CorDapp Template may break in response to changes in the main corda repo. +When you clone the corda or cordapp-template repos, they will default to the master branch. The master branch is being continuously developed upon, and its features may not align with the state of Corda as described in the docs. Additionally, the master branch of the CorDapp template may break in response to changes in the main corda repo. When developing on Corda, you should always check out the latest milestone (i.e. stable) branch instead. For example, to check out milestone 7, you'd run ``git checkout release-M7``. diff --git a/docs/source/getting-set-up.rst b/docs/source/getting-set-up.rst index 85a178a566..8dc95e51cb 100644 --- a/docs/source/getting-set-up.rst +++ b/docs/source/getting-set-up.rst @@ -69,13 +69,17 @@ The Corda platform source code is available here: https://github.com/corda/corda.git -and a basic CorDapp that you can use as the basis for your own CorDapps is available here: +A CorDapp template that you can use as the basis for your own CorDapps is available here: https://github.com/corda/cordapp-template.git -You can clone both of these repos to your local machine by running the command ``git clone [repo URL]``. +And a simple example CorDapp for you to explore basic concepts is available here: -By default, both repos will be on the ``master`` branch. However, this is an unstable development branch. You should check + https://github.com/corda/cordapp-tutorial.git + +You can clone these repos to your local machine by running the command ``git clone [repo URL]``. + +By default, these repos will be on the ``master`` branch. However, this is an unstable development branch. You should check out the latest milestone release (currently Milestone 7) instead by running ``git checkout release-M7``. Opening Corda/CorDapps in IDEA diff --git a/docs/source/index.rst b/docs/source/index.rst index fdcb8a43a2..ae26b709a4 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -19,10 +19,8 @@ Corda is designed so that developers can easily extend its functionality by writ sure you follow the instructions in :doc:`getting-set-up`, then go to :doc:`running-the-demos`. -If, after running the demos, you're interested in writing your own CorDapps, a template CorDapp is available on -`Github `_. To get it running, follow the instructions in the -`readme `_, or watch the -`Corda Developers Tutorial `_. +If, after running the demos, you're interested in writing your own CorDapps, you can use the +`CorDapp template `_ as a base. A simple example CorDapp built upon the template is available `here `_, and a video primer on basic CorDapp structure is available `here `_. From there, you'll be in a position to start extending the example CorDapp yourself (e.g. by writing new states, contracts, and/or flows). For this, you'll want to refer to this docsite, and to the `tutorials `_ diff --git a/docs/source/tutorial-cordapp.rst b/docs/source/tutorial-cordapp.rst index 3384a9a8b4..35d0bac753 100644 --- a/docs/source/tutorial-cordapp.rst +++ b/docs/source/tutorial-cordapp.rst @@ -4,14 +4,18 @@ -The CorDapp template -==================== +The example CorDapp +=================== -This guide covers how to get started with the `cordapp-template`. Please note there are two Corda repositories: +.. note:: The example CorDapp was previously hosted in the `cordapp-template `_ repository. It has now been + moved into a new `cordapp-tutorial `_ repository. Going forward, the cordapp-template repo will contain an + actual CorDapp template, which should be used as the basis for your CorDapps going forward. -* ``corda`` which contains the core platform code and sample CorDapps. -* ``cordapp-template`` which contains a template CorDapp you can use to bootstrap your own CorDapps. It is the subject - of this tutorial and should help you understand the basics of building a CorDapp. +This guide covers how to get started with the example CorDapp. Please note there are several Corda repositories: + +* `corda `_ which contains the core platform code and sample CorDapps. +* `cordapp-tutorial `_ which contains an example CorDapp you can use to bootstrap your own CorDapps. It is the subject of this tutorial and should help you understand the basics of building a CorDapp. +* `cordapp-template `_ which contains a bare-bones template on which to build your own CorDapps. We recommend you read the non-technical white paper and technical white paper before you get started with Corda: @@ -25,30 +29,29 @@ We recommend you read the non-technical white paper and technical white paper be Background ---------- -The Example CorDapp implements a basic scenario where a buyer wishes to submit purchase orders to a seller. The scenario +The Example CorDapp implements a basic scenario where one party wishes to send an IOU to another party. The scenario defines four nodes: -* **Controller** which hosts the network map service and validating notary service. -* **NodeA** who is the buyer. -* **NodeB** who is the seller. -* **NodeC** an unrelated third party. +* **Controller**, which hosts the network map service and validating notary service +* **NodeA** +* **NodeB** +* **NodeC** -NodeA can generate purchase orders for lists and quantities of items and associated metadata such as delivery address -and delivery date. The flows used to facilitate the agreement process always results in an agreement with the seller as -long as the purchase order meets the contract constraints which are defined in ``PurchaseOrderContract.kt``. +The nodes can generate IOUs and send them to other nodes. The flows used to facilitate the agreement process always results in +an agreement with the recipient as long as the IOU meets the contract constraints which are defined in ``IOUContract.kt``. -All agreed purchase orders between NodeA and NodeB become "shared facts" between NodeA and NodeB. But note that NodeC -won't see any of these transactions or have copies of any of the resulting ``PurchaseOrderState`` objects. This is +All agreed IOUs between NodeA and NodeB become "shared facts" between NodeA and NodeB. But note that NodeC +won't see any of these transactions or have copies of any of the resulting ``IOUState`` objects. This is because data is only propagated on a need-to-know basis. Getting started --------------- -There are two ways to get started with the CorDapp template. You can either work from a milestone release of Corda or a +There are two ways to get started with the example CorDapp. You can either work from a milestone release of Corda or a SNAPSHOT release of Corda. **Using a monthly Corda milestone release.** If you wish to develop your CorDapp using the most recent milestone release -then you can get started simply by cloning the ``cordapp-template`` repository. Gradle will grab all the required dependencies +then you can get started simply by cloning the ``cordapp-tutorial`` repository. Gradle will grab all the required dependencies for you from our `public Maven repository `_. **Using a Corda SNAPSHOT build.** Alternatively, if you wish to work from the master branch of the Corda repo which contains @@ -69,21 +72,21 @@ The process for developing your CorDapp from a milestone release is the most sim approach. We publish all our milestone releases to a public Maven repository on a monthly basis. As such, Gradle will automatically -grab the appropriately versioned (specified in the ``cordapp-template``'s ``build.gradle`` file) dependencies for you from Maven. -All you have to do is check out the release tag of the template version you wish to use. +grab the appropriately versioned (specified in the ``cordapp-tutorial``'s ``build.gradle`` file) dependencies for you from Maven. +All you have to do is check out the release tag of the tutorial version you wish to use. -By default, the ``master`` branch of the ``cordapp-template`` points to a SNAPSHOT release of Corda, this is because it is +By default, the ``master`` branch of the ``cordapp-tutorial`` points to a SNAPSHOT release of Corda, this is because it is being constantly updated to reflect the changes in the master branch of the `corda` repository. .. note:: If you wish to use a SNAPSHOT release then follow the instructions below: `Using a SNAPSHOT release`_. -To clone the ``cordapp-template`` repository, use the following command: +To clone the ``cordapp-tutorial`` repository, use the following command: -``git clone https://github.com/corda/cordapp-template`` +``git clone https://github.com/corda/cordapp-tutorial`` Now change directories to the freshly cloned repo: -``cd cordapp-template`` +``cd cordapp-tutorial`` To enumerate all the tagged releases. Use: @@ -95,7 +98,7 @@ To checkout a specific tag, use: where ``local_branch_name`` is a name of your choice and ``tag_name`` is the name of the tag you wish to checkout. -Gradle will handle all the dependencies for you. Now you are now ready to get started `building the CorDapp Template`_. +Gradle will handle all the dependencies for you. Now you are now ready to get started `building the example CorDapp`_. Using a SNAPSHOT release ~~~~~~~~~~~~~~~~~~~~~~~~ @@ -145,7 +148,7 @@ where ``local_branch_name`` is a name of your choice and ``remote_branch_name`` to checkout. .. note:: When working with ``master`` you will have access to the most up-to-date feature set. However you will be - potentially sacrificing stability. We will endeavour to keep the ``master`` branch of the ``cordapp-template`` repo in sync + potentially sacrificing stability. We will endeavour to keep the ``master`` branch of the ``cordapp-tutorial`` repo in sync with the ``master`` branch of ``corda`` repo. A milestone tagged release would be more stable for CorDapp development. The next step is to publish the Corda JARs to your local Maven repository. By default the Maven local repository can be @@ -198,13 +201,13 @@ and to check out an open feature branch, use: Once you have published the Corda JARs to your local Maven repository, you are ready to get started building your CorDapp using the latest Corda features. -Opening the CorDapp Template with IntelliJ -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Opening the example CorDapp with IntelliJ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ For those familiar with IntelliJ, you can skip this section. As noted in the getting started guide, we recommend using the IntelliJ IDE. Assuming you have already downloaded and -installed IntelliJ, lets now open the CorDapp Template with IntelliJ. +installed IntelliJ, lets now open the example CorDapp with IntelliJ. **For those completely new to IntelliJ** @@ -213,7 +216,7 @@ Firstly, load up IntelliJ. A dialogue will appear: .. image:: resources/intellij-welcome.png :width: 400 -Click open, then navigate to the folder where you cloned the ``cordapp-template`` and click OK. +Click open, then navigate to the folder where you cloned the ``cordapp-tutorial`` and click OK. Next, IntelliJ will show a bunch of pop-up windows. One of which requires our attention: @@ -227,14 +230,14 @@ dialogue, simply close and re-open IntelliJ again to see it again. **Alternative approach** Alternatively, one can instruct IntelliJ to create a new project through cloning a repository. From the IntelliJ welcome -dialogue (shown above), opt to 'check out from version control', then select git and enter the git URL for the CorDapp template -(https://github.com/corda/cordapp-template). You'll then need to import the Gradle project when prompted, as explained above. +dialogue (shown above), opt to 'check out from version control', then select git and enter the git URL for the example CorDapp +(https://github.com/corda/cordapp-tutorial). You'll then need to import the Gradle project when prompted, as explained above. **If you already have IntelliJ open** -From the ``File`` menu, navigate to ``Open ...`` and then navigate to the directory where you cloned the ``cordapp-template``. +From the ``File`` menu, navigate to ``Open ...`` and then navigate to the directory where you cloned the ``cordapp-tutorial``. Alternatively, if you wish to clone from github directly then navigate to ``File > New > Project from existing sources ...`` -and enter the URL to the CorDapp Template (specified above). When instructed, be sure to import the Gradle project when prompted. +and enter the URL to the example CorDapp (specified above). When instructed, be sure to import the Gradle project when prompted. **The Gradle plugin** @@ -242,30 +245,30 @@ IntelliJ can be used to run Gradle tasks through the Gradle plugin which can be All the Gradle projects are listed in the window on the right hand side of the IDE. Click on a project, then 'tasks' to see all available Gradle tasks. -* For the CorDapp Template repo there will only be one Gradle project listed. +* For the example CorDapp repo there will only be one Gradle project listed. * For the Corda repo there will be many project listed, the root project ``corda`` and associated sub-projects: ``core``, ``finance``, ``node``, etc. -.. note:: It's worth noting that when you change branch in the CorDapp template, the ``corda_version`` will change to +.. note:: It's worth noting that when you change branch in the example CorDapp, the ``corda_version`` will change to reflect the version of the branch you are working from. To execute a task, double click it. The output will be shown in a console window. -Building the CorDapp template ------------------------------ +Building the example CorDapp +---------------------------- **From the command line** -Firstly, return to your terminal window used above and make sure you are in the ``cordapp-template`` directory. +Firstly, return to your terminal window used above and make sure you are in the ``cordapp-tutorial`` directory. -To build the CorDapp template use the following command: +To build the example CorDapp use the following command: Unix/Mac OSX: ``./gradlew deployNodes`` Windows: ``gradlew.bat deployNodes`` -This build process will build the example CorDapp defined in the CorDapp template source. CorDapps can be written in -any language targeting the JVM. In our case, we've provided the template source in both Kotlin (``/kotlin/src``) and +This build process will build the example CorDapp defined in the example CorDapp source. CorDapps can be written in +any language targeting the JVM. In our case, we've provided the example source in both Kotlin (``/kotlin/src``) and Java (``/java/src``) Since both sets of source files are functionally identical, we will refer to the Kotlin build throughout the documentation. @@ -276,7 +279,7 @@ The ``deployNodes`` Gradle task allows you easily create a formation of Corda no we are creating ``four`` nodes. After the building process has finished to see the newly built nodes, you can navigate to the ``kotlin/build/nodes`` folder -located in the ``cordapp-template`` root directory. You can ignore the other folders in ``/build`` for now. The ``nodes`` +located in the ``cordapp-tutorial`` root directory. You can ignore the other folders in ``/build`` for now. The ``nodes`` folder has the following structure: .. sourcecode:: none @@ -317,10 +320,10 @@ Open the Gradle window by selecting ``View > Tool windows > Gradle`` from the ma open on the right hand side of the IDE. Expand `tasks` and then expand `other`. Double click on `deployNodes`. Gradle will start the build process and output progress to a console window in the IDE. -Running the CorDapp template ----------------------------- +Running the example CorDapp +--------------------------- -Running the CorDapp template from the command line +Running the example CorDapp from the command line ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ To run the sample CorDapp navigate to the ``kotlin/build/nodes`` folder and execute the ``runnodes`` shell script with: @@ -342,7 +345,7 @@ message and some pertinent config information, see below: --- DEVELOPER SNAPSHOT ------------------------------------------------------------ - Logs can be found in : /Users/rogerwillis/Documents/Corda/cordapp-template/kotlin/build/nodes/nodea/logs + Logs can be found in : /Users/rogerwillis/Documents/Corda/cordapp-tutorial/kotlin/build/nodes/nodea/logs Database connection URL is : jdbc:h2:tcp://10.18.0.196:50661/node Node listening on address : localhost:10004 Loaded plugins : com.example.plugin.ExamplePlugin @@ -416,14 +419,14 @@ To stop the nodes, press the red "stop" button at the top right-hand side of the The node driver can also be used to as a basis for `debugging your CorDapp`_ -Interacting with the CorDapp template -------------------------------------- +Interacting with the example CorDapp +------------------------------------ Via HTTP ~~~~~~~~ The CorDapp defines a few HTTP API end-points and also serves some static web content. The end-points allow you to -list purchase orders and add purchase orders. +list IOUs and add IOUs. The nodes can be found using the following port numbers, defined in build.gradle and the respective node.conf file for each node found in `kotlin/build/nodes/NodeX`` etc: @@ -440,32 +443,32 @@ served are as follows: * ``/api/example/me`` * ``/api/example/peers`` -* ``/api/example/purchase-orders`` -* ``/api/example/{COUNTERPARTY}/create-purchase-order`` +* ``/api/example/ious`` +* ``/api/example/{COUNTERPARTY}/create-iou`` The static web content is served from ``/web/example``. -A purchase order can be created via accessing the ``api/example/create-purchase-order`` end-point directly or through the +An IOU can be created via accessing the ``api/example/create-iou`` end-point directly or through the the web form hosted at ``/web/example``. .. warning:: **The content in ``web/example`` is only available for demonstration purposes and does not implement any anti-XSS, anti-XSRF or any other security techniques. Do not copy such code directly into products meant for production use.** -**Submitting a purchase order via HTTP API:** +**Submitting an IOU via HTTP API:** -To create a purchase order from NodeA to NodeB, use: +To create an IOU from NodeA to NodeB, use: .. sourcecode:: bash - echo '{"orderNumber": "1","deliveryDate": "2018-09-15","deliveryAddress": {"city": "London","country": "UK"},"items" : [{"name": "widget","amount": "3"},{"name": "thing","amount": "4"}]}' | cURL -T - -H 'Content-Type: application/json' http://localhost:10005/api/example/NodeB/create-purchase-order + echo '{"value": "1"}' | cURL -T - -H 'Content-Type: application/json' http://localhost:10005/api/example/NodeB/create-iou Note the port number ``10005`` (NodeA) and NodeB referenced in the API end-point path. This command instructs NodeA to -create and send a purchase order to NodeB. Upon verification and completion of the process, both nodes (but not NodeC) will -have a signed, notarised copy of the purchase order. +create and send an IOU to NodeB. Upon verification and completion of the process, both nodes (but not NodeC) will +have a signed, notarised copy of the IOU. -**Submitting a purchase order via web/example:** +**Submitting an IOU via web/example:** -Navigate to the "create purchase order" button at the top left of the page, enter in the purchase order details e.g. +Navigate to the "create IOU" button at the top left of the page, and enter the IOU details - e.g. .. sourcecode:: none @@ -478,20 +481,22 @@ Navigate to the "create purchase order" button at the top left of the page, ente Item amount: 5 and click submit (note you can add additional item types and amounts). Upon pressing submit, the modal dialogue should close. -To check what validation is performed over the purchase order data, have a look at the ``PurchaseOrderContract.Place`` class in -``PurchaseOrderContract.kt`` which defines the following contract constraints (among others not included here): +To check what validation is performed over the IOU data, have a look at the ``IOUContract.Create`` class in +``IOUContract.kt`` which defines the following contract constraints (among others not included here): .. sourcecode:: kotlin - // Purchase order specific constraints. - "We only deliver to the UK." by (out.po.deliveryAddress.country == "UK") - "You must order at least one type of item." by (out.po.items.size > 0) - "You cannot order zero or negative amounts of an item." by (out.po.items.map(Item::amount).all { it > 0 }) - "You can only order up to 10 items at a time." by (out.po.items.map(Item::amount).sum() <= 10) - val time = tx.timestamp?.midpoint - "The delivery date must be in the future." by (out.po.deliveryDate.toInstant() > time) + // Generic constraints around the IOU transaction. + "No inputs should be consumed when issuing an IOU." by (tx.inputs.isEmpty()) + "Only one output state should be created." by (tx.outputs.size == 1) + val out = tx.outputs.single() as IOUState + "The sender and the recipient cannot be the same entity." by (out.sender != out.recipient) + "All of the participants must be signers." by (command.signers.containsAll(out.participants)) -**Once a purchase order has been submitted:** + // IOU-specific constraints. + "The IOU's value must be non-negative." by (out.iou.value > 0) + +**Once an IOU has been submitted:** Inspect the terminal windows for the nodes. Assume all of the above contract constraints are met, you should see some activity in the terminal windows for NodeA and NodeB (note: the green ticks are only visible on unix/mac): @@ -500,29 +505,25 @@ activity in the terminal windows for NodeA and NodeB (note: the green ticks are .. sourcecode:: none - ✅ Constructing proposed purchase order. - ✅ Sending purchase order to seller for review. - ✅ Received partially signed transaction from seller. - ✅ Verifying signatures and contract constraints. - ✅ Signing transaction with our private key. - ✅ Obtaining notary signature. - ✅ Requesting signature by Notary service - ✅ Validating response from Notary service - ✅ Recording transaction in vault. - ✅ Sending fully signed transaction to seller. - ✅ Done +✅ Generating transaction based on new IOU. +✅ Verifying contract constraints. +✅ Signing transaction with our private key. +✅ Sending proposed transaction to recipient for review. +✅ Done *NodeB:* .. sourcecode:: none - ✅ Receiving proposed purchase order from buyer. - ✅ Generating transaction based on proposed purchase order. - ✅ Signing proposed transaction with our private key. - ✅ Sending partially signed transaction to buyer and wait for a response. - ✅ Verifying signatures and contract constraints. - ✅ Recording transaction in vault. - ✅ Done +✅ Receiving proposed transaction from sender. +✅ Verifying signatures and contract constraints. +✅ Signing proposed transaction with our private key. +✅ Obtaining notary signature and recording transaction. + ✅ Requesting signature by notary service + ✅ Requesting signature by Notary service + ✅ Validating response from Notary service + ✅ Broadcasting transaction to participants +✅ Done *NodeC:* @@ -530,12 +531,12 @@ activity in the terminal windows for NodeA and NodeB (note: the green ticks are You shouldn't see any activity. -Next you can view the newly created purchase order by accessing the vault of NodeA or NodeB: +Next you can view the newly created IOU by accessing the vault of NodeA or NodeB: *Via the HTTP API:* -For NodeA. navigate to http://localhost:10005/api/example/purchase-orders. For NodeB, -navigate to http://localhost:10007/api/example/purchase-orders. +For NodeA. navigate to http://localhost:10005/api/example/ious. For NodeB, +navigate to http://localhost:10007/api/example/ious. *Via web/example:* @@ -575,9 +576,9 @@ Using the Example RPC client ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The ``/src/main/kotlin/com/example/client/ExampleClientRPC.kt`` file is a simple utility which uses the client RPC library -to connect to a node and log the 'placed' purchase orders. It will log any existing purchase orders and listen for any future -purchase orders. If you haven't placed any purchase orders when you connect to one of the Nodes via RPC then the client will log -and future purchase orders which are agreed. +to connect to a node and log the created IOUs. It will log any existing IOUs and listen for any future +IOUs. If you haven't created any IOUs when you connect to one of the Nodes via RPC then the client will log +and future IOUs which are agreed. To build the client use the following gradle task: @@ -600,17 +601,17 @@ application see: * :doc:`Client RPC documentation ` * :doc:`Client RPC tutorial ` -Extending the CorDapp template ------------------------------- +Extending the example CorDapp +----------------------------- -CorDapp-template project structure +cordapp-tutorial project structure ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The CorDapp template has the following directory structure: +The example CorDapp has the following directory structure: .. sourcecode:: none - . cordapp-template + . cordapp-tutorial ├── README.md ├── LICENSE ├── build.gradle @@ -624,7 +625,7 @@ The CorDapp template has the following directory structure: ├── lib │   ├── ... ├── settings.gradle - ├── kotlin + ├── kotlin-source │ └── src │ ├── main │    │   ├── kotlin @@ -636,10 +637,10 @@ The CorDapp template has the following directory structure: │    │   │   ├── client │    │   │   │   └── ExampleClientRPC.kt │    │   │   ├── contract - │    │   │   │   ├── PurchaseOrderContract.kt - │    │   │   │   └── PurchaseOrderState.kt + │    │   │   │   ├── IOUContract.kt + │    │   │   │   └── IOUState.kt │    │   │   ├── model - │    │   │   │   └── PurchaseOrder.kt + │    │   │   │   └── IOU.kt │    │   │   ├── plugin │    │   │   │   └── ExamplePlugin.kt │    │   │   └── flow @@ -666,7 +667,7 @@ The CorDapp template has the following directory structure: │ │   └── example │ │   └── ExampleTest.kt │    └── resources - └── java + └── java-source └── src ├── main    │   ├── java @@ -678,10 +679,10 @@ The CorDapp template has the following directory structure:    │   │   ├── client    │   │   │   └── ExampleClientRPC.java    │   │   ├── contract -    │   │   │   ├── PurchaseOrderContract.java -    │   │   │   └── PurchaseOrderState.java +    │   │   │   ├── IOUContract.java +    │   │   │   └── IOUState.java    │   │   ├── model -    │   │   │   └── PurchaseOrder.java +    │   │   │   └── IOU.java    │   │   ├── plugin    │   │   │   └── ExamplePlugin.java    │   │   └── flow @@ -740,8 +741,8 @@ things. If you are working from a Corda SNAPSHOT release which you have publish to Maven local then ensure that ``corda_version`` is the same as the version of the Corda core modules you published to Maven local. If not then change the -``kotlin_version`` property. Also, if you are working from a previous milestone release, then be sure to ``git checkout`` -the correct version of the CorDapp template from the ``cordapp-template`` repo. +``kotlin_version`` property. Also, if you are working from a previous cordapp-tutorial milestone release, then be sure to ``git checkout`` +the correct version of the example CorDapp from the ``cordapp-tutorial`` repo. .. sourcecode:: groovy @@ -824,7 +825,7 @@ like to deploy for testing. See further details below: You can add any number of nodes, with any number of services / CorDapps by editing the templates in ``deployNodes``. The only requirement is that you must specify a node to run as the network map service and one as the notary service. -.. note:: CorDapps in the current cordapp-template project are automatically registered with all nodes defined in +.. note:: CorDapps in the current cordapp-tutorial project are automatically registered with all nodes defined in ``deployNodes``, although we expect this to change in the near future. .. warning:: Make sure that there are no port clashes! @@ -834,7 +835,7 @@ When you are finished editing your *CordFormation* the changes will be reflected Service Provider Configuration File ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -If you are building a CorDapp from scratch or adding a new CorDapp to the CorDapp-template project then you must provide +If you are building a CorDapp from scratch or adding a new CorDapp to the cordapp-tutorial project then you must provide a reference to your sub-class of ``CordaPluginRegistry`` in the provider-configuration file in located in the ``resources/META-INF/services`` directory. Re-Deploying Your Nodes Locally @@ -881,8 +882,8 @@ controller node is running and to its legal name (e.g. `networkMapService.addres `networkMapService.legalName=controller`) (please note that the controller will not have the `networkMapService` config) Each machine should now run its nodes using `runnodes` or `runnodes.bat` -files. Once they are up and running, the nodes should be able to place -purchase orders among themselves in the same way as when they were running on +files. Once they are up and running, the nodes should be able to create +IOUs among themselves in the same way as when they were running on the same machine. Debugging your CorDapp From 950cfd62e4c28698ad6661a93c1e2aa3ce98132f Mon Sep 17 00:00:00 2001 From: Ross Nicoll Date: Wed, 8 Feb 2017 14:16:40 +0000 Subject: [PATCH 22/33] Split users for bank and big corp --- .../main/kotlin/net/corda/bank/BankOfCordaDriver.kt | 10 +++++++--- .../kotlin/net/corda/bank/api/BankOfCordaClientApi.kt | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/samples/bank-of-corda-demo/src/main/kotlin/net/corda/bank/BankOfCordaDriver.kt b/samples/bank-of-corda-demo/src/main/kotlin/net/corda/bank/BankOfCordaDriver.kt index cc98f123a0..1bfd3b874c 100644 --- a/samples/bank-of-corda-demo/src/main/kotlin/net/corda/bank/BankOfCordaDriver.kt +++ b/samples/bank-of-corda-demo/src/main/kotlin/net/corda/bank/BankOfCordaDriver.kt @@ -22,6 +22,9 @@ fun main(args: Array) { BankOfCordaDriver().main(args) } +val BANK_USERNAME = "bankUser" +val BIGCORP_USERNAME = "bigCorpUser" + private class BankOfCordaDriver { enum class Role { ISSUE_CASH_RPC, @@ -48,10 +51,11 @@ private class BankOfCordaDriver { val role = options.valueOf(roleArg)!! if (role == Role.ISSUER) { driver(dsl = { - val user = User("user1", "test", permissions = setOf(startFlowPermission(), startFlowPermission())) + val bankUser = User(BANK_USERNAME, "test", permissions = setOf(startFlowPermission(), startFlowPermission())) + val bigCorpUser = User(BIGCORP_USERNAME, "test", permissions = setOf(startFlowPermission())) startNode("Notary", setOf(ServiceInfo(SimpleNotaryService.type))) - val bankOfCorda = startNode("BankOfCorda", rpcUsers = listOf(user), advertisedServices = setOf(ServiceInfo(ServiceType.corda.getSubType("issuer.USD")))) - startNode("BigCorporation", rpcUsers = listOf(user)) + val bankOfCorda = startNode("BankOfCorda", rpcUsers = listOf(bankUser), advertisedServices = setOf(ServiceInfo(ServiceType.corda.getSubType("issuer.USD")))) + startNode("BigCorporation", rpcUsers = listOf(bigCorpUser)) startWebserver(bankOfCorda.get()) waitForAllNodesToFinish() }, isDebug = true) diff --git a/samples/bank-of-corda-demo/src/main/kotlin/net/corda/bank/api/BankOfCordaClientApi.kt b/samples/bank-of-corda-demo/src/main/kotlin/net/corda/bank/api/BankOfCordaClientApi.kt index 4069f988de..3baac0202f 100644 --- a/samples/bank-of-corda-demo/src/main/kotlin/net/corda/bank/api/BankOfCordaClientApi.kt +++ b/samples/bank-of-corda-demo/src/main/kotlin/net/corda/bank/api/BankOfCordaClientApi.kt @@ -32,7 +32,7 @@ class BankOfCordaClientApi(val hostAndPort: HostAndPort) { fun requestRPCIssue(params: IssueRequestParams): SignedTransaction { val client = CordaRPCClient(hostAndPort, configureTestSSL()) // TODO: privileged security controls required - client.start("user1","test") + client.start("user1", "test") val proxy = client.proxy() // Resolve parties via RPC From f9c4c6eba7aab6c59231ee5e43952c2bccb16c13 Mon Sep 17 00:00:00 2001 From: Joel Dudley Date: Wed, 8 Feb 2017 16:08:46 +0000 Subject: [PATCH 23/33] Rebuilds docs. --- docs/build/doctrees/CLI-vs-IDE.doctree | Bin 19688 -> 19692 bytes docs/build/doctrees/azure-vm.doctree | Bin 37900 -> 37909 bytes docs/build/doctrees/building-the-docs.doctree | Bin 10368 -> 10372 bytes docs/build/doctrees/clauses.doctree | Bin 53054 -> 53063 bytes docs/build/doctrees/clientrpc.doctree | Bin 28061 -> 28070 bytes docs/build/doctrees/codestyle.doctree | Bin 47442 -> 47451 bytes .../build/doctrees/contract-catalogue.doctree | Bin 20591 -> 20605 bytes docs/build/doctrees/contract-irs.doctree | Bin 27553 -> 27557 bytes .../doctrees/corda-configuration-file.doctree | Bin 46500 -> 46505 bytes docs/build/doctrees/corda-plugins.doctree | Bin 22428 -> 22437 bytes .../build/doctrees/creating-a-cordapp.doctree | Bin 39482 -> 39491 bytes docs/build/doctrees/environment.pickle | Bin 155306 -> 156112 bytes docs/build/doctrees/event-scheduling.doctree | Bin 30682 -> 30696 bytes .../doctrees/flow-state-machines.doctree | Bin 144251 -> 139011 bytes docs/build/doctrees/flow-testing.doctree | Bin 19783 -> 19794 bytes .../doctrees/further-notes-on-kotlin.doctree | Bin 6540 -> 6546 bytes .../getting-set-up-fault-finding.doctree | Bin 26578 -> 29044 bytes docs/build/doctrees/getting-set-up.doctree | Bin 29444 -> 30103 bytes docs/build/doctrees/glossary.doctree | Bin 31620 -> 31624 bytes docs/build/doctrees/index.doctree | Bin 25452 -> 24490 bytes docs/build/doctrees/inthebox.doctree | Bin 8920 -> 8929 bytes .../key-concepts-consensus-notaries.doctree | Bin 43182 -> 43191 bytes .../doctrees/key-concepts-core-types.doctree | Bin 44147 -> 44151 bytes .../doctrees/key-concepts-data-model.doctree | Bin 40066 -> 40075 bytes .../doctrees/key-concepts-ecosystem.doctree | Bin 15268 -> 15277 bytes .../key-concepts-financial-model.doctree | Bin 20313 -> 20322 bytes .../key-concepts-flow-framework.doctree | Bin 11597 -> 11606 bytes .../key-concepts-security-model.doctree | Bin 15773 -> 15782 bytes .../build/doctrees/key-concepts-vault.doctree | Bin 15575 -> 15584 bytes docs/build/doctrees/key-concepts.doctree | Bin 8934 -> 8943 bytes docs/build/doctrees/loadtesting.doctree | Bin 31670 -> 31687 bytes docs/build/doctrees/merkle-trees.doctree | Bin 22675 -> 30436 bytes docs/build/doctrees/messaging.doctree | Bin 35386 -> 35395 bytes docs/build/doctrees/network-simulator.doctree | Bin 16315 -> 16324 bytes .../doctrees/node-administration.doctree | Bin 32679 -> 32688 bytes docs/build/doctrees/node-explorer.doctree | Bin 31485 -> 31494 bytes docs/build/doctrees/node-services.doctree | Bin 82088 -> 82097 bytes docs/build/doctrees/oracles.doctree | Bin 79198 -> 81583 bytes docs/build/doctrees/permissioning.doctree | Bin 20226 -> 20235 bytes docs/build/doctrees/persistence.doctree | Bin 33750 -> 33763 bytes docs/build/doctrees/publishing-corda.doctree | Bin 14526 -> 14540 bytes docs/build/doctrees/release-notes.doctree | Bin 155583 -> 155592 bytes docs/build/doctrees/release-process.doctree | Bin 14613 -> 14622 bytes docs/build/doctrees/running-a-notary.doctree | Bin 10122 -> 10126 bytes docs/build/doctrees/running-the-demos.doctree | Bin 121291 -> 121295 bytes .../doctrees/secure-coding-guidelines.doctree | Bin 13444 -> 13453 bytes .../setting-up-a-corda-network.doctree | Bin 22371 -> 22381 bytes .../doctrees/tutorial-attachments.doctree | Bin 20223 -> 20232 bytes .../tutorial-building-transactions.doctree | Bin 82550 -> 82486 bytes .../doctrees/tutorial-clientrpc-api.doctree | Bin 35324 -> 35342 bytes .../tutorial-contract-clauses.doctree | Bin 59996 -> 60005 bytes docs/build/doctrees/tutorial-contract.doctree | Bin 164749 -> 164758 bytes docs/build/doctrees/tutorial-cordapp.doctree | Bin 185501 -> 190694 bytes .../tutorial-integration-testing.doctree | Bin 24956 -> 24970 bytes docs/build/doctrees/tutorial-test-dsl.doctree | Bin 78541 -> 78550 bytes docs/build/doctrees/using-a-notary.doctree | Bin 23936 -> 23950 bytes docs/build/html/.buildinfo | 2 +- docs/build/html/CLI-vs-IDE.html | 5 +- docs/build/html/_images/merkleTree.png | Bin 15642 -> 22627 bytes docs/build/html/_images/partialMerkle.png | Bin 8741 -> 18381 bytes .../html/_sources/creating-a-cordapp.txt | 2 +- .../html/_sources/flow-state-machines.txt | 96 +++---- .../_sources/getting-set-up-fault-finding.txt | 8 +- docs/build/html/_sources/getting-set-up.txt | 10 +- docs/build/html/_sources/index.txt | 6 +- docs/build/html/_sources/merkle-trees.txt | 72 +++-- docs/build/html/_sources/oracles.txt | 17 +- docs/build/html/_sources/tutorial-cordapp.txt | 227 +++++++-------- docs/build/html/_static/basic.css | 7 + docs/build/html/_static/searchtools.js | 102 ++++++- docs/build/html/azure-vm.html | 5 +- docs/build/html/building-the-docs.html | 5 +- docs/build/html/clauses.html | 5 +- docs/build/html/clientrpc.html | 9 +- docs/build/html/codestyle.html | 5 +- docs/build/html/contract-catalogue.html | 5 +- docs/build/html/contract-irs.html | 5 +- docs/build/html/corda-configuration-file.html | 5 +- docs/build/html/corda-plugins.html | 5 +- docs/build/html/creating-a-cordapp.html | 11 +- docs/build/html/event-scheduling.html | 5 +- docs/build/html/flow-state-machines.html | 185 +++++------- docs/build/html/flow-testing.html | 5 +- docs/build/html/further-notes-on-kotlin.html | 5 +- docs/build/html/genindex.html | 5 +- .../html/getting-set-up-fault-finding.html | 12 +- docs/build/html/getting-set-up.html | 16 +- docs/build/html/glossary.html | 5 +- docs/build/html/index.html | 59 ++-- docs/build/html/inthebox.html | 5 +- .../html/key-concepts-consensus-notaries.html | 5 +- docs/build/html/key-concepts-core-types.html | 5 +- docs/build/html/key-concepts-data-model.html | 5 +- docs/build/html/key-concepts-ecosystem.html | 5 +- .../html/key-concepts-financial-model.html | 5 +- .../html/key-concepts-flow-framework.html | 5 +- .../html/key-concepts-security-model.html | 5 +- docs/build/html/key-concepts-vault.html | 5 +- docs/build/html/key-concepts.html | 5 +- docs/build/html/loadtesting.html | 5 +- docs/build/html/merkle-trees.html | 107 +++++-- docs/build/html/messaging.html | 5 +- docs/build/html/network-simulator.html | 5 +- docs/build/html/node-administration.html | 5 +- docs/build/html/node-explorer.html | 5 +- docs/build/html/node-services.html | 5 +- docs/build/html/objects.inv | Bin 1585 -> 1499 bytes docs/build/html/oracles.html | 76 ++--- docs/build/html/permissioning.html | 5 +- docs/build/html/persistence.html | 5 +- docs/build/html/publishing-corda.html | 5 +- docs/build/html/release-notes.html | 5 +- docs/build/html/release-process.html | 5 +- docs/build/html/running-a-notary.html | 5 +- docs/build/html/running-the-demos.html | 7 +- docs/build/html/search.html | 5 +- docs/build/html/searchindex.js | 2 +- docs/build/html/secure-coding-guidelines.html | 5 +- .../html/setting-up-a-corda-network.html | 5 +- docs/build/html/tutorial-attachments.html | 5 +- .../html/tutorial-building-transactions.html | 11 +- docs/build/html/tutorial-clientrpc-api.html | 5 +- .../build/html/tutorial-contract-clauses.html | 5 +- docs/build/html/tutorial-contract.html | 5 +- docs/build/html/tutorial-cordapp.html | 266 +++++++++--------- .../html/tutorial-integration-testing.html | 5 +- docs/build/html/tutorial-test-dsl.html | 5 +- docs/build/html/using-a-notary.html | 5 +- 128 files changed, 929 insertions(+), 611 deletions(-) diff --git a/docs/build/doctrees/CLI-vs-IDE.doctree b/docs/build/doctrees/CLI-vs-IDE.doctree index c8eeb6a71f6de1c60d13d9b4bb40797a5befe258..9069b546d6e2f375a028f942c95ad825a49d25b7 100644 GIT binary patch delta 141 zcmaDclkv?=#trFAvQ`WX4EmwPsYS*5S^23sDWxensg?RJsm0kP`30MsnZi9M-}jb` z_`}G+&=JaAlvp00nwOZAlbTZW7bxV-7|NScnp+TGoLW+nnU`K%^baWNSDF+mT3nf% pl%ErymY-jemtT?^UtE${R8sUGq=_MvIWwiWh=GZLVX}wM0stIQ}nPHG&lVMa_bbRum$yy30fFiL)CxK)rTTyBnNZTo} L($he)G)WHt#RDi< delta 110 zcmbQbf~jW((}so2GUf~n4EmwPsYS*5iFqkSnWe=kiRqQa`p)?&shjsPPwZ#SFt05- zJUM1^jPMZ_28P_zNjuIuoNW65XzjH OQe3nQ$e#RNy%PY)l_tgj delta 131 zcmZn(YzW-Y$|&Q&z`&p%TAW%`te=>dQj}R*oRXMcS*-7zpOU(H5#tM0kD^743=E-S zX_+~x@tJu*l_i<^dGV=viAg!BDMgEck{zMkMTzBbp(Q{eZ^lsGl+xUS_~O)(lFYpH X;-aOK&#KFDECb0gWT;O5t=DQY-acQj4=o@(VVLGsm9h4Q0+u zDK3&`V_>K)l9^n2E<;!r%$5U^83q|P8Ai25@{_-u(^60Xio_Nv0?AOeqSQ2yHYKo9 KWguCaqz3>aXd`3* delta 110 zcmX>;k9prb<_*7@WXu>C81zGnQ;UlA6Z2AvGE0k764NV-^_}xmQa4L5$DU@*Ft06= zp4@aULs*85fuXiY7D#3oWY}aF)fUN3{(DYKK^`a)TciLaL)nT_(=tDQY-acQj4=o@(VWKW@5_X4Q0+u zDK6U1#K2Hnv}5w4oH*f~VD>H`nW2|qm0?g@w0m-Ju9m_cph#@dULYCDR+O3s(zXw* LbU%n{n=K#tr+KWGomM81zGnQ;UlA6Z2AvGE0k764NV-^_}xmQa9gWV#;F8Fs&`x zKKXS{obV1N28PDQY-acQj4=o@(VVvXZpC6HDQY-acQj4=o@(VU|Go|^m7X4&o zV3=I!FB$y{$mj^=E=nwqPt8kA%1KQr`VAEFW(?&`Da|d2FHS8f$;?YHF8Tu$^(##Z z6)mpJP0G)SPs`6Q$;&TEjV~@qEGjAb3(~|8%AA=}T=Wmft}XgM`L4gIFar~a%?Knj pR5A=Q)M|^ECaVT$DKG;?VvAUSWGGuvY8przD_AKTkStBo0{{d6K{EgV delta 188 zcmeynfbsnT#trWoWgHn881zGnQ;UlA6Z2AvGE0k764NV-^_}xmQaAH3rTIFCilt@d zq{e6F0Tq>G=I6zy<|QWOq^1=8WMp9I2<0wHEQbsI0t$IEhVrJA<`%>krDQY-acQj4=o@(VU!XS|l78!DET znUflynFmx=l9`_upPHALl#`lLRLI1@&=JaAlvoZIDw=#hOH{uYDB)L{6e?O=nVXcK n6Q7o!Uy_$!k{VxJl2}wyR05RtW(Z}@OeroZ1+phgXSV?WpoTP8 delta 113 zcmZ2_opIrH#tpj}Wvm$(81zGnQ;UlA6Z2AvGE0k764NV-^_}xmQa9gVyq3XQRLI1@ zFnL{;q*f7-(GkjBlvp00nwOZAlbTXg3>5Na4CPHJ%`J#8PAw_P%u6pWDw+H-OOB%y NB*&1UI$1uu4FJ){CR+di diff --git a/docs/build/doctrees/corda-configuration-file.doctree b/docs/build/doctrees/corda-configuration-file.doctree index fb7e50e16ce1b3dfe4747cf58ad32538e0c2512a..d706b9acf46736f3a5361fcfb9211cc2abf5dde2 100644 GIT binary patch delta 172 zcmZ4TnrY>0rVXBqvK|Z!4EmwPsYS*5S^23sDWxensg?RJsm0kP`30L(8LgFMWAQ54 zqx^J&bEsHaW=?8+W**R>lFa~4|MTzBbq2)j!Z^lsGl+xUS m_~O)(lFYpH;-VFkUv7~TSP7D22xZPpDK1(CWKZVbIu!up5Itc4 delta 151 zcmZ4anrX>vrVXBqGVTlv4EmwPsYS*5iFqkSnWe=kiRqQa`p)?&shiUnt(9bA@Tu6R z{B(j*(J~eWhETDz%$(Ht%sil3C7Jno@u_)pzF)-8?NdU4B1y0sDUcee47CiI+9K)6 gLE%~oGC+~oB3U3A%2t$`1~N_#tW+LImL}-|0Fg;3@Bjb+ delta 110 zcmZ3wo^j54#tp8FGBykh4EmwPsYS*5iFqkSnWe=kiRqQa`p)?&shg7+_k^-$DApE< zPu32X6_#LPV5lvU1dY&ULLKh_ diff --git a/docs/build/doctrees/creating-a-cordapp.doctree b/docs/build/doctrees/creating-a-cordapp.doctree index 9863eb4ee5439196cba9a2b7f22e80ffc14cb33f..0ff1cded2997396dc27c60957e8c67d35f28d044 100644 GIT binary patch delta 192 zcmdnBh3W7XrVYg`vQ7*P4EmwPsYS*5S^23sDWxensg?RJsm0kP`30N%SuT_cIOi9+ zBo-7Xl%(bsFyf+0G&ph|f%Q@tfN3AN3I^*1G1Gn{LScqWI>>=))`VPL2& v;scTyHW?lncC|(PlYh?CQV;-tx$xybU)U?c$;vyliQehxjnxqE+3OGG^ diff --git a/docs/build/doctrees/environment.pickle b/docs/build/doctrees/environment.pickle index cb5f92675c1e212750d5967f21d20d65af4f7b08..d4e6b39f9066e1ff919e7e94e83c71f66baca6e4 100644 GIT binary patch literal 156112 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 literal 155306 zcmc$H2YB4X_I-d9jW$o zvZFOOzO|`Plk2nYLAkz7bLKQcSE03I&YYTj8oT?=K5Ry=e`9iqRA*;yz|`b`ISW#% zqovr|1CpQ29We8#JO}xn8|`%}XyzG-W%Q(w&8TBHfhDFUl9v?YY5C&Dkbe z&X4NIHmCD70<6gmfz>5-ZmAK;0V=g1pDn7UbZ%&}SF$EmD5%!PVgcHh*12ILlKq>D zopd>$TV{5$UsGEupGSJx*~$Kmsit`<-IC8OH#@mRYjZxg{On{OQ+0*e#bp1c4Cqnm zj@*i~b1RiQGAq3h%^cpaB%B|YRm~}<TC#6v3W^IkC$nU+ zF_r9BNX@0;-0I0b(!$&t#m0uEpjs6>I$AsCCQ^xxY$2r<71qf+ ztsPBm#pZPLwz+XIKVIi1So0MXCc^x-CG*R`e4z;PTT^Wb9QUcF3{UHPZj!jNgU(I% zUD+|xm3l80$vloRC#Yg4_%cQ3rqUP2qO!&`II}~^8CLS0!I@l8sis11x_Gj)&du;W znHlNHEO@dsRP3r+(Tl(r$JddBE4%32u5=})N&|e^x#UYfD9XY5!4yGd=Y=ML9Z6;a;j!`fdj%9SNm5xP~yKtzffC(akp+>C zEQBLG1*gqtkCtALTLkO-=-j@v9xB)mCW|GLJU(zCDDpy}#oGQlcYts0z({Kc!5V?% zJmA4Fc8Ja$N@KzOhr!nVC0hdlY0IXXaY5pNo$C^NhwI!CzP%$O?HvVskI|O4?1DrdO4EsUbfK*sI4Uj>e=pRz zi+q1Cj`a5u_&b>Xdi@ra<#U(9v&(eua(Y%-dIfyAu;c@KPJ5Y0TNBOc_G~_PrFd|a z&Ry+$a80BK*TMs;u-AFgWmH@TFRs_Q8|X!JjT_;~RV7d8Y7_5e5}j?uxvd@f+)d)e z%{q6B@5QZ=Ufc#RRswvMA1tH7X;HYZ;k`ocpK#}Pox6kX^icIq_;qv1FZQ8x(*>SC z3EW*Kik*p;RI#m)KwsL-lj<&U^KPBH$9MDINH_0;o9rWJscf+kmxoL?D`(~X@a+Me zdyu|Gl|KZB?k+jRn}bd$XwBnrnTs1&aF%;moOnd%9`&7gEYgX`;RH2I_cfT~JNE>< zcv9#7MK2;NJOwu%DY-GEf|uOW;>0sL_pI;4bCFIw4=0G9WO&7OuHY0qb1%S!7j^C> zx)4$PG8}lOD>FiBOgRM@*x~yU$u+CK7#d+b?y^dFYWyl zCf_TWTou**+Z{gp@HkB1TH2AveGjgu`P^q>{&SuC!Z-hAr1`I4ep%>~$1$jJLTbK- zJKyNsw{$1I)^~94^OAcNeLoJ-bfU1R6MftF;@1y4_ix{?A0z$x34XDIN9T)$o&m@@hqB@{cEb>znXyQq*8V z=;IJ1v|18dOQKpzG7&xwC1`kq1I_m8RJyBnigL?u4J?hiaC{hqR?CRSq17Rmr4`4e zW2M%t2AiQ15-rN7JMzW6d5mpM=hboqvQ5h)q16i5`fXZKG7)WBiJ;*!Vld9CbW$D7 z=Gm5Nhoc5svND8LtB9VV-PK=}8XcETl>Fy~Q0|e_3p?9z^eeR*tI=Br39VMg*7tS| z$wYWtOOUxgkelTRR@<5=fRk%MXtlP$&5c61+B(ELE=`tv8(z+>+`ssjSv7(ndb%zW zTCInz@9FxIiSTqJLFR%m5qB`9tF}s@1g?&P(5g=G=E_i3Zv$#@TpBI;%1%Js^X^~O zXx5^08zQ0AM%en!Z7i7x=f)5eemta7xhc-8O;8F4H-*q@Gtm)#P7KuDoSGb$#!F7} z)~M8j^9C&2lvi7@Dm~p239Yum*7tO4$wYX%4MFBcsMMMBek^$7sy>t)^n@w{DtbB3d_{AnzI`nw%Na$ElsM7kK|-rtvGtv7kW7S=yAfobs3(_n+9y7> zJBs1$9uQjXDN4+vbyVfq)aAG|UvitBnM${%Q~5M|U-XfCu^RoHgM?OlW9$2wl1zl3 zjRcv_Y=+UsP8ZsmPyi2`A+$;h+;nE)YAwV&E=`tvtLV(~>82tcr52gzR5h0%dYVB( zt5$4%PhH7Gcsh?D)0xfm)R{+D)rJzd+76*rhu}?TR#q=d4US8rC13rEf;WJgSDmaz z?{Y|JrLgtA%S$H0y8=PO8`eQowpXp`77PFuRJOS&ca8RWmlq#@=t&g;f!p&Tv|1pF zhyE=E3u)7F>1L@tyuFvZ0Do{vULy*wwP;7n2 z50gxU<6Q)q>xx`=LweQWD23BUKxlQO=rGrnh`L8nljG8O$zfhs{O*EXM4~z0rjBM+ zdU^~JS{;k6@9A-piSYDzg2Ka-fm=E1Rwtke+&vLOtCK`gc$~5va58l|F5M{k%wrrk z$L+28Jf2~2IZ&st8vQ*L39U}U*7x^x$wc^j20`Yb#t!p`wVsIz@b)YStzIY3~`cGbRqV^vx^|K zx>%5AFww7Z2~mzqLnUYUz|~Sz7<^HtlTBnh67#YJJQ1r)37~J6A)(df*!sR*A(;r@ zt|Z8We4^27x?5h0>y6&4PzA1D4WZRFqR50i4sb1XIxgKPc`lD}J55f^&nG62pP;T| z9XfkG5?bAWt?%rOl8JEkCW5>R?M{=O`FV$`ZpL2tcMF78w+hy~(3a}lMx^7?Sji=h zz}PERr^+^^^Lh18R-|9IBcatD*!q6mDVYer?jp#H_}Gh))ps|F;M_eBTHPxO%+ODH z#rvqkacQ>XAqPJEb6a|)&Q5hdYtqFBkkINuY<(9Wl1zk)4-+)Jf$ws>v9s}bWs1vx zJMOXyY4r%o;pd|eT0JIOhQ`-^oZ1|h4wRhbT{!wSj4Cu060It)o?tCH`Xmxs{R>;) z(WfL6;po!@mF`m%IvodHFfLOIQk{AA42t3Bvk+Q6CrV29Ddm-)r!L2(`I4I)#c5J$ z4DQPNPRr^GtV?HKL_({Vu=SmNSuzpMzCw_>1;FTqFxr^Px8lD3Rg}Qb*C4cdUGU}> zpsd~-)Zn-@TIQlEc^RX!SO>zKicjCc?#c2{Kn7JjzONoRZ4- zPzpEShtTQ+(P6GW5p_SLCdZ}mlB>LZ#!K&f3gftQ)kmyC4?jjit52}?J^WNM5gvX< zka>yhb<2D{;L~PyjN-X_N)zM@vgr6VP8d2yFpzcdC@WhhPF$fEbe z4d&NG(D`qW(CS-kedoWEOoa2_6J(s1o4Yh#C{nR`)oT?0fI4vg-w;~;D4LA(v523j z)p6-a$$1WDWB62#TMSL7%y@93!@S^DKNCaue?da4|6uF8|Epvo-2aUr<33*lJFR(n zCCYgQp5ATM@2CU!|A5fyPtj!Dk45}Nt&U4aO73&|MX4{dPh5#qXRGS9xaay}NMN`P zTi^91BopC!Z-UH~Yn=Z?<&2#^*|AnsA5?+oeIc~!CyLCKD-O_~Ivtm8_>LEoHO<-f z6kY+~L{tMrR}FO~m&g~I)j-)XNOttY8$#aDsKLnAbCyU)wxcc8m~P9fAyRKi){~)s z??nS92BcIW-K>^EN#=~?lKu+_Z~sv2?@IQco5pPtUU8|Vk$1UC_Ue+ik6s6sSHp~k z{{D_-2$kV=zO0emxVSf`)v~7M5bU-G5qB>q^?62PzD2vdAX3Y->Xpd>r9CUKRX#&J$#5!_=HRN7#@m*K zYGqTozrSM@sl%~Q^kQ(=IJhdSU6~vh+_xHQCi~_wn%k674stFxmNEZsZgpbM0J-+A zYz+csG(O8)ELCeN^f9?LrIeRB3_5~OGmS{CWhxB{jzp@pr7mxJa7?teESiHEKx!TA zbO+7JRx>R{(vcJD$J*gw_)V(P&?Ws<@q>?E%YJKWu-LQ1vwe~w?p1RzcC7M;*NpPY7=Z5 z50_)!JMisXv9@eesx4hJXBLO>aT|kEZ@S7ZTvVer1*WW4`y!rNoKB@SLusFUx?uJ9=q<49$mmKn+x~8)3 zL24R=R@1Qs!t??zPk)2p>$+*uLF{a*&yeafO?A^Bxa2h8sp7>o095u zW}5!uaMzspE>Cp1K1e9pFF5cM7R=f1@)Vc3P-Xx{&V6St-f4H{4=xp|e9eFK}*2&)-nQk}A^AI9-HO;hD0TZ1`+9fj7GR$P!2_h8y(vC(58vw~K6 z>?{_OgK-&aoKwg)$%{}`z}^h!$EqSy$-#KNluk9zNwqCVq3fUTmo8u_ZgB+G+^W<< z>}c2!$822^7npnnOH2Lb=)(dv$UEiJ2oeSo@hBO|547OfzkKlmX9C zg=TN}5!_wVp2GWLH3t}Vq~Og>)=^9kHVv7RFSfMc2I*+*o2`yvN$*iS&W}Yhl^oEN z#p%>KH&al@VTa7{*l>f!WJpxoP%^+%cpnpRa2w<_p>OQAm~!^*ohj)JasNP8RGOd%)+_DcF%pE=ko3**uwH zl~<=q?bEOw;YuTi&e#ao@In?70dV|`LhS~=5P|Q3-Ol*no34hwroy-hyCnOzr#gzM zHg!5Q7StJHbmu?KP*SV;W$#!fwYSTKoIqSrXaX6V* z=Zm%ezSkEZkIu!Ah_@qhOsWg97w1qGr=3DykyjVVj(+H$*%7OYk(CPtNW`s6b1GSb z+aSCr$7z{Ym!NdEx)j^wfD~@#CEvubB4}bpfgwM%uPCTm(Dz_Gf(TxD?0P8&U~gb-|Nh8+U<>- zUUUw!T~4;E$##TnN6U5#*^ZO#PO?qPb}!k^m2IbN7s>Wu*&Z$1Q)GLtY&pKFT@GAo zm&1hGlvFeI1Ul0Yq&ePB>O~k zh;z`*<5f*wT`PQDXZWgLJX2f0SY~AX5}7ge12WqnJqi1!*Dsmbt$tvp5&P%W_sbNp zU)K-Hbk+CC9FP1NsB=O6;LMfvHJO`Gb{EnQ*Z0pnjr=S1y)*A(-)BgFkN@B5dkd5G zO9++q{atcd-_IqPC?lKoi@Br|f_$PT2}Kn$T0g)gr6?n(^))U@MUJf2ujGcqVCW zm(%BZLVig z{8?H5V-$6%PgsFd80}by|Mie4{S?Ji`WfX&YWy52m%F>v7uc4aHD-3{W{r67M{nYJKLquteo07Q{Za&%d+$SrqO?mb%{mTRSfbwV|0XQN^b|gWNehOd zCQU2@>35pT63#1B3}`u&cd6xBi-V9QBQgbA^sazH>RplYU7i>#u{wtlOO=LWSC?9u z1@UZbFveqJ6{>>DRUv&gRwKBa4Ikp5v`ekdI`Od_Z9=mKYEgYHq_2KWLd#?60oFoU zms*=O;+1c>iO{hQYEk(JNMHH7gqAD!0PCTwORdiuYlJAqcqvBd`P78(d%_ zITCegA^|BkOC)_1707iz4pxU6U1|f?GuNBaD_ik=G)ky;LrA&#qS}p^VM&+T7~6(b zLN4N{>CD=3<%GFe!S(9zIdkH$!2U+MHFo;dTS@a0{x0>MbFCZnq+| zf?EUF8f9H-8`cQl&iP--jq~mcXL5WSL!;?7v9v89w6q;%BO5W6N;vVjC+PO5*rmp? z`dT5fiXD7TN;fAkudf;N*1g9xu{WM}U~dAXAJU1`!LGhLQYl!5TmnnW=};e>YN7Y>zq!gyaeGV52l0O8T-1_ z43?}N;>C9qH|X~BhF$Qzoe(n<^{IXqq^~|nB|M;_5WAqTOYO=k3|Fbk^6hvpQ_a0( z11i$MZjio#-HGN6cBtwe*xRM{WLfwE96GMW?b)bAt$R_*Nic^n|Mi$XXQcApDC$xv zRtTS7WpS6vjnoLuO_X=>$ZRH%Y(!O0qp(Z0uuAyWv<2^&3c<&Mxl{vwt9xVJOKhZ%P{X4y5nJm_6^GVUO5hH}H} zq04^GrEl(VZWiZ;{jJLjnoCw(UU6KK@A5Eod1LJIDb?i-yW5ZZcWfG=ZjWg2rx(=I($7?~Eqzjz%}3*==Ze z5l!D8jXxaCKLG@s2?{O*30HxJn?c0gpyCmb@eJsA6@D+xhQr?-(=PDitC$Mlg7M{q$h8@vKj2cykzkCWa_|o}0 zJ5`_#Z%FDmU8T+pZeyUT;JvUxl{!8&=j�fPZ4^!imU@npaRKL21Jd|2LgbhXH%5 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 bhC8Ff?GZNf`|~KndkD0Im^X1BfnmY_0~$A= diff --git a/docs/build/doctrees/event-scheduling.doctree b/docs/build/doctrees/event-scheduling.doctree index 1ad744ee92fdf270f397431beea4c7b08dc673cd..b9a06f3b2a1bb00d876c6e40a8f5afcf1eea6cad 100644 GIT binary patch delta 186 zcmcchp7F(d#toMlWgQq881zGnQ;UlAv+`4OQc6>DQY-acQj4=o@(VVOE zfgw~ZEi)%IJ~I!fv?Mb>FFrLdF)1fCrRWh*vLlqcD6t$a^mwvhxhUh4$?D~D!cT$H z-VCA4nJL9Z&w%XOqUVzX%5{ZbfY~pBWQIb9R)$h-(W}W5%C!_;14Uws-T=u^wxZND PkhZsArSE`bX_6iQbTvXQ delta 188 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 Pk)@J(uSZ&6p8Nj*puQYj delta 32305 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 diff --git a/docs/build/doctrees/flow-testing.doctree b/docs/build/doctrees/flow-testing.doctree index 00b8e68d1513658b6fecf8969484fcf6cc98f5c7..c2dfa7decfa07b1fc11ace730c50a283135da7d4 100644 GIT binary patch delta 193 zcmX>;i}BJd#tqqwvNjA14EmwPsYS*5S^23sDWxensg?RJsm0kP`30NX8A~N(Gw>;y ztgjcmIa_LlFn(p5_4Ovo@rE*IrW6;=VPs&aEt)&|sE?}fJTQAckj#+DP|J|3Em|=7 guaB0(LZC=&(IOxj%2t$`2GX_|taJ&GEKSk_0N3R|JOBUy delta 182 zcmcaKi}Cm@#tqqwGS&4@hRnWT<7x)fUa4%;Br0umC6$ aTeJ{JhO!l0dO0|SG8XmM&$v3^#5YEDXNN=|B}zDsIxc1eE0W^pD~ajsD2%#`B7 zhqZ-|CM!xR^FFREe3BuTp_QRfTljQxprpFUv)IDtp=?E|X&`kkY71YMCg}kHjG`p) delta 90 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 QbeNukmqhNt75^~%UzzA|f&c&j diff --git a/docs/build/doctrees/glossary.doctree b/docs/build/doctrees/glossary.doctree index ddb9bc102d294c5628363b6abc1678faa0f9c3ac..42f3659f02e9f86b414f6e34bd47ad140ef24733 100644 GIT binary patch delta 116 zcmZqq&e-vtaf2eGtOWxDgMMgnYEiL%R(@(uN@+??YNftQYH@Z+e!*s2#+b^<^Qt7Z zo-#8qbcAvjC6>ph<|QWOq^1--0}6RFhVrJA<`%>kr1PfNRASjB}m`abLr_2lt zp<-#7IjQlPc|esVnfZC~sdIjJc{&w!F0q1;7@<#3_rKp}6&P~Mc%+=BSx)RL0S Zy!7It7nAQ+$#J{{$uVRoPUfzz1prKUFDU>3 diff --git a/docs/build/doctrees/index.doctree b/docs/build/doctrees/index.doctree index 79cf04e569570587357324ce98f0a59e036e18a2..8b0b5aad53278c653b3751117956fd0dc5f6731e 100644 GIT binary patch literal 24490 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 literal 25452 zcmd^ocbpu>(Y6o@r&Sh6Bms*M=n&dFBm@#7O9CMa4jVLZHXL_zyK^@?+SE0>cRI`v zjeK&%27_&ERb5@v zUDJ2{)NHPttyS{{zpGTvIev;ii%zMUG6$S+gP9tb13Rr*CA;WU$109*rUhntXYV0X zrc8+u?P|VUN@vTZDr)%~%#5Di#V95~@`Gr)G@P!Mfgm~C%pC9S&_evERD9Dh-g_v1 z=Yd zvpdY8;g6xR)QaY?u>avg+4sq;!^eA%kEqke(X5{aYPy&QZ>r#ITAYGo`%b#J-W)OB zdnB;y0-~&AX{JY=!FE%a-Hel-u)0Hr_Y4Eg5Bz#L`GtJvZ@{Y3}84}__M{S$iEVkF&`4-t0TrJUqze$E~q^Sd`eYTYX3ZgQhLtk9h=<(!>e z;#bW|Yi89R<}5HLS~LByFSE)@+0{_VF|bTvx;m|nT&+Sp-*op`GqVNT_mMxT&*~V2 zWQ1&4-De$`&-rFepE=oD7Ku7jEoUI=j8c(Fh}x{Rt?6N#r}UXq-6eL-npVh{9J6lQ zRCE|kShF5u?Z~?MLJll4r}dc)ZG47&3Qo$L4j!Emm@~m6RkzEN>b8kfH66FB^ZOWc z7I?YBJ;7b+o@h#(Ykv+ui4$)aS15bJz5_r}WiakmZ6H7bKk9DyQwvPMDUB zlkRrY%{Q3MfjJMPx+LL@+Mrz3>lXQ8g zq3!?AA)q_gEK9?jl(OzBOyg?WZl4fc>8;gt(H_%s$g%)MU>m7yO{kV> z7!H`OsHZHnsw+Kk3CuvF=ZPoUMeEaNxYcUK-_WfZ*rjUFRdTA`(OmT7Oy;8XT_<&) zHPGMHB#@aA1I$*6cFg^dDaBoYb&a>()Fc*`5 zkDq{l+on;SpU~-U>|H)dy)u_TcP|ahcCvG_l_1oMYJ=#7D@Xy_1nXm=oy!7qIoh#i zM6ljEq6NgqM03p((eIN2a|P*t%z6pO(W;b~Tn=Vb7RKsIC}m$@t|Apr#8@A*2}RNO zcUseEYITX6+|0FRfY_Sk%|LGk1@{*kVETyrxpjG4Lzl8LNd1|CSsZf1}vyGPhHa7ZV~0id=EL$3tJ zkb3?o4#flE;#Rk|qobou#ujEZjkUoprQzt6GNB)k&gK1RmCvOM zPHxzdbOqB86c@YF+u{3#b27cMPXEeuXTA%@AM3$j!8rl^2^}i54fCyaxH=5d$pQ>M z)xef~^@7@9gY}_b2il6EX9ChzfiSFNHG#8PEY?c-DqLL9I_SWEtFfq*8n~1mV51pz z2wO(TR`M7k8XCYLYQ+XRhMEQ3cal|_)*4q$WOX7FIWt~kYMm};?MPro$@gO*rG4_9 zO0qMaef0TNQ0_qQ66E7am6Vnln_%_`XV2A`J@q!slc6Ek1SSA2Iypvka=4fgE>-{9 zz+6W%>FPH)k?iU$H`Hr!PjpqEuW#rxsW3NK({;@@Hzw8fCO6ek*VEa<{_B@{3I=j> zV0Mw(|FA7g5^1*xPO;+Je%?=+r-Cu#f!WQjW`pb|-KM0T)-HcENY+0ctmn&BeJ+@1 zfa+%k=2AP zMm#T8S+3XN9EQ&Foi^6l)`@Ix-;>tf5iR>+Gv@gi+6w~n!kBNjCe`-Nz`Tgm9znj< z?OAJYZHoKihT@VC^Ac-DSjXHIX|8!`^NZ!nY&!Q`nIfA@?o7rKnU{n9R|MvjF-s>? zsYx1l2j*3*%J<<(STzdco>&;1`)UYVWYKC3&Aoe)#j7I=qOF+MU?{H*%yC_;aYZJvA8loT_=8e{Ltz+&_+K@N7hc;{o_cnALh%C5yGiZBDVBSgsS__-l z`L@8kohU2F&dFJQvh*DhOWni3%B83qtMx=Hg?ZLP?Dt|b`NW?H1;As5}1#&-`II5$09E_0ENw#B%!fpvp>K?7Txfc4(v zt(XS8M)F0ctnS0=)7GpzW!<{9CwFJpIN6g=%dU1-)6t2v)QaK_+c z=!R6WjA0MiFz$I<(xcdWibqdxj(cMYv(t_3E$({^i~1*{`9dL${kC#?)W+K~SeMI> zzym5p`&q7!l=_Q6*8X{Qvj(#av4%jj!(o6qv`_BCtW zw%M`I@(I4$T?>u-?~2!a5_98If%!DG?Y~bB49EkR0`%rS6PVAEsI4?0kCqbB#C$Hc z+T3W|Yr`->d?$)c(B4(te0~CB^Z;FyFF?}!?8|%+g7{KkzKk)e*Z7&Fk@`wtzDjnS z0D>kx>mo1mf!K@uTEkqCTJv@5NKA%sD;#s4n}X_9X5yXJ2a{&(8}8DE8Kc)#pVa1? zApcu|`8H`xlr)L-p}>5H<#Zt$B5kt*R);u#xiEqq@$c%}9qAvU=)M<=jt);q3zpIiPGT(0#9EA1*2yJh@m>*)mKMKr`V|hIUd8uPr zM(6*-hRpl~#QZccKO=Yl3;j3A_~(K71*stK_GDk(7P0;^7Ap^OCbY@XOiaqOZu46O z`m2cq`fCVukL{b^fPuda%_F5YV+9;hlv;W&&+ zUR?yVxtS+rsm_%vkzcv;$~5-oSFYU5T+_b9%9ZC$SF+wy~7kBX+*PJqm6J&>0BFAWo&c!cPrE2WAcX*7|x8otjj|ak`5(4soPA zszVPWmlt?6nBmy+D5s^SU0}-to)Weg3PY=~nZCnG`S5wvdm1Vi3T3!dpd(+xo(m2H zF%qA&ZNMhchJomSF5^4ZOsz7oil`;{N^m7oAqG0(NkF)-)e}yvsEiiwl@;vt4L1`auf87U*%RDvt2bTAL2IgO+h3BM^s?oy# zyPa8R3ahA0fyRSX2ZpSY1Mu_a8)PaTfgFewjp@4iPhB^03a6dPG!&^>W<{v7Ob;v0 z(26s|in@8DnjRAFfIt@Ujq!ieC4iynP8-*Yg>6Fc&a1Jto%+(r7p~r@m zNUu&Dw>+9=m&^kS>dx1?3&Og+bAgnYgiXXQRLn&YX2?{Xp(OVp1@D2}gHagq6%}ML zexm0kcm#5YRt%|T4=q&lXg!|)a%fobFs*oaSW#aPn{7lB#YZUO(g=}n&}u+P?~w}J z1HDI~Fk-I{LXXyF(qS`H0FMo~5X#M~|G+NEF=!HfEz`b^4g2anQ^oNgG#fDk&aN!i zmXC{CJ{v9nhqjPxJf6*k=L_yUte|VqZ0yTU-muCFG}E@AM!Md~vW?Bb4srrO;MGbz z0yz(GzB|N1dCG?FZT=ir4vxd0{5fvtE1@;IdNl#MSgsQOb2~WK8!p8NDYyDv5+re-F6{g3b3cL z^;DpYnrd^5CNEQuvh)%X+)hX&Dhv5QE<;LDDWwqA<@!4m71!QQPlZI%l0qUED5NLy zxltp$+Gv$0p%Co70*^qhL>kM9orjA{vwQ&LxuEnZ{#7A9shC1<5S~!vzDvI%3`7WH zcy5JPY7fDYrN2s7Qr*!UT}j>IW0NIm0o2 z4AkSFy3@@AyDb{PwJ$?ksbu1&;909bjVX$EhnUP&I0M|H_Y5~VHNYJ@ya&`bR3~0? znmXzpER+XhxBimz&fR>`d0oYv9z-HsY}Bq|OHNx3UFFS<0J-f^WL=}PrP&? zrrWj$*PeFT;ObM>a7YkL6knuAjAE-$TAhw{+m=M0x(q79#@-6V`adl-$)a;8SPqXs z9HnIWe}xh_SX5$|CHgHxO3!da4_EO0(l0I`E*puWA)>=A1R6%0IeT|onsi9=Xr|p; zQJOjHJr;-2F5yIw9e{wd1v~;NB8{gy$CmV0N{Uksae7x_v<-#Zr*=nY2O%ZlsjgJm zRNYgFNEZVrL-tmSAQyQl;v?_2osKcYaDQf}RM8xUUBe@g5u{u|_P4d9QjBVwJEJzY zQ7IlhTR>Hz-HaXEgPDu>e>_yNNxm_KpJDY2|toLme^PCW8uN(Vq>sR>7ldvVvWjl50 zM?;ZY0ksaxGQu{~h$zp*5#@3l%99H5JV4xq4TZo@^=)oPCXhRjQu+$5%R6>&p07AB zh;XPW=SN|$;)LD|4&)F%gbg-3T`Bw6a}49V!voB4gEIDkS~d{tyLjnNr)#*YdDD{T zqIw1gmr1_^u(MTvRSE}=-B9Eq?D6?{O+O#`D&lkNgv5t}e6c_g_fEO}hUhSyjE2zz z@j+qCFTY{%iPsdh6l3531t%&Xpv$cm3ve`27%T!laTHN2*n*H=J$T7Q1NBPodlxNWR#u~aGI!v4UGPV`%Ce4Rk-AnLk z+*5Kc$ji~f1m=}g(=~eqpJ6ap+<-5y1Q0^I8;?LJpXy_(I{t!gv^c@3b}thg0lUW?zcpY}TBlb`#@eOjChYvN|yBR385dNc)o zyaA6u-iVaOc>mf;D$M=b;+vutkEO!w+YC`J-pne|T0Ge}D0vGi?L`&d%HlAjQi+ha z0f1q@9gjfXfizYFlATn8cPh@iLY$UpwKhu{t)tBne>ZE^B_0tf?*WuP`5JjIaJD1~&gd>*-2NMAtS;(A|~N zh=x7TKjNWe1Mz)nLC9q1E_Kh@nzp*w;Yo$B?1Bx{sZh?$P{? ze7B;m@G}=PApKI%m~}Ed7b@FXccN{RuPRI0J&B`ZPvUEeu(9{f|J^*3uY*o#@Pl{+ z@(m?=`TusJp{7*KXwCnolK!oT^ebpC9y>*#iTO6WicAcT4<_sl*5(|P#jju!@009X z_v9gTHi1Rr_-T>8!)F-bF(Dc9T_8Zd-@_x2?<0*Z6xo)vP(M(dABH%+n?QZT8Q)*} zW9LHYjjY&@*hAflMFW%{18Oa99z;DZOMZf~KxqJw3B!IKdY*7O2*yYZo` zuF3LOz&$}?$DbSHLs@k^!cTSaq3$%E!&x&gKlhTJtvy@hZ$KvR4vX#b-vMB(vHSy> zK>mr8>|^NM<{FRLc#04oxTVAMx-`F4+mK!sPJ(4!B=KKbv2_7B&Rxb?`EPcz@sTwu zQ>N-nJphkDrXr1JDk%+T>cx0~dH8Ny4pg*h4YYV$-;0?zUCSCwJRoA?48T2g=k~$G zX7@0tpXa|#I zp1PbN^A6E^?abql$h<@OoFwz2X5}!{0rL*WBakDI#>^wBZOmJ$Xh+u3FeQ%C9}RBB zv-W7f>7TBZG;({Iy2po8*9&KC+sy-ri?1-cJtfDW5lnz(cm#4R(vZ&Z%Q4(bAj`Gn zxOxe0CkXA0yNWaScr9q+ovZ-FT7sP|y^=%Y`t%hU4yZ4kD75iqj+}suJ40>R@$p<( zscqpye>oAkKvwDR<$80+=H~WrFd5z4AsM!FoJT4nviOC+bZONlvZ9at>wR^z!p6Ne zeG*V0!qs>LvPK(R?nV8PKs6s;#K4mkYi)?7Aw&(5aKk~wZ#e}Br0-NkRQhBc^49!n zIm?K|%qTu<$AulT9#A#^SSC(WjCyzj>?n?LWrJdXm!~7+E+8-CFXrV8fZ75$qApT$ zCQ8BOv+xMyY^1Sraum^OGBd)Ka|i>;=MvBADAkICI7rUPM*QA3#hRNhWec^O>t-%wB*TiXcp5K(FVf zEbo+y0NW)!NP8vsG2u?s6t3X3-y;xcMv^Z4OtC07ab+aD; zYYuL%;Uw3aYh(Z*o#Zw$?%af84zhlve_7-M$svt9Cpn@1d9m6#EcQZW^P08Gqf&XQ zIQ)ccThrY+GK3;%%`hG~6h=DeHR+3&)DbUKjXcnx8f+^u8V~SYvIA+4e%ISvn86oD zq1Pn^MJp;AuNq3A`9O9djXNeOElT}V7Vkr;xuu7V6peeAaa4dp@5Tcsmq;g}&`)P4J-w7!7Du-X z&Cl4Fr8*#a21<9yGm-Z6E&xir5nV@kmLfbGX;M(P0MhBPx<`~|DV)_*gI9QLP@kpshf;{%? zv3ZZJG;86Ox)v^D@i9o??7SI|K;D8h)`bZS!dtaCRK>R;pHRiO17J4dkiF#h3;n?*ldz@BMfL@&TliP`nSa zhaQbn#QjWM1~PuWh_hsT=pr9N;V$_w(jE=M#sy$CTmU8?QTRs{&Q%eiA3F+Ip5UeW z@_-h83~5qy9|xqsQ4ZsoR`4B`to}%|AUs(I>+Vk&`|r2TKce-@|#({Px;j` zSoJ??$)B}^s;O7Xv2U)Xj69LQD8^qEgFY*+grbR|@8|d#tPVTMRnRDZQ@p<`9({#M zZLpB{@pZs(xGKv(6ycwWK-Sw=^Ld_rrd17LN;w@%6o{8X)-iHv)A zLTfu%H`3Z!$YbjcY1}bMY0=u*ES`kcZi()^lsTvXt(}WUAoGw;LTl#(EquGJ4`Km8 zyJR6!JK=9H0>opX-Q-5!9P_lkt6cZe4gxB7k>y}kjH3}`F@LRxXyUz!B?P1up!X`) zwLBz2`kq_iBq%p_1RJU;Ka2D@_W7PQV@s+4@1Zsd~OSSbQkxqhTN3oZ1X>4+V zLxUUxUM!DM%w>wn$yUdt<;djxf*h+D%N2t!baf0y=HoI$b;n{m zbDSa{ugJVis*YUu8#8t#FDn$SQ_+rUMr+J<+z#m@k_;Y~FDEGaN=2vB$f&mP;)zTV zN3&{;PE?##io;c3abmJETG*w9Gz9TS4|e#vI40eSaFQa>X|DM+67}NMTD(S!`F&v- zL2lg9I9cIq6@D<__2J^KQV_<&YhO-Lq*E1%o#QYAtG%Cfom>r8YFO4O!g{1hV{;lH zogQWBQA{2s;gQ20`R9=<9*6C5cpit~kx-9RdF<6=%gwgOisuQQvH^v<3w=5=ft-O9 zTCJho`#c1R2kM7A(PwI1wN8nTf|hc2psTak)y7BMw49B4m>B2afsH)vB>W(gBsX@W z-4pe^1D~2$^P=lP`@{R>WFruJtW*vg9?{#yCWYYTt6Cl^m#bVec(Nx|*^H8H2Us(C z(1S~3YRZsf079*^qWlzXE)+oRj&&hg&C$6RlKk9pon zET7-wF7P%Gu+Y1WfJNTz{B@9b6Mr4-(amrddptRFm$+-)Lwejp-TQG3(1+Z^Jz8`3 z2)E=ebsyx#P_jh{TA{C`4p$6oHr%L^k1c$-x^e-Ed#t(ju_40Km#qNeqbsDmU}8vb zxRq@Rybx*Up07#nlZ$}h{@mW{<6A@co+_9A7MjUWSz0@YbAI?(|LMa)5iRMRm5sw;f{- zQmZ`?DH%~IV@F!#Ns8W)&qa!G1%7XvZea(oL98!VYSlhgog32;Qg{_$f%LOv0XJ0n zC4PT+YUs;=RUxrWug*^!U0T~xT({aRWHusH(QPyM4k)bRq;8N(C6vPG0S{g?qRLf=DM4or5 zLtSMV?qQ+^K%P!X}E^yA5_GiNSUyy*nzJwGYdP8Sa|TEsu=v{08~i*dIT&2 z7>;-6V5szK!|eiJ5mT;Rs77d2qCtKUec{E>QX`&wc8|3bA}>on!;t9H_J==RgiOQx zlo6m=3pjY3Q~ECY$1RVJj1oK@_ej=;WhYy*7C1Ojpvu5$^94D>F9G0~*zkb!rJ-_!d~Jw4 zFS?W%)L_f3DAy_OVv3DBC6s=D{7su&k3y>hWtrnnTAPy__;aDNGhe0pS8IO6#T(i5 zbZbVq@gg^AlPYs)H}8PrOZZb1x;TrMjUD|CK3XmG*k=L zM*V(;jNJvK-PVD)R!W|#jfDfR_)aZ{Q5Fj_uHXgOoGC+*>2^p7H(SYWg)buaa3Q*$ zr9@nLnzlJRTm$+!S>)-8Jdg9CNs*tS(D^MAlV<{KO|MmlGVA48%%`HJIE$Vgwv;b5 z3t4U<+AOVtJ&Iv@4u8+@$4zRy@&mfg-79&n)|~}QQvnrt!@QMfoN@MG|7bpkQ;*vK z+16prODd^6kBHN)?dOA}+nJvkFL8I^m%GxM&jTKOMZoz8##ZI|fa8PXVFw0LH%wjt zK#w&~^{TyEMtZmO1!Rpm;hr@KJiT+~45W%UF48 zJ|{0{W*#O(v)o?+;BM=PaNgq{ShY*wYt`+Ku7{Ub0tK@u5{S+YU+xC5PhQ0)m*{-K z{-J}<7I3@1Q=6M8Zp!@blg@or&`eu>A;W_5Se#ZV{3yN;#wVZ4)( zxOcgC!a=zY4$Aw~2l5zBrLKy10EVR=jrVP0u60+`tVM}`SP*(2uLE8n_aVjI1?zcI w`+72jU$=)Jy+{8`AP(-SS+n9L(3dv=wNKuNR71$6%#`Ay zdPW9@+Mt0i%pL0|SG8XmM&$v3_D+N>OHMaY|x(WwE|Ern*FNNiCHkPKxjN=?g5DK2USD{TXkrAc}K DFv HnxqE+l*}e4 diff --git a/docs/build/doctrees/key-concepts-core-types.doctree b/docs/build/doctrees/key-concepts-core-types.doctree index 74ccb5ffd066476a6f35c5a182cc3cb8c59a7b27..f92d96dd5775ff12356bfb4fb22605a85e171124 100644 GIT binary patch delta 121 zcmex-gX#MXrVTmFvhEBF4EmwPsYS*5S^23sDWxensg?RJsm0kP`30Lhn3pZr4HZkv z%t?*U%mb<_$;{7-Pt8kA%1KQrN@HPQ=m_O5N-T#9rB6;+Ey|cNxoowZKqgSyn<11r PGo`pF3&@^4XZ3Xe+cqoX delta 138 zcmexkrY&37bM64 delta 110 zcmeC)$<(xyX@eq@j2i<3gMMgnYEiL%VqQv7W@&LsVtQqSjBpc{5ovbZd($ zC%>HSDqO|Pz))LM4J0$vGK?}bYKv+nJI>Kks0E6|7S#dCP`0Afw9J&^qI$5>1|V6Q Gqz3@r79v&v diff --git a/docs/build/doctrees/key-concepts-ecosystem.doctree b/docs/build/doctrees/key-concepts-ecosystem.doctree index ee2018e37697d45de470e79ae3b781d09593f49b..8c7496e86e3c4a5947779397167241ac9b6513ea 100644 GIT binary patch delta 117 zcmZ2dzP5aWKclQ00|SG8XmM&$v3^#5YEDXNN=|B}zDsIxc1eE0=4{4Imb{_NnJL9Z zZx|UEYKz`ZROHMaY|x(WwE|8NY6p1bR2qZ(j**Lzy#E zii@dd{$zfCEd>LhNNkZIkPKxjN=*Z4GXg6$ J29l*odH|p2AtV3* delta 110 zcmaDfkMZU_#tjyXGTsaf4EmwPsYS*5iFqkSnWe=kiRqQa`p)?&shdL?i+x!$6l;sL zCtvk55Y}O0V5lw91(F$38R{7_wMBZ9CH%D%^noI=MFv1Jl&vT=EiY(B(;oEz diff --git a/docs/build/doctrees/key-concepts-flow-framework.doctree b/docs/build/doctrees/key-concepts-flow-framework.doctree index 12a6371d96ad62decd27d335337c18d26c69c4ae..1872daf41d542107339ca4ed77c1217759ee41b0 100644 GIT binary patch delta 117 zcmX>bbuDT`I-{&N0|SG8XmM&$v3^#5YEDXNN=|B}zDsIxc1eE0=4M7`ZQfAk%#`Ay zdPW9@+Ms delta 108 zcmcZ>bv9~4I-`si0|SG8XmM&$v3_D+N>OHMaY|x(WwE|OHMaY|x(WwE| zY*mFj85tOAi@JbhhD?S=hFon?_v9E`ErlMSNNiCrkPKxjN=?g5DK6>*EA0o8rAc}K DgU=xD diff --git a/docs/build/doctrees/key-concepts-vault.doctree b/docs/build/doctrees/key-concepts-vault.doctree index 020851b4834b9378b54b813ebe843eea731d3252..e7154c30f202662cd78055ed3a0fff56428f69d7 100644 GIT binary patch delta 117 zcmca!`Ji$`D5I;Q_y7VQL*p=?E|X&`O8z)E)m I$OHMaY|x(WwE|JV!}OVH;2+wrD$$3}q`yO#^A$0am&b JNR}q)0RTOLCBOgx delta 108 zcmaFw`pk91d`1~-1_lQG(BjmhV*SLtl%mYi;*`Yn%3^)z{FKzqdl=^`ux6;%7HyoI zrlcdhiIIV!wrDeu%#h2_%222++A?{ml9s|&ph#@dHXs?wR+O5SnNnP|9jtT*kStBo F0|4+pBM<-p diff --git a/docs/build/doctrees/loadtesting.doctree b/docs/build/doctrees/loadtesting.doctree index f1afe92e2ce159813ad840a16fedc58aa8ad2423..31f3b639f9f5970605680e5a48d385ac0f9c56d9 100644 GIT binary patch delta 439 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 P)dz5ss1M?|HC6auV*TS2 literal 22675 zcmeHP2YejG^>(*(t{6-;_SzJmKsrGJC{cif5R4szOu!qIqMTNDEA2{mw>PtUmK3rH zB!SrJB&3kud+&wxPI~XX_ukw8``+x{?VV-7cJjwb?4N(S-6?P0l=tSF_ukIc3rgjn z)QJ2_Sf~YMH_Y+1>eiy1n%{GcS`e#+dAqyjRNZK{?uKentQO~om(80u&-2TEZNe%$ zk)xIj4X;H~)zwoK*NU|3hL&HmN`WprYU$AMYGk@IPPLBQVBBhi&V;MFhK3iBj;meO zy;}%G+Np(3De{Aw6}gV?3&zJol^bfBF!Cd?8q|tq7s<|EIeHx6s7)kF3grx69?K@in~$SsDEqa$_1_WAZw z_S7$jYE7(;%zI1hWu}{b(#@m1rS@9W$v)|1pI_@Uom}g6*{hQ-g6lrh#iPA$dy#bT z7%yk9&2+D?)xBdIc2~*sD`l{(jvGXf|QRc_Q-E>x$E*h@y3mfrkO<&v%Xp7DC0% zsWUJhXU6Idd2hWepPh3qpF4URymg-CZS*$Ti>0PI%LCtM=e<)$yv-wCe#Gk;@lGFU zcxc{B8a=18&7JNHgksb-e6d~$45&pQdmhj|Q(_R2M$9nXmS!>#lJm`XYBa&u=M#M)*99B zb~qUrR1E(vzgChl#>$XRu@lTr1_2MV;4b3W%k)wwqi>bUtX1~QG9@|3be$83dYMVQ zt2#d;9No>OsqRVvx!YU&`KtwK-& ztFD7xAi&>X9FjZ^2`yC`A(ewr0Qx~v?(op6KUWzhSIM)N=l4vCxuwPelFVxkP}FcF$OC=Sun?>Ni%!MSBAlz&9)~thJoF1QK>>tcEx)cf@))fThQc zWk=p#MED1Eyad!6+Eh(b>Hptg}Y7m5<^?v zkE3w^eA;`Dy-_3HF;2Ei>H%K2(?FjZW9Sp~*}MX}Q;gLpIg)oXVJ-^rXyC+ZEbVCm zc)gR@QmIY4RoPqX0PZT+TMGJp+gGP@KA!gosV8FPu?ZgO+7uep(}i-R^U<(lAhjo0 zda|vB1WPyRPJ#b@6RV(C)mYWgq({ONEo~mes!mRBKyNeP9@-HaFRWK&^MRVKxXv!X zNy`P45=006P5l@_qlT6X2nuy8Ahg#q2(&lFVHR*x3wRc+9a0v^xB^sK@u%Ee*hL{bl~M!H9GgQSH-zItujuK_5E8JDHT;SIJyxj!#XA*2d_dry z6MDpNLJZm+7`Z0oa@cqT%>wL7DL}$8w-QX7qUN-VeSv!x)-HO>lK={b)-FHv$9U{E zn?{OZ{VI;jhDI*{D|e95(XFGS*b{jq2DtT{JDh!vHQuPn;j=fl>GVxjpKLl!wz!R? z%RsgfHPz5bV8`KtZ|MspQlysMYCM z&2T;zL#>LeQ8mx*Eis_PjqHJm(%*`yyed`?LRHzrrp+FB>J&e>(=H6AXBxi6C$5Uf*3KNslPJq%vy*80+ zsS|s#6jl%C7+ssU7Xl*;9}6=3s;jQc0s=b+BM6SaG%~11#A>%a|1|HqFxi)mOB50Y zjz@+)v3exAd^O1LY(F1U*NR#-1`M%UU?Luv3de$?`F*27K|_q zA7*rA>=Kg)PH)(9jgbZiGFYat!RrJmWDO#{Fv4uc?oN}KoY}Hw6;8G>n_+?yix};~ z*#qE3C@^c`C|ASw3cQptwr~q}2vx=tyVA6eRgo5@&8x{-K|Qf^VsDshVoyvb_DPu7 z|FRKyGUog#v3e@!oTG8Q%z27+Z;aK`kRuwg4eLI=ZJg9IyrTr`KGRzwSa)MOV$U*I z_t~*}4wnx-8e20Sjpw4p8?y-ad2MtPP12NI0WMEf z7jP*QE2U5{DG3#F(6uCho{6ZU8cd@wL860VG-j1lh*P6-R-7n~zL+#;t*R3N`D28t zE{x%Zs)*(^RP`8-0ia66T$>1UU`(2&Db*)p*I6+wsF!BuUSRFZ=9>GH(v|db%>Chs zJQOGL6_CJJ#_Cm+Ku+q5jRX>!ygF8|p#*M*+|LP3WN|nZBOxg|Ni~ANlGi4%DM!Z7t&(Jl4eb52wOIU{Ys^p5QGkOPBSvk);Jf>!qMozYE*}|b5 zh?}HVq9rKpq9+32C~o{&Aew-*?TLLz}sT=b}9kR#7(h!2Xgkt5$|l9WA!fYXu%Qh z_PPW|^ry4^9)ly^8>{zGY#HfrQD>yX`_b%8SupW|HsT4GXp;OO7SNn@K7_7(I94BF zS4i`{Ektp1tUk*2ZMcyyam_Y64nI1NFIe{_>WaknQ?OvhpLS|++G2-JJ-jHCS@cG- zQdcEQaSx@K)7b%S7g-3VaIJBF#yDefPV#Gmxk32u2S*WT0Y7LsTF6~6j?%4063}e$ z3lT}CNtmIGs~G+jx@<;AxA-$KNHv*&7V%+HgD|Je!yya^ApIa%Nc0>bJJ3vN3hd?x z5@@r-GhEsMRG9^64;nQWZD0VxI$T8K@KcM^mfBm~JfxRlP88HcAbL(b>8ZDwesX$h zjn929^pzWjy${ZIj9qF>3q?K4nG$fy93}D4GDAYmg70R}Ll=BuxGS^C=`tlm_0JQg z!Hnn-kRM`WoCYk6HK=Ra4cQa70)H0W>f<`78VxsrxPUr_oCi~C=w#GIRkv>f7B>N! z`qCvVnCN43E#Wg$srWceeOEyiZpXE#J^^w0WUM|#xwxHq!RXx#Q%P8deRrndl*_XH z=IU6$SQy0_cnfms)4(O4iPdMx?@EkayD+KGkw_B9vOHT;eV$g5FXZi|Aj2@N;f1IT zNmO5yq-jUj)R%UP+aqy6e0g{&iX?I>8Reh~35OmOzlyz#{)-vfBK&Ai)5{_b3ljdy z@N(3zinr5*LaDFPm2f64S6|!9BvhllBB#EN4t^t6-=zNf9C`j$vWV2T;Su5>sPA}R zbTa`t8@$hu;&-u{G7PKlVP?M{s~>=nXzp)75yG#t#FvKD4~h}=SKg8;f zoVy=UkrV(O7*9$t1vB ziumBdBoZ!P8ibQoj!``*X=)Y_v4VYKJ7T>c(4|7^g*^3Cyr5~E=YRyD8d^;ns#_Yc zhMb2SHo=#CduzxW9BfbOF+2Sb{p8KjP=BI!`g5wT|AHV-o*&&v{Z)L{Y5e3+3IP7r zxd$ZfilT(Nrc5 zez84s7pw)LUVzs%D zwP{YUS99``NzyB14EK(Zz912Cy;2Gc4Bvo-dngXFUIhlRWLD!R)<+1p2qig0x%D{&uhT*-b;pxo#74;mdM>+2h#yK3LD8 za!V|!OkvaoI-_p}r8DU~S$5Ke4_De-l76$+^HPmj8ljwn&kSO_AZdVRE(^$54Vm(wIK; zQA*_2tq7mHg#1hhjuspkMn^AaBn-|6TM#pdy5fVm3`YUNjLm^N`Zml z{{81bZ%1A9_7eQW`cfgZ{y+#pZaEyuHaR5Zb|mCzGw^A-4s^-dvT^bDJwOV8L+^4_LoQ_mQFQ$2H~lwl?%t&TQtRnLqw(DOVi z%UiywWU?v&wq(JiOqKEjI88~4R?OK;o{Z*%L7 z`y)s6#t0r_{Q&%BZ>~UZMEw8N3{P^@I+Q_?jUKQvxQr7&N~#0@F1ED;@>oA(_=$Ci z>>6|BBuA}H!pl;`HARLivW^YtY1gctC!7NQ{5O zI4XL?q0koYAwCE=2dV`*KAvJdDevotZ)NYFnv?E^ zNe%($q{82Q@BLL|V@zxKiFJU#>6ns22F65&pE$p3E*VD*BCuZ;y>scXV6bqZqcH&%i;$UX>fu^Oa zq@@R$mWB_OYIC?!ofZrE2PfpY>~B%0_4ivByHUgwa?|gWo^266#BW9S;TFr7)JoNI zIA~qshtatgnuGQE(2?WOOrc#g3Mu6l^1?R(NzE(x8S3Tk_&%x{R$3L|sY`2SfSC{h z6SWA+H@9klFj{KR?>=OWpDx!&8h-$zQ3N0}nSRVZD=aL?kq z%QVnHqJClYOCt$WYewhp%&*j0Pl5{=vjpF}1Tm#?j7*SVaOjHkri(%SXtdn9|2{^z z>D*oVwma$m`&cP3FudW`+0~CjSq#PF@e}LorQ-VAQW2V-W0P!*Pmt*U|i!%7Wvqh4L>=rq|E%E@z{YKNs)1;B7n?{BYf?#vF z(v9&MLiw2q<>!LcTih5C&6?lHEzGR9yz#GJj^KLhvg`E8@k_s)ekn=-#lK9dzT8wD{wRLoKY#`_mrd+T<3Y(a zT?;sH;D!#ls6@^ojs$-t(O2om7A56GD20FW)ecY1vmno#LX1pmP=n2;o53tyO&>ANz6jA1k(UIf*N zZ9tlLl2^cKFn#;ogCV19Xsd8N#Er<(3d{kZy7EJw%MtML%)*GTd8hnEKf9RHh^ z$0WtyC`aS|d#%j$UJGM;g*xwbl4(q4SuLSoj|`}xH{d7MZ2POILP3w1KZinm@&3pS0 zFdFLj$h5x~f9)nAQsQ2ar6XKgi4@+U@}qdLNS94>R|u zj;ci|@DV9+GYfPhI#xaf4K)GNi2fM<@_=S9Pp=?k%#Z#!l5y!^voFp23iT(X+9&as z+}8t*y;*-sig)>Cb2Fj-G~RJJ;fgG?q5h0i{Vc1lNck`vehz7|{ycM5`-m{sxInOI zB7Z~u1*!H$W_AJj&W!xNt`{eZ3kvC*7*W)Erz>SR!UD4k_n!PT)^d$-c z+(PNQ(YRb&gioU@{ra0M(oM^nD_04A3-7ye>!Vv|SIxaNq5ifIUx~Zw{CbgCi^1;t zJCeF03fN@I<9A7LG4l1S{vMxKq+wX7Sa$XInYO^K=^yZ+8&-95`G@`?-q`_}q@vsm zr+qh#QNZ(_h zXsnL=qW>!rT0+)Jk^VJbR`9CFTBBN=q1@@;APuv+s@$m7ae)-<7EBKHZ;=jZL^!x# z8xNAgzcYnbGUgmB3)~>ss;Yl4W!G}rV4juPFXEajUS#O%KOhq^Zf?ErlrzpM>p$}K z2zSQE{hg4mMwpD^pGbPKy##ymxIdx)EF@*lvATK9Nfc=P7fD@Psszqd(M3pmrHDfX z!sl=yrT!~2ciShTtJS7DXf30niMab43hl8My0u;U??TLUydJuZGJ099=zmBuZu`X1 z#VyJQG5Gu})c=(9H5@&hD&(fgWK`zitDHUdG7~;pq_F7uNE)(NQXVo3d4Z&^>Xm@AKEmit(gwad+zN%RELw;w6wJw9$C3U-@ zX%J!vr=jjR>a+9IEm+wvc1b**}h2iG8SBH@7w~Gmh*XOa@(q2fj4iXy$To6 zM7RWp@`zBzNUuaXK0=sqp%5L;)hZ-l2xMKgMsc;IE)T0Xs})s)m(l1WkhaIhM-TOu z@>qj3+e($k^z?M0J{x(sdWUzOmEB$aC>{3eBUuc406t)vDK_IJ^-)Y-#P5OiT0X98 zAHHI{3?7XllOh`{se_BH@j8Z;7x-m;EFV@v7_#$z91{1~Cm6X;Kf=MdMqV+wBvl`e zB9NkFLPR=3eF73k?4w0gU=?=}o`_p-aTyT974BL?m&Ckg;rP_4TCP z7_--Q?qiTE9qA3MgmBVWTX@QQYjK&+(fG>eSX`HSj5q8Z<=xn@*R)-{Yj)R-D30hW z{6(-}fyc;`gaB~4`FbR|gBHPrCK%Q3PIrq?pNyg-`V{l2Ghlk@;k#wDBp delta 122 zcmX>+g=yCmrVac|G8POB4EmwPsYS*5iFqkSnWe=kiRqQa`p)?&shf3}GTT`*v}=pZ zCNJu=5H@FKV5lv!0FoIh83q|@wMCYb-*#&0SOG<1i>!fUC|gl#T4qXdkqua>El8^#^u1_p3P0|AZ5LqK? diff --git a/docs/build/doctrees/network-simulator.doctree b/docs/build/doctrees/network-simulator.doctree index 863a1b55f538b9fca5bd99ed1f511cba34b0cc58..91f6bb5fddd58a60cbd30bf7787c08740644d98a 100644 GIT binary patch delta 117 zcmdm8f24jxFQcp@0|SG8XmM&$v3^#5YEDXNN=|B}zDsIxc1eE0=9P@?w!ERtnJL9Z zicAa)wM9ykP3<*>mBDNkAekYTp_QRfTckR<&|XVH4JZ;@qz)uQ*@{xrK-x6GN;QFG HX_6iQcE}*1 delta 108 zcmX?7zq@`zFQbeD0|SG8XmM&$v3_D+N>OHMaY|x(WwE|@|gzm>3vpibs;CXP4v`Y<6T`R?QpAoS9Nw zGENK(4EmwPsYS*5iFqkSnWe=kiRqQa`p)?&shgdcmsPW7nAR3K zPySjLC+xz^z))M{3M4c1GORKTYKz<^r`2mIxC2FEi#&j2C|gl#T4qXdktbNG7mzGX G(gOeht09^I diff --git a/docs/build/doctrees/node-explorer.doctree b/docs/build/doctrees/node-explorer.doctree index 1dab0280386294329dc3ea62a9379165cfee87bc..bb03e25d0fa899f8be64273c7d3249a7b4eae2c1 100644 GIT binary patch delta 130 zcmezSm9gy`;|51YSz87M2K~_D)S_bjto+oRl+u)()JlDq)Z*-t{DRG~jDnTCq0E^n z#YNwk85nAdzE3W$(v|uFX8#0|8B!VQ88Wp+zkqCw47u3Jd4*z=FI4d={00id7X1N| Wp=?E|X&@8+0y(us|A1s^k{$q^kSopr delta 110 zcmZqs#`yOu;|51Y85;%$2K~_D)S_bj#JrTE%+lhN#PrHyedqj?)Xi~>f|aZpinT@G zCf8Ky3V&y2V5lwn0VFe|GSo9Z Glk@o?d3pcu!b_gMp#8NEAqB_+&(6_|+DPO;2}V)KU-!3dI&l0Lf6cqSUm^l;R>u Muv#e~S(>B=0CyK5S^xk5 diff --git a/docs/build/doctrees/oracles.doctree b/docs/build/doctrees/oracles.doctree index 44357d2052c37ebf50ff3eead7afbbf133e01475..865e072c4b74fe04d5d3a59809e3bf11e6685e00 100644 GIT binary patch literal 81583 zcmeHQ2b^2Q(KpRSV4F@t6{ekyPDeuZg=U`(b`INMTUZG(cRK0aNjja%KFQ|`yd)$f zf%M*cBfa;8^xk{#z4tG@eEJE@Hlj$9mLb^c2OF%8%taT&O zfQm+Zl1&1=DWb zZFs-j0&-EM-?B}=u+7Qk#ko@grrAZtW#uKgGcC)I3Pi@TOg~trzd(e^G8jw3GN+W6 z<`xGG(@%yuwR~vq3}u)8cE~P*Nk7>|pjvi0t$bMS?0{K72{KE6z%2b>mVTdE(B4wN z&n%~Ratn*)O05J2Xq~aW)z?>ao8?MYCdxJZZ`TU-iBxMjWXKAybtYtp zDNI|I$>iqc=7YCTYpcJ!e{Q~gpUs~SE*{9C@7#fE!>N@zrJ6G{u*PvG+l}UckYNA< z${o-W1D0X3#%;F-atqpp3G!I$tlZ)*JX-h2r3&q~sf=~n;NyFGt+V@b2NJ{leAGDE zXxA$B+){iv;MuZq+;XEtw?m6e5f9?fmouA4bKn^}rV_Spe{mW-;?~KKT zFld!(-3zq4&}&`PSI*=g0yHmli>A_q^n)P2Xj$9Y*&e7Cb`FbwB2qHWpr0LTOKH%l{)}9wk|G%mY4M9=7VLX3hn%X zK(pMQs^u2#oT?4F%>o3(rMZPoP!z)4X{{=sv%P%o_VRh#%ja(|gDT~f!~2(&3a!;~ zDr`j)Q>~$WrSYvb551wa)@xmc4#~{}DK6}c6_S1DIwGl4t;^AW>%7)_Kf6!41vW?P z-lX1epQQ%Ka?bYF73C8PAWUmRc~ODXS?E(|V_%#+kk~aR)!Kw=uJl@0kxe)+Z<}Qn z-3*M^+0Hvi%C@!;fvsH#*iH$m&6S6C3H55wWSiH@qxLduxUwfrFxU$drqC>>TK56E z_w`!W5Z$K$-L2({o5mDTf%1U4aReHT65_F5f~wali}MUIpyLw9(sX`f5204s~=+}YK_)=c?0 z5uNuh&lk~onBUgx`pOiN*Ly9Gy+$FqewM|{15ou26_RCCPLEd5k{FR;ti;lOQI@UvOnIaWPKsa)FSBOf-G+wxkDX=PJDoT@G+onSX$E%v_ z0AxqytHrL;cAeUI3IYs}FeelLYPemV=pcrcrm&%#lJ4 zl7bbZkEIdle2^5&UvN%$|B-wJV=6mPsEvlEF=v8PieMG;T@C9i5P(ZY;ulV_Q((U~ z{>-#>`;4G9Ig-*yv#XbuhbjNI)R9OlI0;BrI_*Hl{#ubQDoRCH3^OO5J9` z^46J7Phl+%T|Hd`03-d8DpfFXbI}kK&j^CV9n^Qr;E-TI_ycH~sMOB@y|Du4wC;~? zk&zGUHM)=R<;KG~moMLMZhVRu*`4v(x(NdBX0P=KO13%5SpmE|lmlnp2 zCwi?Xv7X><1cxVkt*0>UVB!!;S|ak)SrK^}5TQmI_2bb zoamkt-Mc5cTh9V7J=<$Nhio~=I&-uB?V9x=Tm8k`bG_E{$U`5%#J(C@Uqu#Js`&=W zC=?5*MiEudg+dq64r6BcsNEqWnv-4hWzta7D&w-5ARr5M(VW8do;zJ=Qgej4n~F4) zO{h1puotPlO+n#f@Q8lP0a`8rYGx- zY0>MTHL^zPdHy1{U73Og&m6>Ox?Cxiv0DJE3iRIs)K9Eau>yheNOOuqyk$=&f@-Q@ z#wwtlfkrQ8m#`9`RI}!pJ|{bo6%b>E`lRVJ+eK~^VQEp@;new^^-)u#Dvktbl~Cko zmZ!7XtjuCAHl6C(*7M_9-3yX4)XL%GeXZ_=n5E|W9%i%uhQ5ChCWRM!t(Raxm&pgu z4HwwAc&(RmoL>z!V;k5TgF;vfEXUzy8dxt)(MX5^B^#L$vx`~^(?zf=)-R>XM5T@O zC>DfRxnhkWL(#>Ww}^p-aiD`l_j;7&v#G7vcf`yVW+DQz)WKR!%sE^Qb2xM9i6v5U zjaI6lxa?V!!sTK_CMh2N8g#WT<5L`zvT)_F)MYbXO<@JjAsgssI)bD{v)x(v%Vh%;HZ$wDt&8e0lZW5EVmJ3A`6u{w@1 zj1?cYXdP^_!uX0sZXF|=D|EM=;Wx?}tl%ksW$^}4*2JP*SDBi#*iPvZ6EYcCuG_lx zN|9}lidc=d&p`M34Y5KO*<9daA=<_iVC^u#gdOiM*PT)ZpxjPPc6zbatpO5ECdACC zyB#;(HwLztbeCsaFN;f_m-mu9C;O7;6_7l0+{i&N$Blb|8(#@o_$sgUYRW=#<}E4< zX+nLC*Lp2p%Zku9fQSk8bzKbGdVM)9Ce$~S4;B;Za-VhIs3z1md9627rqbDBE96X1 zXN$L>?$<VT;jK9@uy^Hv4wfGbawx`?B zogkL&<`2~rxP-uT#$gQkXPrny*|K(5vBibvCCH+Z(- z7j4;VxV#T^c)!>B0O>%yZWTJjcLkj~+;_N>P#S@S82hImME`%tYke5Sr2lQ#vqPm3(@*mZoh1>UyBWUYxu+gvdi?T)YC9m~m5{h6xW0_Gp@GCva0%O=wzKYK4fymcD_OE-bZ}`x@BxJ|N zZ<#Ilrq}uwTX1;L0yr8#?UugBedwpUh5}p5dnVJZ;`)5`l;9Y8F9EDmPp%ZorO)7Hf!ij(9Gc( zP=eZ`$~imB*B_jzF{fk`sf9#U6<q>wGAxAUOavE9W2gc9d=1k?gJ`RkHv&_v_7ikO14w8)q=s!Zk+c3Z+1AfN zeP2`xcmASRcb?_5_Ak+;bA7Ux`{Y*`9l!Qkzv1X$|NJzZZhq^ve#dc9n|)lUQXk3y ze{5iL$Dtzu_mjq|;(wrQ5oIZ|D8?8Btpf{y>d7-)%9pdLjdaKf)KqNT1X4!b0haikkZyupO<9{Hzfnu zTv17lK-_e&#Q%MKocy8JI6223C;x|WGS^3StfwHR|6P6bM~s_4d96Ql+_1lX+fzM( zOoh+VUodn2)ocBYgNgdmkUCI6c1M{2t2>Hdx6_1#ZTrh`UwZnx%os5ESAah)ws$dT z#<6C{oRDq(J!G2PfvmUn4=NA;?7=$09Q-fN!Db%Dw`calCmTaJe~rw!W`9XgA2#vY zvMTLLOuOa)B!d0+R;$c`fd9}N%t3f~X1-t|C{~HIKaoo-7D$$bnk9cIo~zvSOrxWw z5Qp3J*e#E^N$VCWCwpwb!b(z~a0gX-XvP{`iLr6)+xFnHN)w+LLv%%Ny;?+YMdeJY zFPMD&1w59|^j6?}i%oh!v75U^nanZ#A+>b>S>Q_#j~mAUix{Wla@GF6VYQ%i8CkMs5r`6UiTKT!ln^Z0yZ5rv#T?8+LvsX`Ra1yt)Sun!^A--oJ-SmC63S#P8oDSZHW(p>!mmgF;8) z;hCcamrPahtdb@@rRG?tR&(0ApfkrH7lhQ^1j5}FLf6Xf;7E3JEHXgsnd6u-H(!&? z@%WX;|9LBd6<+9(yUM4;2`s~9jyVzEJadx#&g3UhaJ|S9OYapN*1_os(U~DVR%GC) zN!=O)HPEfqXQO+w0UE<4>Gk938HXwfdQB4|Gp9=SOw~eTbD|RcG)YcC8(u|;e!3(M$uW(tR+}@Bg1+p-!!vYuAS?4U zM^`prPb74A->i_#XWGnk9-D=DY-L8W#qm;jM6Dm`VAZ1lrDqSAEHVJY0X#f&mOv9L zK$U2K)yijC*MK2_*c07#53TT?QsLQJVSWz*4+x2Ms$GAZbEKkkZAHI|(;l>)f;prJ zH#p23SR;1CV=QRtxWk!2WD93T`j}DWK<>u0D&Q~%J8(s_in17&Ba1#Rgt1)3z8DXs zP_ZpxhievQ#)Q=fCSVK_1B3b$CNEvF+C`yg;G)0lk{kY`Fejk?3S9bwYG{t;2>^IB zC5Fa%LX0@mtPF<6`ACfo<^MA6$Uad)Fet=G&~A7&N87z5v6mpY5GfdD7vbTV zizQocK|qpQL2!v=zSL&6f}j_(QV^_?Y;nB$tAt0?R`cl#f*wH35HbM6HF$VtEj}Tt zIB8UgMpO`dEGh{8 z$Rv#^8(V)c>W(>P77>;;!+_aC=v*OH#ThgdIvZGw^YKP}@ysU4o~c@BL^nDNuax8j zwBfbn^{XVY*D&0S6fpS~JUp{ivh^N@M8XckoMgV*W(pB9dOy`fTIokw)=oKK)~KEu&-6v`P&Z%-Kd0! zFwTg;9JMfc=AuiNSyAJx1)f>KE#^wm`eJv@vhcKRmuXf)Hd;F?b*|HjSg#e*I9FFG z!Knql#_+Q)#M!JKF#`3P+6sbKyemR38$-HqSy7r%+DDo}qDI-<5xf%37`}|`G%ks~ z*n0vg==L%mo~cN--t5iRTlTI>=1H4*0ohx-kep2$S<)KPUuAisGR5bRIEYFiQ^yNn z(7?kpO?>)H&1#}d4WA3BlcuHljpTPVe_qqTd=WI;lA~jDEF_wi!HDM$c^{`&i03rY zfhQeiwUpV3H$Zd-56|3RitBX8ilT@H&adV=EpojS@w7S}Z6@wsb}O3U z5Fq*wl6C?(BBbZbCc9@v#sL+z`a}8(A5p68DP_c7%6wKAQT6Y&Qz19Qo@<*$~Bj9Z@1=5 zz`G0<0v7-o*>zJOC3_cN}VT4<|oB}i179B5F0#>jX z+(T?+o}slrQ)+*f)}G%RHKCK0=sKqGiGMsZXPzx}KS%2p<51M?!#r0KB9u1I!<+Il zI)9kw^Xp>q|G2`p1ie5C;1r#CA-;L$Me;i%fiYIyc3=$iV#4gN5-rP;JY8pAB48qT zSW9|P?=37awA=`?CXTv57H{C`@xktC&7TU}$;n7i?=d3w2byswoB61uQ zJ6@rO9XFF<`J(yLx;tcs3`6->1E#8+$Q%R=NfU6P%Asnb#v3efW~753=~t2HZ1WZ*qN#7i!!vIaNIFXs0g*bn1r|5+ zc6kL*4+N;Ym`Th#fD90SCmx=;6`v57`vPJ?4^ymh)V@nFe7D7LB}m6Tq{f)Im-;&f zfr}S*4q-Xt&btH>;!qKLG#!8k&3gc)$MATs0FQIP%HgYgQTRTV8_M6g%HIzlp!f&y z@XQCL%1qT_#73&1g6o#~kYxF=W)X``WI)qp%X~!Ay1cc@ftObK6J_zq+Tx@CQOQl4 z{>KFJ#}#ruZ;2^B&rqJAPf_qhw((T*>ETjHLlt`60ttIDIADyu|1O`GtoZ~g0j=2< zEB?iZ|4FGkLF+&geTw z>KE|v%ohcl09m#`I@LE^e@SwES##yr`mC&T43^A@H5Hu}|3T;JDR5;sglgwi$OPda90sqe>G@&{5d(XxO}KSa9F=|@t} zk8M47@9w|uddyE)sJ}|oqE!5;6i(DNoFf%~#>_+cT?76(GJ!I`z{4}Y6mXfUt&Ir! zl=0=~uO#EIHKQERd(Vt+*1zJ6mkBcJg`a-bL*ZzUyfH0fC;XF zh$5;M9EK>{)MK@fm(o%?PB|*<*SqD)AX#(FLoVXBAqG@O}tc6=Dx_#fL z&iejQ_X!+Ef(a96kPttH4tNb274&+cuNC%8YpNfKU9Jw#KDMQ z{!d7psoEYO6NmHTA0^A5G)vF<@z0WW8}s8ees}#va&vzCt3dvnLeAg3C+5e3JE^hw zIBI;Io)TT0VKj6H4$HyWNtPgBz-9wuB83PGC;?X05ka+{?T*f+e-}Ixd>9C>e=t7< z{6F!8vt;Ld@fHu6Hy|sjyhxTeCm!b;L z{!lzTbC@6#;K~Mc(f)ABb%f^1zsILN=!)Zl3-IP~LYMCPNY3%dqqp$=DQi^sda@|W3_5<(9Gt51`9wPUUla|@jlDunrGJkWY8+#!@$Ub8YM8sRY5i4pbCgH#E=^2OWcXV0=&{T^ zl>cvN{&8pu#=`Mc-EjQI%Kgg`0+oN-~JD{4QMFrq3uCTse%EpY-b zmv$rxT=WUd02(0he@r{i1it9V3?828m)2#fw(;z`up_gQWk9ot8#et)Wf?%*D;60z z$P@%n?qLYbZj!YkOt;z%B4E`8on}?x@j-JID(J!4_mFy%gdg__e^1FUls_IEwkyQU z*~o|%pM!^I&XrP`+bji)*#6E~)tWxflj7$`itnn$v?g63dE+fmxD<{nkq*w`o@c@W zYDs4Xkq5Zn3lGm+C;-(EN_5aw<+G}R{gZ^)C8aM?U>6IpOB9$8VppXCLO`&^Pe@u5 z?1%)_OPNan5&~eAz+Y|QvzrE1tVpj)UvpVy=ce)PHb&aGEHg1RW0YeA!w43J#(*_` z5Q|)>XYg=b2nnf3bA8{kE7q^xw0T)3y=-l6vwTg%{dIYI#Xw42mzC+H z(mwbrrWrtZFuetV0O}J6_JKE$Bx?!?yLLqbUKDGvc+l64@vW?JFukUuLT7m@6*gfz z+~y?=ufzlpsG=l>8ywg&r4X7xWRJSGfFdh+VS!3eIxGL9=l$RZzB8L_gfyWsKA4sU zDWdekM3YumCf2~W8$L+O(}OrABr!d_AvB-{Fz=&$MK7TJ5Xlz` z+>0}`5tJBUc@XggWGiHOnBn470D@wxeUJ}QK`$9mcyXQxg|kZ>k;_jxaM+X_Cm+)vM*)U;XMZF92a98 z&T;YWp{+uM9i5c19HkwbixrH^ zsb;#5siUJR#bkpNf!?7AiHQ+MJ+NpBq%7=q5{uGqMu>n^6Ck4^0U*M4aOFgW3|2}; z!GsJ8PAHWeUOs`4MbkXMh;vO4z_H?TDZ}WfC~ZK7lRfdHoY14iz4J4DbTmaPC~{j# zMHCn}NiCfj*lxllAhw*^4V*15)Ij*t4LoXNZ(J9&hIPOB|2@ppn0uDlW`z}VZ}Zhk%Za%Y!vC}Gy3Dn zU^E51K$nf-;hCb8)-Gd3u`WArx6+2T9r_LuM3tFoJ*z!pIcI5r{#3v&s}hh z#%@=o231h*3YsopPC$&iis<+`vY|8Lr5G{Fws z(>c9?u?IQnVQZ~cKy+`!6$b&Z%gAQ25UiOEoX!dk=vLa< zlpn3luZ~k4iv@@>jyHhmWl()cZFa^GBBs1tX-xFEi~;f84kEWPpqbw_+*r}`UW8a< zd=6DEa8wxe5M3;T?5yn5IgkvhP@oqgEkHnS1Vh(oB+y(yY1r(60RtjxKS-xJF37-k z_L`hs;jp-nSUG&1KRLH0gNli*WT6gTKuqkw!!y&8nh_zwRPZr5H=Iy+O12rBEg_rl zFA4GL6$t0k>yX|ho3F7q=1UxVx6Uf zx*x>?L$|A{N23Tv*kkbU%wwg3Ox4!U20)fu*UQIAmd9(BJazEsA~EVF$o(R$;<+uv zIo9eWoW!Z%LICn`25zq@mkC{a}rOu*jk!IEP5=kXvqSz~^NQX*OHrYkb@XD$*yO-DnRZ z94${7r-nN%&@x-ZSFVr&D}Ub$6%kE#6cE0+h9IG0d=hB*fSMxrTvZUz7#FLh)6{c< zz&DZDwA@ZkjgI!PP>zoFEAoU%^$V2PAU4bNRs=^;b&qjp5pk7HQxXo1c>_ICaFC5G zzK#-5y9+K^yv9>*aDjmvGyk<<|#t=%pBb%Vo8_fZVw9uj0(!(P_ciibimVW2QY}hEOLXU zh^I@o_yAInRP&#Kbj%+|07?(pW1fj*^!c;!@XWIXmMZ;3BBu1eA29w4M3s4tw)wfz z=I3df^ZzA{3z#W!i7W5Gg47<_iAaPg^L#WL`pgT21~0TUAd~bE(R0Kj2dFt^~fyqzwXx_K#n-GrNCk%`C7+va6>k>?rx=f}8ii3(i$O3vNXHU2vLOSU3VLWh_ zMxbS?wlbm?s=yzWEFaS>`CGuVQ5BfFk!~5;TTEjLmUZV+l& zn9kS~z|!i53b03q6PMI}hZyyA3)OXO%gNp#y&}iBk%!y6VKxN0)n=(TCgQq1`~-NS zYn51g@C%^^Z>ytHD7!!t##alF&4V-He8&IwFPXFyp>P_ILVSkZ!%CCHV_HXULA^z5tOJvtGyJpg_M`u z{Yc4LWsLW&!0>Eu|D~InUGw;h7@T!T1xqZX%0+*$lHzg(?7E`U*uk>G;@S(BPc+8h za!zs@7=42^gMXT?Zv}cPU1_=n9GXSQJ_Oxd0ZOmOMk^ex>N_f?QD+qFlvpQkM%-V+S`CU+#li&c;91r4xBBfoMfm{>xT7v++Bu3JoHg4Y1ct&}d^=Mhe} z2}e6u;&5{@5fK}*nE1Gi;-uJkj4z))AsL49_lYegBE;9risyzo12SWJz5~PDd=gZK z@ck4Xp82$pJTph~U?$lMk`-ft^H{iq_>9p0vzGP@fZr{AsjYoZQsbjVAyI?*Jkl}8 za;H9&+vW>+i_ZNb9-jGfIDJ)d%Kw`x4@l2z9?jPT zg|Ax_7&WqM4kFpVA&Ik-{hLS!*?CE0WUesZ!fVj|+jw~9I|4)L&MJlOHt3^hf3$^l z&2{FxTK;=d{`*>9HN`~U?k4>}O8n54kozlT-eg;TByVSL%a4(cws0SuWz0|T8;$rW z9-jG`6xK$tl4v8AKtRt;%$TKviP`*IY4;1E-7l4P`8hg4zu{yZ(5ahwe=aba`JB^%j}%|Tcm@N86zU0A(`JH5p4Z?JUsIUfuwBB>Z5G^R21Jw)hY9T+K4|& zBmSg~$nV1l2OX{JS%2^6&w~G76n|OLMz5DQf0cwtKbybdP5ES5(*B)a50NG9(|wik zA5wrz+JE93&RELtO#WPS<$C{MF|~E>7O0tBPL5I04T2}{fEv#{T$Y)62cVYzDiMvY zdH2KXUgseLO!jBFp*vCW0RR9tJrEC^UzF-_evwf7t85%N)o!58mn;i33yB!TmUm2< zg_0Jf<01k&N$8m3*ObulSw0;PmI9>XA^7H*#qv8Nhxr3K%1{oE;yA8ZLQwrxA`~Uo zQYjs&-Wmvk>JDXrq1%Ff7;=FkhvVUyBLrrqYO5rgN)a9Qr-vo7~tg}ZSP0=_zLAP4sWe+U^W+f>J#Y(CY|zcOqT=W#tMl zU~C8mSVhi;V6a8<$pH=8NQ8eNpK;S47rtFBU`GLq@PtBu440A-29u@a(bCgN278Xr z&&Nmx|2W$nX9aUN00Ix*9S_eOD^N4`klY=IiWZS$!v(={0{(alp67FR#e*E-CrI8n z1r#oq2PYyOBW#yvhE75rv@MMXqPq(~ofwIZOpM`~p_73Vw{~~Q`(~L!JVhX$su1(L zRWw18(*(xp7DmE<>I_Mkz5RViNBcwH*5!DC#;(A_GiOR^Z7eH_H8zY;nbA`HQYx#Z zx*}9|_v3)%JIm&a`=#DP-p`KnJ&_Ka1HaU>@f#?gg9px|Nnu5q)x=P~n*F0vU=Ir! zbDpAczMye|qLJTw^(8oArBpm5@zFF@9d@$k$gQd-H%iehAC zZGmt#muksXQgXGH%y(r;AU`B|*F^FLBAUZ^tt8Bj{AEbD$ctb%m*WMHUx$Zh)=Ozc zo)yKAUrL_no(IgmwfwM@ze3CBdt^*BWP_C07%35(Q`nqMl018Ju0%ST!_{+SJ~CI~ zH5#=U56^577}_XS8fz4F{KWKSwkm|2K)6~V$Z{Z&HPNtbQij`M+@0YLmGsc)C>wMi zc|CiB?u&FZ2%p%$-D$4D7c}I4cz9+zKK<<@RuXGSiw)7<`S;DY=32#YL@*px4D)vh zDv6FL2u@=br^GlfO2X`2Q9^pxICt;@oiUDwXC|byauq9zb%scMsvxGUr7BXYs-;xo zGdY3uq~xpFd}_*zDlufDDM_6j^E%RjIZb(CQPaR%px?y9Gc5t3=(EZg`kZMjFJ+C< zg02*7Yr%XpN6-ka%BVhfBG)X*+=WvG*`0 z!LFbuf_gN0gos4H+U&U6J4uvp0o-#L9n%!eLmHYC(BT)BME z;-TLVB;i`smWxe#X{FObz<58e9Dbp%mF|=b5ts5Ayg(n{9}mx5C#hX7e77ABl%&9wlXUsIih*6Q7AD z?!%029<6P8jI`yk+Lru2j&#tuVx@nap#FG^I;CPbS}9JSASttV?h}!Y&ZWfjN4a?t z-l2z|j0c?O1c3H1E0Z3!_W29Q!QIDdc3UKvr)n)vlUkmxwdC&%#DFlqq<)5gex?Pz z2FPj*WxDN39E4ywEZnzQ-0NAS+PhngL%b*V2R>ssd>>wE*R~9Pp;$T9thO5&M zAAyhM>5I}^H?7&!x4er!)gjsk!Hh3r_0_fbb#wJHe9jg}pn5qHBXI*>=9BQn000v1 zb@a_kP!VW*3m%?%Dbcpq5s{8USkVPuCh0HN^!!QC1tew)%w4`~xV4^f8Wu~G+%XG3 zfi(O24Gqr4)>v- z$iTMyXyxOPK7<3)LuROyNkA>EN|wabE!d@0Mc|PWY8<|lNOg~U1&4<7yr3vAaL_1r zV4oZB;JOvqvv{U2YhD3bbuotyo>vM9lY{3~e$T&(<%Z@+OjGJ@koeUg6?peGc);aP z2%D)|x|3l;_I;gXdA(-IKLbKx6&$FhsG`!`s`nwQlaSt68EAQ`FIISiFF2^&U?5g# zez04@V~kOxl6K_4{%S2R0t=kM6P#+Ql{c}4vKmTpa-av(yg?98GR^CJrg@`e7|LI> zcUxxOgnB^nH{;=%w@9U#yo zFVLu4@$k&Mq_k=QtVpzg(BLVmtTn51A&~4=^KJ$A9s&1W1*fX)F3TmF`91;gehYxc zm>9=!qWOR%&)(P%A{~v5n^r!A*J$#G@qnwPz|bbM(pZy8;D9;JN44a~q~yo7q!_z` zEI~tj?c@`Z_mej7Mt}>olQK@UaOD--5s`)C=&m+gAg$?Phhs>C=2HOOW7K?FYK+rn zt<_7{$8%lI~H8jcwKh(lMlEOdM!rIVC zuArgdPG4pGiIn)ME%5@l%P`Ot{}}9wYQx@&RApmoX=Uj&0*CgUjG$OqOfQx3nLc%{ zXB4dE%VSwtq+K=`K6>Jdr_OlCl2|GFmTkuVU>deZ8xe-se?kiOC};3%0jp%CNxI60yZr7H+_>z`J+!oen}o9zNXTH5n^ zS8M5p>BB+3sUYSU!h5Z5G;mz6-lMTXn?7H4&qAwIEuDrPLdmk9Xc9X8bo~t!8QjMu z8J2gq%x|F*a6L>(h#|JhOmyfb8=<1E8DK3cI*4Kb_wYKS3I)wb_tAER`u(ag-1vqS z#)-))xr!J^pIj705WdvN-$f}uuU2-EgfgllljB~4;@QUd_C$74$7a6>7e_)fz5aSF zmp=I-R=O(!CFQ4(nuWDH;yxxHO2&iG*MQe}J``aDn3GI$_1w;8-r<8<`u z%!vQpZHwajImdf(un{OrNex6wpIAtXWk zKaA(~Y8e%HSf_QM%iyg=;V@<-{gIZ*+0;*N7iBLL$bTtl=0jtj0T_O7Th|&g95KfH*`PoCz8= zxL;s6>LL@WJ8q=M_0bec>B!j(;96=pF6ANuj-UcqtBYm92_1lD5c7DIy&Hm-Yj!<) z!YRkUezTi!mav4Z5=#r z2dWJO=jxPd&dk6X$DM39ngj3zDisD0rx+%GcL4WM^p~8e#(-;z13VZuFxjBDzyQMM z+N{VjP-s>Ll0i%-+iD*%zXme7gXv^|K#lOmYMbBS&G3G17;*8o5k%w z?-oIGv-sRBJ~xZc&ElaJ5TD)VX7Nztq1w4uXL0j8%vP9le~$;e(DCV;-?=8mg4b@v z|DUA)QPcDNSmOKUcdBY?f`={x6$EM&RVkOAl~6Ykn6-&3_Wp#DT^fTLqyH=b<4g9H z!|(7X)4#CX&>g7ouPBIi{S6P#{9UTaR4o>4j5dwe>it8q{8O`t+j6Mal;v8ze@WVH zTpM(&kMcZNP5R_Em;La~GyBW$O#V6$ZEf8}Bx%)AsjfxzP%3+329|@Z5;g~&&-1;| zK~-y|y^mXGP~T+{4S!uOfHMsH#}mAb&IEQFM0@5cki7!O139hRrd5|Mwfkst>D~c? zS%Uh(WgrJ4T{d41l7`IRHyUCV5Uu_ysT9wyqzhjiCM`UC-)|wiBFbw=2+D~T4!@hccBCW@tJL-8@*7%<=e%wx589XHJx|YSLvT zF_SK9vV3h$(sF4jce0ifKg^Kv6=@i9{UN(dGM{2I{|V66^8#X+B_s$yI1(e{5F=UF z*9bJtix@Zp5snlA0yuZdP*fv=ST>j_rXhS`00nEOp!EQ`+?2BuM;@zdkcnpkbB07U7%yOh8^a%BVZwn)llVu>FtRs->Qm9#i*u7TEHH3u zkJ;u_p-Q~lRt8exG^C4EI9-T%h9%-3|7VG4`bd%fDw!%Oe3lDk5`-LnFPVP@GY{qe zhpBcZD1h;v!2=fr39WEJ5XsVCC2RR}EQT#N2pRe@D|rVrZ_kr!XGvOw=H?!FQ$9sb zuHBPgm&nPr5BXZ)*;0Tf*UrH=oRg5>nf#ex=he{axbu(k#o_E<@Vs@^*6`VdKsnKGX$DB0!!m;3D|gqijL_7qGz4?XGSmih+28czEVsQc0$2abQDK z)cpm`x=^xQq*?O&!69e01O0&k2Mf|V#I5l?QV@&;5~Q>PZmwuC)(P}^=s>l_WwCY> z8+r*mYnyTcYg~e=FhO=_VG+hgD@$6<1YR=KOQy1sAc8E@4`^+te+v2zEOqW^#Jg4l zf`nC){7{KNY}{Pdgo#thtsxcdv0yB{=wSnAi?UN|B3d@?iiJw8v99EDY(VKR^ozl< z*&L-R6zQjbaC`h>p--Zp0-<*a(naW9D&$->N6s#ClF6c?Z?(`TLC)ciQ1lH+;!u8? zL+q~MMY9GtVEnAb!!wr&LYcb~A+RJl3!0UU-FCTPw$5U9EJ&sN+-v-p^~h!+XfIU# zpl$aifMn3NVZ5$NthTBIXye)W9*}oGPFt1n*{Xg_HtFUoSceV1wgKNgvysRk_?n=L zLAObM3zwKH`MoM(*N9wq*fkP^oO2bQ8t$+Mwq`Su(WzVT@XS_x`Zf|)uNq`D>Kf0W z?H$o$a*D~-g2^_;M9#eJo%#~oLyr)gKC%__M)Fyup}8+|^=6)HSU$--_rvQb^Drh! zQq0~d-r3G7Ebm;4@3@SFxPW&ATky`P{8rv6@VoL3aqH$Cl7hT5#;3aQB#|{mq=I!y zczDLar_Va9J;^$lMdxLae_ZlUX#Tvs4f?_^H+Vp%EZHhH+awBag+8Hou*>2>m3YBR zRCveikgLxdm|6Yk#u|PALDwR>2-(SLpTY3WnEk{>s=%MY`D~{&XsW0eSVg8h@y?zU zbdoaq6TWIxW4WRHzZ=~tR14D9@$gJTkjzwV8%Rh|ZG4ZMrsQgAu6zmpQ#4qsBli}i zqIh!qsscQ@MPIXN>pEk+%5GJWDvb-L6eriLH43FndJA-hn$vF7krVDOmHRuZ+^vmC zr`{L!Jm5yX`ZEvuS4ttCU9E8cnV4e=GfvIu&gFOmyZSyt*{PZJxW=N(xUQMk+s#~L z4ohZjIh%-E_4?>;upAx&(9!zBjbD;M;cN-^kE7MX?Ri6?j__^tWUO%*bEM29$Yp}lZVQyT=HxpI}Hv#PfH!H5wVd0272+u^tsD;f(?k)_b3+NaIG*AVc z;q;_W{8$_~{Du2k+Y+XMS~*9CaVBta7d-%G??dRLGQhg`+fnN#KrlSzC7_1Q3?rIL z|GR+?6D#4VGA#Rf7l}0lT-7Py(ieE>jKMbmmzE+(q~L9119tTVHZM>G29&jm)_$+uZN*%|x}ZxF_Y0Q1s|h;P@S zIvkDbqsubQ3Cq*nJHWTIqN{Mp<4m$9dA+NuBAno#t_UvFjG`$+jol+hF@h5rd~Gr1 z1(4FM9MZ((ipE5xcwr8-xwvc8a%^0>rQMVSN zGN>KC=QyKi;Ql9<;c@JiE|fPap=74zOCE>7M8BOBZmeGj{FxX0Os$Gj0E;I^#YxMuyv%V&kQ1+?Z0 zQ-Qfn9C31D&>}Pwz&>}7L=Znw6u}5Fr2G8#U_Mb)V!l;9WFKpZ0nXYx2S@@`;sfns z+Zdj=hrI{W93nkBg>AGno{he8kHpDIHwB;r$5jr&cx$NUyqFp>!>zV-rfF5YF(T1_#T1n?N`D<%7lpCS9tbI?p{o5KJ1{KJTkn4`jKaeV_pk0wSRM z4R|0{i=dsU+E$U+N_sluJw&qHs99tuHey~BXS|0>+HE-FebFbu!z4GosU9wnZ&Jwl z`=L|SI)^RS(b2f^j-e>kAQ}lz0i)E~8k$E(XSEiCLHlT%x7#n=#_qRU*rUs{ z=DDb<2lqWsFo^e0=z{Zn79;n)0AD=wLdl+~T4-!Vl>1&J$q8t~Ut(9kSQ3Zwr|oWI z%}Y=M3~&n`2m~U22W`F@U<^SSXk)XDhYji7g6RROfJ_*mBhLiNt(t0! z7H1gVW<nHR3L2W=aCLZ3&VDN0WW~_7xBQQCQ@2QIxC8ebP43hZZ%)lQeTl$ zU)54wp?kZL{+i_by3H4lz2kryGr#~iGO$=p* zT<}Bp(y2VbeBV`I-xFZpS77Up;gBui#2eO$0e4F|Ek!6X`@G{NLVNN&I1>W zq=+E=5|{@UN$J*4S}T_EiV3_jjfN}FnJa95u!0BZU zcL*GMot+m-re6!(-&nX*kK?>d_2jpb9&e+rB2z z{@xFX;O{+&#{K|_p>Y5no;gq|&r~gLY&=GX{6kL(K@O6P^EG4shakvSOaS4j3VUk8 zccD=E?{}R9l91U57J{_zSE8#nOtiQ<57!jJsd){j6-;hpGpWGeN@gePq>S;oroo62 zaJR-)xH1PZ;zY;5sRhW?#2^vifGyadW-NhpKDz?WNRGiOGH@12?P5KNp3260YJt!o z!9&B}@GUP3CBsnu)&FrsGK+vZxFUszXAYKjWc~x&fnFoOhSSU;(xAn*L5x_R;0Mk# zOC&?QYZVyB;Zmey9CF3g#ZBf=B!F&*;o+IX1&U5ItT;B&aFUBNpE*JS94P>fQUGEt zisuZQW|zZ9OOa!2ky)3+cS8nSHntqTJBucl!^h(FURe%*gOogu(Cu>gcznnGDMSOy zVL=pqaiaW|zAz{8yDo=`R`+t41R%&XpS_mDCnEu!vkVWAfVy{K!_1jL0sWZ41IL@#AR8~2v=1gLIn^Xt1|nG^w};7nTxUsIWTcyW z;7$2-J=Mgohsmj?AN%b;TMEdjCVa!GCi$JopN*b|j}jv0bD}E7*K0gi+-sF&&SM>z zT=4P!K-K-yFF^6;hq5wYBD4Or~Y7?$1j|NQc5wxlI}KuP*XG) ziCdqpIdOIhr;t*z*+A2<%;lo>S;sxp5M14bDo~MsY>C$mBuMYSq&)zg1!Y1#z1xLJ zx`@jLSD}sbRXi-t(xbbGf+h?YE>6jTzs1g=YoMNPcm`^6BTi^MS&So84q3*WVb9)m{+7edP z>x~Xf*_3=+D^t!koM3HCGg#xM@oXLL<{4|(wm&oh(qm0wW_cFguw5=n@YrJPdbr`2 zN@2y=M793TU73j-(4d1V9V%DVOV(HS!d1o;W<)I@HQ);^mi0_p$ZCB@`>d8A2;tg6 zznO?$*j0-?y3UFMKkBXw>^PzVK)?h?+wZ1(Vt8PNjwwVGqX3bk#w)`bTQmAg(q7EFj{ji=2^&K<;MTHI<1>jK?-DZ~}8fLq(tzw)A>OIcA_|EVsfpXbOH)qezth<9- z$igI#&%u6;IHRl~bA4*ZB5?L%VVa{6d^FL6%3w&eL2JomI((8`hE_`Upv(GDE}0E4 zyQ)btW0#^A=;RwI9V0qnl$$Tp<=48IaK$w&Hh<`RG^SOZZ=Q>|)p?v+Xllf*V< zjZfcPLESi9XK#~q?t>#e|96P;`!qUd;4mZt*>UBpu?4Xfy(~O>2K>8lTfF$J4~D&jr(UdeO2{v<)BHeYe(1Dp3YALiX;}2(W8sG{VF0um4z*HG;_6(i z^H{N~$Bo9w?`Hseh8$V#K*OTpUzg#*0qO=kMWJFryGAs&cBpvCf<9HQlyEK<8XdwJ z%MC0MlZc$EzK@V5zS3Da{5yZbxvyjx${#fw?aVdEfv&h89=HWmvS((`j@g=>60Xj! zm2xAtoL&dg)f==Ok4kbJO$EgTSpn&o7I_^=q^udkYoJ!d!!sp;p=&T!8e4T&+dJUQjMj92sp&ecDSxLxhJ>*@3D*m3&%$N^ zlODs|JOJsoXlx_lfh?KaNO%xlM>i74#Zk#|N8Rdv$5C|yf!lqA2jjbE9zrazk05x0 zg>RJK(xc{~{I2^5#HxEAfz2n#hw-V-1W`22!|@({eG?v@xf!3nJZHVy*U@c+%h1d{ zBNNRdwB|=j&5zQW^Lq|{zzDG4#G}?D;yX54Q|8gA6<%|X5fmP4QDB&oY&JcDjaN)R zFsY6hXM7OgLJ^*uuMo`RP=*ra@ly7j?d5Z~GsOM*+hO3&9fWd~l6eC2oZ2a`9R8z~ z?GmVrThO%XKM~2Ed6EE-QC40@4$R$Mqja)zm~CLIDUFQHjLVxIpch`jN26smwP6uuNMgr}I?r5-F z$?k@jcVGg*sdIk(+t2>mPh;D#IHLXX8{lOHa z5-j$YHEK{YxYYuMWZX1R36f>Q0lJFbe4xP>Xmo;kB@KosG~Eu4q5vFJ7ld=P-gGIt zk>F+A;|SHP10&%?3t^9rG8+^sdxe;2K~T!LLgpqwq{~EIxkbpB?6SZ4>dH$c!%+U0 z7(H8qwh`U`aypxrq2=Jnm*WAKb0I_Ke~%2{84kEmy?mw6<5iX(v-!ZiTGHcurLZUo zUW0TyZAHyC=CybaqQ4Fg&%9oMsEWdBV=4-7OYi1>^9C*cMk)R#EuK&2OEl`uQs6DN zfO_xhK;kU$R(U^rW8Q{zGzQxS^H|8d9lz0tci`cfcS>Px1gnWPf(mWV!D?<*DDM&| z?^Y^?-Sue**#5l>|_EBBgvY!6I~p)DSQ zOpMxCPlOvP-vYn}-qCBdA2|o`AdF-H20pYwfK|G|Yz(VIGC3 zA8JfZL6S2m*a``52n#chNmxRz^dY>v;p`f-E$c7e7{!dupW21pIxCCK9@hB2>#)eQ ziV8yXAUIEm9f5Mj(F=sQ5fo6CC<~Pt7{<3)0D*`NS_#37Qa)D~>NzEvi}jV(Bv%K8 z^F?3?ejoX1SBBvCBLmp~1HyeD#OJuW-Ng9Ix^$H5WdZ#a1)blF>5sDk0{lc&XHn3p&f?T=+aA&2&zQrKWD|{^Dz@m? z_Po_s0Uk7DGwcFIPW66GYE95EIMw@g=I42?*KZw^1FC==6ixjfG3fcuJohbe_wL_Ky&4f1IgFmE;~K;4!bOZ*kMMo zw{&LB50S42?S3T16Rizs_hS|#?S6tUp82U{&r~fmq7bFs&m=hkZNmbg-OrhO=r%F^ z1+sw%zr+KlJp^JgYkh-$~VpCII`z*@7|o6l4+v47%fA zEXMAbhtt2F*$WqvW1xra2TKLF~iufJ?o=&+I|? zAQ;;nuELLyijK4u&9(|ZO48$GP*|L!jz&88GI0{^7`#Vo?uLhF?k+%d0n2K^H|4X! zi|&0_yJIEuahf@BwNtFICiUl{<0ab(Hd`K&!0x50C=S*jp}9=Q@oi`UEEiV-PDCX= zIPD~PM-Sz1}jLuzrIYK6c`5Fi-1XCht5nUSjd zZPl6R1iTwnn=Iks7u?xFncuIwHt2b$g!56_$}Rb;9b1GdAb zDUJPPm2)KHxtcM5A=+kbvNFMmp_d!dIO0W{t_n&kA7Qot<8sZ;aJ@Y1l{M!95ZW5i zxkceTU*IR(x+GAuFOVEV`7?GO1G5rk(AGgb;AAfVGPef+5M}d2*>s^my2wJ(I5f#t z(y(^18r#akSJxfE$Ydleq=&lW%`qgeecGHOUNuhGnbj8g0)cC)pT z?J}Fq!}cjxg#I6`FIXchLU1p%p=$@zQA1{5Gc>?R*xwAjK+4o%lH$FE_p^ux z?|5H(r~Jy`?kR+{F5~n;wpo~Akn}9Ju;8kTcEy}@ee~c<1|YJ-QV}0})x}d9rz$0OG$O)ltn#ex(<7#OCVlo<$Oc?WvGC`F z5evM_SG(U|f&L_S+9MEseP;P!dUd0L3*GAxBP^l%f7X9=ntM@FY_{%Y0qoOQlPB-C zS1~U97>0GHNOEeprH4|O@pw-^U4MhoJGk@AO@l9bl9&}ZH5@+y=x}m%ZYT3bOf%$bupDlxi0{|z$7Y`{Q-^w@|8E-J#OZ`7r7pv#%R zK=Hd$(y!9={BIyiwoxwIEj6x4Fs&7Fsu0(b!BGrJQ-w*srZtIM`+DdD!oGlcZ)U22 zTV7#Ns?;Hg?E$1dt6-EIgAD*Pf^|B{scKa0)lAp$RG3FcNEx zQ;Ini$YpAqg&c9UE?i-4LAt2TTZMYL|6%Hxt4WLgD)}h7tl1_sNsw^E(Xy=Jd1%ZM z|BLKq?t`{tVBQxG&s-y9%2X{C$xo4`8B}_Qhpux6i?0q$wQ#aB_d}+Qxy9qSErU+W zbi{Jab^&)SK64B4g6>$Z8IhNxe0iulGd0$zjrgTpQ^0H7D#b(`zHT@C6oprm)DlyV zj1|=kj${~ThDAl3w4%?lYbNAv8K2_9b%@>e9>GAzc*N_Cxx<6Di~vU$H~6@wD#a%8 z8TW{DXRsqb<>yS98uCDFP2mAASA42i!&o;Du$uv>6!v$LlUu0w(eDRDcFu5#41#S5eXX*YbabejGpL$k& z9Y7n@gFCdvqc6QIP?Y=8JIkn)^5%4Ww?1@PvjfG!7t?saxfP$jz$PlP9xUHa9=Rpm zL@_g(fgRs$7+5>a{qbgFZegV~f>nxXo9pmcm{*IJTFN{G=?!xu zK0WhL=FJ@*Fx(g}NFlLY^Dv|U&m&MDB8`re9NusP8IRpH^KhhX%pGFJiz77Oj&w}T z+=O?z1nc>HDqq?1O3NzD`RZg~IPA!w=#LdqyIPn3+Qa-r6?*`CB~2jv!9 z{1}`96nQf9mA7on9gi+=m=O@F!MF$``jhKj+>d0Qf^4}%*#H*>%c#EwVwk7$^+6?P ztTSPrMo76sovAT+bGq#r%&}$1X`83x{mr=(bjxBk_|G7q`9!VQHqYdb#f*Sg?@W#C zq{uSQ!aMZp(o$!tITDP1*E}2VA;?ONVg)yd+04(;%uA*Vh6Yh!gE*H{=DCvhD0Ul$ zlJx!v1Ou7^et#Yka|@Byf7)5+l+5$_^Dt*;rA_v4cU()w7ZCJ8x%p5^$14-&g#uFg z9NdjNV=K6S%DhP49tE|cFgfB(6)Lq6Eah5zo#rHj-uBnq)Hw8Qb8x1 z*D~88DbkOXwRs(XFC9U2M(SYTbs^&GrR*X|8e9+#ONw~|vvI@~#zv+qB{;FZ5pRYU z=9Y9bsd*DK9+ca98BlsNzb_b3oXlJB3y#K1;i%e1JVlO25VmdJiuX6=7FlZ#`s!_X zu`#zq_$s90+vV*c?i3{7NUMV>(lzhEyPI=|kbMH-@lL$UrG4QsJw2Um&LA2^U4%!; z*)f3J?trAu>8#^Fh4a zo;zBG3hY3*V-C|Z`j%Z+G9NcN?3GW1I{`LII5U0Vzx$5-FMgi|!w*Rtxf zu?JH=uDqjsf~Kd-uPL7{Ztb1i;TQ=JjqQ%KK=qnWNL`=AC;ZC?IX8bw>c!mLbI$MN p7WtEnYd(#v+s$Y2nVV0R1@5244>*+IvwSMzui`0gg zAc6GWd+)vX-h1!8_ujwc`~PS56}_i3rZ|}7?q};sZ+B;BXJ=<;XJ=<0ynm_OEOk58 zx|?k@%Z{7k&uOR8NwxPIyr#Xs*FIn%zob!|b~>{y$88_zwGSF79J64-f@-5`==wL#=voHb`5vv2ZBTx^A^Gl`b~y`}X3E0&&Jv zJ4{eWY1c73t0h2OvaxV1E1YiC9io=*RGf6FY4A}mx-N30HWu!T9DLuIX{INNZncyy zwpylHELD(x@W#T~Q3yTNr)R323g9(RdAHeh>$B;dMKjAh(Y&d705bKZIoFYR3S7CVLx=6&!KrP*>cc-e2_OgwI(@>;R)e@%IaEnS) zR-T?T&1nImL}?$ov2Z4`qh&j_M5$gSN!;$l&}6+ibtiNw*Fx9f#zO&c9%Rpse z{+KAY40W1AKDQiOS(HC2$}2(2ah1jSLxod@iVgd=eSBp}{us+A_T5mxCnr==`C|hv z83O5t$R$HQm)x~-aQ@DGi|!Z_9vO=8$lWT3$TyNV>8# ze^S67yUBQBWm$fOeX!$!DcdF9ajY04Wzosc)A+9C3WfUvxA zQsuDxnE_{@+2o9&fHQ``8ACp2pmF6PpEFMG<`yRyY{ zS;a!7I#sFTf2Uq-Or_eVK{gC{?Lo)}Q=GB?zQhekUx+J78aty9nDU?+Q=V@4+s2NF^*el*2^32dBz!Mp1JCb)6cxe zIcJ}>YSr22oW3fRKY-kN#`gT;iDGGo;kY;xKg!(}Yj)dbZOAd9}TAgZXxF+3~t+~rrpF6BMR;O+bfD&cA({X!2RM1k%C;{f0-Jjfu$>ZAyQPxbE!3@`N#1K; zj@m1%VPjvKV5}FXOtDo-wYLG?g4ez;(S0(|-CC)-X-o%I=mePZc4FwKGj?2OMuI8P zm))4+ik&ou(hiyI>P~seG5-A7>~`F0*-2v(t(Vgiv*|#_r6)00x>7h*oSZ}#N%5V< zIwr>s^p44NL~6R(2(6X`$hYrDdR@_vUMatu?mqy6QLX9MuJ(3N>q@UZ#>UT;2~`)8 zT;)u+Do|G3RC^o*EPCw;!dQZe0%8%lQW80UgN$jHf!88r_vcdws7!k8DS#1X1}7IW ztQY$gwJY5T6q!Yl+pQPcRUldO+B?|R+Z7Y-6bB?B|JJ?sG*Nn(^fTC2)gQ83r%Cag zt~N^bE+i;*S7%p|3aPKH3Ii)+YC1F?2LiH_hPvdWC#$=t5n6uFrZ;rb7$9BO5r&2y zklL_$3z=2az_K&lr2d+1H$s-J2%k2Stgvcysn4e^^zFWcej7b)ytWInR@juf$dL+V zXvb@JeJ-^EtRkXwXHN^;GnHdSbndDw6w!IO-`3fI3WelVUi)hH8inMBIo2c(K-C=; zk`G|u81H89q9c# zoLMe1N)G1wDppKb7);cgr5))~rC4nYL$QY5WFWc76IKAqRGUq2t*|V3Zo)}JLr1=9 zu`Y`Kbg?m;-ht(Y3t5)}$JDDO(au*QZ>b3WO3#2rCp%69%N(~tkqRUr9Jy*MMx|pK zFWlxdSQRoArDXwQx@2&?s=E$Ac2&Mw?5Z8tsZXXLzyJxO0_zMB#pLV&O{}ISyA7E; zi}jIov0jf>$~nSGXIfq3WH6}8=}dKcy4xvE)SXN=eQCuMNsS`aH_Qh!#o3kVV#=My z#KLBPTtF3sL3$dCO{y!%JPZ1^x}9On8+Z`^veR+^oJ~e5l_@mK&MKTExNZ!!>$EmZ z=nm}Annp8)x=FlpbEZ*m7J(B8JCSZ-wZsZ!uoD?sOA;PPZ&tFSi|Jl`W$aIPAsEn` z9Zr)3?e~_0nR2$-aMH|?LJpFG6{C-(5$Jr76suZrPH+E_d_`lbJ5i{EhNdxRf>TOh z74lsjYbg+b%R}N9PO;NqzYhMh*(o+;3aZBJNV+;1tDw~EV*Yh7yLL%HAhld(+T|oH zaV|BdL2z^wQ9&h*^zv%MX2DX{nMqG$i49#nT?YUo{gEnHF>!Ov5ENf22oiTt->rZ{ zf&t+Vpc$glI1Tj1!kW{%Ke|OmUe|AQAL+}D>p7PX?l(U^MU3pp_-sEE0`Fm7`vyw3 zdCFMz_4LI*tBYd;16 zM6J6~)Vhi)a|a=p47v7Wk?nC_`|+$NcpJgt310h&Ogor3gp!tsJZVluo(x2&kp}tO zPeC))(dAF|b7ygkcn zKbt)CK}_ryKbX$pBHCfh{M1jOcWbCOt;l3asLNP zi~3Hd!SAe(nj%$kBtWZ#B0oEr&StYRi@DfKYGm8biEDMwP0moOMvwQky60h*n(up< z&Hfwu{`r^`Uf{J~hyh(8A3Q5uV86&~znJ6va;O>Gz}^@X!dhTC4mZ=pdTE+QLJTO` zpNyDY)KZu(fnBkFDOabe9jr&OAjHZQYYZ8RZpUCx6FL{xWim)~Uq@L!o7#%)M9geq zCL$n99jw*FoWs>HhclO+SRy6YXyq!3%brC!TrNgrlH%d7K`+o{e2Rlo7OotYx@^X) zX{^9GWCPtyN077!t51=E*wbpdZk6juF8+X=8ViXXY!3~v3@YQ&49hH8mtpw^aV85l zS?GmJV@tsqEZ9J6XJ=LSOD8dgvEswdtAo8$7+ZEju37HHmFWS2GQju+tidcUza%bsUfNIcoajrQmqGH(b0Y`A zJU8wIZhSdp;VZoMD=7=fnJ-dVNE7O-y!NZ{T2_R<0Yprwujygf_G>G56BFv|DhG=R zb8|s^TDzP@y0Q6fhDs~I+t!UTVy!PAK zF2a68DC6JZwckm6wpx6O2D{T8=uQyJcJqg73OqevI^!^g{Ik9xqHI~atJvZ~^AcoH z*=bHrx+Cp(McN`3qj&df%L<=N??GGk8ZPez9p2})-%mOauXhL?;=6)Q1711YNhpuO zLX7>>51{`)=(RtDV$%P%Yx0N2a<)Ir)%{1Xnd^2Zu?x}uXnwzJuwRS)dTe&%?Z*H_ z_HMCNgsQmP(f)XTAvX9Xs-^ZPxMw-!ljD<#JxiiAh8~(uwLb;CKJB$X!~R=_{>zK6 z5A;2lsx0NwLH4hC?XUaLz9?kJc3Fij_=ea1CR=bs&;mFbK<$>vHx;&_B8Y#hPvrsP z-xkEb z{wZ;|KbA<_Xq|;kmNskXP0-BY8Bm7WqRKft%hw;A=?SN76RCwnRTW=Lq15oT3W3aR zS=kpTHO0*YGjgXXN{qGZMxcnH-4@3rPi>4#8?n5LHi7j3jcsDN?p?oOJ3vg$n7?5; zx7vg>YM@@-0bMxdcDTpVGVmlDggOAZ!Oa3y6;`qkmNOAtFpZ%G?DI8E3k{;JTHXju zvD#13zYHLu?T{L_)kMy^(`4H}1ND7TDct$loWfpFHoeAf zzqtU(9j6jJHG!12p8C8jQ@AM^z~+idY6Rk@izWW=;^XA^{l>{z{y6yq#>spiHL#w7 znEp@o(H}8x{^Yg)%yGm1`b}T;1TqyqOMk)4`B$&~Hx4H1OKa4D0a;ZaWKn>DWo*IN%K9 zbY1RoucUROQ7+cGk!)ot=2X8dm;ZKino6)5PI_!BS+fX437JFOWz1qBm^vnkE1q4a z+{+3TvxJ3m^8}T}QjDM}&<3n|Fdm*cL@1f5DV1yF$6yLIOC`%P%~IHmv40UvL{R36 z@I|jeTk_o}oRWC*sb$SN=))eq1C!u1J^E>kQ9BiQ8;%?Ffmg5K5pyWO$NQH9q2JIw z-|yeUStz%+P&xw8L7^k@@XS$yOQxoH)<~1S!g8WpuR9%G$C;y%3&ZK&4h!jov*5C<^DNH%z8y9cm)zO)>X#MUgdkMV*xu zHMZ6YU@oA{-2|1yDD~yHNi#pC;EDL+ndOo_Q?t<6oTxZINs<%LMspPBCre_kur%Ik za|%+>m#5<4nbRa&CYcS`6A9haHv^KHE)ksb=rcA4@z~0YWQ*ga@QB(9q=QwD29&-% zU{)dnFdV|eGg*Nqi~kzY0IOB9)+1mIK-?DHHLMk$E*0KgD=gebzym^Jd1{y4<_xLm zOk2^f<6Q*WPQwaPg7+I{4lE73;wTohbkgC>AhLxsBVEg=X&`rVM)hvkfE{?CS^ZdS z%8|7m*S}b$VmplIPN>h8v9UD=Gh@PP1`{v_iGdw`8k3hURP9<&6mL=6b)^lrQCJaB ze-)nmK{d2O)A1jUOo^d!mJlP(G^>K4aW>LrXxu|+x9WeHc4VKZAUH>ek)Yk^1srYn zl*E35U<4@`X7|FwGv`XS{(^ucw}Rk2$-LTTwt}D^vr-V8FWKUFt*8+mQM)&vz98rW z#N?0x7+!#fXV%~o(ub2qjc7y#!N;S5;0`}L%vx>tI%)TMZFk|ntBvSHWvhr-yinSE zk!|mV39%?fEO?pL>yb$sQ#N+|V9T9w%p4*tYc>F8AE9#}sVdH(q0kv+G0w*q3g#D2r@Qlx;%FT=w#nIEQgKktpL>Ongz`WAJ)sVs^8*xNx0SZWdv&rC_S{_M@xTlTI<=BmxSi0rLhNY1Xw>o^`OYAjDw zcJP@KzfdV;>UaSRrt$Dh1D`%qvzjPV!_@-nq-kpYmgH}1{(`1~`66f<$>G`@i;1RX zFyh&f_jBXfMLO`LpRATLJMjjH&fwvhT~b`9J604$H1K&fvs&aTDRQ+IiMqr_(S3kq z@@yt(aIBxusiorr=ZtBNR`bpain7+f{PvX%}0T#j;y*oK9?B>k&BErAsK&Hwbd^z6&MJ zjYt=X^Kfa)BWzo|+q*4j3aJ~FI*%0G5=|Msh(rBRlGsn`JQ^wBy~p6;na4`D{!)h& zuu|u7lKJsAa~j0R+(ch;oIFAD#}QmnBVgkAL_Twcy8_(qp_wNkCvbi;9-es$K7Bbw z#G>QnQosrpgSQbInWt*)Pm|i8uC*8TMos8sCAy9&eBvLE%9&?K-Otpz#W)o8_At+q zgb1b0v+<^KB7Hv0bNF?sxP4sgTY{b|1#o!IJP+SI^L+W8kuVpzn+|hfUO<>DYDCMj zBoEb@7YdjN9@f?x)cYb9$n9}8FGhCs`%Ccf%u5A$re^CV;^=x1h-&D|B+JV+OW{jk zgNq&di`AP=oRZSbGcsA=pNqXQaT3w(FMG63z1Xm~!o9Zfac<3Ru!S~rCwP1u$2jW_ zP2I3y;~zv)a0(O~U7=$g_mE-vqWRN$J_HB62-~-p^`OKfqPpb)YXEgDJ?91gJZO=! zQBNHzLUZmcn^#DilQa+P1Fw_}xkB!?Ac}bvprK1%jfZDmBcL<44QRBDy_h^AU58%@ zjzy--Ymtn;ex20)dRsS*WqrGf#Cd~ciW5gGq6m5;(!q~(r$}_Rc@q-R)HmbdnYRce zou!F@NS*v5i<^0?yaK2P0o3ixB<5{E28h2M56`>=F^frQ?t;Be^kHuj3g(Zjc(z< z{VX%*_HHXbhdR)ypU1;9Ul42pWZ44gRNrv@MalIg%~e?Ev$D=HSTZAWRCF>3P6>C5RJ{`l~EPQhyC!Jo9zQo~c=AL^ew5Z%A?i+UQo2 z`kTz0yA7N4EdT^vzm11yz9Ur!m=WC`x_(!3eNS^q6fhAHO4oot>5rAAz8`1F?@Pf% z%K|$60O>-fA4)wxvi01hxBq(UF+XOZ6*Zz3rQ%PdaH6i!JgN9oX3iCM5BO)u1j_sz z56}EUz-4N-HX`U##+RSJl#IX9jB+lQ2cP5|gr3RwPeTl;8xK!!PdiXk#OH_dz$!t^ zt$Y4_Iax*AC3plPn2a2GCu_!~$4a}+GR=@s^uEO^ErrlkI28qDMHCprW94x9!9fdg zAewZ9+UaG$~%B$zO9^ax>N=y%tYQ9)-Hx>#Y)w66M**yS2<=wn+O zQ-j&m7Iiz~CNt`TPh%I^aRkKo3TFFz=Zjy1YUsp>^c8jLH$u#0CvNiv?r&L6kB`q2 zdryh|I}ir~@wHF& zkJ%4Mfq(bM!!rlq6B>2RwvHX(3ubYyI8bsOq`3;)l+kz`jY>ddL1=XVutuN+kdMT@ zlU|pQ$;}DI<$%QuT$6As&6`gCh(KgFZz>kn&oo0 zzWx&d2hCrOhi6WbTHymm;45lus;Uu`Y$r>WQ#4EAh06K9woC04=as}gp7uF-2}x*A z8M&d(sH-svxH&8;a1#-xB(@gLigNfmMR%5-JkV-!LY0cBe;NhShIR@)7?6qpXXw}H zirSA1j2Ov|$(mEOEpY;$ChbTPxa1RffaP*`oOTWZUvwnHeRyVtv@TP#jc3<|9l27n z3~3he!KPoSECXnJg*^l3mx36{eGGxwO|n*m=~lZz1gv_VbEP6YK4P+{pbuvcOT9_L zPx^#ET{7ef$AiOmhnTrLGNQ$2;Nh7wrBvo7O93OczdKR0rq8pa_}P)-yK6D6N%xSv z@fIjt3ddDQ2j_6lGhqR>q%-Fr4{*OH9-bKyfNBUOI_RoOwiehwNr>H2`d$j`Tmg2T z0uw^)u2et>2)6jaNNa)}lURBwvl<{F0L~Zq_qOm!_Tfw>ol9S_zPfAExCt+cwOBmp>*nNE z);N-0+f|`6m`a6B*bcXOiM}hL00gQiiQxtZwoEC6rV!Ahp)H`u3SL;C5{u5t|L8G4 z_<`@rCL1A5Xiko#r9p})y)eb1C|}VFXg@^qxdM0fO4Ia{cGR8C2u}`@J6NDO7vanmK&{ot4_o|$hS`g`*Ib|7AOZ6xtF%a@ydHs&U)sZH zCI^<{0K0%J#*F~Rn0Cz?{Jb&0m@%lk2n}e~;&&t%b!BxWjFp^U7DTfigCCA-)*-VO zI&N2dDYG8$F-YgR7~^oBi*F_un+w4`5Z@P(xy%N9`n%_pk>N~xA4wn8^umo;)!N7- zv{i_(qmwe0qqJjlv4U|q-AWHIb$nc38k{bt0WMqXolw&ajpphI96P)SQsA{r47h%vL}9& z6MCY!e}1NqkEirdW!g$AqQG!TYUx}F+fBFx#FkU1i6h0ux(GqIa;t&S8Z_Mkud)|>| zBZ`4pHsRr!O9ckPvfV5g5S!$sP;0qNfNi$G=vW!@3q|M_Nr|^bp-@NJigbuS`hzK( znLOSAO9ox>%r+^m8VRe4X(ZR77+B?Y=So9QIUs#sLHd4*bYWk?F41XM2%7h|Xfpg` zFs#^T+a+P{KD!d>=rj7`$zU{Nc!AcB*d8D_pry zWe)))8tw?BNehX-i{s-eAK30Gc|Ui%D@aGX8Ml*#OclS;>>3`P*&&6s*{mkk?5Cm7 zJ}ZMvU0X6OEoo>=3i~w5LD%}`kfz|?vba-K+bWZnKV9ICqe>GqhMY!ZL~B(-{k<+& zPH-HV7JP0=iJg{{i$8b4H5$8J)jCu`x%p?Nh&chF?W&^V%RJOTggsoaV`g=6080z! zxShpnof;=*iH$g|q#-HP<|6QLSpugM%sKu%VrNHq7)^GumnJi&%%;G=+0{ZA0-b-N z&}BW4lD)N37yiF#mq7%(a8Kt*!>$=m>e+W}K^U~#ZUgeFAA}s_q=&7wdJ#dr5l$Qg zz%C=3#X_)VHgP&DIG|hYWK({SHorPfbu1Pj%JAI)rdK-+Ahp$R zyIllqV;nQTYq+tZ=e-EA&afP+T;QlM>LI#V2H9EJr*j|~RG~mGL|TA2+=zj$K}evv zfYPwp0|UlE)P9gob6k*t?d&%>w}r#vLSohE)&AscB!h~Htz;n=FCZp5czC8OsTmO> zOa&j4bHfRBr(~P4*%GpOmn6iiS0J2EXOZ3`o3FwP)P6M{o_T+Q7|vsvm5)&4TQU* zM%3({l{ib^D4-&^SZC>=?uWBL?q*f>2o%8xdn6v7d6ZO;soDD30LXIddiiL{@)*rh zpf(>}Bu3o?xnG1;Jhz27$6CFFlQbS}REwe>@joY-wakB;EhyOD7R-9rMSLfYL|yn5Q8beg1SjJo5~JrAj}M zh$;Oa0F3_vQDvT~ZGM)t`Ptg$!hcEQ0%l5F-O8)4AhpMKApl{@JO|B&KJ#3m!SgH) z$RvFPxp_X)EnwAM@`psBnHMk}y!b-G$uB|$+)ytZ0C1QV%!}|^-p&+F!@L;3Zoqx9 z$i!pk9rF^rDDaGaboP)8Wmp<;b?X8RXOusfp%ZuUZnJ9V#^9FG{6f5DH7_L`9){N0 z&NVN?3r4KHj^p6v_z~YUt~R(~mol$F8i?^qJUsI%eA2N`8jVK1T7Js_Gq2(I{DCB) zc`d%z*ffWCp5o?HUU<5qMvAh&*YTN4w9C96?=j%sfQM(^h);hXhPBIp%P&;C%$xKL zbhVsBpiNGw=FP|gXm7#8GjGKw7gLN@o6H+7dJp@W5FbftIP+%7|L10)IrZd{na(UILzts=(BZbj!$IUK&%dtgBC` zvLb#NOhoiC?6$1M32G1+pC_Ji)rDB;G+dU30@BO#puzOH*-g!X7a?j9_RLs_N~s?$ zjn+R^=Ac}MHbC{!S2Li%hGI)ECy7ZEUI)l_z-fkBch!YK&8pa8dqqq3PXQqMBHZk) zy-|Z4>G^HF<^!6e-eVGg=}t@oEUj*+0DE*eaY^lW4TGI-p}LN3IoTVeSL6gY@^C>n z%!VMh+AQ^=MBK86p8!vEtrBYwej(K0O?6Z%6HyX1s0CL8f&QFf58%ML(v=#qYPqPJ zmmmQ18LIm&*Xfpxxce2g?eJYcJe6(VT$GImu~Y^bOVw{%N{_4011!?WuUrZymdNBKxyPRC z7E_(#?Z0vvrAzmDM3HU5(ax3d+gwaU#D**;J|?3$DK;MM%cqY^hFsykvBgA$_(JnxnID;GhY-Cx?o_Hu?0hkipbs<^X5y6)0YLO zuP9E1|4`)t>3O@O`KqAsHH!j+OZLn`B>UGTac;7I1L+_;?`Dk573Q0G4Z42|56^sC zU?|;LrO@35eH87Fwy>VL&U{D9e^<(XPs^*On8@4Pr0+|KAJ`IdZKcecY|9Vj?c8no z5z^5X?t`<8`7wT@5kJAhGe4EW+6Yz>ZNxGN==q5mvve>qo1ZD|elE28h0?AtPbcU% zoU8*n^)l}-g<8L|)Z+TKkAg!^{t$&AyXMQh`l&x8P zl&znF;`^vNW&WUz_@gx9PuhsWK8$eC(Yl`X_kR8?`2R)mmnCiVR(bPRNr?2b`5WFK zpafQ!=I{J^h%9NJ=BteVkOExN{uAGD#!`M~3TLA$H~0sOsjYLjK+WuOa*T>@5IlJ& z)OhCMvdsL8wXCQS(de4@-vT&-nO*Y+m@GH|1#-8d;{5;sY`Q-lIKPNbnmH^sY#cb% zZlE0~Sq{=HBw`d>UM*!7N?HV4vj}f0cNID==GT6g zM;XfDQ5?rLhY-|?8WD;TYpIluRBwqDRJV);ayJG2P~-wd4#UGUhYQS1%~nY?l_ES! zbcAF%QnM5o<6<>Kfz;flZ@0Mo0F=V%Bwq@OO82(rnT5`x(E@!V}nXO70 z)`!IwF2j@EGYU~G=Ws9q9`w>Az6t6|S!a&{nxb)bf^N0M%N}+rB4@WeI;R%HR z87?Iw3?@s-qok*k4EAiFpO2Od{&BWj&I;yE00bU91`p5NS)gX@A-P))6)hsih6{qb z2>4?yc%IMM9S?GZA18U^6i~Qa9vqK!jIiCF89D)Z(6+ncf#~i6P$x#BBNJnIX6QuV z#I4=k^1ewc#1jSLa)nsfqoN6toFp(#wlEU@Q>RG6-0eRV>1coG+j<&aps@pZcxF&a zYhzhatg&H)%8Zs;A*EJosh$Xxz5O^O`LZ@&+%I)l-p`Hm=|~68fnVy~@f#?gfd|f` zNnu5q)x=P~oc*Ix;5HUA<}5|yY(e85ibi4Y)tBIeRZ{Uew&DaQ+*1e1vCdPPw^uDU6>b#pUBE!k8Fu{6VRSnMPFsRHfy>fb4wX&>H-pF2=n$GgU;uVkH^h zIXx5ep$D2x33UutE+4db=r;vPxK?%KVv~MaX;%ms@8?ycFYvX}osuEqQa*zh=;K{@ zcxF~odtA!dF`<@tm1MixX4?}j@d1)Ij?s!5;ZjTV_`C@%@qx$#93O;-XC91CU#1bA z7#}iD@a|c|T%+Kw6>twxa1vj5_vOH|y~Maq09Np$63mmdmM2RsPtjTm zw+3QB7++F9RX{(@f?f+`HHI?Xb|nr%upF15el4*ks8cZHs@pN$63)cx>YMEnlUUX~ z9RN|+fqbm24B?6@S!O>&>WNc&)#yunf%Z%m$Q5ogJe~!3=%#1m;hE=1?U|ZIj!j2T zK^(4zH4L-Xb0ydFG*@9eXrX}|Hc6u-41(@@@ z-!B}%TAg`Yqg{vg)BfTYI7TbPhJHH*uHe*`Ra#_@f+CDsm@F*s|6+r8K~ z)G5@1r&tFttq+I$&`)Gw+kLe1@kk%Sf$1SLRLUfv7FH!oV(J#`QmP{G$O$zLUrMBU z$Gw6>!+Bm%lovQ?l)A9bO?GkJ3hY@t)0Z_b1Fd?PLkG{xg@nn$^D4jRU%_&@c@oo< zdJ`mmB}fI{eH9*X`4hrsYL@O~*pPi+BUxUnSqe{wP{_f7YMLr4&8>P3vN{Rrjg^6x zr}|=*7x#jLDoqArh2{slB|OF$MJj1W4(zYi@*=Rn89c$MrdoLuTPUlc6ekDzFwN@( z@g&o{&S#p}ONLzGioM%1^9IxdioX#L&%8-0&Ft+;K@WCcsPMj7YJZEZJ+UHut0csU zr9i0Nz76RZV4)50?RbGky#o)=yi-c67Ql)`3kVIKqRLvcIu`=TZZ+>xaPJmy?@@57 z%I>yYqM7d%0PnK^XpD(*3@4iROY+=}{Q%O@*tlusgLsW5e+Un_S_%wpGAoTWnFJ1) z(|klrepE_+OiPNfE65Tw#Me$fE_pv;^KJyVP&=vMLZB~uG(H}LRmJI5rn?%Wc2FW1OXYugN=OnNC=_d1{cD6F)(a%ev zFW5qHlkXSheH=4|K^FZI($Q;y$@k0n4NSg*hiASjg|)j_O{}}yeNR@E-sil>r(+C_o za3X?YWih=}CuaxLxt>w51_xtVS)@}j7(RO9i>JZ0rnX#T98Cd^jdb+~zI zc3?1l>Zuk~Ru34uebXXW*oWze%H}tXPhvG$-4%^zwz@BV+5WBaVQFL1R|h(877DN~ zC}@L1SOqc^ZCAh@zfdn@5V_J@UN5D5nA61;0s5KYe$B3(vwwUY7|nJ-C)-~J5iAgk z0r3zdY^H{JlU?NoyHje3ZC z&W+{Or14RoZ8gUAoiU`qp={FP>>heIjN*&Spf>6LymApi{C4Pjn^ z{MqK@_8xfb9rmzfOP_ZhE*!;*<^d1Ta?;z?T}d*9otkg>H4rVp@6DX#&kbsdm6abB zhFxgYSi*t%xE?eP9M{$N!k*vgCE4(B5B8waMuhdEv_T*dyH=>+qy^71lW(A8gHoVJ z6>3_z=)>Akj3DG75mFjr#D-+V@Q_6#LzJmdidTwmmNOCo;*hEEUTD_g?|}}|RV~&E z&91?H)ev&obmTAya4k0-mx34(P9XJQ9xqh{CzYziJYHr0hM?sbwaBh#T{y@2_kH#f z&Jxy+CD=4X0&T$qY}lV3ujn`sGo%`V0z=17IcY`= z9r4pzjCBe3{}S%wN|~P_bHoy2evaRm?SFxXXMTy#2_6s&;wRPNY36*9z4{t$t z7&^D9cHMGuYStZI1E|9oUghF2;v!>B$3nb#U97x0%H z_48T-rNF$_5LNO*a?EQDRLAGF29+ND#$W7Ho_*jrRurL$dr+vxr}Is7F=g-oXEpw41mW z>0Lg`|B~FF0_1-S);qao%XqP3z%>PELc7Ycfb){MT37Q00(le@k9z$^wD;L0U<;C3KE zI8(FjA(4eEIp)Yd2TQI)G*{t?V4pP=2ODAjib_^Tfz`m*U$}ho_vCaRPL{ypxs99T z!X>$8;-(t+NMuFE6)cAEwCsO?`*1jzix?lATYh7uyZm^ z8g_>j2#BqC3Uh{7^(Kqh!N>52SeSBP3MKwLa^ssate8keXD`l8){w!-w0&lqX+$7fZOi7QqrD?!y}KB&?F; zM@=9$u4Ze&q^jiBn349}GyRibaECWZ#i_Rt4jh-^LZ#MVUUK_4pbQm<#KPHXjZ+nh z^wU4M|9`H~C(%!V&^r(5BJ@@ZInSRbXAe2aWKq#~Z=p|uoTDG5=*vlBt}w$PcKh(6 zxd1p|{H(#lGiwE*%mmJDL?lcKjuPYvk9w ziToBWF&p{4CUND6TyI=C5`&zxiBFB^*aus4DU#8tm*L@=&G__fB&=RF$Y@wO9S>!KEen;~cIGJjDNo$btAb8a zMt{;*jcP2HEBvR?-GORB+BzPdnHD57HQNRfQdAq?<)|UKnwqOnhJzUG-|DHpMX4yR z>b|M~S9Q_XY}!TL3EtJ0D^aC!5hK>gx9ZJed1ZPFbcVXqX*Q4({ylKX$hljaJDdib zW%L3+RzxoWb=V&9@61BLzIySh*+?cok~}oX}$F?ydv!vThN#+Q6S^0=@{il@(Di1#cVtFladY1r-s~NqRBE z*I|BJlPriJ~ASM0?bRF zC%(N1)#2>l0DZD)P8h_NGqLmkZe~T7;TFr;WKHsVcU46=!9P9{+!z`~Q-&J5N6wlA zM^599&xxWe z&T8$gM;KMsxO;97@rnFqz0_~@fLtdnm=9*VjTvJd(PAVgWZuyp$sP=$tjZbjIT^53 zXW{j?(#Iof;NK{>d-jgeuvd3S>YjeOjcE;&H*N@!fT$DV_!tUMwwQlSP1w9{&AJVj zuUm@_ywo(O;1A?(#k{uzH$!iMkq!QszVqEA{I@I>V(yj^a9h@GT)Sc8g>ypN0$M|+ z&7O`IV(P7l1O$9z&EovbVAFf*5Ppgd#&}@w8EG|Cx6+f*GaH%C+ zvp(%Bf?Xs-5uDeqdRT`n994EgK6a@o&1+Y^dds|a)x$mW+7(W&&TChZ!_$-}w?vbj z*RJNZE2=S(zdN>eWp+Z}fSxpihi7)-(>KP^+M_#Lw5rWY`c;}<@WiSHLmKa(s5hHC z=t0B#Qm`O~J%^EUu;ayhTdTB?O&77m!!;FH&`XegT!n@e{!T{@JxzIx@cTy7s|zypB@=>8x) z5Q|38&eUwHNNgoNeetf5EZ1rl*@%r;7sVIvA(D0zzIb2qNpPLyrZd&`0{Ni|xp04U zsv768<2pVbx7{(+rkY7+d)s&`kp5BJzeX&EdU4Pi+BY+ zLn?Wut>j8zZ~Z{I4X!plG29g=5b6c)JJ!xTK0c?h7z{c<)4bh%;V$-&-N7Co%$jGR zsy^KJY{4MjKcNTCb6AYr_gsAO%=09Bre>kB6;bYcz9c80jeeP3{Q^nM6;9dH#+nzR z1Q_5&cp%V;6wmB=akQ35hg|y-f%8%e=LDd!TXK?pUnZI34N|~t)60<#?&Gf4oE>9c zflO$|EAha!R{~M_m~_7;4{^;$#&+i!v>`rvKy zTl&Dfo!@o)jcE05zmWj!ly~r%D^p+>VUBZ%0LHuZ9LmZ=N3#4Pz7Yd03CS*QEm-YQ?&TP z@U|wJ?ZdDnwAaT1F2FIxayZUE%winpAHf&T zd{nY$Y8D#X6dmUuljH=n(XWvFAD6^jVdPdd-FyOI&{?0v1Gn1<%*?HX3A(U(p+xw! z0RM~yo(N0wSxJaDQ-QFhpF=trEeuQYdAtD5U%&&Gwn%9m>8vO=(j`zOyVZP2OMO{N zeML+4geLAq`m2)fYc^jzPQ};d{oFWz1L?pSp9@^<8kle58&Lih9=PuWpZ=I&H8GSK zQo;{S+?V;jqrko^z`m!z3O7|M=#|JI`o2K;frao>)Vta4wb^k~m+PzC?!?d}c3*tO z8G0CR8%|4%bEs?MZd}61l2~r%8~msNz_XoZV_jhp92EM%`fo4L1+P|msQ*% zaOib*UMQJSzfS)C zH#6r7w^tnz8UB5M(PRfbdX-Jv8Ba zP^kR(yH4U($ZP})LE3jK(N!BJT3ii?YZ&3vyq41nCbx;%RN!tUvy=5v#`s*@WPl2I zTjQ!^-BJIfB0o#FIBfo~zOiCJbux$_{@+bI#^UNWV zA>OqLjN@=A(lHLX;_BfhvkVEK+o5=P<}iVx6AdelO*EY3;>>3bR{%!{fFl)vSc~F0 z!=~Bg@KI9aXj^2?=<9-;T0U0ES zqA!k@-_jT61b)}$FwyE=4wC=`c~?IBEr;)h1awXs56_&4Pha(C#o9T2mcz@n)Jan6 zWGxjghn2k`9DT3JQzYN1HXr@)b)Bo$KDf(>iBx~7>I8p`!0$2ekc#YBXR#qjb$Y*GSba3-c(N3 zLrwg8m>g>QiQoRaO9465gl{<1B)>C-Gttv0At%CIQ9A<S-(Bh5L``$Do~MsYKhk=BuMYSq&)zg1!Y1Vy*tGn^bnT~ zu3`trt9VwNrN?&@7J)HJKndhp))czEXC zLW<1)CMhu3IJ`prBqubvz|v$-LYl6Tym4MrxSS2wA{}yKw;@f}ArCraJs!B4NdT(W zLUdwUi+?=hBFVf#GY7{rv^A0G@II1l)Mlg9;a+;+g?yRs*(@gs;48Xm68^<}Xh3@% z;MOC#*Y_B?dR>qE`eg-#>^*{q8z;@!>$Zg1jATSBhUXm(-B zrsUgNop!e20BduGK?OHWW*hJ}Uuo^y_J<}wdaNzZ4rbvD+vB1Hk1fXLhZlai99E1? zRO{~ClbOiTg;u=a8s%K0Y+ZHF%^6di6}5oWfGf0E)>o#5tk!jOz-kGC5Uy49n>iTs zm$fI?SyA9d-Gc@@j;H_-Fu@7;e&-^X361lkbnwgoLndOPU@Ao)P*4Z_Zh6{AV#iWAC?1FB! zjul}a#?x0CZE=0K0aXmgS-=|n-piD0t5elZvCe8FOi#}U z6I(BOfJNSHwVVuZ+n>+(r0F5|llngM`;PlK-K^1s{icEa$sqn;Kkla`J3X|zCm-`G zZz9o#$t8d4$m@m4ylAFm4>)1~<&xR(vZtCPANS~pfjWON1#3i|PxwV&f(#Jt8}abW zCVbA}7hQrTa@)qQlzocfs2MgJ1h2dlh$Nk&f90!3mmwK**8FTi4#MC3Y$3rD=4Xrk zN2~hkIC~;8=VuFOZIsOab+d)p3=s;szXcD^Y{jQK7~o(zRm7w zIDm=Zd0eh*JVPvi*N4X)VKO&3dk0+t9vPD4&-mgqXgxjxgFE~=ag-DXJpoXa13C-Z zvzrp$S^}*35!L({ZdjEA6{zeCBo40uM7y?k7aI{$;3qwkrn-!7leWg!ORGkI?@vDTL>R#AbM#!qF!x0c(Dr_K;I353o|!v4a3Gb# zHQxQD+;&?|FHPwoFD=klN^%@c1;u6E7}9|xFHMP*HRE^<)QWg`Wyu%m_ba*9Zn0q)fPA-rt}%j z<^f2zMPpkR9!n;-E*^;2(X9(|d{jW(Qb)eua|Aw!!0pb(gYn%n*ANTrTnL^R!`I4h z=~MF%e%GA~V%58I!R8a>b$qJ(LKIDNJ>H|YABu-(9)?d}n6qB(?dZmZZ=$(D^53ZW z0~3u3BbaFPp9KGUxa53<=A_SgWxcg$ijn-0k`Q4|^C-Nj94|)lNAv4qF_Qn;m!Xf5 z0yL687T-McIQgBC>$>ye76h@bOD6MpmWP8h9}xri6QoF_PHO-U>Ubgx-5@y5o z%{mMh++4uCH))!v1j%AzhXb|VEuhf`Xl8-YA&rZOaYaWLhc5sQGbG{{TK};WEn#>W z_pw1W7s29%GaQ6HKF(~I)a|8UGTA~S;L46uYoyC0>dDiEjL9zhtIrnCkPNxPuP_d` z25lp{|K)Tx&qT|?kWd8Ta0G{E13ss@#2tA%_=`okr*YhMj&Q}VHV)OY( zw_-DDZZI#vdl3DFczEVT0z@ZCRvVinskiiUzj?71e~A=-sTMCJ^CcSfGAZzKTR{C) zbs$l(dxgB8yD_gsIvN9ClLahfUWMOi#H;b}%xk2uHiFf}8bOt{?_f2rRVc3$D6dy2 zqO$hQ9yBRp$bW+reWNYJPgwr*DoKC@1lrsxnNta=dj zYxI69CI!a-;3BOs^Mu6V<1!P%yBE&xG261?!i`bP*nCb7dYKM)DFPx8x)6jWSS3J@ zDK^ALQD=SulW$0S(ZB$*=9SxYLJ1#O9N$C^*qz1k&By?TeT(qRTk*M1SRCI5M3NTA zfBG}i+mVb>H_z7p{cLUCfxZTVz7r46ybGVcHcb&1s)p~D^!I4G$jY3YdK8lc4xXv5 zHDcb29DS6b_esIHoL_axe*5`6_kI>sJ41iSA3z2m`awKA^C5wksoCm?o#M(fqaT(m zAJHswW;7hRdVj-5C2jX-MlU%a!0ls_orgw0E}%c5pbMKZ!%*NNXiP*q6&;uwBaVW0 ztlvL>#=Kx8n<&lHVnv0uhj=~-@Sq`^Vb=h1RP<9)Yl4QsQPEE`KM(PI246h$S;?NM zS!l%ELKF4$bCR5Z##Td#_&jsx_ErPG0O;t-FXG{uF9{+6o~08*hMAy>yZc}P%bKquUmx0iO^PR48_@3SEJoUW17AGzP060AS!hHd zO1p1Kast{V2MX=J&D^=0#PmDJ1|obH56^s0AO;l@iyk6;Uvm9Ga}~CM2)Q!DzLBkT z-tD)@!dc}GZd4Up(_u z$)2fMXhc6sz@JHS0@@`92?2l3+_}Bl%3q)g5dW8Wc;;7vO@J(0&_n!RORnE&u0j>W zUjto~k)idhuG}uzYQiH6WX6gRi9D2KeYw~%LC}1?^OOPo5IiqEQRLA*8)#FcMX-{! z3tjVD)Y_*zekaHz2pDw7?^%r9@dteI%pWCtre>kBLDBB`lO!jgU9wQR7c($u77B*LIE9Qw=i^s1iD;kC{Xg=gm7lLxNQC>D(TZ7 z|0i`PC>Zp|zgUd@@o#+b%mN(rrESbYBmU9;*iVuZ&@Ndd{jon%(I0!YnFpW_kpDnD zJadqs6JX0G^pJm{B|g>O8=z-FH!v^i-rEnm^)Xv*_9oNa-iv9czEV;sUlOe7_c2aO|i_B zwjCiEkJOBXbI~?yjS{&dCNA#y;5Y}ZS>m*#3@)2TU|cSN7@3pjI{076?Ms*vab zM+^L9TT_Adb0^7>E1b6H7?@*F25r4F9-g_20La`N06>(@4{amI3Z&yKB#k+Nro~!G zlfvYU9z6w{&#F$HOERB?WL{4LBj-;aor-4?l z1C+lKmo{)YE^dt%RHxQDrRsFCp1t3?&6`%HBQG{>To)V#@Ck)y!pag!lUsFypsER5 zgE%|(gGmq#XJ#$p_GJCZ8qL!-Y~gGzeuk3+on7*4B`(N8+}#R%q_eH!EF(E*jWY>{ zLbNO9O6a2pzZC!xt9ViNjNwbEYXvw^LL-=NftyD-o*7sON}4DW4f&yRew z0^`{!pEC^*uDPeY9l<9pTlqt*d3}s`lbd_t^~U@WL0iUvql?h^t~pnVorh0i z-@?7{XyYBAuY#kF9L+Ufag=^O1=RkNRJeH$y`iHmv<+7!lG8ZDfX)eO2XErcz{)m8T z69}J;R_<`keUJh?k3@Y4L^W1+82=pmudtJuQKW6mA7Um;V_g1@bxqw|jCc9tE1eE5 zh8-U6G@ErdTXi~<2-7?@TWX#K>EJS zSGjCs{&;kG(~O}hO&*&Y)1Oo{5Ix`A583jEu>md$R#1N(#4uOz^+9E4qB~{oPe}R0 zoaqUNEHhho+=}CL%yzuLF@J&@ALfF8B>^oYYNd`D9H1o2VqTw1E*dPqjv?)p6quFgxFs1j$Iu4>Bg1n}T z#Qb8U4V`lOS!Lt!=i$z-YKQFK>AIGRlLUQGejzlF$?BAu5|Gm8;BMR~R>kcErXp{T z#$^!29b?XPv05L4+5sm$QoM@98}cWhsndZt2-#@NZIQ4wWV$hbfYaD%b_g(Sc*}LV zWwdg-ZtC*-FnHkMXxx|_$irodu9=qiN053@c{44%3v(%Qzk) zjNFp9hsJu$wDCHBP`5KVbdE9np0c1gid=>NgJci3FRY?uRJ5#2RbsZLeu z_}?+t^7VoBW@E}cgkO*EC0}d|UWY6-85_9VuhSe0>2*B|?_VvOhw{rZ42EdGKMXH# z%pa%Y-VgT)x^^mKau^3qy8&4+ifo6-=y1)Ac)2})CmAYGz;Oc!<{0!XyRK{=j?^3S z2b@)!xQ8%Qg7JiM3~74O}_4(y1J;TKwHAud19Zhj+XABf$EQg`KXTth4cB z03Jam@ma}YcEn=+aZ(``>t}4QoVgw1M}k&VhAL-or-xI1i9frz=JCk7-8=!G`Gw@s QvTL4*AD(#@~ diff --git a/docs/build/doctrees/permissioning.doctree b/docs/build/doctrees/permissioning.doctree index 268a3c838b8fd68589df27df1af199c255a90bee..50f3746441fdff89705fe1dbbe5b13c9d4f043e9 100644 GIT binary patch delta 119 zcmZpg$JjlOal>y$Sz87M2K~_D)S_bjto+oRl+u)()JlDq)Z*-t{DRHmOp!jkq0E^n z#YHoj7#M1cW=$^jGZ3B)X3qhV844LX8A`Q9b0_cc(^8lR6p1aG4y$85;%$2K~_D)S_bj#JrTE%+lhN#PrHyedqj?)Xfr1kv^;$>a|5P zC)fEI2+v|-V5lvc4J0!ZGITPOYK!JfKIo^VFc&BiTQmvCY Glk@=IXd-+7 diff --git a/docs/build/doctrees/persistence.doctree b/docs/build/doctrees/persistence.doctree index 5e8f0c9b67623eb246a276b17931884ba3424d69..8bc5f38a34d624a0d36d846a145cca62f9aa1c52 100644 GIT binary patch delta 263 zcmccC&h)sQX~S+tS!)Ic2K~_D)S_bjto+oRl+u)()JlDq)Z*-t{DRHb8MjKy#^F;k z`J$QY=C`uT1Y{HODcihWkBtMrNt-X4u{g*^;x*-CSr`v*D05~?anVO628P1;7jY5?5kVXU?Id<|5EsEMlSpaF?Qhz&H!0GgyL%r*!C9ZcS@3O4 zyBrRO?|bK;{P8koJ3@#_C7?7T0h|?#Luu|o#!6(*pYh%FkaY;D@7u{4wA|2x&ckQGU0OHe9IeTlxVr^2OUSthRFwkL#2g#ueD2Ned*iO_DyB!=26jOwX% k7{#q~&0rp^f<=W%t*qrd)#ZXhllBq3=9ab7T(fZ3e~L#x%m4rY delta 186 zcmX?8xUX=-UPc*v1_lQG(BjmhV*SLtl%mYi;*`Yn%3^)z{FKzqw-~RPI){p-W#**D zXXXJFm1O4U#i!;aCgr526s0gRFm!}+7bTX%g;Ie+-i)EVDW$mu@x`enC7F5Y#YJh8 zf0)a0r-S4eGSq8}GA3(UxCv(h`L#t^Kr%xiLpMXIwkUgYlZBQ-4p1bvC>KbEvK6JK RWu_Dt<$;yv1If}PJpjzpJG}q^ diff --git a/docs/build/doctrees/release-notes.doctree b/docs/build/doctrees/release-notes.doctree index 0ddd190fa04f84d6e299c276a332df87168acc6a..4e23806c6b56405254afc6ba15aa55216920d694 100644 GIT binary patch delta 129 zcmdnLpYz0i&JE(svbGEi4EmwPsYS*5S^23sDWxensg?RJsm0kP`323!%hB9ZS6c>5$GceQ^c~1Wv$CNMZ1?G4I$qb_my9|@sBA@A{@l09@zCfYaB0nG* T%2t$`2GZycRvQ2$OOx~fJdP!2 delta 120 zcmX@HpL73y&JE(sGBykh4EmwPsYS*5iFqkSnWe=kiRqQa`p)?&sm&(L?Iz5O+fA66 zc1N>jSk@MKO#c(dlrQYb&%jVyOHMaY|x(WwE|)(qv^qC1o4 zTPO+NWn^HeExHFJGh{L}GURHD?oYmAp{4KuC=y%r5J-ly6{V(SrW6-F0xNwCBukU@ E0M-^G!2kdN diff --git a/docs/build/doctrees/running-a-notary.doctree b/docs/build/doctrees/running-a-notary.doctree index c0bad30b17ea22995668c870e68267f375501372..396ad0ede6c6103544fc0e510f63869c7a93ff13 100644 GIT binary patch delta 139 zcmeD3@AKaf&nWA_z`&p%TAW%`te=&inv+tRl9O7g?~+=aU6Nn0xtdX4b@F^Q$%tx3 z28NDM?xMu<_|&|_q@2{0q8gx(H)AMoN@;FEd~s??NoHPpaZxQ$)UPxtRJ6DdQj}R*oRXMcS*-7zpOU({hEZOXwWykrfnoA& zHA$@+AfqFcyC|_dJ~b~fDJM0hs1_*X%^1p?Qkq*3Uz}P}l9`uYTvRvto|+s-JxGor KLwPcfdJ_PvnIez? diff --git a/docs/build/doctrees/running-the-demos.doctree b/docs/build/doctrees/running-the-demos.doctree index b8609f49f5627fc9b687a1516e99b09fff389933..55c450d797256001f7699fd22c5d532db2327d6a 100644 GIT binary patch delta 124 zcmX@Tnf?4`_6<7BvW^T44EmwPsYS*5S^23sDWxensg?RJsm0kP`321$%-cPf8TVhA z&U1rNQY(jtfuSRmyC|_dJ~b~fDJM0hC>JQ?%^1p?Qkq*3Uz}P}l9`uYT$DH6{|2L+ YKt4#4A(S~YrMRd7$lhLhgE5Q|07zOWfdBvi delta 140 zcmX@Vnf>%;_6<7BG7bz34EmwPsYS*5iFqkSnWe=kiRqQa`p)?&sm-3u+dY{X_h0cS z%Hd&P2o+1q%t?*U%mb<}$;{7-Pt8kA%1KQr$^}YxgmM=pmcxbefI{Akp}Z-jxdrjX gsU;pF diff --git a/docs/build/doctrees/secure-coding-guidelines.doctree b/docs/build/doctrees/secure-coding-guidelines.doctree index 22a8c86b9adf9ccc75454fc537dcb5b775549c0b..fc763af6626eb959465e7171412d417f3c6e2a0a 100644 GIT binary patch delta 117 zcmZq4?9JRz%_!@^z`&p%TAW%`te=&inv+tRl9O7g?~+=aU6Nn0c{*dN5pO7SW=e5U zCL;qwZBf=_MiVvRY%n_qNM^`oXk{qW7UfR1GSO1V1B%2JdQj}R*oRXMcS*-7zpOU(H24kubYldoVQRZYW z6E)#1Mh1r3qHG|UA(x?*p-@|tGuhchOCc915?ho9BtzMXQqwY1ii`5WN(+EwX_6iQ DFcTkA diff --git a/docs/build/doctrees/setting-up-a-corda-network.doctree b/docs/build/doctrees/setting-up-a-corda-network.doctree index b516b23a3db6d43f6cdff85ef301c741ec14dc06..75f04483b0c295e3f7c651f4471f30366d9b3440 100644 GIT binary patch delta 154 zcmaF7j`8g}#tplfWW5*|81zGnQ;UlAv+`4OQc6>DQY-acQj4=o@(VU!XL>6u8;e)T z1BH90yrImQDaA!QnHU&qi*`*u9Of*%8_eDVBr`NK%rmrWi}p^I4A)ZF2Na1d+7Bc{ T*@{xrK-vy~l^z6=rAc}K>f|)z delta 144 zcmaF6j`8t2#tplfWIP!d81zGnQ;UlA6Z2AvGE0k764NV-^_}xmQa9gVdMhgvgHOdH zg?px~8Tz$FJ13tFa~9sk#K2Hnv>QlfXl9saXxA3)nXDYHrLY$$5?iznNQSZ%rKV-3 P6c_CWD?I=tOOx~f+2t{` diff --git a/docs/build/doctrees/tutorial-attachments.doctree b/docs/build/doctrees/tutorial-attachments.doctree index c6ac1d5929dfd207a220b70485dc119bdf949746..a540b620c1007fe6bf0f85381ba28827c711d6b2 100644 GIT binary patch delta 119 zcmexAm$73WR288X{taBt#oS>nZo0;yo z@eno*=wg-4$6rWm;x}>oKS9QPL4n;suP8u)zP^Ir^gdO_gz5iO8U3e+sxYSFHvk delta 552 zcmdni!uqX+bwf6@j4uNNgMMgnYEiL%VqQv7W@&LsVtQqgEpSuwt25AjHTfsPP2o69p*H*H;KC%~L4JNL6sl%uCG4EU9$M z$uCzZ$ydmm9QsGREn delta 493 zcmeC1!t`e{(}oB}8CM1d2K~_D)S_bj#JrTE%+lhN#PrHyedqj?)X5hWg*SIFw(-hj z<5v~DxsLxH3n5kEn=gnw;lZnF^F>85cDyQpZVKBRr5V6MSe2|%mN;QmzdV2N5muEN zxlUDkGB6Z8^OAE)Q&JVuGILTDO4V@&oqhcjQq*t$U!Tdznjv3XBs96S(?&{|nSr6U zNCZe`NMxvHNYxgJ0@)fFGO?5Q)rskrhH|Fm=a=N=m!uXKi2-F|i^PFsC|gl#T4qXd Pkpz%aTODQY-acQj4=o@(VUUW!m@zv3}q`yP0LIvE)oPQ6#^-h Tk1Y}g(pk$G85k0aOOx~fb($qK diff --git a/docs/build/doctrees/tutorial-contract.doctree b/docs/build/doctrees/tutorial-contract.doctree index 2f063fd85097ced4ad27c07907eaaadf99b86bb0..f6e7610661d86367644ea3bdec85b68cd2025c68 100644 GIT binary patch delta 164 zcmeBe=bF~ewc$UDtRn*hgMMgnYEiL%R(@(uN@+??YNftQYH@Z+enGP|Yr8Zn<92CQ zrpj90Q0B~(;-U&J28PxZBYY|%+QZ5Y6Q|*<;)BWiN&Q!dH{7s BFp&TN delta 135 zcmbQ%&ehw_wc$UDi~|D$gMMgnYEiL%VqQv7W@&LsVtQq5H0}I)p2^7#M1cs(@sMRfbE3O>I&2blYYoE&UpxP;5~xkPKxjN=?g5 cDK4r5tE~sA)sHP|0Mc3I%nS^P#idDl083*h+W-In diff --git a/docs/build/doctrees/tutorial-cordapp.doctree b/docs/build/doctrees/tutorial-cordapp.doctree index 816908209953c904e49d96e6ce46d9dbd102eefd..0714074cfe275363faa8381ce4a619b1536874bb 100644 GIT binary patch literal 190694 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 KSw@KCMgIW+5JWcs literal 185501 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 B5@G-V diff --git a/docs/build/doctrees/tutorial-integration-testing.doctree b/docs/build/doctrees/tutorial-integration-testing.doctree index aa2021d93cf3b9f669299cfa835ba8b2ba45c480..8187c7a422045943dbf4f65766fd307d82eb9386 100644 GIT binary patch delta 338 zcmex!h_UN1;|6m^Ssw-l2K~_D)S_bjto+oRl+u)()JlDq)Z*-t{DR4bO2V7d7?ZhW z8wn`O*zC(|EI?3M&SnldUKaeyHXADKWyh}s=&qd2Wm+#J2`bCp{M1E4#x|5WGo`r5 zoQZ*3vp vi!6a;hE#@HhD>dd)ntc6Ed^_!NNkY}kPKxjN=?g5DK4@FE42fXrAc}K>C9g7 diff --git a/docs/build/doctrees/tutorial-test-dsl.doctree b/docs/build/doctrees/tutorial-test-dsl.doctree index c20be1d0455148b30ea8b99f194a8a356dd05366..cc5538bfb142c2a686fc2605b86bb14b876b6cc2 100644 GIT binary patch delta 125 zcmX^6l;zq}mJLT4WgQt981zGnQ;UlAv+`4OQc6>DQY-acQj4=o@(Y?DGH!p!$e3ur z8_JxSQe5Q0!oW~l5lh*4A63(WBbk{NOt8W{?;MLyG;jTp5Qe1Sr-MSegsl&vT= Q4W!W@tTq5hmL}-|04S{_zW@LL delta 116 zcmccil;!MGmJLT4WgHk781zGnQ;UlA6Z2AvGE0k764NV-^_}xmQkx$!Zhyqcm}tP7 zp;TMsF+ISDQB&BHg@K{A$O}kj$Yp3`DAX2tPwz2e)Kc&P3dI)r0?AOeqSUm^l;R>k Muv&j0S(>B=0NDv5a{vGU diff --git a/docs/build/doctrees/using-a-notary.doctree b/docs/build/doctrees/using-a-notary.doctree index 942e23e75983087a2d9c9c0ede755c22382569f1..a60d348a8823c430e7ec137cc94235983af9f5a1 100644 GIT binary patch delta 182 zcmZqJ&Dgh_al?8>Svv*>2K~_D)S_bjto+oRl+u)()JlDq)Z*-t{DRG=84pLX7NsyT zFih@?k<>~BGCD%JixSJ@Q}Ys&a#B-@(ttwVjG??KrMU(1#i=DFnR)5OMd_0-#>fe0 zfaDlLnKM(0i!y=i+M=w8CwPh2K~_D)S_bj#JrTE%+lhN#PrHyedqj?)XirY4@c>Silt@d zq{e6F0Tq>G=I6zy<|QWOq^1<5FflN6gmM=pmcxZoCm)OvWlWoVJw}c@9VqS1kfB;z zlrfnjR#P|=$geHR0+JbW8Cn?%wME&JU1GHqa)2VSMY%vSl&vT=EiY%=UpAZo diff --git a/docs/build/html/.buildinfo b/docs/build/html/.buildinfo index 95a5f99732..8966c7ddfb 100644 --- a/docs/build/html/.buildinfo +++ b/docs/build/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: f31fa13a644d2330bb46729777cbb8f7 +config: 1768caf6e5e802b716b72241d5bd1c76 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/build/html/CLI-vs-IDE.html b/docs/build/html/CLI-vs-IDE.html index 43f61c4e7d..10b4a68161 100644 --- a/docs/build/html/CLI-vs-IDE.html +++ b/docs/build/html/CLI-vs-IDE.html @@ -34,6 +34,9 @@ + + @@ -129,7 +132,7 @@ API reference: Kotlin/ CorDapps

        The Corda node

          diff --git a/docs/build/html/_images/merkleTree.png b/docs/build/html/_images/merkleTree.png index 696f5104504ca964273dab39a890452d8a7c4c6f..6aa07752b0daf0f4af34d3a61788543d91a1dd66 100644 GIT binary patch literal 22627 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 literal 15642 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 SyBqw3cqIK)sz^fD>wf?-Ose|; diff --git a/docs/build/html/_images/partialMerkle.png b/docs/build/html/_images/partialMerkle.png index a2c5af7a2350d95224f4cb838e6d9e1696e304bc..c99030f38ba05717f5a7b79f067197edeeb369eb 100644 GIT binary patch literal 18381 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 literal 8741 zcmZX)c|26#{|A1DF$`lHF=HwFl6A0>3W^&eS27-7X18ohf@ch+pmy=jO@AYgp@M+KMHYSv; zU0k{Q$%UdQp^M4mno%L?x`K;&GKcHMEujp|2T=`gUil<@ld!m*n`lD{0|i3=eJ=uh z?v6N`g=6JqHrydgLdfo8=)DZ|+Hu!{8vD{`ENDqzgp_u#f?sua8g+w@QIiLeK&T1A=Y<$JQ>1(|Z9^v4;P(HL3i1-WJBn z_kVW@u|~XI0XwlD9R;nDze~z{P;%5;-EHxe{m~Pdi5^wV9AVy#kNjE_9kB>l2l4z})AyPpt({!aQFgDBG3TKSyF)p#so;J)c~?KzD`s zF?B2>h)(pra+a)WCX9aLWL4x)FUy!bAV%Pq)xYAwQ-qpf1VPGVMIF;xAk5R@l_5@kUen8wYd@Ct(^tS0wcq9lV(QsJ54EaS&)cW7}`cLNha0{EW(}vN-_=9wL$&b zM`k<+vj?OBI(|LM@n3xxG&Dden7P}({eyB4j6%O>;88mamahqBo8`w(rNATz16B$S zs|k|ik}cE}z_wo5n-^tq#>43*3Xe7^XoTpd?4t&zH-d$pJ?%D*Hz~zW- z>MFTm4kUspwr{|*d0$-=jhc}xlkBu$ROdn>0vK3W?dMI5)zt~GDUAS)rX-mSb|j(# zOQPyx_Lu?LVNOq=^X2Jp=N7;gTEQ_{aUzs|^l|F!G?EoyHcw_Sg+?-fmI`U2kBhxA zz!JbENJ|B((gUk&O0yC0C zHO<%GZUUTH33N=n{q1K3usl>GDz952lwjgw*O~CKZ<#z!(p5bGc89OOFiHSRPMM+j zqCTXlq>tNR=nyk!*yni8M{38Q%G9lwZ&u%eQ!Zl9!@`ESFEb$#=cUalB#Unsf$pp> z+rr&vO^kcf;FR<~FyKB7v%^HanQNTNmJ%c4}bNCEUV-s+l%>3268_90M^U z;M)4QfK#51kUdX-ES$2A2@kzV5Sf=iqw+y$=1dmd3IbTG2SCKx^~@ShLb@x?PKxv1;f|9Xw4&>+u>tDO}Gh)S%E0_O0lrGpV!c zse~yniCiRIKQJ(0^;)>$dT6N7nI{pj>>ZQ6eftFpbSmcL;ZTDlJ$72Gx$ZCbs#-^I zb}VDMFh5Cxy#3N+xWdFWZ>O+d{R&kpr(+%M=Z%=IW)hVnp^Ac;;?Rl6^lTe_oYOGI zS<`-!DqR0&6q4B$#Ya+qi|edLQ7#uMx5h_#xq)?gctfr#a@-bzkh*Gra_q+xn9PT! z1+x$T?J}ZJwqL_zVvb31)WK?x=nSYfodjy%$sx_I>~7pNICYN4N->ACtyxA{dGh1O z;J?2oJl@}b@GZzIC@AP#<8_;tc)R+5%S}VIWA0Veh~j$%IaUY0ax*n!PTVTtJIf<- zS3hZQE*7V&a&U3|{;zOxaUCodr_1-@W=KeD1!41Cd+JFT5?2-X=3-YXyBV ziOwL_TxVL(@mcAB>quPK^o=D4|CT@V+{cPhQ6ohCWEsTN(~VbEQTaAL&U*Oe`}gC6?V*^Xy(I;| zDa9yqKuk=`NgS?WVY{_gKcm(aUO#aD!_dxF#pVKqKkHI*aFtt3z&P19g{}q@ku`3hg*smse@{g3m)(h_s8=CVP71!b{p4HTRtYe~tkdc3Xzp4u~BGIr1vKsJy;)S3UaJ)gL8%s?O z551pS3t&IIbI^*KF*AZ?A2grt9J<7*O&IALqBDqo%K;r|6D-8?2kr79o+QQ`oB!qi z{!>Qj6;2v5Ph&|@BtdFRXG))klgSyJ>FV;Ty$r+Jfl0irSUtif z;nOd1u&>C*9>DNLonRqppFgZHp(o)ALzwH@0i*4^UA`N<2W2HmJN}$W<Yq9jJZxRX`%e{^v)FpS&Ay1<-=L06sMQq1FlTxOJ;(MzQZOh)+@Rl489P zSi21gy}>IK2nt9-Nm*O5$ql@%W?ZX+19G7H_D8`lu3%dYwFsM!-gm$#VX;ZiVWh<; z*7WGqwh|OI3JwVnDKB>0Ht6G2(Vwe2S8_jvazns^{ zov|2BIVB5IcNmKbicyUE>6OBtWrg@r;=T4c&>jJa5a7iHWxvrD6C#j$r~q~`M9KzC zQoDlyw)Vn|$62KaW%*`n#s(af;NTGaKqvfp_%5C24iJLoh1Ud z<;20~X}^mOdBkIR=yW9j*tJyoVWhCx2*tkF$631)L%2O3Kr=#UuqC7}ZWzL1cUZ zLtpI_aq=RdN=?G6goY2?&7Yu>XX6Wtup5!$6h>05yq)UjlUcCF%;yOfuM?3kD6ynx zj8EQ;mU`V33MBK9ayv)qDEgry{rozY^yd*gq+H%#*0-;XQEKyC@PhNk=Z-gpy5-_1Y5B&{Hc5Ih9;;Mw_mi!3t~++1+|j` z@4qIa`8ut7>n5m5H{U878RGWmjFOnxuyu1qr+zx|RMZJP!7PRy z%!$`j_1xK!x?v~RTu)S6<7uQlwt_=%dHvg6=f+~I-)tTo9mP>IvVA9}?(!wvYn&sa zH_J;0X+1-}Z3?1Wl?^(1c(R6;dNQtthQ2K?U-~^!^Zvd>&8x${zP{_fJ~=i7dCa~` z(0R-6Mvs6xUp2N0&YfZ(G?W-zCKc`G{8sQXFjB;VKS_^&ue@0FIWb_5EW=6`9v5qyvt zVeF9S^S4vN;VqY1bn{F!tv-&o26HKY^%$=fbW1oVgQCD*l(=lUz}5s~9xPCc`F?ZP z?vUl`=a-Lib4BWzrIBTh*Zv&ye7ZOJbtcch^~Ukxt`xq$x~b`3vhZW_&PTJ39utX7 z7*qesDapB0519Br@9c!w*w`FoPWrdq1b9d6(sRY2gakx-^d-(t_fkRnlJC2Y7p0a zp|SI45rg`?QLBR9RV%|&C?fm`Qy1(*F zs%7WmJR3)h?`9_t%}b}2M)$tE1d{+2Qhe(7)1zOGQh znbtIu*UI02olFj2srvCDug--;;F>hP06DvQ zPmh|Knr^N92mGVov40C_jDNj(doYesmE12@_1wNzG@?2jWDA%-x_n1N73G z*S@~_In@xHBk4#R6Se&0_FMn&t>K$*B3lw zF{YE)k7;s>T&-Q5tZUos=KS^PMT(kJ^Kq~eQeE_Hd2hfapZe4@&3`^Q+)hk<9KHW@ zqvu1OLd*t<+WF?6@x}K!yQ`Bq9GR91Uw$WR{a2{eG88uCNdo&ZejsOuE^H5gO!
          }qwNB)-cO%CZEbCha^9cm_-xyFHbSnY@j*_NE_$W?7NzH4 z{wvuY-!Iiqs;Z=Rxh&@=3tdc_8$s6Gs+Cd>d3(IQNMxf2h6zAa`(5(nGJz-8 z`RAaOH-OH6<^B9O=^>~e{F2V9|tzH+|iYRN^S$;vL8K=6UonPdX3-w5@Nk{=#3eTuF6Qg#Z!A$`=S_1iGc8*2cJT^%U9_iA zWfTJUZKhc62vId;`lJ?2gyD zv)q)g9Tj-L|Ghyc1~cYbIgMFfFrdb~MX+2v_v@K=lIz1uu1QkFUJQOLUxBhL$ryL5 zNG>;)Ja@rExL>oW+3;HSB?l?|+$yI4wn9LT1pliw(AB~ie_RhJY-CIVnUC<0iNCIm zze&4ct4K=>yemW#p{zvLIE~Hm95(I}m!lTL^ro8wW&SwS z=8~ctBK8XKGrT+hj%imCQa=X-2o%-&Ro+fWodSsvF(Z=S(Mv-aci@z^HXEUA0OQI6 zg(Z|d`E)!M0#F`eV?VIP0COi`3J$3;qNn|zA!2Eei0XHvw^z1~d?1>=Y!{ze4lOl9 z^LJqs=6%qGB@4pkPCX^x9*keoCcTtwMt?D!WzLi$tHY<1+4X?AwX=Cxo!=R4Ecjij zqj3JosAw9~JgaF-tge$lu3=*MVEzTGAoDAiEYqw0!tI9(Tny{WWmw~g{-OrYn&k|n zF>`dKR5@qOaMoQpWNr_d4UO7tHuEbh^&5oO8K@p_Q(U&0D2%t8Q4+owD`VN2@Jg)k z&CG=lNFl4eaW2hNKS^Wx0ojN3<`&F`bdr{NF8KQR{C1|obme>W=h7I~tgPZk2{j=? z*v}ChTCsjaWBIHH9K`>ud8dT1)Ml;}iBK9Beks_;b6ApEO!OTMg4){%=hvOXq!lYP zXevJyCYbe4ik%;eFP0$1bLHD;qG0Ef!uPa)3usCfM080LNM|e2sWs(YfhgE$gW80- z+v|E~i$K0m^kegE7Yg2%6r`@?*?aVILJ3)S?#vqsay=0xC2>+v=)x@AP2|UNdH6&{ ziAXjjxkRq7C6KX~R;{3LK6+Rw1vwRpmjP5p*PrB!>uiH0)P>NyEA@wR{C zB8Z5U0eaP=RvkK!3P1=`r@gr;Sn^y6iqa*(?!Ey7U#~(GQX&!c$!lb^UJ{H4D02Ew zlv@L|P!Led+QY`0!y-&UPK{=|#QN{CIBSA>5mFzAsuHCLjnB!Gxt!-JB;!D)^{`Zb_zCY|V#1uECnno<=EQQk8qeb> z76TMWxLN_+2drM2PKBhUNaZIH9CpEraQT#em#iC;+uM?m3@C>Sp)ND?@^layUjX6kEouP?T@ zXP@Rpl+|auh%Eoky|OjS;Sp+Oqsvth%IxYAuZ2u}TIv{|8*1UkE=_XRvslzhd!lHA zMir|wqhNOCZr3go`Upj$gt$Zk-T=o-+vsR~j$QiWg8KDZT?^J8O_@6Ze53#tJhSn+ zVAry~G=6zu1`CaN?82p+1m4zDdP#i*j`z2bLadZI8e`b42j4#(OJ2PE)KO&~v3=-R zg~$Q=|IO)A8~Os4b7^O@F2y%|Li?bud0R`SU0uJA9>^DT2xtzdF~YLLSxm0}3QA^d z82(6hy&RqP)@#%J>x~D$ABEMv6yx5{vBR(GG>x(tyM1S|xi}b#sPXhqd+|ORT`Ys? zR&t(JBr`3P3I(Ir7B#4y^rTjw5$rkWsywAW1huE?A+jv=Pe_6VE>F~Ke-hm{VYi;;8Szq z)OPOw?%(1)G`qFdQXZzafyNP zq{Qqk=5+5G!k8P(e+ic8-=N>w&YJ&mDR|miXpU~mDy8+*n0{KBpK!#+iT1R-y!^_o z$Npfc@W#se`g+XHh#q$|d3NsK)4t!oea*~<04&LoaQL(qEG#Vi`GrH+Vt;l59p>wo zx|!q80%JWn<_2jJS7F^xMt!`3yyoEUsm7t!*#QO)74 zuTu0ueZpaoL7E@VyxTVT>dmz~#eE7PF}RpXIaj?{lQq zS690FX!3$d=Z6vn^|r_L0b!b_srA|L*@d{mX32QIqHJ>wFP4pp>>9{i!MkrL1fXz+<3e>a^XB zF7h?#9{t)7yaWW%6Nuh9f8JC{=1lzmkFT((yqxFx@?%dE6LhY?Wre=T`TF(itUm{U zn(6r3JvsSiR*#irbHMC7OEZ=03%!}0_f6J*eduqfzPqTs2SNfE`e1suHEi-)9X&lg zP%kC-vx(z`DBAmR_K)br|B;Ke^7QodDyNpOGej_9MxH?R9H)r0 z5#}IkGL-2Y1x)P>O>mTyl*Prx4F#&_&!1OR^a_Xx>CL5c{{L_RNf8W(T~g(^&*{^r z`T6;!nm06E-zSEBzKj0;`C;jsqy5iqfB*c^p~gjHsj@H8tv(I|{6H#N!=y(8M@W#w z+V~JA-gtim>mljbcuM82{qW`pE+W9k$H -p{zW38ITE@*aRW8)m)3V$d46&T70 zK~FMS79(1K4ql+Pw{Wj*f4r)QTFJsRyYvlOO7B32*~(tRU5Un_&hK!egAq`~Unv+V zRiNK*I-C#Tg7e!h69N-ijD50*|3_VlcEx4ImdB_8iveXJ8keO4dOex0&GeWlkSZf_ z$A{}NlsaH?Sr)reFpTu{ExXf^BmDUy<^AFPnT96b9!fNfDm%k}S0^!2P8Spv!vU>2 zb3R1mpumTLa7{dfx8QZ#L?GZ0K!R3!tSB%4HgeZ*{vW^QCjJZA1+cn85zG}Oi)e7} zoDe>sh_4qMA1wJtZ|9x-j#M?PSjY$UXEw@dlv*F~_)a(Polw4&XH_R^0bp}pL98K6 zm0g;cE$M9!ir3mp#4~TdRet@zt$wB@?`!X5rjJBh^+|TwHirBplgW-@-&jj-KGtq= zI^HfgK4}3672F3i)Q5-Q;9WoYOM)9t8XL26b}o3D9xXMWLUrN5UXL+vif5$FU3xqQ z?5t>V2iVmc9c_oJ{v9P=Z;$V&_MX{NAccPknB-veec*g2WTySrInTib+u6zL%UUN* zv8tj|SC^-?*v9pz6EIF`q?(X@H)fAMR$ef*ZAl2iTy^nTMFkI{Z~yo zDy$iZHR2xMsV$YJLp-g0hA=xOx2dwnE~?$OQFEX#R9Z(HCnY&DR9$lB^LTS!+-0tw zTX9{Ky2p;I4Q;$97XLVE>|%<1;>QNH_c#wrXU7%JT=pf$#TiAqyT-UXo>R1wrGGLK zWv1OKR6Dc2sdIPRt;Nm`q6!;!bkAqBEll(K`(TKzOqLS7%&J-LVo?ZZ7(HYJt3LRTlRr`S8;uG?0x0=b;I9UWJVKe zc_Nw5=GjnO-^D5&r!Bri4cDhPrp*STwX2l#y=@3xjiXFSVP(JTxjkA9Uj zbKlo)VzY>Yf4r}h_xxYD&?nIny$9jJ`CchymhO3{HNvE7^cLNR(ngE+$Pb#weN-qa zxg9vA>J_DT>pFf4Ez?K~Rc3BWa#|%~dvypJav@VJ^X8#2LlPP@r9sfhj{kur&_#hG pQU+YYAZUyH=LPuSL;dzKC6-RqtXa-H7ks4v8R(d5ztnUg{6B!v`R4!t diff --git a/docs/build/html/_sources/creating-a-cordapp.txt b/docs/build/html/_sources/creating-a-cordapp.txt index a95eef423a..f66aa317a3 100644 --- a/docs/build/html/_sources/creating-a-cordapp.txt +++ b/docs/build/html/_sources/creating-a-cordapp.txt @@ -201,7 +201,7 @@ deployment. To use this gradle plugin you must add a new task that is of the type ``net.corda.plugins.Cordform`` to your build.gradle and then configure the nodes you wish to deploy with the Node and nodes configuration DSL. -This DSL is specified in the `JavaDoc `_. An example of this is in the template-cordapp and below +This DSL is specified in the `JavaDoc `_. An example of this is in the CorDapp template and below is a three node example; .. code-block:: text diff --git a/docs/build/html/_sources/flow-state-machines.txt b/docs/build/html/_sources/flow-state-machines.txt index f01b24d79c..075057ec72 100644 --- a/docs/build/html/_sources/flow-state-machines.txt +++ b/docs/build/html/_sources/flow-state-machines.txt @@ -89,7 +89,9 @@ Our flow has two parties (B and S for buyer and seller) and will proceed as foll 2. B sends to S a ``SignedTransaction`` that includes the state as input, B's cash as input, the state with the new owner key as output, and any change cash as output. It contains a single signature from B but isn't valid because it lacks a signature from S authorising movement of the asset. -3. S signs it and hands the now finalised ``SignedTransaction`` back to B. +3. S signs it and *finalises* the transaction. This means sending it to the notary, which checks the transaction for + validity, recording the transaction in the local vault, and then sending it back to B who also checks it and commits + the transaction to their local vault. You can find the implementation of this flow in the file ``finance/src/main/kotlin/net/corda/flows/TwoPartyTradeFlow.kt``. @@ -98,8 +100,7 @@ represents an atomic asset swap. Note that it's the *seller* who initiates contact with the buyer, not vice-versa as you might imagine. -We start by defining a wrapper that namespaces the flow code, two functions to start either the buy or sell side -of the flow, and two classes that will contain the flow definition. We also pick what data will be used by +We start by defining two classes that will contain the flow definition. We also pick what data will be used by each side. .. note:: The code samples in this tutorial are only available in Kotlin, but you can use any JVM language to @@ -110,7 +111,6 @@ each side. .. sourcecode:: kotlin object TwoPartyTradeFlow { - class UnacceptablePriceException(val givenPrice: Amount) : FlowException("Unacceptable price: $givenPrice") class AssetMismatchException(val expectedTypeName: String, val typeName: String) : FlowException() { override fun toString() = "The submitted asset didn't match the expected type: $expectedTypeName vs $typeName" @@ -188,8 +188,6 @@ and try again. .. note:: Java 9 is likely to remove this pre-marking requirement completely. -.. note:: Accessing the vault from inside an @Suspendable function (e.g. via ``serviceHub.vaultService``) can cause a serialisation error when the fiber suspends. Instead, vault access should be performed from a helper non-suspendable function, which you then call from the @Suspendable function. We are working to fix this. - Starting your flow ------------------ @@ -248,12 +246,11 @@ Let's implement the ``Seller.call`` method. This will be run when the flow is in :dedent: 4 Here we see the outline of the procedure. We receive a proposed trade transaction from the buyer and check that it's -valid. The buyer has already attached their signature before sending it. Then we calculate and attach our own signature so that the transaction is -now signed by both the buyer and the seller. We then send this request to a notary to assert with another signature that the -timestamp in the transaction (if any) is valid and there are no double spends, and send back both -our signature and the notaries signature. Note we should not send to the notary until all other required signatures have been appended -as the notary may validate the signatures as well as verifying for itself the transactional integrity. -Finally, we hand back to the code that invoked the flow the finished transaction. +valid. The buyer has already attached their signature before sending it. Then we calculate and attach our own signature +so that the transaction is now signed by both the buyer and the seller. We then *finalise* this transaction by sending +it to a notary to assert (with another signature) that the timestamp in the transaction (if any) is valid and there are no +double spends. Finally, after the finalisation process is complete, we retrieve the now fully signed transaction from +local storage. It will have the same ID as the one we started with but more signatures. Let's fill out the ``receiveAndCheckProposedTransaction()`` method. @@ -327,24 +324,39 @@ Throwing a ``FlowException`` enables a flow to reject a piece of data it has rec done in the ``unwrap`` method of the received ``UntrustworthyData``. In the above example the seller checks the price and throws ``FlowException`` if it's invalid. It's then up to the buyer to either try again with a better price or give up. -Sub-flows ---------- +Sub-flows and finalisation +-------------------------- Flows can be composed via nesting. Invoking a sub-flow looks similar to an ordinary function call: .. container:: codeset - .. literalinclude:: ../../finance/src/main/kotlin/net/corda/flows/TwoPartyTradeFlow.kt - :language: kotlin - :start-after: DOCSTART 6 - :end-before: DOCEND 6 - :dedent: 4 + .. sourcecode:: kotlin + + @Suspendable + fun call() { + val unnotarisedTransaction = ... + subFlow(FinalityFlow(unnotarisedTransaction)) + } + + .. sourcecode:: java + + @Suspendable + public void call() throws FlowException { + SignedTransaction unnotarisedTransaction = ... + subFlow(new FinalityFlow(unnotarisedTransaction)) + } + +In this code snippet we are using the ``FinalityFlow`` to finish off the transaction. It will: + +* Send the transaction to the chosen notary and, if necessary, satisfy the notary that the transaction is valid. +* Record the transaction in the local vault, if it is relevant (i.e. involves the owner of the node). +* Send the fully signed transaction to the other participants for recording as well. -In this code snippet we are using the ``NotaryFlow.Client`` to request notarisation of the transaction. We simply create the flow object via its constructor, and then pass it to the ``subFlow`` method which returns the result of the flow's execution directly. Behind the scenes all this is doing is wiring up progress -tracking (discussed more below) and then running the objects ``call`` method. Because this little helper method can -be on the stack when network IO takes place, we mark it as ``@Suspendable``. +tracking (discussed more below) and then running the objects ``call`` method. Because the sub-flow might suspend, +we must mark the method that invokes it as suspendable. Going back to the previous code snippet, we use a sub-flow called ``ResolveTransactionsFlow``. This is responsible for downloading and checking all the dependencies of a transaction, which in Corda are always retrievable @@ -360,32 +372,11 @@ objects, but we don't need them here so we just ignore the return value. After the dependencies, we check the proposed trading transaction for validity by running the contracts for that as well (but having handled the fact that some signatures are missing ourselves). -Here's the rest of the code: - -.. container:: codeset - - .. literalinclude:: ../../finance/src/main/kotlin/net/corda/flows/TwoPartyTradeFlow.kt - :language: kotlin - :start-after: DOCSTART 7 - :end-before: DOCEND 7 - :dedent: 4 - -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. - -In ``sendSignatures``, we take the two signatures we obtained and add them to the partial transaction we were sent. -There is an overload for the + operator so signatures can be added to a SignedTransaction easily. Finally, we wrap the -two signatures in a simple wrapper message class and send it back. The send won't block waiting for an acknowledgement, -but the underlying message queue software will retry delivery if the other side has gone away temporarily. - -You can also see that every flow instance has a logger (using the SLF4J API) which you can use to log progress -messages. - -.. warning:: This sample code is **not secure**. Other than not checking for all possible invalid constructions, if the - seller stops before sending the finalised transaction to the buyer, the seller is left with a valid transaction - but the buyer isn't, so they can't spend the asset they just purchased! This sort of thing will be fixed in a - future version of the code. +.. warning:: If the seller stops before sending the finalised transaction to the buyer, the seller is left with a + valid transaction but the buyer isn't, so they can't spend the asset they just purchased! This sort of thing is not + always a risk (as the seller may not gain anything from that sort of behaviour except a lawsuit), but if it is, a future + version of the platform will allow you to ask the notary to send you the transaction as well, in case your counterparty + does not. This is not the default because it reveals more private info to the notary. Implementing the buyer ---------------------- @@ -403,12 +394,11 @@ OK, let's do the same for the buyer side: 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 ``VaultService.generateSpend``. See the vault documentation if this - part isn't clear. +2. We create a cash spend using ``VaultService.generateSpend``. You can read the vault documentation to learn more about this. 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. -4. Finally, we send the unfinished, invalid transaction to the seller so they can sign it. They are expected to send - back to us a ``SignaturesFromSeller``, which once we verify it, should be the final outcome of the trade. +4. We send the unfinished, invalid transaction to the seller so they can sign it and finalise it. +5. Finally, we wait for the finished transaction to arrive in our local storage and vault. As you can see, the flow logic is straightforward and does not contain any callbacks or network glue code, despite the fact that it takes minimal resources and can survive node restarts. @@ -435,7 +425,7 @@ A flow might declare some steps with code inside the flow class like this: .. literalinclude:: ../../finance/src/main/kotlin/net/corda/flows/TwoPartyTradeFlow.kt :language: kotlin :start-after: DOCSTART 2 - :end-before: DOCSTART 1 + :end-before: DOCEND 2 :dedent: 4 .. sourcecode:: java diff --git a/docs/build/html/_sources/getting-set-up-fault-finding.txt b/docs/build/html/_sources/getting-set-up-fault-finding.txt index a814b65f85..fac286c5e1 100644 --- a/docs/build/html/_sources/getting-set-up-fault-finding.txt +++ b/docs/build/html/_sources/getting-set-up-fault-finding.txt @@ -4,9 +4,9 @@ Troubleshooting Milestone releases ------------------ -When you clone the corda or cordapp-template repos, they will default to the master branch. The master branch is being continuously developed upon, and its features may not align with the state of Corda as described in the docs. Additionally, the master branch of the CorDapp Template may break in response to changes in the main corda repo. +When you clone the corda or cordapp-template repos, they will default to the master branch. The master branch is being continuously developed upon, and its features may not align with the state of Corda as described in the docs. Additionally, the master branch of the CorDapp template may break in response to changes in the main corda repo. -When developing on Corda, you should always check out the latest stable branch instead, by running ``git checkout release-M7``. +When developing on Corda, you should always check out the latest milestone (i.e. stable) branch instead. For example, to check out milestone 7, you'd run ``git checkout release-M7``. Java issues ----------- @@ -19,7 +19,9 @@ Many users have faced issues when running versions of Java that are either outda "Unresolved reference: javafx" ****************************** -JavaFX is not bundled with OpenJDK. If you are using OpenJDK and get an 'Unresolved reference: javafx' error, this means that you need to install OpenJFX. Do this by running ``sudo apt install openjfx``, and possibly ``sudo apt install libopenjfx-jav``. +JavaFX is not bundled with OpenJDK. If you are using OpenJDK and get an 'Unresolved reference: javafx' error, this means that you need to install OpenJFX. + +If you have APT installed and OpenJFX is part of your Unix distribution's package list, you can do this by running ``sudo apt install openjfx``, and possibly ``sudo apt install libopenjfx-jav``. Other users will want to refer to the guide `here `_, or to the list of Community Builds `here `_. IDEA issues --------------- diff --git a/docs/build/html/_sources/getting-set-up.txt b/docs/build/html/_sources/getting-set-up.txt index 85a178a566..8dc95e51cb 100644 --- a/docs/build/html/_sources/getting-set-up.txt +++ b/docs/build/html/_sources/getting-set-up.txt @@ -69,13 +69,17 @@ The Corda platform source code is available here: https://github.com/corda/corda.git -and a basic CorDapp that you can use as the basis for your own CorDapps is available here: +A CorDapp template that you can use as the basis for your own CorDapps is available here: https://github.com/corda/cordapp-template.git -You can clone both of these repos to your local machine by running the command ``git clone [repo URL]``. +And a simple example CorDapp for you to explore basic concepts is available here: -By default, both repos will be on the ``master`` branch. However, this is an unstable development branch. You should check + https://github.com/corda/cordapp-tutorial.git + +You can clone these repos to your local machine by running the command ``git clone [repo URL]``. + +By default, these repos will be on the ``master`` branch. However, this is an unstable development branch. You should check out the latest milestone release (currently Milestone 7) instead by running ``git checkout release-M7``. Opening Corda/CorDapps in IDEA diff --git a/docs/build/html/_sources/index.txt b/docs/build/html/_sources/index.txt index fdcb8a43a2..ae26b709a4 100644 --- a/docs/build/html/_sources/index.txt +++ b/docs/build/html/_sources/index.txt @@ -19,10 +19,8 @@ Corda is designed so that developers can easily extend its functionality by writ sure you follow the instructions in :doc:`getting-set-up`, then go to :doc:`running-the-demos`. -If, after running the demos, you're interested in writing your own CorDapps, a template CorDapp is available on -`Github `_. To get it running, follow the instructions in the -`readme `_, or watch the -`Corda Developers Tutorial `_. +If, after running the demos, you're interested in writing your own CorDapps, you can use the +`CorDapp template `_ as a base. A simple example CorDapp built upon the template is available `here `_, and a video primer on basic CorDapp structure is available `here `_. From there, you'll be in a position to start extending the example CorDapp yourself (e.g. by writing new states, contracts, and/or flows). For this, you'll want to refer to this docsite, and to the `tutorials `_ diff --git a/docs/build/html/_sources/merkle-trees.txt b/docs/build/html/_sources/merkle-trees.txt index 23b1b9e149..6c8378fa1f 100644 --- a/docs/build/html/_sources/merkle-trees.txt +++ b/docs/build/html/_sources/merkle-trees.txt @@ -15,17 +15,17 @@ You can read more on the concept `here Boolean``. .. container:: codeset .. sourcecode:: kotlin - val partialTx = ... + val partialTx = ... val oracle: Party = ... - fun filterCommands(c: Command) = oracle.owningKey in c.signers && c.value is Fix - val filterFuns = FilterFuns(filterCommands = ::filterCommands) + fun filtering(elem: Any): Boolean { + return when (elem) { + is Command -> oracleParty.owningKey in elem.signers && elem.value is Fix + else -> false + } + } Assuming that we already assembled partialTx with some commands and know the identity of Oracle service, -we pass filtering function over commands - ``filterCommands`` to ``FilterFuns``. It filters only -commands of type ``Fix`` as in IRSDemo example. Then we can construct ``FilteredTransaction``: +we construct filtering function over commands - ``filtering``. It performs type checking and filters only ``Fix`` commands +as in IRSDemo example. Then we can construct ``FilteredTransaction``: .. container:: codeset .. sourcecode:: kotlin val wtx: WireTransaction = partialTx.toWireTransaction() - val ftx = FilteredTransaction.buildMerkleTransaction(wtx, filterFuns) + val ftx: FilteredTransaction = wtx.buildFilteredTransaction(filtering) -In the Oracle example this step takes place in ``RatesFixFlow``: +In the Oracle example this step takes place in ``RatesFixFlow`` by overriding ``filtering`` function, see: :ref:`filtering_ref` -.. container:: codeset - - .. sourcecode:: kotlin - - val flow = RatesFixFlow(partialTx, filterFuns, oracle, fixOf, "0.675".bd, "0.1".bd) ``FilteredTransaction`` holds ``filteredLeaves`` (data that we wanted to reveal) and Merkle branch for them. @@ -87,14 +87,21 @@ In the Oracle example this step takes place in ``RatesFixFlow``: .. sourcecode:: kotlin - // Getting included commands, inputs, outputs, attachments. + // Direct accsess to included commands, inputs, outputs, attachments etc. val cmds: List = ftx.filteredLeaves.commands val ins: List = ftx.filteredLeaves.inputs - val outs: List> = ftx.filteredLeaves.outputs - val attchs: List = ftx.filteredLeaves.attachments + val timestamp: Timestamp? = ftx.filteredLeaves.timestamp + ... +.. literalinclude:: ../../samples/irs-demo/src/main/kotlin/net/corda/irs/api/NodeInterestRates.kt + :language: kotlin + :start-after: DOCSTART 1 + :end-before: DOCEND 1 -If you want to verify obtained ``FilteredTransaction`` all you need is the root hash of the full transaction: +Above code snippet is taken from ``NodeInterestRates.kt`` file and implements a signing part of an Oracle. +You can check only leaves using ``leaves.checkWithFun { check(it) }`` and then verify obtained ``FilteredTransaction`` +to see if data from ``PartialMerkleTree`` belongs to ``WireTransaction`` with provided ``id``. All you need is the root hash +of the full transaction: .. container:: codeset @@ -104,6 +111,13 @@ If you want to verify obtained ``FilteredTransaction`` all you need is the root throw MerkleTreeException("Rate Fix Oracle: Couldn't verify partial Merkle tree.") } +Or combine the two steps together: + +.. container:: codeset + + .. sourcecode:: kotlin + + ftx.verifyWithFunction(merkleRoot, ::check) .. note:: The way the ``FilteredTransaction`` is constructed ensures that after signing of the root hash it's impossible to add or remove leaves. However, it can happen that having transaction with multiple commands one party reveals only subset of them to the Oracle. diff --git a/docs/build/html/_sources/oracles.txt b/docs/build/html/_sources/oracles.txt index 7150d273dd..641cadb3b1 100644 --- a/docs/build/html/_sources/oracles.txt +++ b/docs/build/html/_sources/oracles.txt @@ -239,8 +239,11 @@ those for ``NodeInterestRates.Oracle``. :start-after: DOCSTART 1 :end-before: DOCEND 1 -You'll note that the ``FixSignFlow`` requires a ``FilterFuns`` instance with the appropriate filter to include only -the ``Fix`` commands. You can find a further explanation of this in :doc:`merkle-trees`. +You'll note that the ``FixSignFlow`` requires a ``FilterTransaction`` instance which includes only ``Fix`` commands. +You can find a further explanation of this in :doc:`merkle-trees`. Below you will see how to build such transaction with +hidden fields. + +.. _filtering_ref: Using an oracle --------------- @@ -260,8 +263,9 @@ As you can see, this: 2. Does some quick validation. 3. Adds the command to the transaction containing the fact to be signed for by the oracle. 4. Calls an extension point that allows clients to generate output states based on the fact from the oracle. -5. Requests the signature from the oracle using the client sub-flow for signing from above. -6. Adds the signature returned from the oracle. +5. Builds filtered transaction based on filtering function extended from ``RatesFixFlow``. +6. Requests the signature from the oracle using the client sub-flow for signing from above. +7. Adds the signature returned from the oracle. Here's an example of it in action from ``FixingFlow.Fixer``. @@ -269,3 +273,8 @@ Here's an example of it in action from ``FixingFlow.Fixer``. :language: kotlin :start-after: DOCSTART 1 :end-before: DOCEND 1 + +.. note:: + When overriding be careful when making the sub-class an anonymous or inner class (object declarations in Kotlin), + because that kind of classes can access variables from the enclosing scope and cause serialization problems when + checkpointed. diff --git a/docs/build/html/_sources/tutorial-cordapp.txt b/docs/build/html/_sources/tutorial-cordapp.txt index 3384a9a8b4..35d0bac753 100644 --- a/docs/build/html/_sources/tutorial-cordapp.txt +++ b/docs/build/html/_sources/tutorial-cordapp.txt @@ -4,14 +4,18 @@ -The CorDapp template -==================== +The example CorDapp +=================== -This guide covers how to get started with the `cordapp-template`. Please note there are two Corda repositories: +.. note:: The example CorDapp was previously hosted in the `cordapp-template `_ repository. It has now been + moved into a new `cordapp-tutorial `_ repository. Going forward, the cordapp-template repo will contain an + actual CorDapp template, which should be used as the basis for your CorDapps going forward. -* ``corda`` which contains the core platform code and sample CorDapps. -* ``cordapp-template`` which contains a template CorDapp you can use to bootstrap your own CorDapps. It is the subject - of this tutorial and should help you understand the basics of building a CorDapp. +This guide covers how to get started with the example CorDapp. Please note there are several Corda repositories: + +* `corda `_ which contains the core platform code and sample CorDapps. +* `cordapp-tutorial `_ which contains an example CorDapp you can use to bootstrap your own CorDapps. It is the subject of this tutorial and should help you understand the basics of building a CorDapp. +* `cordapp-template `_ which contains a bare-bones template on which to build your own CorDapps. We recommend you read the non-technical white paper and technical white paper before you get started with Corda: @@ -25,30 +29,29 @@ We recommend you read the non-technical white paper and technical white paper be Background ---------- -The Example CorDapp implements a basic scenario where a buyer wishes to submit purchase orders to a seller. The scenario +The Example CorDapp implements a basic scenario where one party wishes to send an IOU to another party. The scenario defines four nodes: -* **Controller** which hosts the network map service and validating notary service. -* **NodeA** who is the buyer. -* **NodeB** who is the seller. -* **NodeC** an unrelated third party. +* **Controller**, which hosts the network map service and validating notary service +* **NodeA** +* **NodeB** +* **NodeC** -NodeA can generate purchase orders for lists and quantities of items and associated metadata such as delivery address -and delivery date. The flows used to facilitate the agreement process always results in an agreement with the seller as -long as the purchase order meets the contract constraints which are defined in ``PurchaseOrderContract.kt``. +The nodes can generate IOUs and send them to other nodes. The flows used to facilitate the agreement process always results in +an agreement with the recipient as long as the IOU meets the contract constraints which are defined in ``IOUContract.kt``. -All agreed purchase orders between NodeA and NodeB become "shared facts" between NodeA and NodeB. But note that NodeC -won't see any of these transactions or have copies of any of the resulting ``PurchaseOrderState`` objects. This is +All agreed IOUs between NodeA and NodeB become "shared facts" between NodeA and NodeB. But note that NodeC +won't see any of these transactions or have copies of any of the resulting ``IOUState`` objects. This is because data is only propagated on a need-to-know basis. Getting started --------------- -There are two ways to get started with the CorDapp template. You can either work from a milestone release of Corda or a +There are two ways to get started with the example CorDapp. You can either work from a milestone release of Corda or a SNAPSHOT release of Corda. **Using a monthly Corda milestone release.** If you wish to develop your CorDapp using the most recent milestone release -then you can get started simply by cloning the ``cordapp-template`` repository. Gradle will grab all the required dependencies +then you can get started simply by cloning the ``cordapp-tutorial`` repository. Gradle will grab all the required dependencies for you from our `public Maven repository `_. **Using a Corda SNAPSHOT build.** Alternatively, if you wish to work from the master branch of the Corda repo which contains @@ -69,21 +72,21 @@ The process for developing your CorDapp from a milestone release is the most sim approach. We publish all our milestone releases to a public Maven repository on a monthly basis. As such, Gradle will automatically -grab the appropriately versioned (specified in the ``cordapp-template``'s ``build.gradle`` file) dependencies for you from Maven. -All you have to do is check out the release tag of the template version you wish to use. +grab the appropriately versioned (specified in the ``cordapp-tutorial``'s ``build.gradle`` file) dependencies for you from Maven. +All you have to do is check out the release tag of the tutorial version you wish to use. -By default, the ``master`` branch of the ``cordapp-template`` points to a SNAPSHOT release of Corda, this is because it is +By default, the ``master`` branch of the ``cordapp-tutorial`` points to a SNAPSHOT release of Corda, this is because it is being constantly updated to reflect the changes in the master branch of the `corda` repository. .. note:: If you wish to use a SNAPSHOT release then follow the instructions below: `Using a SNAPSHOT release`_. -To clone the ``cordapp-template`` repository, use the following command: +To clone the ``cordapp-tutorial`` repository, use the following command: -``git clone https://github.com/corda/cordapp-template`` +``git clone https://github.com/corda/cordapp-tutorial`` Now change directories to the freshly cloned repo: -``cd cordapp-template`` +``cd cordapp-tutorial`` To enumerate all the tagged releases. Use: @@ -95,7 +98,7 @@ To checkout a specific tag, use: where ``local_branch_name`` is a name of your choice and ``tag_name`` is the name of the tag you wish to checkout. -Gradle will handle all the dependencies for you. Now you are now ready to get started `building the CorDapp Template`_. +Gradle will handle all the dependencies for you. Now you are now ready to get started `building the example CorDapp`_. Using a SNAPSHOT release ~~~~~~~~~~~~~~~~~~~~~~~~ @@ -145,7 +148,7 @@ where ``local_branch_name`` is a name of your choice and ``remote_branch_name`` to checkout. .. note:: When working with ``master`` you will have access to the most up-to-date feature set. However you will be - potentially sacrificing stability. We will endeavour to keep the ``master`` branch of the ``cordapp-template`` repo in sync + potentially sacrificing stability. We will endeavour to keep the ``master`` branch of the ``cordapp-tutorial`` repo in sync with the ``master`` branch of ``corda`` repo. A milestone tagged release would be more stable for CorDapp development. The next step is to publish the Corda JARs to your local Maven repository. By default the Maven local repository can be @@ -198,13 +201,13 @@ and to check out an open feature branch, use: Once you have published the Corda JARs to your local Maven repository, you are ready to get started building your CorDapp using the latest Corda features. -Opening the CorDapp Template with IntelliJ -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Opening the example CorDapp with IntelliJ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ For those familiar with IntelliJ, you can skip this section. As noted in the getting started guide, we recommend using the IntelliJ IDE. Assuming you have already downloaded and -installed IntelliJ, lets now open the CorDapp Template with IntelliJ. +installed IntelliJ, lets now open the example CorDapp with IntelliJ. **For those completely new to IntelliJ** @@ -213,7 +216,7 @@ Firstly, load up IntelliJ. A dialogue will appear: .. image:: resources/intellij-welcome.png :width: 400 -Click open, then navigate to the folder where you cloned the ``cordapp-template`` and click OK. +Click open, then navigate to the folder where you cloned the ``cordapp-tutorial`` and click OK. Next, IntelliJ will show a bunch of pop-up windows. One of which requires our attention: @@ -227,14 +230,14 @@ dialogue, simply close and re-open IntelliJ again to see it again. **Alternative approach** Alternatively, one can instruct IntelliJ to create a new project through cloning a repository. From the IntelliJ welcome -dialogue (shown above), opt to 'check out from version control', then select git and enter the git URL for the CorDapp template -(https://github.com/corda/cordapp-template). You'll then need to import the Gradle project when prompted, as explained above. +dialogue (shown above), opt to 'check out from version control', then select git and enter the git URL for the example CorDapp +(https://github.com/corda/cordapp-tutorial). You'll then need to import the Gradle project when prompted, as explained above. **If you already have IntelliJ open** -From the ``File`` menu, navigate to ``Open ...`` and then navigate to the directory where you cloned the ``cordapp-template``. +From the ``File`` menu, navigate to ``Open ...`` and then navigate to the directory where you cloned the ``cordapp-tutorial``. Alternatively, if you wish to clone from github directly then navigate to ``File > New > Project from existing sources ...`` -and enter the URL to the CorDapp Template (specified above). When instructed, be sure to import the Gradle project when prompted. +and enter the URL to the example CorDapp (specified above). When instructed, be sure to import the Gradle project when prompted. **The Gradle plugin** @@ -242,30 +245,30 @@ IntelliJ can be used to run Gradle tasks through the Gradle plugin which can be All the Gradle projects are listed in the window on the right hand side of the IDE. Click on a project, then 'tasks' to see all available Gradle tasks. -* For the CorDapp Template repo there will only be one Gradle project listed. +* For the example CorDapp repo there will only be one Gradle project listed. * For the Corda repo there will be many project listed, the root project ``corda`` and associated sub-projects: ``core``, ``finance``, ``node``, etc. -.. note:: It's worth noting that when you change branch in the CorDapp template, the ``corda_version`` will change to +.. note:: It's worth noting that when you change branch in the example CorDapp, the ``corda_version`` will change to reflect the version of the branch you are working from. To execute a task, double click it. The output will be shown in a console window. -Building the CorDapp template ------------------------------ +Building the example CorDapp +---------------------------- **From the command line** -Firstly, return to your terminal window used above and make sure you are in the ``cordapp-template`` directory. +Firstly, return to your terminal window used above and make sure you are in the ``cordapp-tutorial`` directory. -To build the CorDapp template use the following command: +To build the example CorDapp use the following command: Unix/Mac OSX: ``./gradlew deployNodes`` Windows: ``gradlew.bat deployNodes`` -This build process will build the example CorDapp defined in the CorDapp template source. CorDapps can be written in -any language targeting the JVM. In our case, we've provided the template source in both Kotlin (``/kotlin/src``) and +This build process will build the example CorDapp defined in the example CorDapp source. CorDapps can be written in +any language targeting the JVM. In our case, we've provided the example source in both Kotlin (``/kotlin/src``) and Java (``/java/src``) Since both sets of source files are functionally identical, we will refer to the Kotlin build throughout the documentation. @@ -276,7 +279,7 @@ The ``deployNodes`` Gradle task allows you easily create a formation of Corda no we are creating ``four`` nodes. After the building process has finished to see the newly built nodes, you can navigate to the ``kotlin/build/nodes`` folder -located in the ``cordapp-template`` root directory. You can ignore the other folders in ``/build`` for now. The ``nodes`` +located in the ``cordapp-tutorial`` root directory. You can ignore the other folders in ``/build`` for now. The ``nodes`` folder has the following structure: .. sourcecode:: none @@ -317,10 +320,10 @@ Open the Gradle window by selecting ``View > Tool windows > Gradle`` from the ma open on the right hand side of the IDE. Expand `tasks` and then expand `other`. Double click on `deployNodes`. Gradle will start the build process and output progress to a console window in the IDE. -Running the CorDapp template ----------------------------- +Running the example CorDapp +--------------------------- -Running the CorDapp template from the command line +Running the example CorDapp from the command line ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ To run the sample CorDapp navigate to the ``kotlin/build/nodes`` folder and execute the ``runnodes`` shell script with: @@ -342,7 +345,7 @@ message and some pertinent config information, see below: --- DEVELOPER SNAPSHOT ------------------------------------------------------------ - Logs can be found in : /Users/rogerwillis/Documents/Corda/cordapp-template/kotlin/build/nodes/nodea/logs + Logs can be found in : /Users/rogerwillis/Documents/Corda/cordapp-tutorial/kotlin/build/nodes/nodea/logs Database connection URL is : jdbc:h2:tcp://10.18.0.196:50661/node Node listening on address : localhost:10004 Loaded plugins : com.example.plugin.ExamplePlugin @@ -416,14 +419,14 @@ To stop the nodes, press the red "stop" button at the top right-hand side of the The node driver can also be used to as a basis for `debugging your CorDapp`_ -Interacting with the CorDapp template -------------------------------------- +Interacting with the example CorDapp +------------------------------------ Via HTTP ~~~~~~~~ The CorDapp defines a few HTTP API end-points and also serves some static web content. The end-points allow you to -list purchase orders and add purchase orders. +list IOUs and add IOUs. The nodes can be found using the following port numbers, defined in build.gradle and the respective node.conf file for each node found in `kotlin/build/nodes/NodeX`` etc: @@ -440,32 +443,32 @@ served are as follows: * ``/api/example/me`` * ``/api/example/peers`` -* ``/api/example/purchase-orders`` -* ``/api/example/{COUNTERPARTY}/create-purchase-order`` +* ``/api/example/ious`` +* ``/api/example/{COUNTERPARTY}/create-iou`` The static web content is served from ``/web/example``. -A purchase order can be created via accessing the ``api/example/create-purchase-order`` end-point directly or through the +An IOU can be created via accessing the ``api/example/create-iou`` end-point directly or through the the web form hosted at ``/web/example``. .. warning:: **The content in ``web/example`` is only available for demonstration purposes and does not implement any anti-XSS, anti-XSRF or any other security techniques. Do not copy such code directly into products meant for production use.** -**Submitting a purchase order via HTTP API:** +**Submitting an IOU via HTTP API:** -To create a purchase order from NodeA to NodeB, use: +To create an IOU from NodeA to NodeB, use: .. sourcecode:: bash - echo '{"orderNumber": "1","deliveryDate": "2018-09-15","deliveryAddress": {"city": "London","country": "UK"},"items" : [{"name": "widget","amount": "3"},{"name": "thing","amount": "4"}]}' | cURL -T - -H 'Content-Type: application/json' http://localhost:10005/api/example/NodeB/create-purchase-order + echo '{"value": "1"}' | cURL -T - -H 'Content-Type: application/json' http://localhost:10005/api/example/NodeB/create-iou Note the port number ``10005`` (NodeA) and NodeB referenced in the API end-point path. This command instructs NodeA to -create and send a purchase order to NodeB. Upon verification and completion of the process, both nodes (but not NodeC) will -have a signed, notarised copy of the purchase order. +create and send an IOU to NodeB. Upon verification and completion of the process, both nodes (but not NodeC) will +have a signed, notarised copy of the IOU. -**Submitting a purchase order via web/example:** +**Submitting an IOU via web/example:** -Navigate to the "create purchase order" button at the top left of the page, enter in the purchase order details e.g. +Navigate to the "create IOU" button at the top left of the page, and enter the IOU details - e.g. .. sourcecode:: none @@ -478,20 +481,22 @@ Navigate to the "create purchase order" button at the top left of the page, ente Item amount: 5 and click submit (note you can add additional item types and amounts). Upon pressing submit, the modal dialogue should close. -To check what validation is performed over the purchase order data, have a look at the ``PurchaseOrderContract.Place`` class in -``PurchaseOrderContract.kt`` which defines the following contract constraints (among others not included here): +To check what validation is performed over the IOU data, have a look at the ``IOUContract.Create`` class in +``IOUContract.kt`` which defines the following contract constraints (among others not included here): .. sourcecode:: kotlin - // Purchase order specific constraints. - "We only deliver to the UK." by (out.po.deliveryAddress.country == "UK") - "You must order at least one type of item." by (out.po.items.size > 0) - "You cannot order zero or negative amounts of an item." by (out.po.items.map(Item::amount).all { it > 0 }) - "You can only order up to 10 items at a time." by (out.po.items.map(Item::amount).sum() <= 10) - val time = tx.timestamp?.midpoint - "The delivery date must be in the future." by (out.po.deliveryDate.toInstant() > time) + // Generic constraints around the IOU transaction. + "No inputs should be consumed when issuing an IOU." by (tx.inputs.isEmpty()) + "Only one output state should be created." by (tx.outputs.size == 1) + val out = tx.outputs.single() as IOUState + "The sender and the recipient cannot be the same entity." by (out.sender != out.recipient) + "All of the participants must be signers." by (command.signers.containsAll(out.participants)) -**Once a purchase order has been submitted:** + // IOU-specific constraints. + "The IOU's value must be non-negative." by (out.iou.value > 0) + +**Once an IOU has been submitted:** Inspect the terminal windows for the nodes. Assume all of the above contract constraints are met, you should see some activity in the terminal windows for NodeA and NodeB (note: the green ticks are only visible on unix/mac): @@ -500,29 +505,25 @@ activity in the terminal windows for NodeA and NodeB (note: the green ticks are .. sourcecode:: none - ✅ Constructing proposed purchase order. - ✅ Sending purchase order to seller for review. - ✅ Received partially signed transaction from seller. - ✅ Verifying signatures and contract constraints. - ✅ Signing transaction with our private key. - ✅ Obtaining notary signature. - ✅ Requesting signature by Notary service - ✅ Validating response from Notary service - ✅ Recording transaction in vault. - ✅ Sending fully signed transaction to seller. - ✅ Done +✅ Generating transaction based on new IOU. +✅ Verifying contract constraints. +✅ Signing transaction with our private key. +✅ Sending proposed transaction to recipient for review. +✅ Done *NodeB:* .. sourcecode:: none - ✅ Receiving proposed purchase order from buyer. - ✅ Generating transaction based on proposed purchase order. - ✅ Signing proposed transaction with our private key. - ✅ Sending partially signed transaction to buyer and wait for a response. - ✅ Verifying signatures and contract constraints. - ✅ Recording transaction in vault. - ✅ Done +✅ Receiving proposed transaction from sender. +✅ Verifying signatures and contract constraints. +✅ Signing proposed transaction with our private key. +✅ Obtaining notary signature and recording transaction. + ✅ Requesting signature by notary service + ✅ Requesting signature by Notary service + ✅ Validating response from Notary service + ✅ Broadcasting transaction to participants +✅ Done *NodeC:* @@ -530,12 +531,12 @@ activity in the terminal windows for NodeA and NodeB (note: the green ticks are You shouldn't see any activity. -Next you can view the newly created purchase order by accessing the vault of NodeA or NodeB: +Next you can view the newly created IOU by accessing the vault of NodeA or NodeB: *Via the HTTP API:* -For NodeA. navigate to http://localhost:10005/api/example/purchase-orders. For NodeB, -navigate to http://localhost:10007/api/example/purchase-orders. +For NodeA. navigate to http://localhost:10005/api/example/ious. For NodeB, +navigate to http://localhost:10007/api/example/ious. *Via web/example:* @@ -575,9 +576,9 @@ Using the Example RPC client ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The ``/src/main/kotlin/com/example/client/ExampleClientRPC.kt`` file is a simple utility which uses the client RPC library -to connect to a node and log the 'placed' purchase orders. It will log any existing purchase orders and listen for any future -purchase orders. If you haven't placed any purchase orders when you connect to one of the Nodes via RPC then the client will log -and future purchase orders which are agreed. +to connect to a node and log the created IOUs. It will log any existing IOUs and listen for any future +IOUs. If you haven't created any IOUs when you connect to one of the Nodes via RPC then the client will log +and future IOUs which are agreed. To build the client use the following gradle task: @@ -600,17 +601,17 @@ application see: * :doc:`Client RPC documentation ` * :doc:`Client RPC tutorial ` -Extending the CorDapp template ------------------------------- +Extending the example CorDapp +----------------------------- -CorDapp-template project structure +cordapp-tutorial project structure ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The CorDapp template has the following directory structure: +The example CorDapp has the following directory structure: .. sourcecode:: none - . cordapp-template + . cordapp-tutorial ├── README.md ├── LICENSE ├── build.gradle @@ -624,7 +625,7 @@ The CorDapp template has the following directory structure: ├── lib │   ├── ... ├── settings.gradle - ├── kotlin + ├── kotlin-source │ └── src │ ├── main │    │   ├── kotlin @@ -636,10 +637,10 @@ The CorDapp template has the following directory structure: │    │   │   ├── client │    │   │   │   └── ExampleClientRPC.kt │    │   │   ├── contract - │    │   │   │   ├── PurchaseOrderContract.kt - │    │   │   │   └── PurchaseOrderState.kt + │    │   │   │   ├── IOUContract.kt + │    │   │   │   └── IOUState.kt │    │   │   ├── model - │    │   │   │   └── PurchaseOrder.kt + │    │   │   │   └── IOU.kt │    │   │   ├── plugin │    │   │   │   └── ExamplePlugin.kt │    │   │   └── flow @@ -666,7 +667,7 @@ The CorDapp template has the following directory structure: │ │   └── example │ │   └── ExampleTest.kt │    └── resources - └── java + └── java-source └── src ├── main    │   ├── java @@ -678,10 +679,10 @@ The CorDapp template has the following directory structure:    │   │   ├── client    │   │   │   └── ExampleClientRPC.java    │   │   ├── contract -    │   │   │   ├── PurchaseOrderContract.java -    │   │   │   └── PurchaseOrderState.java +    │   │   │   ├── IOUContract.java +    │   │   │   └── IOUState.java    │   │   ├── model -    │   │   │   └── PurchaseOrder.java +    │   │   │   └── IOU.java    │   │   ├── plugin    │   │   │   └── ExamplePlugin.java    │   │   └── flow @@ -740,8 +741,8 @@ things. If you are working from a Corda SNAPSHOT release which you have publish to Maven local then ensure that ``corda_version`` is the same as the version of the Corda core modules you published to Maven local. If not then change the -``kotlin_version`` property. Also, if you are working from a previous milestone release, then be sure to ``git checkout`` -the correct version of the CorDapp template from the ``cordapp-template`` repo. +``kotlin_version`` property. Also, if you are working from a previous cordapp-tutorial milestone release, then be sure to ``git checkout`` +the correct version of the example CorDapp from the ``cordapp-tutorial`` repo. .. sourcecode:: groovy @@ -824,7 +825,7 @@ like to deploy for testing. See further details below: You can add any number of nodes, with any number of services / CorDapps by editing the templates in ``deployNodes``. The only requirement is that you must specify a node to run as the network map service and one as the notary service. -.. note:: CorDapps in the current cordapp-template project are automatically registered with all nodes defined in +.. note:: CorDapps in the current cordapp-tutorial project are automatically registered with all nodes defined in ``deployNodes``, although we expect this to change in the near future. .. warning:: Make sure that there are no port clashes! @@ -834,7 +835,7 @@ When you are finished editing your *CordFormation* the changes will be reflected Service Provider Configuration File ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -If you are building a CorDapp from scratch or adding a new CorDapp to the CorDapp-template project then you must provide +If you are building a CorDapp from scratch or adding a new CorDapp to the cordapp-tutorial project then you must provide a reference to your sub-class of ``CordaPluginRegistry`` in the provider-configuration file in located in the ``resources/META-INF/services`` directory. Re-Deploying Your Nodes Locally @@ -881,8 +882,8 @@ controller node is running and to its legal name (e.g. `networkMapService.addres `networkMapService.legalName=controller`) (please note that the controller will not have the `networkMapService` config) Each machine should now run its nodes using `runnodes` or `runnodes.bat` -files. Once they are up and running, the nodes should be able to place -purchase orders among themselves in the same way as when they were running on +files. Once they are up and running, the nodes should be able to create +IOUs among themselves in the same way as when they were running on the same machine. Debugging your CorDapp diff --git a/docs/build/html/_static/basic.css b/docs/build/html/_static/basic.css index 2b513f0c96..0b79414a16 100644 --- a/docs/build/html/_static/basic.css +++ b/docs/build/html/_static/basic.css @@ -494,6 +494,13 @@ pre { overflow-y: hidden; /* fixes display issues on Chrome browsers */ } +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; +} + td.linenos pre { padding: 5px 0px; border: 0; diff --git a/docs/build/html/_static/searchtools.js b/docs/build/html/_static/searchtools.js index 066857ce21..ba82ad4877 100644 --- a/docs/build/html/_static/searchtools.js +++ b/docs/build/html/_static/searchtools.js @@ -226,6 +226,106 @@ var Scorer = { }; + + + +var splitChars = (function() { + var result = {}; + var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648, + 1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702, + 2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971, + 2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345, + 3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761, + 3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823, + 4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125, + 8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695, + 11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587, + 43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141]; + var i, j, start, end; + for (i = 0; i < singles.length; i++) { + result[singles[i]] = true; + } + var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709], + [722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161], + [1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568], + [1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807], + [1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047], + [2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383], + [2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450], + [2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547], + [2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673], + [2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820], + [2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946], + [2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023], + [3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173], + [3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332], + [3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481], + [3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718], + [3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791], + [3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095], + [4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205], + [4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687], + [4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968], + [4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869], + [5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102], + [6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271], + [6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592], + [6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822], + [6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167], + [7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959], + [7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143], + [8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318], + [8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483], + [8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101], + [10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567], + [11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292], + [12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444], + [12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783], + [12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311], + [19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511], + [42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774], + [42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071], + [43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263], + [43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519], + [43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647], + [43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967], + [44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295], + [57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274], + [64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007], + [65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381], + [65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]]; + for (i = 0; i < ranges.length; i++) { + start = ranges[i][0]; + end = ranges[i][1]; + for (j = start; j <= end; j++) { + result[j] = true; + } + } + return result; +})(); + +function splitQuery(query) { + var result = []; + var start = -1; + for (var i = 0; i < query.length; i++) { + if (splitChars[query.charCodeAt(i)]) { + if (start !== -1) { + result.push(query.slice(start, i)); + start = -1; + } + } else if (start === -1) { + start = i; + } + } + if (start !== -1) { + result.push(query.slice(start)); + } + return result; +} + + + + /** * Search Module */ @@ -324,7 +424,7 @@ var Search = { var searchterms = []; var excluded = []; var hlterms = []; - var tmp = query.split(/\s+/); + var tmp = splitQuery(query); var objectterms = []; for (i = 0; i < tmp.length; i++) { if (tmp[i] !== "") { diff --git a/docs/build/html/azure-vm.html b/docs/build/html/azure-vm.html index 5bdb65a310..e6559c48fc 100644 --- a/docs/build/html/azure-vm.html +++ b/docs/build/html/azure-vm.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

          The Corda node

        diff --git a/docs/build/html/codestyle.html b/docs/build/html/codestyle.html index 9169c2165a..2b662fa0a1 100644 --- a/docs/build/html/codestyle.html +++ b/docs/build/html/codestyle.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

        The Corda node

          diff --git a/docs/build/html/contract-catalogue.html b/docs/build/html/contract-catalogue.html index f70ae1763c..8a8d7a7160 100644 --- a/docs/build/html/contract-catalogue.html +++ b/docs/build/html/contract-catalogue.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

          The Corda node

            diff --git a/docs/build/html/contract-irs.html b/docs/build/html/contract-irs.html index 2d3ae16e4a..8ed32a6e34 100644 --- a/docs/build/html/contract-irs.html +++ b/docs/build/html/contract-irs.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

            The Corda node

              diff --git a/docs/build/html/corda-configuration-file.html b/docs/build/html/corda-configuration-file.html index 618325b89f..330c095ed0 100644 --- a/docs/build/html/corda-configuration-file.html +++ b/docs/build/html/corda-configuration-file.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

              The Corda node

                diff --git a/docs/build/html/corda-plugins.html b/docs/build/html/corda-plugins.html index c1c16ee452..520cfa8854 100644 --- a/docs/build/html/corda-plugins.html +++ b/docs/build/html/corda-plugins.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

                The Corda node

                  diff --git a/docs/build/html/creating-a-cordapp.html b/docs/build/html/creating-a-cordapp.html index 3ebd89cd06..c21bf7357e 100644 --- a/docs/build/html/creating-a-cordapp.html +++ b/docs/build/html/creating-a-cordapp.html @@ -34,8 +34,11 @@ + + - + @@ -134,7 +137,7 @@ API reference: Kotlin/ The CorDapp template +
                • The example CorDapp

                The Corda node

                  @@ -412,7 +415,7 @@ experimenting, debugging, and testing node configurations and setups but not int deployment.

                  To use this gradle plugin you must add a new task that is of the type net.corda.plugins.Cordform to your build.gradle and then configure the nodes you wish to deploy with the Node and nodes configuration DSL. -This DSL is specified in the JavaDoc. An example of this is in the template-cordapp and below +This DSL is specified in the JavaDoc. An example of this is in the CorDapp template and below is a three node example;

                  task deployNodes(type: net.corda.plugins.Cordform, dependsOn: ['build']) {
                       directory "./build/nodes" // The output directory
                  @@ -463,7 +466,7 @@ one node per window.

        -

        and a basic CorDapp that you can use as the basis for your own CorDapps is available here:

        +

        A CorDapp template that you can use as the basis for your own CorDapps is available here:

        -

        You can clone both of these repos to your local machine by running the command git clone [repo URL].

        -

        By default, both repos will be on the master branch. However, this is an unstable development branch. You should check +

        And a simple example CorDapp for you to explore basic concepts is available here:

        +
        +
        +

        You can clone these repos to your local machine by running the command git clone [repo URL].

        +

        By default, these repos will be on the master branch. However, this is an unstable development branch. You should check out the latest milestone release (currently Milestone 7) instead by running git checkout release-M7.

        Opening Corda/CorDapps in IDEA

        @@ -308,7 +314,7 @@ and clicking “Refresh all Gradle projects”. Whenever prompted about

        Next steps

        The best way to check that everything is working fine is by Running the demos.

        Once you have these demos running, you may be interested in writing your own CorDapps, in which case you should refer to -The CorDapp template.

        +The example CorDapp.

        If you encounter any issues, please see the Troubleshooting page, or get in touch with us on the forums or via slack.

        diff --git a/docs/build/html/glossary.html b/docs/build/html/glossary.html index 3f701a27b4..27d38192bd 100644 --- a/docs/build/html/glossary.html +++ b/docs/build/html/glossary.html @@ -34,6 +34,9 @@ + + @@ -116,7 +119,7 @@ API reference: Kotlin/ CorDapps

        The Corda node

          diff --git a/docs/build/html/index.html b/docs/build/html/index.html index 3f238f44d6..4ec8c59f93 100644 --- a/docs/build/html/index.html +++ b/docs/build/html/index.html @@ -34,6 +34,9 @@ + + @@ -116,7 +119,7 @@ API reference: Kotlin/ CorDapps

          The Corda node

            @@ -236,10 +239,8 @@ which describes the platform’s envisioned end-state.

            samples directory. To run these yourself, make sure you follow the instructions in Getting set up, then go to Running the demos.

            -

            If, after running the demos, you’re interested in writing your own CorDapps, a template CorDapp is available on -Github. To get it running, follow the instructions in the -readme, or watch the -Corda Developers Tutorial.

            +

            If, after running the demos, you’re interested in writing your own CorDapps, you can use the +CorDapp template as a base. A simple example CorDapp built upon the template is available here, and a video primer on basic CorDapp structure is available here.

            From there, you’ll be in a position to start extending the example CorDapp yourself (e.g. by writing new states, contracts, and/or flows). For this, you’ll want to refer to this docsite, and to the tutorials in particular. If you get stuck, get in touch on Slack or the forum.

            @@ -248,8 +249,8 @@ platform itself. Find out more about

            Documentation Contents:

            -
            -

            Getting started

            +
            +

            Getting started

            • What’s included?
            • Getting set up
                @@ -282,8 +283,8 @@ platform itself. Find out more about -

                Key concepts

                +
                +

                Key concepts

                -
                -

                CorDapps

                + -
                -

                The Corda node

                +
                +

                The Corda node

                • Client RPC
                  • Security
                  • @@ -418,8 +419,8 @@ platform itself. Find out more about -

                    Tutorials

                    +
                    +

                    Tutorials

                    • Writing a contract
                      • Where to put your code
                      • @@ -479,7 +480,7 @@ platform itself. Find out more about Starting your flow
                      • Implementing the seller
                      • Exception handling
                      • -
                      • Sub-flows
                      • +
                      • Sub-flows and finalisation
                      • Implementing the buyer
                      • Progress tracking
                      • Versioning
                      • @@ -511,8 +512,8 @@ platform itself. Find out more about -

                        Other

                        +
                        +

                        Other

                        • Network Simulator
                          • What it is and is not
                          • @@ -533,8 +534,8 @@ platform itself. Find out more about -

                            Component library

                            +
                            +

                            Component library

                            • Contract catalogue
                              • Cash
                              • @@ -551,8 +552,8 @@ platform itself. Find out more about -

                                Appendix

                                +
                                +

                                Appendix

                                • Load testing
                                  • Configuration of the load testing cluster
                                  • @@ -619,8 +620,8 @@ platform itself. Find out more about -

                                    Glossary

                                    +
                                    +

                                    Glossary

                                    diff --git a/docs/build/html/inthebox.html b/docs/build/html/inthebox.html index 49e895f5a1..f9a1684dbe 100644 --- a/docs/build/html/inthebox.html +++ b/docs/build/html/inthebox.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

                                    The Corda node

                                      diff --git a/docs/build/html/key-concepts-consensus-notaries.html b/docs/build/html/key-concepts-consensus-notaries.html index c0bd2b2005..4edf4c837b 100644 --- a/docs/build/html/key-concepts-consensus-notaries.html +++ b/docs/build/html/key-concepts-consensus-notaries.html @@ -34,6 +34,9 @@ + + @@ -127,7 +130,7 @@ API reference: Kotlin/ CorDapps

                                      The Corda node

                                        diff --git a/docs/build/html/key-concepts-core-types.html b/docs/build/html/key-concepts-core-types.html index ca906012b7..d19922af07 100644 --- a/docs/build/html/key-concepts-core-types.html +++ b/docs/build/html/key-concepts-core-types.html @@ -34,6 +34,9 @@ + + @@ -130,7 +133,7 @@ API reference: Kotlin/ CorDapps

                                        The Corda node

                                          diff --git a/docs/build/html/key-concepts-data-model.html b/docs/build/html/key-concepts-data-model.html index d70aeae348..d84eabde7e 100644 --- a/docs/build/html/key-concepts-data-model.html +++ b/docs/build/html/key-concepts-data-model.html @@ -34,6 +34,9 @@ + + @@ -127,7 +130,7 @@ API reference: Kotlin/ CorDapps

                                          The Corda node

                                            diff --git a/docs/build/html/key-concepts-ecosystem.html b/docs/build/html/key-concepts-ecosystem.html index 2f4a5ddfae..c24e14a4c6 100644 --- a/docs/build/html/key-concepts-ecosystem.html +++ b/docs/build/html/key-concepts-ecosystem.html @@ -34,6 +34,9 @@ + + @@ -120,7 +123,7 @@ API reference: Kotlin/ CorDapps

                                            The Corda node

                                              diff --git a/docs/build/html/key-concepts-financial-model.html b/docs/build/html/key-concepts-financial-model.html index 43e891ade1..8c97669d94 100644 --- a/docs/build/html/key-concepts-financial-model.html +++ b/docs/build/html/key-concepts-financial-model.html @@ -34,6 +34,9 @@ + + @@ -121,7 +124,7 @@ API reference: Kotlin/ CorDapps

                                              The Corda node

                                                diff --git a/docs/build/html/key-concepts-flow-framework.html b/docs/build/html/key-concepts-flow-framework.html index a73cc16a3b..42ef9a2c5c 100644 --- a/docs/build/html/key-concepts-flow-framework.html +++ b/docs/build/html/key-concepts-flow-framework.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

                                                The Corda node

                                                  diff --git a/docs/build/html/key-concepts-security-model.html b/docs/build/html/key-concepts-security-model.html index 1c7f651869..bc1b1d3fd4 100644 --- a/docs/build/html/key-concepts-security-model.html +++ b/docs/build/html/key-concepts-security-model.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

                                                  The Corda node

                                                    diff --git a/docs/build/html/key-concepts-vault.html b/docs/build/html/key-concepts-vault.html index fa1c981898..c9a0da7bd1 100644 --- a/docs/build/html/key-concepts-vault.html +++ b/docs/build/html/key-concepts-vault.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

                                                    The Corda node

                                                      diff --git a/docs/build/html/key-concepts.html b/docs/build/html/key-concepts.html index b2d11fed22..218f00dd23 100644 --- a/docs/build/html/key-concepts.html +++ b/docs/build/html/key-concepts.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

                                                      The Corda node

                                                        diff --git a/docs/build/html/loadtesting.html b/docs/build/html/loadtesting.html index df85b935a2..7e20ee62c6 100644 --- a/docs/build/html/loadtesting.html +++ b/docs/build/html/loadtesting.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

                                                        The Corda node

                                                          diff --git a/docs/build/html/merkle-trees.html b/docs/build/html/merkle-trees.html index 4ca095d213..88b35e288e 100644 --- a/docs/build/html/merkle-trees.html +++ b/docs/build/html/merkle-trees.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

                                                          The Corda node

                                                            @@ -236,15 +239,16 @@ Merkle trees are widely used in peer-to-peer networks, blockchain systems and gi You can read more on the concept here.

                                                            Merkle trees in Corda

                                                            -

                                                            Transactions are split into leaves, each of them contains either input, output, command or attachment. Other fields like -timestamp or signers are not used in the calculation. -Next, the Merkle tree is built in the normal way by hashing the concatenation -of nodes’ hashes below the current one together. It’s visible on the example image below, where H denotes sha256 function, -“+” - concatenation.

                                                            +

                                                            Transactions are split into leaves, each of them contains either input, output, command or attachment. Additionally, in +transaction id calculation we use other fields of WireTransaction like timestamp, notary, type and signers. +Next, the Merkle tree is built in the normal way by hashing the concatenation of nodes’ hashes below the current one together. +It’s visible on the example image below, where H denotes sha256 function, “+” - concatenation.

                                                            _images/merkleTree.png -

                                                            The transaction has one input state, one output and three commands. If a tree is not a full binary tree, the rightmost nodes are -duplicated in hash calculation (dotted lines).

                                                            -

                                                            Finally, the hash of the root is the identifier of the transaction, it’s also used for signing and verification of data integrity. +

                                                            The transaction has two input states, one of output, attachment and command each and timestamp. For brevity we didn’t +include all leaves on the diagram (type, notary and signers are presented as one leaf labelled Rest - in reality +they are separate leaves). Notice that if a tree is not a full binary tree, leaves are padded to the nearest power +of 2 with zero hash (since finding a pre-image of sha256(x) == 0 is hard computational task) - marked light green above. +Finally, the hash of the root is the identifier of the transaction, it’s also used for signing and verification of data integrity. Every change in transaction on a leaf level will change its identifier.

                                                            @@ -254,9 +258,11 @@ Every change in transaction on a leaf level will change its identifier.

                                                            Then that hash is compared with the hash of a whole transaction and if they match it means that data we obtained belongs to that particular transaction.

                                                            _images/partialMerkle.png -

                                                            In the example above, the red node is the one holding data for signing Oracle service. Blue nodes’ hashes form the Partial Merkle -Tree, dotted ones are not included. Having the command that should be in a red node place and branch we are able to calculate -root of this tree and compare it with original transaction identifier - we have a proof that this command belongs to this transaction.

                                                            +

                                                            In the example above, the node H(f) is the one holding command data for signing by Oracle service. Blue leaf H(g) is also +included since it’s holding timestamp information. Nodes labelled Provided form the Partial Merkle Tree, black ones +are omitted. Having timestamp with the command that should be in a violet node place and branch we are able to calculate +root of this tree and compare it with original transaction identifier - we have a proof that this command and timestamp +belong to this transaction.

                                                            Example of usage

                                                            @@ -264,42 +270,77 @@ root of this tree and compare it with original transaction identifier - we have Writing oracle services. After construction of a partial transaction, with included Fix commands in it, we want to send it to the Oracle for checking and signing. To do so we need to specify which parts of the transaction are going to be revealed. That can be done by constructing -filtering functions for inputs, outputs, attachments and commands separately. If a function is not provided by default none -of the elements from this group will be included in a Partial Merkle Tree.

                                                            +filtering function over fields of WireTransaction of type (Any) -> Boolean.

                                                            -
                                                            val partialTx  = ...
                                                            +
                                                            val partialTx = ...
                                                             val oracle: Party = ...
                                                            -fun filterCommands(c: Command) = oracle.owningKey in c.signers && c.value is Fix
                                                            -val filterFuns = FilterFuns(filterCommands = ::filterCommands)
                                                            +fun filtering(elem: Any): Boolean {
                                                            +        return when (elem) {
                                                            +            is Command -> oracleParty.owningKey in elem.signers && elem.value is Fix
                                                            +            else -> false
                                                            +        }
                                                            +}
                                                             

                                                            Assuming that we already assembled partialTx with some commands and know the identity of Oracle service, -we pass filtering function over commands - filterCommands to FilterFuns. It filters only -commands of type Fix as in IRSDemo example. Then we can construct FilteredTransaction:

                                                            +we construct filtering function over commands - filtering. It performs type checking and filters only Fix commands +as in IRSDemo example. Then we can construct FilteredTransaction:

                                                            val wtx: WireTransaction = partialTx.toWireTransaction()
                                                            -val ftx = FilteredTransaction.buildMerkleTransaction(wtx, filterFuns)
                                                            -
                                                            -
                                                            -
                                                            -

                                                            In the Oracle example this step takes place in RatesFixFlow:

                                                            -
                                                            -
                                                            val flow = RatesFixFlow(partialTx, filterFuns, oracle, fixOf, "0.675".bd, "0.1".bd)
                                                            +val ftx: FilteredTransaction = wtx.buildFilteredTransaction(filtering)
                                                             
                                                            +

                                                            In the Oracle example this step takes place in RatesFixFlow by overriding filtering function, see: Using an oracle

                                                            FilteredTransaction holds filteredLeaves (data that we wanted to reveal) and Merkle branch for them.

                                                            -
                                                            // Getting included commands, inputs, outputs, attachments.
                                                            +
                                                            // Direct accsess to included commands, inputs, outputs, attachments etc.
                                                             val cmds: List<Command> = ftx.filteredLeaves.commands
                                                             val ins: List<StateRef> = ftx.filteredLeaves.inputs
                                                            -val outs: List<TransactionState<ContractState>> = ftx.filteredLeaves.outputs
                                                            -val attchs: List<SecureHash> = ftx.filteredLeaves.attachments
                                                            +val timestamp: Timestamp? = ftx.filteredLeaves.timestamp
                                                            +...
                                                             
                                                            -

                                                            If you want to verify obtained FilteredTransaction all you need is the root hash of the full transaction:

                                                            +
                                                                    fun sign(ftx: FilteredTransaction, merkleRoot: SecureHash): DigitalSignature.LegallyIdentifiable {
                                                            +            if (!ftx.verify(merkleRoot)) {
                                                            +                throw MerkleTreeException("Rate Fix Oracle: Couldn't verify partial Merkle tree.")
                                                            +            }
                                                            +            // Performing validation of obtained FilteredLeaves.
                                                            +            fun commandValidator(elem: Command): Boolean {
                                                            +                if (!(identity.owningKey in elem.signers && elem.value is Fix))
                                                            +                    throw IllegalArgumentException("Oracle received unknown command (not in signers or not Fix).")
                                                            +                val fix = elem.value as Fix
                                                            +                val known = knownFixes[fix.of]
                                                            +                if (known == null || known != fix)
                                                            +                    throw UnknownFix(fix.of)
                                                            +                return true
                                                            +            }
                                                            +
                                                            +            fun check(elem: Any): Boolean {
                                                            +                return when (elem) {
                                                            +                    is Command -> commandValidator(elem)
                                                            +                    else -> throw IllegalArgumentException("Oracle received data of different type than expected.")
                                                            +                }
                                                            +            }
                                                            +            val leaves = ftx.filteredLeaves
                                                            +            if (!leaves.checkWithFun(::check))
                                                            +                throw IllegalArgumentException()
                                                            +
                                                            +            // It all checks out, so we can return a signature.
                                                            +            //
                                                            +            // Note that we will happily sign an invalid transaction, as we are only being presented with a filtered
                                                            +            // version so we can't resolve or check it ourselves. However, that doesn't matter much, as if we sign
                                                            +            // an invalid transaction the signature is worthless.
                                                            +            return signingKey.signWithECDSA(merkleRoot.bytes, identity)
                                                            +        }
                                                            +
                                                            +
                                                            +

                                                            Above code snippet is taken from NodeInterestRates.kt file and implements a signing part of an Oracle. +You can check only leaves using leaves.checkWithFun { check(it) } and then verify obtained FilteredTransaction +to see if data from PartialMerkleTree belongs to WireTransaction with provided id. All you need is the root hash +of the full transaction:

                                                            if (!ftx.verify(merkleRoot)){
                                                                     throw MerkleTreeException("Rate Fix Oracle: Couldn't verify partial Merkle tree.")
                                                            @@ -307,6 +348,12 @@ commands of type Fix
                                                            +

                                                            Or combine the two steps together:

                                                            +
                                                            +
                                                            ftx.verifyWithFunction(merkleRoot, ::check)
                                                            +
                                                            +
                                                            +

                                                            Note

                                                            The way the FilteredTransaction is constructed ensures that after signing of the root hash it’s impossible to add or remove diff --git a/docs/build/html/messaging.html b/docs/build/html/messaging.html index aa0816e63c..3768dfb0ea 100644 --- a/docs/build/html/messaging.html +++ b/docs/build/html/messaging.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

                                                            The Corda node

                                                              diff --git a/docs/build/html/network-simulator.html b/docs/build/html/network-simulator.html index 3552ed2acb..8d00c1d261 100644 --- a/docs/build/html/network-simulator.html +++ b/docs/build/html/network-simulator.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

                                                              The Corda node

                                                                diff --git a/docs/build/html/node-administration.html b/docs/build/html/node-administration.html index 53116cbb17..801a4d9747 100644 --- a/docs/build/html/node-administration.html +++ b/docs/build/html/node-administration.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

                                                                The Corda node

                                                                  diff --git a/docs/build/html/node-explorer.html b/docs/build/html/node-explorer.html index dcca2802d2..d1e5f4ee6f 100644 --- a/docs/build/html/node-explorer.html +++ b/docs/build/html/node-explorer.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

                                                                  The Corda node

                                                                    diff --git a/docs/build/html/node-services.html b/docs/build/html/node-services.html index 331337e50c..fc56011ebe 100644 --- a/docs/build/html/node-services.html +++ b/docs/build/html/node-services.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

                                                                    The Corda node

                                                                      diff --git a/docs/build/html/objects.inv b/docs/build/html/objects.inv index 33386b4fcdf12a1125f574a8ac7a3c0530896e5a..7bcda1782f025cf2b224eb5ae8dd29701f4aeb62 100644 GIT binary patch delta 1391 zcmV-#1(5o&4BHEkeScR?Z`?Kzz4KSFNP(VMpx0gk*LI6V;?}U!<`~e@>@KmCD3H|J z+h5aUsE7P({%id8TlA*kq^aGxPkL{|GnZbb@e)-emEvrmT&R;YY z^a0Ft{PILP^r|K}HJx$FlQ_{OO-aia(!m#qs7zZ?=N&!}L4WD;B;WlAt?bG_z!gfE zmaM#}q?g(p`hUedmeyfH3Fjj|2`TF~C4eXAUF*qWdE83O!oA8aOaprvroC5(-o}87 zy;=rko0C-k3^6KC(RGE^$~uI| z-UaH5bgFWU&e(9_sw36C4hL)|v9u+D`+)KZWmqc$hkvgxmiFbI8$?(Sdpz<);Qj5w zXtK>5w%6uWIGkw`jjWEUEsykuIj5ghVVRNOl8VPBE|xOK*M2-$;M`lJmldtSzrZe@ zjK>NKooz~z{5=_YG=|*&5RL3Wt!is}D`PXD!{Ngxm_F{ABQN@5J4;LQ`6FQ*81K7< zv)IdCdw(3nwqC^IYrK5utm$8{Z%1PSlO42iPTEVMlCeCM{Kuw+X5MU#pGl)Y5cg(Q zCyQeC1N>onF$;-=WtF4!KRJMv?rW;wGbFI6L$xi!Yx}kx>nN;aq1in>^8m1UL7ERY z$J3C1oyndRy|P6OYaO+&ci}WhtLUoA26e1g34cc-)O@h9E2Z))@QO*0--qH%Q-#hpt(+`UwM=)P{}J6b|-iWmxk@ zDePi^W|iW>;BKK@6x$?*y5Aw7NW_Xt_i}Kgcpe^ISBG#%k5R>`rq|LNJD>i_SS*7- z4=`)7XF}GEYL)ZpIxlqA=2;g|8j=>hb$=S!YF8?QVdj6Iq2!rE;Z~l5A$N|bDEm-C zEn=GYGS%NUc5j)?@>M-oo8R8!eVM??uOr(i=b*bd5{03RXJHBo4pE`DqJ{qeC-27z zU>)u!<&L4i$L^+ZT-dVrh^A7+ENPOC(p5h9FAT}~DM9IGA3Zy35P?nKY%0Ao$bW{b zNv7MNxK@|8tdLMH`QVXH_3D<}(kidOQ7k?s0?ZteyE>Lhm9U{?Mf;;X5Q`;^5ZU-j ziEY1LHfz^7vjP};;@Fr>R!FDD1Wie9T18IGQv4cg>JPZWjhfo&A-CT%BzN;Yjl%Qp z;USiz>&6C?w$u8(tu3 zywuxHopJo<2Xtb1hJaV2>->(%e~KQd(HTdS-lKO8Gc2}i%bsGHoAe2uw5EsZbW3cj zZZen8+L>t@V|<+o*{MzKg0XzV@|(xqNM)S4FEP47f{lTD{-c;ZbesQz@wFVl^F;cL9gOG|Mom$eX0y4qj-_o@pWXDwZ1(1^di8(;UKQSb+_S4?`}+rKUHfaR8_Is6yJG$M>^kYc>D5yFCcN)K zwc=}lOMU?91B7bfYrwwyk=`W;;r|W>*tMHdXImuxqRmC96Muab?o8bo=uVrK(|hPN z)r#JEFn#3a0(i2P|8_Z)e!x&+TCc&{87Ocpg9XJKD?@27z$!%zDtPJ;>C$Bts2;&n`9{nKZ>awgJV z4kw}Pk|{Z2_~&vwqnREJ@8A_raHQ#b`^Kff$a@bVjeh|g8xN_UXb7vuU3hakLpVKf zD;i7S>UZBZXJ`lMkM@LO?u!Hu-bzO+IZFM?EZzfP9dFJ;)z@Ifovy4Aeu4pDBa6eW znoVMAU&c}I!QjE*l{8Fg{ARdU7wvFv70)^(QvM#DG&sFpdC()(aevTm?q9;OjQgXGBgGGn4b_I$o;Y@i21kc}7R-)(kPeTnYG*lp3zv?l(ZfN4 zJ!|ceNb}))kCj&C4y9*$!w?g zIO9)OFjoPuWG1f4g0h442bdcHn=C8PBBaqyxoT`P=^_QuB62pC{&s{)h&e zETjW-k$7AT)F*0c&x*s9#oCSc8l$;k`gpV$k3w;p4Oxt-8iRXH-Jd_$#Y=F_E9%{c z1WknIQDY&4q~j`*VX5jdp?DD+sKe{QQGX%Q@Yr1TnC=i!Sghy<$(=US=`WnsGU!V- z6NP)mc-sjjtc!g{#j|uz+LPK5x!`Lr@wS=;OLk1+ACf6Xrc~HPWOk$m85QN|71&@- z(_TjTR-s8vV4|^0lQmm1)g?X}Cvl-lZx@zN-cNckov;>1pB(lxHS&K9!puJUGLQ39HCz17i{g)R7>_z6f5 zKETX|CtG*}$$1yLg_+2tZ|Os)G=F-LI(ACfC8a)^rR!UhZ=uE}gbJ*?@imYY;5|VJ z=)R{LdD%Zc29bNx#vQd3I=*lj*wuMa<1T1|X^uHQ+&gp?5v8=pS@lYih~E%xN! zk%7-4BDQ2@+T1yOS@>mEd%ot68xq$uF^^p1(|;^T>#VED`5y%n*EmLb?=#+uRqhHg z|5t$CJ?#sWEH-bQaJsWaUwL^lFKO7yUmBaBEm}H+OefTIki~;_?yKI);mL}fT#uCz zMjEU%a7xefmEPnn-1z@MazB)wr9^oHYpqqT+)<9B=>Q g+E%;qE{28syVD(ZT%m34IaV>hA*lNQ0RYu5K%UU&Q2+n{ diff --git a/docs/build/html/oracles.html b/docs/build/html/oracles.html index 0e0b8e5c4a..40acffd000 100644 --- a/docs/build/html/oracles.html +++ b/docs/build/html/oracles.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

                                                                      The Corda node

                                                                        @@ -389,31 +392,27 @@ parameter and CommandDataif (!ftx.verify(merkleRoot)) { throw MerkleTreeException("Rate Fix Oracle: Couldn't verify partial Merkle tree.") } - - // Reject if we have something different than only commands. - val leaves = ftx.filteredLeaves - require(leaves.inputs.isEmpty() && leaves.outputs.isEmpty() && leaves.attachments.isEmpty()) - - val fixes: List<Fix> = ftx.filteredLeaves.commands. - filter { identity.owningKey in it.signers && it.value is Fix }. - map { it.value as Fix } - - // Reject signing attempt if we received more commands than we should. - if (fixes.size != ftx.filteredLeaves.commands.size) - throw IllegalArgumentException() - - // Reject this signing attempt if there are no commands of the right kind. - if (fixes.isEmpty()) - throw IllegalArgumentException() - - // For each fix, verify that the data is correct. - val knownFixes = knownFixes // Snapshot - for (fix in fixes) { + // Performing validation of obtained FilteredLeaves. + fun commandValidator(elem: Command): Boolean { + if (!(identity.owningKey in elem.signers && elem.value is Fix)) + throw IllegalArgumentException("Oracle received unknown command (not in signers or not Fix).") + val fix = elem.value as Fix val known = knownFixes[fix.of] if (known == null || known != fix) throw UnknownFix(fix.of) + return true } + fun check(elem: Any): Boolean { + return when (elem) { + is Command -> commandValidator(elem) + else -> throw IllegalArgumentException("Oracle received data of different type than expected.") + } + } + val leaves = ftx.filteredLeaves + if (!leaves.checkWithFun(::check)) + throw IllegalArgumentException() + // It all checks out, so we can return a signature. // // Note that we will happily sign an invalid transaction, as we are only being presented with a filtered @@ -528,13 +527,12 @@ those for NodeInterestRates.Ora } } - class FixSignFlow(val tx: TransactionBuilder, val oracle: Party, val filterFuns: FilterFuns) : FlowLogic<DigitalSignature.LegallyIdentifiable>() { + class FixSignFlow(val tx: TransactionBuilder, val oracle: Party, + val partialMerkleTx: FilteredTransaction) : FlowLogic<DigitalSignature.LegallyIdentifiable>() { @Suspendable override fun call(): DigitalSignature.LegallyIdentifiable { val wtx = tx.toWireTransaction() - val partialMerkleTx = FilteredTransaction.buildMerkleTransaction(wtx, filterFuns) val rootHash = wtx.id - val resp = sendAndReceive<DigitalSignature.LegallyIdentifiable>(oracle, SignRequest(rootHash, partialMerkleTx)) return resp.unwrap { sig -> check(sig.signer == oracle) @@ -545,12 +543,13 @@ those for NodeInterestRates.Ora }
                                                            -

                                                            You’ll note that the FixSignFlow requires a FilterFuns instance with the appropriate filter to include only -the Fix commands. You can find a further explanation of this in Transaction tear-offs.

                                                            +

                                                            You’ll note that the FixSignFlow requires a FilterTransaction instance which includes only Fix commands. +You can find a further explanation of this in Transaction tear-offs. Below you will see how to build such transaction with +hidden fields.

                                                            -

                                                            Using an oracle

                                                            +

                                                            Using an oracle

                                                            The oracle is invoked through sub-flows to query for values, add them to the transaction as commands and then get the transaction signed by the oracle. Following on from the above examples, this is all encapsulated in a sub-flow called RatesFixFlow. Here’s the call method of that flow.

                                                            @@ -563,7 +562,8 @@ called RatesFixFlowtx.addCommand(fix, oracle.owningKey) beforeSigning(fix) progressTracker.currentStep = SIGNING - val signature = subFlow(FixSignFlow(tx, oracle, filterFuns)) + val mtx = tx.toWireTransaction().buildFilteredTransaction({ filtering(it) }) + val signature = subFlow(FixSignFlow(tx, oracle, mtx)) tx.addSignatureUnchecked(signature) }
                                                            @@ -574,14 +574,12 @@ called RatesFixFlowDoes some quick validation.
                                                          • Adds the command to the transaction containing the fact to be signed for by the oracle.
                                                          • Calls an extension point that allows clients to generate output states based on the fact from the oracle.
                                                          • +
                                                          • Builds filtered transaction based on filtering function extended from RatesFixFlow.
                                                          • Requests the signature from the oracle using the client sub-flow for signing from above.
                                                          • Adds the signature returned from the oracle.
                                                          • Here’s an example of it in action from FixingFlow.Fixer.

                                                            -
                                                                        fun filterCommands(c: Command) = oracleParty.owningKey in c.signers && c.value is Fix
                                                            -
                                                            -            val filterFuns = FilterFuns(filterCommands = ::filterCommands)
                                                            -            val addFixing = object : RatesFixFlow(ptx, filterFuns, oracleParty, fixOf, BigDecimal.ZERO, BigDecimal.ONE) {
                                                            +
                                                                        val addFixing = object : RatesFixFlow(ptx, oracleParty, fixOf, BigDecimal.ZERO, BigDecimal.ONE) {
                                                                             @Suspendable
                                                                             override fun beforeSigning(fix: Fix) {
                                                                                 newDeal.generateFix(ptx, StateAndRef(txState, handshake.payload.ref), fix)
                                                            @@ -590,10 +588,24 @@ called RatesFixFlow
                                                            +
                                                            +

                                                            Note

                                                            +

                                                            When overriding be careful when making the sub-class an anonymous or inner class (object declarations in Kotlin), +because that kind of classes can access variables from the enclosing scope and cause serialization problems when +checkpointed.

                                                            +
                                                            diff --git a/docs/build/html/permissioning.html b/docs/build/html/permissioning.html index 94c389f9a9..c51d856472 100644 --- a/docs/build/html/permissioning.html +++ b/docs/build/html/permissioning.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

                                                            The Corda node

                                                              diff --git a/docs/build/html/persistence.html b/docs/build/html/persistence.html index 27809bbbac..afba0af6da 100644 --- a/docs/build/html/persistence.html +++ b/docs/build/html/persistence.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

                                                              The Corda node

                                                                diff --git a/docs/build/html/publishing-corda.html b/docs/build/html/publishing-corda.html index c4f3ae8957..01210e1c14 100644 --- a/docs/build/html/publishing-corda.html +++ b/docs/build/html/publishing-corda.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

                                                                The Corda node

                                                                  diff --git a/docs/build/html/release-notes.html b/docs/build/html/release-notes.html index 28bcd61ace..65d004c4de 100644 --- a/docs/build/html/release-notes.html +++ b/docs/build/html/release-notes.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

                                                                  The Corda node

                                                                    diff --git a/docs/build/html/release-process.html b/docs/build/html/release-process.html index 130ff414d0..4d63c67b8d 100644 --- a/docs/build/html/release-process.html +++ b/docs/build/html/release-process.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

                                                                    The Corda node

                                                                      diff --git a/docs/build/html/running-a-notary.html b/docs/build/html/running-a-notary.html index 2ab11689b6..3e08ff31c4 100644 --- a/docs/build/html/running-a-notary.html +++ b/docs/build/html/running-a-notary.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

                                                                      The Corda node

                                                                        diff --git a/docs/build/html/running-the-demos.html b/docs/build/html/running-the-demos.html index eeb1a1c7ad..d44946d7fa 100644 --- a/docs/build/html/running-the-demos.html +++ b/docs/build/html/running-the-demos.html @@ -34,6 +34,9 @@ + + @@ -130,7 +133,7 @@ API reference: Kotlin/ CorDapps

                                                                        The Corda node

                                                                          @@ -412,7 +415,7 @@ major version - even if still in beta.

                                                                        • The H2 web console should start up in a web browser tab. To connect we first need to obtain a JDBC connection string. Each node outputs its connection string in the terminal window as it starts up. In a terminal window where a node is running, look for the following string:

                                                                          -

                                                                          Database connection url is              : jdbc:h2:tcp://10.18.0.150:56736/node

                                                                          +

                                                                          Database connection url is              : jdbc:h2:tcp://10.18.0.150:56736/node

                                                                          You can use the string on the right to connect to the h2 database: just paste it into the JDBC URL field and click Connect. You will be presented with a web application that enumerates all the available tables and provides an interface for you to query them using SQL

                                                                        • diff --git a/docs/build/html/search.html b/docs/build/html/search.html index ac6f77aed1..3ad30be863 100644 --- a/docs/build/html/search.html +++ b/docs/build/html/search.html @@ -34,6 +34,9 @@ + + @@ -115,7 +118,7 @@ API reference: Kotlin/ CorDapps

                                                                          The Corda node

                                                                            diff --git a/docs/build/html/searchindex.js b/docs/build/html/searchindex.js index 6d1bd08a09..5ee794c03c 100644 --- a/docs/build/html/searchindex.js +++ b/docs/build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({envversion:49,filenames:["CLI-vs-IDE","azure-vm","building-the-docs","clauses","clientrpc","codestyle","contract-catalogue","contract-irs","corda-configuration-file","corda-plugins","creating-a-cordapp","event-scheduling","flow-state-machines","flow-testing","further-notes-on-kotlin","getting-set-up","getting-set-up-fault-finding","glossary","index","inthebox","key-concepts","key-concepts-consensus-notaries","key-concepts-core-types","key-concepts-data-model","key-concepts-ecosystem","key-concepts-financial-model","key-concepts-flow-framework","key-concepts-security-model","key-concepts-vault","loadtesting","merkle-trees","messaging","network-simulator","node-administration","node-explorer","node-services","oracles","permissioning","persistence","publishing-corda","release-notes","release-process","running-a-notary","running-the-demos","secure-coding-guidelines","setting-up-a-corda-network","tutorial-attachments","tutorial-building-transactions","tutorial-clientrpc-api","tutorial-contract","tutorial-contract-clauses","tutorial-cordapp","tutorial-integration-testing","tutorial-test-dsl","using-a-notary"],objects:{},objnames:{},objtypes:{},terms:{"00z":49,"0_xx":16,"10000l":29,"100l":52,"14gb":1,"17t16":49,"1mb":12,"200mb":33,"3rd":43,"5000l":29,"500mb":33,"5xxx":0,"___":51,"____":51,"______":51,"_________":51,"_foo":5,"_unless_":39,"abstract":[3,9,12,35,36,38,40,49,50,51],"boolean":[13,29,40,48,49,50],"break":[12,16,36,41,47],"byte":[5,12,23,36,40,53],"case":[3,5,9,10,12,13,15,21,22,23,29,31,36,38,40,43,46,49,50,51],"catch":[5,12,40,44],"class":3,"default":[1,4,5,6,8,9,10,12,15,16,17,22,23,29,30,32,33,34,35,37,40,43,44,45,49,51],"enum":[40,48],"export":[12,33,38],"fa\u00e7ad":33,"final":[7,9,12,13,21,30,36,40,43,45,47,48,49,50,52,53],"float":[6,7,11],"function":[0,3,5,6,7,9],"import":[3,5,11,12,15],"instanceof":[49,50],"int":[5,29,38,49,54],"long":[5,6,9,11,28,29,38,47,49,50,51],"new":[0,1,5,7,8,9,10,12,14,18,21,22,23,24,31,32,33,34,35,37,39,40,41,43,46,47,48,49,50,51,52,53,54],"null":[8,11,13,29,36,38,46,49,50,53,54],"public":[1,5,8,10,12,17,19,22,23,31,33,35,37,40,43,45,49,50,51,53],"return":[3,4,5,7,9,11,12,13,21,29,33,35,36,38,40,44,46,47,48,49,50,51,52,53,54],"short":[3,11,41,43],"static":[9,10,12,28,35,36,43,49,51,53],"super":[3,5,50],"switch":[12,40,49],"throw":[3,4,5,12,26,29,30,36,40,47,49,50,54],"transient":12,"true":[8,13,17,21,24,29,36,37,45,48,49,50,51],"try":[0,4,5,12],"var":[13,38,47,48],"void":[49,50,53],"while":[15,22,32,43,48,53],abil:[23,28,32,40],abl:[1,8,10,12,21,27,30,31,33,34,35,36,37,40,43,49,51,54],abort:[21,36,47],about:[0,1,5,9,12,14,15],abov:[1,3,5,7,12,23,26,30,31,33,36,43,45,48,49,50,51,52,53],absent:[3,8],absolut:[8,21],abstractnod:[9,35],abstractstatereplacementprotocol:40,accept:[5,6,15,17,21,23,36,40,43,47,49],acceptablepric:12,acceptsfileupload:36,access:[1,4,5,8,9,12,15,18,28,29,31],accid:12,accident:[5,44,47],accompani:[5,49],accord:[3,23,47],accordingli:[45,50],account:[1,22,23,29,39,40,46],accrual:7,accur:[21,43],achiev:[21,22,23,24,30],ack:40,acknowledg:[12,35],acquir:43,acronym:43,across:[6,8,23,26,29,35,38,40,43,46,47],act:[3,8,12,21,35,36,40,43],action:[3,11,23,29,35,36,42,43,47,49,52],activ:[7,8,9,11,15,22,24,26,27,29,32,35,38,40,43,47,49,51],actor:[5,12],actual:[7,12,21,29,35,36,43,44,46,49,50,53,54],adapt:[5,12,36],add:[3,5,10,12,17,29,30,31,33,35,36,42,44,46,47,48,49,51,52,53,54],addattach:[13,46],addcommand:[12,36,47,49,54],added:40,addedg:48,addfix:36,adding:18,addinputst:[12,49],addit:[0,5,8,10,21,22,23,25,28,31,35,38,40,47,48,49,51],addition:[12,14,15,16,27,38,41,43,51],addmessagehandl:40,addnod:48,addoutputst:[12,49,54],address:[0,1,8,10,12,24,31,34,35,40,45,49,51],addsignatureuncheck:36,adequ:3,adjust:[1,5,7,41,49],admin:[34,35,37,39],administ:1,administr:[1,12,18,19,26],admiss:[24,27],advertis:[4,8,31,35,40,42,43,49,52,54],advertisedservic:[10,43,48,51,52],advic:41,advis:[0,36],aesthet:43,affect:[16,36,45],affinityexecutor:5,afraid:5,after:[0,3,6,7,9,10,11,12,13,14,17,18,21,29,30,35,36,43,47,49,51,53],again:[7,12,13],against:7,agent:[24,29,33,35],agentlib:10,aggreg:[40,43,49,50],agil:21,agre:[1,7,11,12,17,23,43,44,47,51],agree:[7,43],agreement:[7,17,18,23,24,25],ahead:[12,49],aid:[23,40,47,51],aim:[5,29],aka:[17,18,24],albeit:40,albertsen:40,alert:16,algorithm:[19,21,22,23,27,40,49],alia:[8,39],alic:[52,53],alice:[17,22,34,48,49,52,53,54],alice_key:46,alice_pubkey:53,alicecli:52,aliceparti:54,aliceproxi:52,alicevaultupd:52,align:[16,40,47,51],aliv:[12,43],all:[1,2,3,4,5,6,7,8,9,10,12,13,14,15,17,21,22,23,24,26,27,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,47,49,50,51,52,54],allaslist:52,allcomposit:40,allevi:21,alloc:43,allow:[0,4,5,6,7,8,9,10,11,12,17,21,22,24,29,31,34,35,36,37,38,39,40,43,44,47,48,49,51,52,53],allpartysignedtx:[12,47],almost:49,along:[1,3,12,13,21,24,36,49,51,54],alongsid:49,alreadi:[5,10,11,12,21,27,30,36,37,39,40,43,46,47,49,50,51,53,54],alright:12,also:[0,3,4,5,6,7,8,9,10,11,12,13,15,16,17,18,21,22,23,25,28,29,30,31,32,33,34,35,36,37,38,40,43,46,47,49,50,51,52,53,54],alter:[8,12,33,47],altern:[1,2,5,8,22,31,32,33,34,49,51,52],although:[7,8,12,23,34,35,40,46,49,51],alwai:[5,11,12,16,22,23,33,38,45,47,49,51],amend:47,aml:24,among:51,amongst:[0,27],amount:[3,4,6,7,12,18,22],amountrequir:47,amqp:[24,31,40],analysi:3,analyt:43,ancestor:23,ani:[0,1,3,4,5,6,7,9,11,12,13,15,17,21,22,23,24,25,27,28,31,33,34,35,36,37,38,40,41,42,43,44,45,46,47,48,49,50,51,52,54],annot:[4,5,9,12,31,38],announc:[36,41],annual:1,anonym:35,anonymis:[35,40],anoth:[1,4,5,10,12,16,17,21,23,24,28,31,33,34,35,36,37,40,43,46,49,50,53,54],another:47,answer:[5,36],answere:50,anti:51,anticip:5,any:[3,4,6,11,33,35,39,43,47,50],anycomposit:40,anycompost:50,anyon:[21,31,49],anyth:[12,13,22,23,25,44,49,50,51],anywher:[36,40,49],apach:31,apart:[21,40,47],api:[0,2,4,5,9,10,12,13,17,18,19,24,26,27,28,33,35,38,39,40,41,43,45,47],app:4,appear:[16,36,43,49,51],append:[8,12,23,33],appendix:18,appli:[5,6,7,10,27,29,34,47,49],applic:[9,10,17,23,24,25,31,35,36,40,43,44,49,51],applicat:[15,17],applyfix:7,appoint:21,approach:[11,12],appropri:[1,5,28,31,35,36,38,40,42,47,51],approv:[11,12,37,39,47],approxim:21,april:40,apt:16,arbitrari:[3,5,12,22,23,36,44,48],arbitrarili:[23,52],architectur:[4,18,36],archiv:28,area:[0,27,38],aren:[4,11,19,49],arg:[10,40,48,51],argument:[4,5,9,10,12,23,29,48,49],aris:15,around:[12,13,21,22,25,30,40,41,47,48,49,51,52],arrai:[48,51],arrang:[12,24],arraylist:36,arriv:[12,17,36,52],arrow:[7,51],art:25,artemi:[10,17,31,51],artemisaddress:[8,45,51],artemismq:[8,35],artemisport:[10,51],articl:[11,12,21,36,40,49],artifact:10,artifactid:51,ascertain:[43,51],ask:[5,12,27,36,39,49],aspect:[12,23],assembl:[0,3,30,49],assemblesharedtx:12,assert:[5,12],assertequ:[13,46,52],asset:[3,6,12,18,22,24,25,26,28,40,43,44,47],assetforsal:12,assetmismatchexcept:12,assettosel:12,assettypenam:12,assign:[13,18,23,36,47],assist:[11,12,22,26,27,38],associ:[3,11,21,22,23,25,31,36,38,40,45,47,48,49,51],assum:[12,21,23,27,29,30,31,36,39,44,47,49,54],assume:[12,30,36,51],assumpt:[12,27],assur:43,asynchron:[26,29,47],atom:[12,21,40,43,49],attach:[0,10,12,17,18,22,23,28,30],attachment:[17,18,23,33],attachmentdemo:46,attachmentexist:46,attachmentstorag:35,attack:[21,40,44],attch:30,attempt:[21,31,36,44],attent:[12,51],attest:[21,23,27],attribut:[5,28],audit:[28,47],augment:23,authent:[1,4,21,24,27,31,35,40,48],authenticatedobject:[3,22,49,50],author:[5,21,24,27,35,41,54],authoris:[8,12,22,27,35,48],authorit:28,auto:[5,49],autoclos:4,autom:[11,24,49],automat:[0,2,4,8,10,11,12,21,23,27,28,31,32,34,35,36,37,38,40,46,49,51,54],auxiliari:35,avail:[0,1,2,7,8,9,10,11,12,15,18,21,28,31,32,33,35,36,39,40,41,43,44,48,49,51,54],avoid:[4,5,12,36,38],awai:[4,12,48],await:[10,43,47],awaiting_proposal:12,awar:[4,5,11,12,35,40,49,50],awg:41,awkward:[5,12],axi:7,back:[1,4,5,9,12,24,26,28,35,36,40,43,44,47,49,52],backend:40,background:[0,4,5,18,28],backoff:31,backport:41,backward:[12,41],bad:[5,12,49,53],balanc:[3,6,21,23,28,34,40,47,49],banana:22,bananast:22,banco:40,band:12,bandwidth:5,banish:17,bank:[1,7,8,18,22,23,25,34,40],bankrupt:49,bankruptci:[21,23,36,43],banner:[1,45],bar:[1,16],barreca:40,barrel:[25,40],base:[5,7,8,10,11,12,17,21,22,25,27,29,31,33,35,36,37,40,43,45,48,49,51,54],basedir:[8,45],basedirectori:48,basi:[1,7,11,15,24,32,33,35,51],basic:1,bat:[0,10,15,32,34,37,51],batch:[29,51],bbva:40,bear:12,becaus:[5,11,12,16,21,22,33,35,36,47,49,50,51,53,54],becom:[5,7,11,12,18,22,36,41,47,51],been:[4,7,8,12,15,16,17,21,22,27,31,36,37,40,41,43,47,49,50,51,54],befor:[0,1,7,10,11,12,13,18,21,22,23,29,35,36],beforesign:36,begin:[1,5,35,47,49,51],behalf:43,behav:49,behaviour:[3,6,8,21,29,33,47,50,51,53],behind:[12,17,20,31,49],believ:40,belong:[30,45],below:[1,5,7,8,10,11,12,15,22,30,31,35,43,47,49,51],beneath:17,beneficiari:6,benefit:[12,21],best:[5,15,47],bet:36,beta:43,better:[5,12,14,40,49],between:[1,5,7,11,12,17,21,23,25,26,31,32,35,36,37,38,40,41,44,47,48,49,51],beyond:[23,25,27,47],bft:[27,40],big:[5,12,40,43,49],bigdecim:[25,36],bilater:[6,7,40],bill:49,bin:[43,48,51],binari:[30,35,36,39,48],bind:[8,21,23,32,33],bintrai:39,bintrayupload:39,bit:[22,40,46,49,51,53,54],bitcoin:[12,17,23,40,43,49],bitcoinj:12,blah:5,blank:[5,33,34,37,49],block:[3,4,5,10,12,21,23,26,35,36,40,43,44,46,47,51,52],blockchain:[12,19,30,49],bloom:5,bloomfilt:5,blotter:43,blue:[7,30],bob:[17,22,34,49,52,53],bob_pubkey:53,bobclient:52,bobproxi:52,bobvaultupd:52,bodi:[5,43],boil:29,boilerpl:10,bond:[49,50],bookkeep:49,bookmark:43,boost:19,boot:51,bootstrap:[8,10,51],bore:49,borrow:53,boss:51,both:[0,6,7,12,13,14,15,17,21,25,26,28,29,32,35,36,38,40,43,44,46,47,48,49,50,51],bottom:[16,23],bounc:13,bound:[12,21,23,40,45,47,49],box:[1,39],branch:[15,16,18,30,40,41,51],branch_nam:51,brand:40,breadth:23,breakdown:28,breakpoint:51,breviti:[0,50],bridg:[31,35],brief:[4,18],briefli:[31,36,51],bring:[29,40,43,46,52],broadcast:[1,23,24,26,27,47,49,54],broadcasttransactionflow:54,broader:45,broke:5,broken:[40,51],broker:[8,31,35,40,51],brought:47,brows:[33,43],browser:[1,8,43,51],bubbl:15,bucket:22,buffer:[4,33],bug:[5,15,16,40,41],bugfix:41,bui:[1,12],build:0,buildcertsigningrequestutilityjar:37,buildcordajar:[8,37,45],builder:[12,13,22,40,44,46,47,54],buildfilteredtransact:47,buildmerkletransact:[30,36],buildscript:[10,17,51],buildsrc:51,buildtradepropos:47,built:[0,8,12,30,40,44,46,49,51],bulk:47,bullet:5,bunch:51,bundl:[8,9,10,16,23,33,35],busi:[11,12,17,19,22,23,24,26,36,38,40,47,49],businesscalendar:22,button:[1,39,43,51],bytearrai:38,bytecod:[12,23,49],cach:[31,46,51,54],calcul:[7,11,12,21,22,30,40,43,44,49],calculateoursignatur:12,calendar:[7,22,36],call:[0,3,4,5,7,9,10,12,14,21,22,23,24,25,26,33,35,36,40,41,43,44,46,47,48,49,53,54],callback:[4,5,12,35,40],caller:[36,47,49,54],came:12,camel:5,can:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43,44,45,46,47,48,49,50,51,52,53,54],cancel:4,candid:38,cannot:[3,6,17,21,23,25,32,36,40,44,47,49,51,54],capabl:[24,49],capit:5,capitan:2,capsul:32,capsule_cache_dir:10,captur:[9,11,47],cardon:40,care:[5,9,12,13,21,44,47,53],carefulli:14,carri:[0,25,35,47],cash:3,cash_stat:38,cashcommand:[29,48,52],cashflow:[48,52],cashkt:49,cashprotocol:[8,45],cashschema:38,cashschemav1:38,cashsigningpubkei:12,cashstat:47,cast:4,catastroph:43,categori:45,caught:[4,12],caus:[5,12,15,16,17,33,43,49,51],cbc:29,ccy_cod:38,cent:25,center:49,central:[18,24,25,26,34],centralis:24,ceo:22,cer:8,certain:[3,5,9,40,43,47,49],certainli:10,certainti:21,certif:[8,18,24,27,29,31,35],certificatesigningservic:[8,37,45],certsigningrequestutil:[37,45],chain:[6,12,13,18,22,23,28,35,36,40,49],chaincommercialpap:53,chaincommercialpaperdoublespend:53,chaincommercialpapertweak:53,chanc:[5,12],chang:[0,2,4,5,6,7,8,10,12,16,17],changenotari:21,channel:12,charact:[5,8],characterist:17,charg:36,charli:22,chart:50,check:[3,5,8,11,12,13,15,16,18,21,22,23,27,29,30,31,32,35,36,39,40,44,45,46,47,48],checkabl:[36,40],checkfixisnearexpect:36,checknotnul:49,checkout:[15,16,51],checkpoint:[9,26,35,40],checksignatur:36,checkstat:49,checksufficientsignatur:[12,22,47,54],child:[0,12,22],childprogresstrack:12,children:[12,22],childrenfor:12,choic:[1,5,21,49,51],choos:[0,1,15,16,21,34,40,49,54],choreographi:[17,24],chosen:[0,12,21,29,54],christma:51,chronolog:11,chronounit:53,chunk:[49,50],circl:32,citi:51,cl1:3,cl2:3,cl4:3,cl5:3,claim:[23,49],clarifi:49,clash:[5,38,51],classic:49,classpath:[4,9,10,23],clauseverifi:50,clean:[0,12,34,40],cleaner:40,cleanup:40,clear:[0,3,4,12,29,44],cleardatabasebeforerun:29,clearer:[12,40],clearli:[5,16,47],click:[1,15,16,34,39,43,51],client:1,clint:1,clock:[1,11,12,21,23,36,43,47],clone:[0,1,5,15,16,49,51],close:[4,6,21,51],closeabl:4,closer:21,closest:1,closur:[5,53],cloud:33,cluster:[8,18,21],cmd:[30,49,50],code:[0,2,3],codebas:[1,5,18,38,39],coin:28,collabor:40,collaps:29,colleagu:5,collect:[4,5,17,29,33,38,40,42,47,49,50],collector:[5,12,33],collis:5,colon:0,column:[10,33,38],com:[2,15,37,39,40,43,51],combin:[17,22,24,28,49,50],come:[4,12,13,33,35,40,41,44,49],comfort:40,commanddata:[3,36,49,50],commenc:34,commerci:3,commercial_pap:[49,50],commercialpap:[3,6,38,49,50,53],commercialpaperlegaci:49,commercialpapertest:53,commit:[8,11,12,13,18,21,35,41,42,43],committe:43,committing:12,common:[3,6,7,8,9,12],commonleg:7,commonli:47,commun:[8,9,12,15,17,18,24,26,31,35,40,44,45,51],compani:[23,25,36,37,50],companion:[12,36,49,50],compar:[1,30,43,49,51],comparison:[23,44,49],compat:[4,17,21,41],compel:21,compet:23,complementari:11,complet:[0,1,4,11,12,18,22,23,25,35,37,40,43,46],completetx:47,complex:[5,6,13,23,25,26,38,43,46,49,52],complic:[12,36,47,49,50],compon:[0,3,9,10,11,17,18,24,28,31,35,40],compos:[3,12,21,23,40,49,50],compositeclaus:[3,50],compositekei:[12,18],compound:40,compris:[7,51],comput:[7,17,36,51],concaten:30,concept:[3,6,11,12,18,20,21,23,26,30,36,40,49,50],concern:[12,49],concis:40,conclus:36,concret:[9,35],concurr:29,concurrenthashmap:5,condit:[3,9,21,29,35,36,40,50,53],conf:[8,10,35,37,45,51],config:[8,10,29,33,37,40,43,48,51],configur:[0,1,4],configurationfil:33,confirm:[16,17,21,43,47],conflict:[21,23,29,54],confus:[0,12],conjunct:34,connect:[0,1,4,8,10,19,29,31,33,34,35,37,40,43],consensu:[12,17,18,20],consequ:47,conserv:[3,47],conserveamount:3,consid:[5,7,11,17,22,23,24,28,36,40,41,47,49,50],consider:[47,49],consist:[7,8,12,17,23,24,29,35,36,40,43,45,47,50],consol:[0,33,40,43,45,48],consortium:17,constant:[5,38,49],constantli:[36,51],constraint:[12,36,40,49,51,52],construct:[3,5,9,10,12,18,21,22,23,30,31,35,38,40,44,47],constructing_offer:12,constructor:[3,9,11,12,36],consum:[4,11,17,21,22,23,27,28,33,35,40,43,47,49,54],consumedcommand:3,consumingtx:54,consumpt:[11,36,47],contact:[12,35,40],contain:[1,3,7,8,9,10,12,17,21,22,23,25,28,30,31,33,34,35,36,37,40,41,43,46,47,49,50,51,53,54],content:[1,5,9,10,11,13,16],context:[5,22,33,35,36,47,54],contextclassload:46,contin:36,continu:[1,7,12,16,18,25,31],contract:[3,4],contracthash:50,contractreject:53,contractst:[3,11,21,22,25,30,38,40,47,49],contractu:47,contrast:[12,36],contribut:[1,18,22],control:[0,4,5,8,10,12,15,16,21,22,26,33,35,38,40,43,44,49,51],conveni:[3,5,22,36,46,47,49],convent:[7,12],convers:[22,34],convert:[3,6,7,13,21,22,27,35,38,40,47,49],convinc:[12,22,30],coordin:[8,39],copi:[0,5,12,31,33,35,47,49,51,53,54],copycat:42,copyonwritearraylist:5,copyright:5,copyvault:29,cor:18,corda:0,corda_bintray_gpg_passphrase:39,corda_bintray_key:39,corda_bintray_user:39,corda_dev_ca:8,corda_gradle_plugins_vers:10,corda_vers:[10,51],cordaapp:51,cordacadevpass:[8,45],cordapluginregistri:[9,10,36,48,51],cordapp:[0,4,9],cordarpccli:[4,46],cordarpcop:[4,9,12,46,48],cordarpcopsimpl:35,cordform:[0,8],core:[1,6,9,10,12,18,20],corner:[1,16],corp:[34,37],corpor:[43,50],correct:[6,12,16,36,40,41,43,47,49,51,53],correctli:[12,17,23,35,36,40,47,49],correspond:[4,17,22,29,31,43,49,50],correspondingli:[5,46],cost:[1,4,36,49],could:[5,6,12,21,22,29,36,44,47,49],couldn:[30,36],count:[7,43],countabl:[25,40],counter:[5,12,51],counterparti:[1,6,7,12,17,24,31,40,43,44,46,47],counterparty:51,countri:[22,36,51],coupl:[12,13,29,48,51],cours:[12,29,33,36,38,49],coven:49,cover:[6,12,21,36,43,49,51],cpu:29,crash:[12,35,36],crazi:51,creat:[1,4,5],createcommand:54,createdummyirs:7,createsomenod:13,creation:[7,30,49],creator:36,credenti:[34,39,48,51],credit:[40,43],crisi:43,crisp:49,criteria:6,critic:41,cross:27,crude:25,cryptic:15,crypto:[40,51],cryptocurr:28,cryptograph:[17,22,30],cryptographi:18,csr:40,ctrl:51,curl:[33,51],currenc:[3,6,7,12,25,28,29,34,38,40,47,49],current:[0,4,5,7,8,10,11,12,15,18,19,21,22,23,25,27,28,29,30,31,32,34,35,36,37,38,40,41,42,44,48,49,51,53,54],currentstep:[12,36],currentthread:46,currenttim:12,currentvault:47,curv:7,custodi:[13,22],custom:[4,8,9,12,21,22,23,26,28,33,35,38,40,43],customis:[4,38,48],cut:18,cutoff:29,cycl:[5,12,49],dai:[7,12,21,22,26,33,36,41,53],daili:51,daniel:40,danks:40,dao:40,dashboard:[33,34],data:[1,2,5,6,7,9,10,12,17,18,19,20,21,22],databas:[8,10,13,18,19,23,24,26,27,28,29],databaseschema:38,databasetransact:13,dataset:[7,43],datasourc:[8,45],datasourceclassnam:[8,45],datasourceproperti:[8,45],datastructur:29,date:[6,7,11,16,18,21],dateoffset:40,daterollconvent:22,david:40,days:53,dcapsul:10,dead:31,deadlin:[22,36],deal:[1,5,12,22,25,28,36,43,49],dealstat:25,debt:[6,43],debugg:10,decd098666b9657314870e192ced0c3519c2c9d395507a238338f8d003929de9:33,decd:33,decentralis:[27,36,40],decid:[26,30,36,38,47,49],decis:[21,47,49],declar:[5,8,9,12,35,53],deconflict:27,dedic:[1,5],dedupl:[35,40],defaultissu:49,defaultref:53,defens:47,defin:[3,5,9,12,13,19,21,22,23,24,25,29,33,35,38,40,48,49,50,51,53],definit:[3,12,17,21,25,40,49],delai:[7,36],deleg:[47,50,54],delet:[5,12,25,35,40,49],deliber:53,deliv:[6,13,35,51],deliveri:[12,19,27,31,43,51],deliveryaddress:51,deliveryd:51,demand:[1,12,21,24,40],demo:0,demonstr:[0,27,34,40,43,51,52],denial:21,denot:30,dens:5,depend:[0,1,5,10,11,12,13,16,17,21,23,24,27,36,40,43,45,47,49,51],dependson:[10,51],depict:[23,26],deploi:0,deploy:[0,1,10,17,23,32,51],deploynod:[8,10,43,46,48,51],deployvisualis:32,deposit:49,deprec:40,depth:21,deregist:31,deriv:[0,7,12,17,22,38,40,49],describ:[5,11,12,16,18,20,21,22,23,25,28,29,30,31,35,43,44,48,49,51,54],descript:[1,3,5,27,28],deserv:[29,41],design:[5,14,17,18,21,24,27,36,40,44,49,50,51],desir:[9,12,22],desktop:33,despit:[12,46,49],destin:31,destroi:[6,23,47,49],destructur:49,detail:[1,3,4,5,6],detect:5,determin:[0,3,6,7,11,17,24,31,47,49,50,51,52],determinist:[4,23,27,29,40,52],dev:[8,29,33],develop:[0,1,5,8,10,12,14,15,16,18,23,24,25,26,28,33,35,37,38,40,41,43,47,49,51],developer:51,devic:[8,27],devmod:[8,37,45],diagnos:45,diagram:[7,23,24,25,26,28,49],dialog:1,dialogu:51,diamond:17,did:30,didn:[5,12,30,41,49,51,53],differ:[1,3,5,6,7,8,9,10,11,12,21,22,23,25,27,29,31,34,36,38,40,43,47,48,49,50,51,52,53],differenti:[37,54],difficult:12,difficulti:50,digit:[12,23,36,40,47,49],digitalsignatur:[12,36,47,54],dir:[37,45],direct:[1,5,17,24,35,38],directli:[0,4,5,12,13,15,17,22,25,26,28,31,33,35,40,43,47,48,49,50,51,52,54],directori:[0,1,2,8,9,10,16,18,29,33,35,37,43,45,51],directthreadexecutor:5,dirti:49,disabl:[22,35],disagr:43,disambigu:38,discard:44,discoveri:32,discuss:[12,22,36,47,51],disk:[1,12,22,31,40],disobei:36,dispens:43,displai:[0,1,21,40,43,48],disput:[7,21,49],disrupt:[29,31,40],disruptionpattern:29,disruptionspec:29,distinct:[5,45],distribut:[8,9,10,12,17,18,19,20,21,23,24,27,28,36,40,42,43,47],distrust:[12,21],dive:18,divid:21,divis:25,dlog4j:33,doc:[0,2,4,5,16,18,40,43,48,51,52],docker:33,docsit:[2,18,41,51],document:0,doe:[5,6,7,8,10,11,12,13,19,23,31,33,35,36,37,38,40,43,44,46,47,49,51,52,54],doesn:[3,5,8,12,13,16,19,21,33,36,44,46,49,53,54],dokka:2,dollar:[25,49,52],dollars:[49,52,53],domain:[17,22,40,49],domicil:49,domino:43,don:[4,5,12,14,22,29,34,36,41,43,44,49,50,53],done:[2,3,4,12,13,15,23,29,30,31,37,40,48,49,51],doorman:31,dot:[7,30],doubl:[12,19,21,34,35,45,49,51,53],doubt:[5,16],down:[1,5,8,12,29,34,47,49,50,51,52],download:[0,4,12,13,15,16,18,23],downsid:5,drain:[4,12],draw:[40,48],drawn:48,drive:47,driver:[0,8,33,35,38,40,48,51,52],driverdirectori:48,drm:36,drop:[1,51],dsl:[0,10,17,40,51,52,53],dt_socket:[0,10,51],due:[0,5,7,11,12,14,15,21,35,38,43,49,50],dummi:[6,13,46,53],dummy1:13,dummy2:13,dummy_notary_key:13,dummy_pubkey_1:[49,53],dummycontract:[13,54],dump:48,duplic:[12,25,30],durat:[11,36,47],durationsecond:29,dure:[5,7,8,9,10,12,32,33,35,40,49],dynam:[9,23,40,49],each:[0,1,3,4,5,7,8,9,10,11,12,17,21,22,23,24,26,27,29,30,31,32,35,36,38,40,41,43,46,47,48,49,50,51,52,53],earli:[5,6,35],earlier:[0,15,44],earliest:[7,11],easi:[0,1,5,14,36,40,49],easier:[5,10,12,15,40,49],easiest:[4,49],easili:[5,12,18,28,43,49,51],echo:51,econom:[1,7],ecosystem:[18,20],ed25519:40,edg:48,edge:48,edit:[0,22,33,39,45,51],edition:15,editor:1,effect:[7,8,12,13,38,43,53],either:[0,3,4,5,6,7,8,9,12,16,17,21,22,23,29,30,34,38,43,48,49,51,53],elbonia:22,element:[5,17,30,36,47,49,51],elementari:[50,51],elimin:[19,23,40],els:[12,13,21,25,28,35,36,46,47,48,49,50,54],elsewher:9,elucid:47,email:12,emailaddress:37,emb:26,embed:[8,19,23,26,30,36,40,51],embedd:31,emit:[4,40,52],emoji:46,empti:[8,34,40,49,53],emptyledg:53,emptyset:3,enabl:[0,8,9,10,12,21,26,35,40,50],enact:43,enc:29,encapsul:[3,5,22,36],enclos:5,encod:[31,36,47],encount:[1,11,15,35,47],encourag:[18,38,46],encrypt:[37,47],encumb:49,encumberedst:49,encumbr:[40,49],encumbranc:18,end:[3,5,7,12,18,21,23,29,31,35,36,41,47,50,51,53],endeavour:51,endpoint:[10,31,33,51],enforc:[3,5,23,40,49],enforceverifyorfail:53,engin:43,england:50,english:[5,49],enhanc:40,enjoy:40,enorm:12,enough:[5,12,13,43,47,49],ensur:[3,5,9,12,15,17,21,22,23,28,30,35,37,40,41,44,47,49,50,51],ensure:[1,16,21,36,43,51],enter:[10,26,39,43,51,52,53],entir:[7,12,21,35,36,49,51],entireti:[7,23],entiti:[21,22,23,30,36,37,38,49],entitl:[27,48],entri:[7,8,10,12,23,38,40,44,49,50],enumer:[7,38,43,47,51],environ:[0,1,5,10,12,24,34,36,39,47],envis:18,envisag:[23,49],equal:[3,12,21,22,25,40,47,49,50],equiti:38,equival:[5,7,22,25,34,35,42,47,49],eras:15,error:[0,1,3],escal:36,especi:[22,47],essenti:[0,33,35,36,47,49,50],establish:[11,31,43,45,52],estim:1,etc:[0,5,6,7,12,17,19,21,22,24,25,33,34,36,40,41,43,45,49,50,51],ethereum:[12,23,49],eur:1,euribor:[1,33,36],euro:25,evalu:[7,33,36,50],even:[4,12,14,15,21,26,30,35,36,38,40,43,49,50,53],event:[5,7],eventu:[29,35,45],eventual:[21,41],ever:5,everi:[0,3,4,9,12,21,22,23,24,27,29,30,31,35,36,38,40,41,43,44,49,50],everyon:[21,36,49],everyth:[15,21,44,48,49],evid:[36,47],evolut:[23,28,50],evolv:[22,38,40,45,48,49,51],exact:[0,21],exactli:[22,23,35,36,40,49],examin:[5,10,13,49],exampl:[0,1,2,3,4,5,6,7],exampleapi:51,exampleclientrpc:51,exampleflow:51,exampleplugin:51,examplerpccordapluginregistri:48,examplerpcvalu:48,exampleservic:51,exampletest:51,exampleweb:51,exce:29,excel:36,except:[3,4,5,9,12,21,26,31,40,44,47,49],exception:[0,5],excess:[5,33],exchang:[7,12,17,25,35,47],exclud:[8,38,47],exclus:6,execut:[0,3,10,11,12,17,21,22,23,24,26,27,29,32,34,35,40],executor:[5,24],exemplifi:53,exhaust:[35,40],exist:[1,5,6,7,8,10,11,21,22,23,25,32,35,37,38,40,49,51,53],exit:[3,6,8,13,25,34,35,37,40,43,48,49],exitcash:48,expand:[34,47,51],expect:[1,4,5,6,8,11,12,21,22,24,29,35,36,37,38,40,41,44,46,47,49,50,51,52,53],expectedtypenam:12,expectev:52,expens:[4,5],experi:[10,40,41,51],experiment:[5,40,43],expir:37,explain:[5,11,12,29,32,37,40,51],explan:[3,5,32,36,48],explicit:[5,12,47,49],explicitli:[5,9,23,26,28,35,43,47,53],explor:[5,13,19,33,34,40,43,47,49,51],explorer:18,expos:[5,9,10,11,12,22,23,27,28,33,35,38,40,47,48,54],expose:22,exposur:[6,7,17],express:[7,17,21,22,23,40,49,53],ext:[10,51],extend:[3,5,9,10,12,14,18,22,24,25,34,35,36,40,43,49,50],extens:[0,5,9,12,17,28,32,33,35,36,40,44,47,49],extern:[8,12,35,45,47,51],extraadvertisedserviceid:[8,35,42,45],extract:[22,28,33,36,43,47,49],extractcommand:50,extrem:[14,17,21,29],face:[16,49,50,53],facevalu:[3,49,53],facil:[17,28,35],facilit:51,fact:[0,5,7,12,17,21,23,24,36,40,45,49,51,53],factor:[7,43],fail:[3,9,40,49,50,53],failswith:53,failur:[12,17,53],fairli:[5,13,43],fall:31,fals:[5,8,12,13,22,36,45,47,49,54],famili:38,familiar:[4,18,49,51,54],famou:40,fanci:49,far:[12,36,43,47,49,50,52],fashion:[5,38,43],fast:13,faster:33,faucet:43,fault:12,fear:17,featur:[1,4,5,8,10],fed:[25,32],feed:[21,36],feedback:40,feel:[49,51],fetch:[31,33,35,36,46],fetchtransactionsflow:46,few:[0,5,12,14,33,36,41,43,47,49,50,51],fiber:[12,35,36],fiction:[23,34],field:[5,7],file:[1,2,4,5],fill:[5,12,43,47,49],filter:[3,5,29,30,36,38,40,47],filtercommand:[30,36],filteredleav:[30,36],filteredtransact:[30,36,47],filterfun:[30,36],filterisinst:49,filterst:3,finalis:[7,12,40],finalityflow:[12,46,47,54],financ:[10,12,24,25,40,51],financi:[11,17,18,20],find:[0,2,12,13,14,16,18,19,33,36,44,47,51],fine:[4,15,33,53],finish:[12,40,51,52],fire:12,firm:28,first:[0,3,4,5,7,8,10,11,12,13,14,15,16,17,21,23,31,33,36,37,38,39,40,43,46,47,48,49,50,51,52,54],firstcomposit:40,firstli:[9,34,43,46,49,51],fit:[5,23],fix:[1,5,6,7,11,12,16,18,29,30],fixedleg:7,fixedlegpaymentschedul:7,fixedratepaymentev:7,fixer:36,fixingflow:36,fixingroledecid:11,fixingsessioninitiationhandl:11,fixof:[30,36],fixqueryflow:36,fixqueryhandl:36,fixsignflow:36,fixsignhandl:36,flag:[8,33,37],flat:38,flesh:22,flexibl:[21,22,23],flight:4,floatingleg:[7,11],floatinglegpaymentschedul:7,floatingratepaymentev:7,flow:[5,7,9,10,11],flowexcept:[12,40],flowhandl:[12,52],flowlog:[11,12,26,35,36],flowlogicreffactori:[9,11],flowstatemachineimpl:35,flowtrack:12,flux:10,fly:12,focu:30,focus:[3,50],fold:[5,48],folder:[2,8,10,35,37,43,47,51],follow:[1,2,5,8,10,11,12,15,16,18,20,21,23,24,25,26,27,28,29,32,33,34,35,36,37,39,42,43,47,48,49,50,51,53,54],font:5,foo:[5,48],foobrokenexcept:5,foot:44,fooutil:49,forc:[33,40,49,53],fordai:[11,36],foreach:48,foreign:47,foreignexchangeflow:47,forev:41,forget:[12,36,49],form:[4,10,11,12,24,26,27,28,30,31,35,36,43,47,49,50,51],format:[2,4,5],former:48,formerli:40,formula:40,forth:[4,12,47],fortun:43,forum:[15,18],forward:[12,31,35,36,41,43],found:[3,8,12,15],four:[31,43,45,49,51],fourpmtimelock:49,fraction:25,frame:[5,12,35,43],free:[12,15,21,23,43],freed:4,freeli:36,freez:47,frequenc:[1,7],fresh:[34,36,49,53],freshkei:12,freshli:[22,51],friend:45,friendli:35,from:[0,1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,17,18,21,22,23,25,26,27,28,29,30,31,32,33,34,35],fromcountri:22,front:[49,51],frontend:19,ftx:[30,36],fulfil:6,full:[5,6,8,12,21,27,30,31,32,35,40,43,47,48,49,50],fulli:[5,8,9,12,17,21,22,27,32,35,38,40,45,47,51,52],fullysign:12,fun:[3,11,12,13,21,29,30,36,38,46,47,48,49,50,51,53,54],fund:[43,47,49],fundament:[20,21,49],fungibl:[3,6,17,25,26,28,47,49,50,51],fungibleasset:[6,25,40,47,50],further:[3,7,8],furthermor:21,futuretransact:48,fuzz:40,fxrespons:47,fxtransactionbuildtutori:47,fxtransactionbuildtutorialtest:47,gain:[19,27],garbag:[4,5,12,33],gatewai:24,gather:[18,22,29],gatherfrequ:29,gatherourinput:47,gatherremotest:29,gave:36,gbp:[3,34,50],gear:41,gener:[0,1,2,3,4],generatecount:29,generatefix:36,generateiniti:13,generateirsandfixsom:7,generateissu:[49,50],generatemappedobject:38,generatemov:[49,50],generateredeem:[49,50],generatespend:[12,47,49],generatetransact:48,generatexxx:47,genuin:5,geograph:1,get:[0,1,4,5,12],getalice_pubkey:53,getanynotari:54,getbefor:49,getbloomfilters:5,getbob_pubkey:53,getclass:49,getcommand:[49,50],getcontract:49,getdummy_pubkey_1:53,getencumbr:49,getfacevalu:49,getfix:7,getflowtrack:12,getinput:[40,49],getinstat:40,getissuanc:49,getkei:49,getlegalcontractrefer:[49,50],getmaturityd:49,getmega_corp:53,getmega_corp_pubkey:53,getnotari:54,getnotarysignatur:12,getorthrow:[13,52],getoutput:[40,49],getoutst:40,getowner:[49,50],getpap:53,getparticip:49,getprotocolvers:4,getrequiredcommand:50,getresourceasstream:46,getresultorthrow:29,getsign:[49,50],getsubtyp:43,getter:[38,49],gettest_tx_time:53,gettimestamp:49,gettransact:13,getvalu:[49,50],gigabyt:33,github:[1,2,15,18,43,51],giusepp:40,give:[10,12,13,15,21,31,33,35,36,40,47,49],given:[0,1,3,9,12,21,22,23,30,31,36,38,40,42,48,49,50,54],givenpric:12,glanc:34,global:[1,5,21,22,23,24,27,40,53],glue:12,gnu:2,goal:[5,17,19,41,50],goe:4,gone:[12,40,49],good:[0,5,12,13,18,30,49,50],got:[12,30,33,36,52],govern:[23,25,43],gpg:39,gps:21,gr1:3,gr2:3,gr3:3,grab:51,gradlew:[0,10,15,29,32,34,37,39,43,45,48,51,52],grain:[4,33],grammar:5,graph:[1,4,13,19,23,24,26,27,33,38,40,48],graphit:33,graphstream:48,great:[0,40,43],greater:5,green:[26,51],grei:23,ground:27,group:[1,3,6,8,10,18,23,27,30,31,34,35],groupclaus:50,groupid:51,groupingkei:[3,50],groupstat:[3,49,50],grow:48,guarante:[17,22,23,24,31,41],guava:[5,49],gui:[12,16,40,51],guidelin:[16,18,40],h2databas:43,hack:40,had:[12,13,21,22,40,49],hand:[1,11,12,15,23,27,28,32,35,45,47,49,51],handa:40,handi:13,handler:[10,11,12,35],handshak:[31,36],happen:[5,11,12,18,21,30,36,41],happi:[43,46],happili:[33,36],hard:[5,12,41],harder:[44,49],hardwar:[1,8,27],hash:[12,13,17,19,22,23,27,30,33,36,40,46,47,49],hashcod:[3,49],hashmap:29,haskel:40,hasn:29,hassl:12,hat:41,have:[0,1,3,4,5,6,7,9,10,11,12,13,15,16,17,19,21,22,23,26,27,29,30,31,33,34,35,36,38,39,40,41,42,43,44,45,46,47,48,49,50,51,53,54],haven:[49,51],head:[1,3],heap:[12,33,40],hear:15,heart:49,heavi:41,heavili:23,hedg:[6,7],held:[35,38,49],hell:12,hello:12,help:[5,11,12,32,36,43,47,49,51],helper:[3,7,12,22,35,46,47,49,53,54],henc:[7,21,35],her:[49,53],here:[0,1,5,8,10,12,13,14,15,16,17,21,22,25,30,31,32,33,36,38,40,47,48,49,50,51],herself:48,hidden:[31,35],hide:[18,21,23],hierarch:[0,12],hierarchi:[5,12,25],high:[12,40],higher:[4,5,21,33,51],highli:[0,40],highlight:[24,40],hint:0,histor:36,histori:42,hoc:40,hocon:8,hold:[3,9,22,29,30,35,40,47],holder:[5,49],holidai:[7,22,36],home:[16,43],homepath:[10,51],hood:53,hope:35,hospit:[12,26],host1:29,host2:29,host:[8,10,24,29,31,32,35,36,37,39,40,45,51],hostil:44,hostnam:45,hotspot:5,hour:12,hous:34,how:[0,1,3,4,5,6],howev:[0,6,7,8,12,15,21,30,35,36,37,38,42,46,47,49,50,51,53],html:[2,5,43,51],http:[1,2,8,15,33,35,36,37,39,43,45,46,49,50],https:8,hub:[12,17],human:[8,12,21,23,26,36,43],hundr:12,hurt:[12,36],icommercialpaperst:53,icon:1,idea:[0,5,12],ideal:[12,49],idempot:40,ident:[8,12,13,17,18,21,22,23,24,25,26,27,29,30,31],identicon:40,identifi:[1,7,12,16,17,21,22,23,25,30,31,33,35,36,38,40,43,47,52],identiti:[12,21,22,27,35,54],identityless:23,identityservic:35,ifmatch:40,ifnotmatch:40,ignor:[12,48,49,50,51],iii:9,illegalargumentexcept:[5,36,49,50,53],illegalstateexcept:[3,5,47,49,50,53],illustr:[1,22,23,24,25,26,28,32,49],illustrat:5,imag:[1,30,51],imagin:[3,5,12,49,50],immedi:[4,35,47],immut:[5,7,23,28,36,49],immutabl:5,immutablelist:49,imper:5,implement:[0,3,4,5,6,7,9,10],impli:[12,24,31,38],implic:[12,21,23],implicit:52,implicitli:7,important:41,importantli:47,impos:[36,49],imposs:[30,36],improv:[21,28,40,41,49,50],improvement:40,inact:35,inadvert:49,inbound:31,includ:[0,3,4,5,6,8,9,12,17,18],include:9,inclus:[3,30],incom:[35,40],incompat:53,incomplet:29,inconsist:0,inconveni:49,incorpor:[31,36],increas:[5,40,43],increment:[0,4],inde:36,indent:5,independ:[21,36,38,43,50],index:[7,11,23,38,41,49,51,54],indexsourc:11,indic:[4,5,7,8,11,12,22,40,45,47,49],indicat:29,indirectli:26,individu:[5,18,27],indivis:25,industri:[14,15,17,33,43],inf:[9,51],infer:53,influenc:33,info:[12,13,38,48],inform:[1,5,8,9,12,13,15,16,21,22,24,26,31,34,35,36,37,40,43,46,49,51,52],infrastructur:[4,13,19,23,24,33,35,40,49],ingredi:47,inherit:[5,49],init:36,initi:[9,12,16,22,29,31,35,36,40,43,45,47,48],initial:[17,18,24],initialis:[13,32,35,38,54],inlin:[12,47],inmemorynetworkmapservic:35,inoutgroup:[3,49,50],input:[3,6,12,17,18,21,23,27,29,30,34,36,40,42,43,46],inputindex:54,inputpap:53,inputslist:47,inputst:54,inquisit:51,insert:[5,13,21,33,35,36,38,47],insid:[4,9,12,13,23,30,35,40,43,44,47,49],inspect:[29,51,52],instal:[0,2,8,10,11,15,16,39,40,43,48,49,51],installat:15,installdist:[43,48],instanc:[3,5],instance:53,instant:[5,11,12,22,36,47,49],instanti:[9,11,12,33,40],instat:53,instead:[1,5,12,13,15,16,19,22,23,31,35,40,49,54],instigat:21,instruct:[15,16,17,18,33,43,46,48,49,51],instruction:15,instrument:[6,7,11,35,47,51],insuffici:47,insufficientbalanceexcept:49,integ:[4,25,40,49,54],integer:49,integr:[0,5,8,12,15,23,30,33,36,38,40,43,51,52],integrat:18,integrationtest:52,integrationtestingtutori:52,intellig:5,intend:[5,6,10,12,13,22,23,24,25,33,34,35,36,38,44,46,51,53],intent:[3,9,32,36,40,49],intention:5,inter:[24,40],interact:[4,5,12,13,18,23,26,27,31,36,40,47,49],interchang:[17,25,47],interest:[1,4],interest_r:[8,45],interfac:[0,1,4,5,6,9,11,18,19,22,25,26,31],interior:40,interleav:29,interledg:40,intermedi:47,intermediari:[22,43],intern:[5,9,10,12,28,31,33,35,38,40,49,51],internalis:5,interop:[14,40,49],interoper:35,interpol:22,interpret:[5,23,29],intersect:49,interv:[22,29],intervent:35,intesa:40,introduc:[5,11,17,23,36,40,49],introductori:[18,51],intuit:[5,34],invalid:[12,21,22,23,36,49],invari:[29,49,52],investig:12,invoc:[4,12],invoic:46,invok:[4,5,9,11,12,23,26,33,35,36,40,51],invoke:12,involv:[6,12,18,21,22,35,42,47,49,52,54],ipsa:36,irrelev:11,irsdemo:[1,8,30,43],irsexport:7,irstest:7,irsutil:7,isbefor:49,isconsist:29,isda:[40,43],isdebug:51,isempti:[36,47,49],isinstanc:12,isn:[4,5,12,22,31,44,49],isnotari:48,isnotempti:[46,48],isol:50,issu:[1,3,6,13,15],issuanc:[6,22,23,25,28,29,40,43,49,50,53],issue:[3,6,17,29,43,48,49,50,53],issuecash:[29,48,52],issuecommand:50,issuedbi:[52,53],issuer:[6,12,13,25,28,34,40,43,47,49,50,53],issuer_kei:38,issuer_ref:38,issueref:[48,52],issuerparti:38,issuerref:38,issuetransact:54,istribut:18,item:[17,47,49,51],iter:[12,40,41,49],iterabl:38,iterat:[36,47],itself:[4,7,8,11,12,15,18,21,23,31,33,34,35,36,38,40,43,46,47,48,49,53],jar:[0,2,8,9,10,23,32,33,37,40,45,46,47,51],jarandsourc:10,jav:16,java:[0,3,4,5,9,10,11,12,14],javaag:47,javaclass:[12,38],javacommercialpap:[49,53],javadoc:[5,10,51],javadocjar:10,javatesthelp:53,javax:38,jax:9,jcenter:18,jdbc:[8,10,28,33,38,40,43,45,51],jdbcdatasourc:[8,45],jdbcx:[8,45],jdk1:16,jdk:15,jdwp:10,jersey_vers:51,jetbrain:[14,15,16,51],jetti:33,jms:31,jmx2graphit:33,jmx:33,jmxtran:33,job:[12,29],jobs:29,johann:40,join:[8,28,31,38,40,49],jolokia:33,jpa:38,json:[8,33,35,51],judgement:5,junit:51,just:[4,5,12,15,16,22,23,29,31,33,36,40,43,44,46,47,48,49,51,53,54],jvm:[4,10,12,14],kdoc:5,keep:[12,15,23,28,47,49,51],kei:[1,3,5,6,8,9,12,13,17,18,19,21],kept:[12,37,54],keymanagementservic:[12,35,36],keypair:[12,35,36,49,54],keystor:[8,35,37,40],keystorepassword:[8,45],keyword:[5,53],kick:12,kill:[26,29],kind:[12,22,36,44,49,51],knob:29,know:[1,4,11,12,13,14,21,24,27,30,36,44,47,49,50,51,53,54],knowledg:36,known:[1,7,13,15,17,23,24,30,35,36,40,41,43],knownfix:36,korea:49,kotlin:[2,5,9,12],kotlin_vers:51,kyc:24,label:[12,53],lack:12,lambda:[12,33,53],land:7,lang:[9,53],languag:[4,5,10,12,14,15,16,17,22,23,25,40,49,51],larg:[12,22,25,31,36,40,46,47,49],larger:[5,23,44],last:[12,26,29,36,41,53],lastli:51,late:15,lateinit:13,latenc:21,later:[4,5,12,13,19,22,36,38,40,44,48,49,50,51,52],latest:[5,9,15,16,18,40,47,51],latestrecord:47,latex:40,latter:[5,48,49],launch:[11,34,36,43,48],layer:[8,12,13,31,35,36,38,40,42],layout:[10,32,40,51],lazi:36,lazili:33,ldap:40,lead:[5,50],leader:8,leaf:[17,30],leak:[4,12,21,36],learn:[12,13,14,18,22,49],least:[1,8,29,40,43,46,49,50,51],leav:[1,3,5,12,16,22,30,34,36],ledger:[1,6,7,12,17,18,20,21,22,23,24,25,26,28,33,34,36,38,40,43,45,46,47,49,51,52,53],ledgertransact:[12,22,40],leewai:44,left:[1,12,32,37,43,50,51,53],leg:[7,11],legaci:35,legal:[8,21,23,31,35,36,37,40,47,49,51,54],legalcontractrefer:[49,50],legalident:[13,47,48,52,54],legalidentitykei:[47,54],legallyidentifi:[12,36],legalnam:[8,45,51],legitim:23,less:[12,33,40,46,50,53],lesser:49,let:[1,3,5,11,12,13,22,29,30,31,33,36,40,47,48,49,50,51,53,54],letmein:[8,45],letter:[5,31],level:[0,3,5,7,9,12,16,21,22,27,29,30,31,33,34,35,40,43,44,47,49,50,53],lib:[2,10,32,37,45,47,51],liber:5,libopenjfx:16,libor:[7,33,36],librari:[0,4,5,12,17,18,22,25,26,33,35,36,40,43,48,49,51],licat:18,licens:[5,43],license:51,life:[12,49],lifecycl:6,lifetim:[7,22],lightweight:[13,17],like:[3,4,5,7,11,12,13,21,22,23,25,28,29,30,31,32,33,36,40,41,43,47,48,49,51],likewis:[36,49],limit:[3,6,17,29,33,49,54],linear:[25,28,35],linearhead:47,linearheadsoftyp:47,linearid:47,linearst:[25,47],liner:5,link:[5,12,16,23,36,39,40,45,51,52],linkag:23,linux:[10,15,33,40],list:[0,2,3,8,9,12,22,23,27,29,30,31,35,36,38,40,41,42,43,47,48,49,50,51,54],listen:[0,1,5,8,31,35,40,48,51],listenablefutur:4,listof:[13,36,38,47,48,49,51,52],littl:[5,12,49,53],live:[7,9,12,35,40,43],lizard:17,llc:37,load:[0,8,9,12,18,21,22,23],loadtest:29,loan:[6,7,36],local:[0,2,8,9,10,12,15,17,18,23,29,32,33,35,38],local_branch_nam:51,localcertificatesbasedirectori:29,locald:36,localhost:[1,8,33,34,43,45,51],localtunnelstartingport:29,locat:1,lock:[5,6,8,28,38,49],log4j2:[33,45],log4j:[40,51],log:0,logger:[12,33],loggerfor:33,logic:[3,11,12,13,17,21,22,23,24,31,38,40,44,46,47,49,50],login:[10,34,39,40,43,48],loglevel:33,london:[8,10,37,45,46,51],longer:[0,5,7,8,12,37,40],longrang:29,look:[0,1,3,5,7,12,13,22,29,31,33,36,41,43,46,49,50,51,53],lookup:[8,31],loop:[5,7,29,48,49,52],loquitur:36,loss:36,lot:[5,7,40,43,44,49],low:[12,21],lower:[5,12,15,27,47],lowest:31,lurch:12,machin:[1,8,11,12,15,16,17,23,26,29,40,45],macos:[10,40],made:[5,7,12,22,35,36,40,41,46,47,48,51],magicnumb:54,mai:[0,1,4,5,10,12,15,16,17,18,21,22,23,24,25,26,27,28,29,31,32,33,34,35,36,38,40,41,43,44,45,47,48,49,50,51,52,53],mail:41,mailbox:35,main:[0,8,11,12,16,23,29,31,35,40,46,48,50,51],mainstream:19,maintain:[17,21,36,49,54],mainten:31,major:[0,12,40,41,43],make:[0,1,2,4,5,7,8,10,12,13,15],maker:14,maketransact:13,malici:[12,27,40,44,47],man:40,manag:[8,12,17,18,24,28,29,31,33,34],managa:28,mandatori:49,mani:[5,10,11,12,13,16,21,22,23,25,27,29,36,40,46,49,51],manifest:0,manipul:[22,25,47],manner:[4,12,23,31,40,48,49,50],manual:[0,10,11,12,26,32,47,54],map:[0,1,3,5,7,8,9,12,13,17,18,24,29],mappabl:49,mappedschema:38,mappedtyp:38,margin:[17,18,24],mark:[4,5,6,12,17,38,49],markdown:5,marker:[12,44],market:51,marshal:4,master:[15,16,41,51],match:[3,4,8,12,22,23,24,30,31,36,40,44,47,48,50,52],materi:50,math:18,mathemat:22,matter:[12,36,43,49],matur:[6,7,21,27,32,33,36,49,53],maturityd:[49,53],maven:[0,10,16,18],mavenloc:10,mavenpubl:10,maximis:23,maybestx:12,maybetraderequest:12,mbean:33,mean:[4,5,9,11,12,13,16,17,21,23,25,26,27,29,30,36,40,43,47,48,50],meandref:48,meaning:[6,21],meaningfulli:46,meant:[12,29,51],meantim:52,meanwhil:[48,50],measur:[7,28,43],mechan:[17,28,31,36,40],meet:[3,35,47,49,51],mega:37,mega_corp:[13,53],mega_corp_key:13,mega_corp_pubkey:53,megacorp:[13,53],member:[7,8,40,43],membership:26,memori:[12,13,18,31],menlo:5,mention:[11,12,36,49],menu:[1,51],mere:7,merg:[25,28,40,47,49,51],mergeabl:49,merkl:[17,18,23,27],merkleroot:[30,36],merkletreeexcept:[30,36],mess:12,messag:[0,4,5,8,10,12,13,17,18,19,26,27,29],messagingserveraddress:[8,35],messagingservic:[31,35],met:[9,22,51],meta:[9,51],metadata:[33,46,51,54],method:[3,4,5,8,9,11,12,13,21,22,25,29,33,35,36,38,40,44,45,46,47,49,54],metric:[33,43],micro:[40,50],microsoft:1,mid:21,middl:[5,12,40],middlewar:[17,35],midpoint:51,might:[5,7,12,36,38,44,47,49,51],migrat:47,mileston:15,million:26,min:48,mind:[5,12,36],miner:23,mini_corp_pubkey:13,minim:[3,12,15],minimis:[6,21,31],minimum:[4,7,22,23,47],minor:[31,40,41],minu:49,minut:[0,1,12,14,36,39,51],mismatch:[49,53],miss:[5,8,12],mission:33,mistak:[40,44,47],mix:[0,5,40],mobil:23,mock:[13,51],mocknetwork:[13,32],mocknod:[13,35],mockservic:22,modal:51,mode:[8,32,34,37,40],model:[5,6,7,11,12,17,18,20],modif:[35,47,49],modifi:[1,6,7,9,10,12,17,22,40,47,49,51,53],modul:[5,8,13],moment:[12,13,40],monei:[36,47,49],monitor:[5,9,18],month:[7,12,41],monthli:51,more:[0,1,3,4,5,6,7,8,10,12,13,14,16,17,18,21,22,23,24,25,27,30,31,32,33,35,36,37,38,40,42,43,46,47,48,49,50,51,52,54],moreexecutor:5,mortensen:40,most:[0,3,5,7,12,15,31,32,33,45,49,50,51],mostli:[23,49],motiv:[18,51],move:[3,6,12,13,23,34,40,41,43,47,48,49,50,51,53,54],movement:[12,25,49],movetransact:54,movetransactionbuild:54,much:[5,12,14,27,36,38,40,44,47,49],multi:[5,12,18],multigraph:48,multilater:[6,40],multipl:[3,4,6,9,17],multipli:7,must:[3,4,5,6,8,9,10,11,12,21,22,23,25,27,31,33,35,36,38,39,40,44,45,46,47,48,49,50,51],mustafa:40,mutabl:[5,22,49],mutablelistof:47,mutat:[35,47],mutual:[6,12,21,44],myfil:33,myident:[36,54],myinfo:[36,47,54],mykei:22,mykeypair:12,mylegalnam:[8,37,45],mynodeinfo:36,mypublickei:12,mysigningkei:[36,54],mysql:19,nail:5,name:1,namedbyhash:18,namespac:12,narrow:[3,5,34],nativ:[12,47],natixi:40,natur:[0,23,47,49],naval:21,navig:[1,10,39,43,51],navistar:21,nearestc:[8,10,37,45,51],neat:53,necessari:[5,17,24,36,40,41,51],necessarili:[22,38],nee:40,need:[0,1,2,3,4,5,7,9,11,12,13,15,16,17,21,22,23,24,25,29,30,33,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54],neg:[25,51],negoti:[22,47],neither:12,nest:[12,52],net:[3,6,7,8,9,10,12,13,33,35,37,38,39,40,42,43,45,46,47,48,49,51,52,53],network:[1,8,11,12,13,17,18,19,21,22,23,24,26,27,29,30],networkmap:[10,31,51],networkmapcach:[8,12,35,54],networkmapservic:[8,10],networkmapupd:48,neutral:19,never:[5,17,21,49],newdeal:36,newli:[11,51,54],newnotari:21,newowner:[49,54],newsecurerandom:40,newstat:47,nextdoubl:48,nextfixingof:11,nextlong:48,nextscheduledact:11,nextstep:12,nfinal:46,nice:[36,49],nio:5,noddi:33,node:[0,1,4,6],node_dir:10,node_directory:45,nodea:[1,10,51],nodeb:[1,10,51],nodec:[1,51],nodefilt:29,nodehandl:[29,52],nodehost:29,nodeident:48,nodeinfo:[8,12,35,52],nodeinterestr:[9,36,47],nodenam:51,nodex:51,nodisruptionwindowm:29,non:[2,4,5,6,8,12],nonc:50,nondeterminist:52,none:[3,11,12,30,36,38,43,50],nonemptyset:40,nordea:40,normal:[3,4,6,7,9,10,12,22,29,30,31,32,34,35,40,46,47,49,50,54],north:49,notabl:[5,51],notari:[1,8,10,12,13,17,18,19,20],notaris:[12,18,21,22,23,26,27,40,43,47,49,51,52],notary:12,notary_committed_states:43,notarychang:[40,47],notarychangeflow:21,notaryclusteraddress:[8,35],notaryexcept:[40,54],notaryflow:[12,26,35,40,47,54],notaryident:[12,13,48,52],notarynod:[12,13],notarynodeaddress:8,notarysig:12,notarysignatur:[12,54],notarytous:22,note:[0,1,2,5,6,7,8,9,10,12,13],noth:[5,11,12,23,40,44,49,51],notic:[5,43,50,53],notif:[26,29,31,35,46],notifi:[31,32,54],notion:[7,40],notnul:[49,50],now:[1,5,10,12,13,22,30,33,39,40,43,45,47,48,49,51,52,53,54],nugget:49,nullabl:[12,49],nullpublickei:49,number:[0,3,5,6,7,13,15,17,22,25,29,31,34,35,36,38,39,41,43,45,47,49,51],numer:9,obj:[49,50],object:[3,4,5,6,7,8,11,12,13,17,18,19,22,23,24,25,26,27,31,33,36],oblig:[6,7,25,40,47,51],obligat:3,obligor:6,observ:[4,7,11,12,21,26,29,32,40,46,51],observatori:21,obsolet:[11,40],obtain:[5,8,11,12,13,15,21,24,27,30,36,37,40,43,51,54],obviou:[5,21,36],obvious:[0,7,17,32],occasion:0,occur:[11,12,21,35,49,52],occurr:[12,21],odd:49,off:[12,18,21,23,27,28],offer:[12,27,35,38,51],offici:15,offlin:31,offset:7,ofsecond:47,often:[5,6,7,12,16,36,47,49],oftenor:36,oil:[25,40],old:[12,17,21,39,40,47,49,54],older:15,omit:[11,43],onc:[4,5,9,12,17,21,22,26,37,41,47,49,52],once:[1,2,7,10,11,12,15,17,18,22,31,32,37,38,39,43,45,46,47,49,51],one:[3,21,24,30,36,43,47,51],ongo:4,onledgerasset:[6,49],onli:[0,3,4,5,7,8,10,11,12,14,17,21,22,23,24,25,30,31,32,33,34,35,36,37,40,41,43,44,45,47,48,49,50,51,52,53,54],only:[12,31,35,39,45],onto:[4,5,12,31,49,53],opaquebyt:[40,48,52,53],open:[0,1,3,4,10,12,15,16,18,21,23,31,33,35,40,43,48,51,52],opengamma:[40,43],openjdk:[15,16],openjfx:[15,16],openssl:29,oper:[1,7,8,11,12,17,24,25,31,33,35,36,40,44,45,47,48,49,54],oppos:0,opposit:3,opt:[1,10,29,51],optim:5,optimis:[28,40],option:[0,1,2,5,7,8,11,12,17,29,32,36,37,38,40,47,49,50,51,52,54],optional:[8,47],oracl:[1,7,9,15],oracleparti:36,orang:26,orchestr:[19,23,40],ordain:7,order:[0,2,4,5,6,7,12,19,21,22,23,24,28,29,32,35,36,38,40,43,45,46,48,49,50,51,52],ordernumb:51,ordinari:[12,23,40,49],ordinarili:36,org:[2,8,45,49,50,51],organis:[0,16,28,38,39],orient:18,origin:[23,30,38,40,46,47,49,50,51,53],originalst:21,orm:[38,40],osx:51,otc:38,other:0,otherparti:[12,36],othersid:46,otherwis:[1,4,5,8,9,10,11,12,31,35,36,44,47,48,49,52],our:[0,5,11,12,13,14,15,18,22,29,30,31,35,36,39,40,41,46,47,48,49,50,51,54],ourkei:47,ournotari:54,ourselv:[12,36,49,54],oursign:47,oursignatur:12,ourstat:47,out:[0,3,5,6,11,12,15,16,18,21,22,23,30,31,33,35,36,40,41,42,43,44,46,47,49,50,51,54],outcom:12,outer:50,outlin:[12,36,40],output:[0,3,6,10,12,17,18,21,23,28,30,34,36,40,43,46],outref:[13,47],outsid:[10,12,23,35,36,45],outstand:6,over:[0,1,5,7,8,10,12,13,17,21,22,23,24,29,30,31,33,36,38,40,43,47,49,51],overal:[11,21,47,53],overdu:11,overflow:5,overhead:33,overidden:[8,10],overload:[12,25],overlord:17,overnight:22,overrid:[3,9,11,12,29,36,38,48,49,50],overridden:[9,10],overutilis:29,overview:[1,18],overwrit:39,own:[1,5,6,10,11,12,15,18,21,22,23,25,29,31,32,33,34,35,36,38,40,41],ownablest:[12,22,49],ownedquant:48,owner:[11,12,22,28,38,47,49,50,53,54],owner_kei:38,ownership:[12,13,43,49,54],owningkei:[12,30,36,47,49,54],ozturk:40,p2p:[31,40],pack:49,packag:[9,15,22,25,38,40,51],packet:23,page:[1,8,15,16,36,40,41,43,51],pai:[6,12,34],paid:[6,7,43,49],pair:[1,12,13,22,35,36,37,47,49],pan:40,pane:16,paper:3,paragraph:29,parallel:[4,29,36,40,52],param:[29,38,54],paramet:[4,5,9,11,12,22,29,33,36,40,46,47,49,50],parameteris:[23,29,47],parent:[12,17],pars:[22,36,49],part:[0,3,4,5,6,8,9,10,11,12,21,22,23,29,30,31,34,35,36,37,38,40,44,45,47,49,50,51],parti:[1,5,6,7,11],partial:[12,18,21,23,27,30,36,44],partialmerkletx:36,partialtx:[12,30],particip:[21,22,23,24,26,27,28,34,35,36,40,49,54],particular:[3,5,9,12,17,18,21,22,30,33,36,38,40,47],partner:[43,47],partyandrefer:[5,25,48,49,53],partyfromnam:46,partynod:13,partyrefer:[5,49],pascal:5,pass:[1,3,9,12,22,26,28,29,30,33,35,36,38,40,43,46,47,49,50,52,54],passphras:39,password:[1,4,8,10,27,31,33,34,37,40,43,45,48],past:[1,5,43,49,51],patch:[5,40],path:[5,8,9,10,11,16,29,31,33,40,43,47,48,49,51],path_to_loadtest_conf:29,pattern:[5,47,48],paus:[10,26,32],paycash:[48,52],payer:7,payload:36,payment:[1,6,7,11,12,17,34,36,43,49],pdf:[36,46],peer:[12,19,24,30,31,34,35,36,49,51],penni:[25,38,49],peopl:[5,12,14,17,26,49],per:[5,10,11,31],perfect:50,perform:[0,1,5,7,11,12,17,21,22,23,26,27,28,29,31,36,40,43,46,49,50,51],perhap:[5,31,45,49],period:[7,37,43,47],perman:[12,46,47,49,53],permiss:[4,8,18,19,24,27,31],persist:8,persistentcashst:38,persistentst:38,perspect:[12,23,27,35,49],pertin:51,pervas:27,phase:40,phrase:36,physic:[1,21,35,40,45],pick:[0,12,15,31,40,41,49],piec:[5,12,17,21,23,25,29,45,49,53],pip:2,pki:[23,40],place:[2,5,7,9,11,12,19,22,23,24,30,31,36,40,41,43,48,49,50,51],plai:[27,29,34],plain:8,plan:[12,23,36,39,40],platform:[7,9,10,11,12,14,15,18,20,21,22,23,24,30,40,43,44,49,51],plc:34,pleas:[1,5,8,15],ploadtest:29,plu:[8,22,35,53],pluggabl:[21,24,27,40],plugin:[4,8],pluginservicehub:[9,10,12,35,36,40],pluginserviceregistri:51,point:[4,5,6,9,10,12,16,17,21,22,23,29,33,35,36,38,40,41,44,47,48,49,50,51],pointer:[12,22],pointless:5,polish:40,polit:43,poll:[29,37],pool:5,pop:[16,51],popul:[35,47],popular:14,popup:[15,16],port:[0,1,8,10,29,34,35,40,41,43,45,51],portal:1,portfolio:[1,18,24,40],portion:[23,47],posit:[5,12,18,49,54],possess:[12,21,54],possibl:[3,12,15,16,23,28,29,35,36,37,40,43,46,47,49,53],post:[24,35,51],postgr:19,potenti:[5,12,14,21,26,36,43,49,51],pound:[25,49],pour:25,power:35,practic:[8,40,43,47,49],preced:[0,49],precis:[19,21,23],precondit:[5,49],predic:52,predict:29,prefer:[0,1,5,16,34,38,51],prefix:[5,38],preliminari:43,prematur:12,prepar:[40,49],prescrib:45,present:[1,3,4,6,7,8,9,10,12],preserv:[21,28,47],press:51,pretend:[22,33,40],pretti:12,prevent:[28,31,40,43,44,47,49],previou:[12,22,29,40,50,51,53,54],previous:[7,11,21,22,23,36,40,51,54],price:[12,23,36],primari:[23,36],primarili:[0,6,15],primit:[22,53],print:[4,33,40,43,44,45,46,48,52],println:[46,48,52],printorvisualis:48,prior:54,privaci:[5,12,19,21,23,27,28,36,40,47,49],privat:[1,5,8,9,12,13,24,27,28,31,36,37,38,45,47,49,51,53],privatefoo:5,privatekei:[12,35],probabl:[0,49],problem:[12,15,16,36,45],proce:[1,12],procedur:[12,37,49],process:[0,1,3,4,7,8,9,10,11,12,18,19,21,22,23,24,28,33,34,35,36,37,40],processor:29,produc:[2,11,16,23,32,47,49,52,53],product:[0,5,10,11,14,19,25,40,41,43,47,51],profil:[33,39],program:[4,5,22,23,33,35,40,43,49],programmat:48,progress:[1,7],progresstrack:[12,36],project:[0,1,10,15],prolif:40,promis:40,prompt:[15,51],proof:[6,23,30],propag:[4,12,33,40,49,50,51,53],properli:[12,35,44],properti:4,proport:43,propos:[12,23,35,44,47,51],proprietari:[24,40,43],prose:[23,36,49],prospectus_hash:46,protect:[12,27,35,37,43],protocolhandl:46,protocolvers:4,prototyp:[5,19,36,40,42,49],provabl:47,prove:[21,49],proven:[27,43],provid:[0,1,2,3,4,5,6,7,8,9,10,12,13,15,16,17,21,22,23,24,25,26,27,29,30,31,32,33,34,35],provis:24,provision:22,proxi:[4,46,48,52],prune:[27,28],pseudo:36,pseudonym:22,ptx:[12,36,46],pubkei:53,publicfoo:5,publickei:[12,35,49],publish:[10,18,20,24,36],publishtomavenloc:39,pull:[47,51],punish:36,purchas:[1,12,43,51],purchaseord:51,purchaseordercontract:51,purchaseorderst:51,pure:[6,23,36,52],purpos:[1,6,12,17,21,22,27,28,31,38,42,43,45,47,48,49,51,52],push:[4,31,41],put:[5,12,17,18,29,41,47,48],putti:1,python:[2,40,51],qualifi:[8,9,38],qualiti:47,quantifi:25,quantiti:[3,25,28,29,47,48,49,51,52],quasar:[9,10,12,17,35,36,47,51],quasar_vers:51,queri:[4,7,8,11,24,28,35],queryablest:[35,38],queryrequest:36,question:[5,11,21,22,31,36,50],queu:[17,31],queue:[4,5,12,18],quick:[36,51],quickcheck:40,quickli:[17,37,44,49],quit:[4,5,12,21,49],r3cev:29,r3corda:[10,40,51],r3dlg:41,r3prototyp:[2,47],radic:23,raft:[8,18,21,27,35,40,42],rais:[3,21,43,50],ran:0,random63bitvalu:50,random:[11,22,23,29,31,34,40,43,47,48,54],randomis:[27,40,46],randomli:[29,34,48],rang:[1,3,21,38,51],rapid:[5,10,19,41],rare:[8,25],rate:[1,5],ratesfixflow:[30,36,47],rather:[3,5,12,15,16,31,32,40,45,47,48,49],rational:20,raw:[1,31,33,43],rdbms:[38,40],rdms:40,reach:[7,11,21,23,24,27,36,40,43],reachabl:12,react:29,reactiv:40,read:[1,5,8,10,12,14,18,19,30,33,35,36,40,49,51],readabl:[8,12,14,23,43],reader:18,readi:[1,3,41,49,51],readili:50,readm:[18,51],readme:[5,51],real:[5,22,32,36,37,40,43,47,49],realis:12,realist:22,realiti:[7,52],realli:[5,12,30,36,49],reason:[5,7,12,21,23,25,29,40,44,49],reassign:49,recal:7,receipt:[35,43],receiv:[4,6,7,9,12,17,26,29,31,35,36,40,41,43,44,46,47,49,51,52],receiveandcheckproposedtransact:12,receiveandvalidatetraderequest:12,received:36,receiving:12,recent:[1,40,51],recheck:47,recipi:[6,43,46,49,52],recognis:[9,12,23,49],recommend:[0,1,5,15,31,42,43,51],record:[11,13,17,21,25,26,28,35,38,43,46,47,51,54],recordtransact:[13,35,47,54],recreat:[12,16],red:[7,30,51],redeem:[3,6,34,49,50],redempt:49,redeploi:51,redesign:40,redirect:45,redownload:16,reduc:[5,10,43],redund:5,ref:[12,13,22,36,47,48,52,53],refactor:40,refer:[0,5,6,7,8,9,11,12,15],referenc:[46,51],refin:40,reflect:[1,12,18,29,40,47,49,50,51],refresh:[0,15,40,51],refus:16,regard:[21,45,47],regardless:12,regener:[7,41],regist:1,registerflowiniti:[9,12,36],registerrpckryotyp:[9,48],registr:[9,35],registri:9,regress:40,regul:[23,47,49],regular:[1,12,17,25,33,43,45,49],reifi:47,reissu:49,reject:[8,12,21,23,31,35,36,37,47,49],rel:[8,14,33,36,40,47],relabelablestep:12,relai:46,relat:[7,11],relationship:[35,49],relax:[29,37,40],releas:[4,15],relev:[3,9,10,11,17,22,23,28,35,36,40,47,49,50,54],reli:[4,10,23,40,43,44],reliabl:35,relic:33,religi:5,remain:[10,11,12,36,40,47,49,51],rememb:[5,11,44,47],remind:[12,44,50],remot:[0,9,10,16,27,29,32,35,43,45,47,51],remote_branch_nam:51,remotemessagingport:29,remotenodedirectori:29,remotesystemdservicenam:29,remov:[12,30,34,40,41,49],renam:[12,40],render:[5,12,32,34,40],renderifsupport:46,repair:26,repay:50,repeat:[0,5,7,12,46],replac:[4,7,22,33,40,41,43,47,48,49,51],replai:40,replic:[8,42,43],repo:[0,1,15,16,18,51],repoint:21,report:[12,26,28,34,40,50],repositori:[0,5,10,16,39,40,41,43,51],repres:[1,5,6,7,9,12,22,23,24,25,28,29,34,35,36,38,40,47,48,49],represent:[4,7,22],reproduc:47,republish:51,request:[0,4,8,9,12,18,21,23,26,27,29,31,35,36],requestingparti:54,requir:[0,1],requiredcommand:[3,40,50],requiredflow:9,requiresinglecommand:[49,50],requirethat:[49,50],research:40,resel:36,resend:35,resent:35,reserv:28,reset:[7,32],resid:35,residu:47,residualamount:47,residualoutput:47,resolut:[12,23,26,40,54],resolv:[5,12,13,22,27,36,43,45,49],resolvetransact:23,resolvetransactionsflow:[12,13,26,46],resolvetransactionsflowtest:13,resourc:[0,1,4,8,9,12,23,29,36,46,47,51],resp:36,respect:[0,5,12,22,28,47,51,52],respond:[12,35],respons:[4,9,11,12,16,21,23,28,31,35,36,38,40,47,48,51,52,54],rest:[9,12,19,23,31,33,40,50,51],restart:[9,12,26,35,37],restor:[9,12,17],restrict:[1,3,5,23,32,43,47],restructur:[40,50,51],restructuredtext:2,result:[5,7,8,12,13,21,23,34,35,36,37,38,40,43,44,46,47,49,51,54],resultfutur:13,resum:[12,35,37,40],resurrect:12,resync:15,retain:31,rethrown:4,retri:[12,19,31],retriev:[7,12,37,42,46],retrieveoutput:53,returnvalu:[46,52],reus:[4,23],reusabl:[3,17,23,36,40,46,49],revamp:40,reveal:[12,21,27,30,36,40],revers:[12,35],revert:6,review:[5,12,23,27,40,41,51],revis:[7,27,47],rewrit:12,richer:10,right:[1,5,12,15,16,22,33,36,40,41,43,44,47,51],rightmost:30,rigidli:5,risk:[12,43],robert:40,robust:40,rogerwilli:51,role:[11,27,34,35,43,48],roll:[7,12,40,43],rollov:[22,49],root:[1,8,10,24,27,30,31,35,37,41,45,47,51],roothash:36,rotat:[33,40],roughli:[21,41],rout:[12,13,27,31,40],row:[23,33,34,38,43,49],rpcclienttonod:[48,52],rpcexception:4,rpckryo:4,rpcreturnsobserv:4,rpcsincevers:4,rpcuser:[8,34,45,48,51,52],rui:40,ruin:53,rule:[5,12,23,28,35,36,40,43,49],run:[0,1,2,3,4,5,8,10,11,12,13,15],runbuy:43,runconfigur:[15,16],rundemonod:[34,40],runexampleclientrpc:51,runnetwork:13,runnod:[0,10,40,43,48,51],runparamet:29,runrecipi:43,runrpccashissu:43,runsel:43,runsend:[0,43],runshellcommandgetoutput:29,runsimulationnod:34,runtim:[5,12,51],runwebcashissu:43,sacrif:51,safe:[4,5,9,12,37,44,48,52],sai:[5,21,29,43,45,49,50,54],sake:[43,52],sale:49,same:[0,1,4,5,6,7,8,10,11,12,21,22,23,25,28,29,31,33,35,36,37,40,43,45,47,48,49,50,51,53],sampl:[0,9,10,12,15,16,18,26,32,33,34,40,43,46,51],sanction:49,sandbox:[11,19,23,27,40,44],saniti:12,santiago:40,sate:54,satisfi:[22,43,49,50],save:[5,12,40,49],saw:52,scala:[14,49],scalabl:[5,21],scale:[7,44],scenario:[22,26,27,32,35,47,51,52],scene:[12,49],schedul:[7,9],schedulablest:[11,22,35],scheduledact:11,schedulerservic:35,schema:[18,28],schemafamili:38,schemaopt:38,schemaservic:38,scheme:[30,35],schroeter:40,scienc:51,scope:[3,34,46,50],scotiabank:40,scotland:50,scrape:33,scratch:[22,49,51],screen:[1,5,15,16,34,40,49],script:[0,2,10,40,43,46,51],scroll:43,scrub:12,seamless:14,search:[1,23,34,35,47,49],sec:51,second:[3,7,9,12,13,22,29,36,43,46,47,49,51,52],secondari:12,secp256r1:40,secret:8,section:[8,20,21,26,27,28,29,36,40,41,47,51,54],securehash:[13,22,30,36,49,50,54],securerandom:40,see:[1,2,3,4,5,6,7,8,10,11,12,13,15,16,21,22,23,24,25,27,29,30,32,36,37,38,39,40,42,43,45,46,47,48,49,50,51,52],seed:12,seek:40,seen:[5,7,9,12,36,49],segment:10,select:[1,3,16,21,27,28,38,40,43,47,49,50,51],selector:3,selectschema:38,self:[10,28,29,40,43,52],selfissuecommand:29,selfissuest:29,selfissuetest:29,selfsignedtx:47,sell:[12,47,49,50,53],sellamount:47,sellerownerkei:12,sellersig:12,sellertradeinfo:12,semant:26,semi:[1,24,27],send:[1,5,12,13,21,24,26,28,30,31,33,35,36,40,41,43,46,47,49,51,52,54],sendandrec:[12,36],sender:[12,43,46],sending:36,sending_offer_and_receiving_partial_transaction:12,sending_sigs:12,sendrec:26,sendsignatur:12,sens:[7,36,49,50],sensit:[11,21,23,30,43,44],sent:[11,12,22,26,31,36,40,46,47,49],separ:[0,1,3,8,10,12,22,30,31,33,36,40,43,47,49,51],septemb:43,sequenc:[26,35,40,52],sequenti:[12,52],seri:[12,22],serial:[4,9,19,35,49],serialis:[4,5,9,12,17,19,36,40,49],seriou:41,serv:[9,10,35,51,52],server:[4,8,9,10,18,19,31,33],servic:[1,8,9],servicehub:[10,12,31,35,36,47,54],servicehubintern:40,serviceident:36,serviceinfo:[43,48,51,52],serviceload:[9,36],serviceplugin:[9,36],servicetyp:[8,35,43,54],servlet:51,session:[11,12,31,35,40],sessionid:11,set:[1,3,4,7,8,9,10,11,12],setlifecycl:3,setof:[3,12,13,43,46,47,48,50,51,52,54],setter:[38,49],settim:[12,22,36,47],settl:[3,6,13,25,46],settlement:[6,12],setup:[10,11,13,32,37],sever:[0,8,10,12,31,35,36,38,42,43,45,48,49,52,53],sha256:[22,30,49,50],sha256sum:33,sha:[23,33],shade:23,shadow:28,share:[0,1,6,7,12,17,22,23,24,25,35,36,40,44,46,47,49,51],shasum:33,she:49,shell:[29,51],ship:[1,23],shoot:44,shortcut:19,shorthand:53,shortli:0,should:[0,1,3,5,6,9,10,11,12,15,16,18,19,21,22,24,26,29,30,35,36,37,38,39,40,43,44,45,46,47,48,49,50,51,52,53],shoulder:5,shouldn:[12,23,30,47,49,51],shoutout:40,show:[1,14,23,32,34,35,40,43,49,50,51],shown:[1,4,8,12,13,22,32,47,51],shut:52,shutdown:[12,35],side:[4,11,12,15,25,26,32,36,43,44,46,47,51],sidebar:32,sidenot:45,sig:[36,40,49],sign:[7,8,12,13,17,18,19,21,22,23,24,26,27,30,31,35],signal:[17,47],signatori:47,signatur:[6,12,17,18,19,21],signaturesfromsel:12,signedtransact:[12,13,18,22],signer:[30,36,43,47,49,50,53],signfirsttx:13,signific:[0,36,40],significantli:[7,21,22,29,40,46],signing:[12,36],signingkei:36,signrequest:36,signwith:[12,13,22,46,47,49,54],signwithecdsa:[12,36],signwithourkei:12,silver:5,similar:[4,5,12,31,36,40,47,48,49,50],similarli:[27,38,47],simmvaluationdemo:[1,43],simpl:[0,4,5,6,7,8,9,12,13,15,16,18,19,22,27,29,33,35,36,40,42,43,46,47,48,49],simplecp:53,simplecpdoesntcompil:53,simplecpmov:53,simplecpmovefail:53,simplecpmovesuccess:53,simpleissuancewithtweak:53,simpleissuancewithtweaktopleveltx:53,simplenam:38,simpler:[14,23,50],simplest:[12,49],simpli:[1,5,10,12,13,22,29,35,38,40,42,49,51,53],simplic:47,simplif:40,simplifi:[3,5,6,23,25,35,42,47,49],simul:[1,8,18],simultan:[12,22,28,43,49],sinc:[49,50,51],singl:[3,4,5,6,9,12,13,18,22,23,28,29,32,33,35,36,40,42,43,45,46,47,49,50],singlemessagerecipi:31,singleownerst:54,singleton:[9,12,36,49,50],singletonserializeastoken:[9,36],site:[5,40,41],situat:[5,30,40,47],size:[1,5,7,12,33,36,49,50,51],skeleton:13,skip:[12,22,49,51],sl4j:33,slack:[15,18],sleep:[29,48],slf4j:12,slightli:[0,42,47,49],slip:41,slot:40,slow:[5,29],small:[3,4,11,12,23,24,25,33,36,40,44,46,49],smaller:[3,40,50],smallest:25,smart:[13,18,19,23,24,28,36,40,47],smooth:49,snapshot:[36,39,40,41,46,48],snapshots:51,snide:2,snippet:[12,51],socket:33,soft:28,softwar:12,sofu:40,sold:[12,22],sole:[21,31,40],solut:[12,27],solv:[12,16,36],solvenc:36,some:[0,1,4,5,6,9,11,12,13,16,18,19,21,22,23,24,25,26,29,30,33,34,35,36,38,40,43,45,47,48,49,50,51,52,53,54],somed:49,somehow:29,someon:[21,28,49,54],someth:[4,5,7,12,36,40,49],sometim:[0,12,17,22,23,33,47],someusernam:29,somewhat:[4,12,29,40,43],somewher:49,sonatyp:39,soon:[40,49],sort:[12,36,40],sound:[5,12,49],sourc:[1,7,10,11,12],sourcejar:10,sourcenotari:47,sourceset:33,sparingli:5,spawn:[9,52],speak:40,spec:40,special:[3,4,12,21,23,50,53],specif:[3,4,6,9,10,11,12,17,21,22,23,25,28,29,31,33,35,40,47,49,50,51,52],specifi:[1,2,3,4,5,6,8,10,12,17,19,21,22,23,29,30,37,38,40,45,46,47,49,50,51,52,53,54],speed:[12,14,51],spend:[12,13,19,21,26,28,34,35,44,45,47,49,52,53],spent:[23,28,49,53],sphere:23,sphinx:2,sphinx_rtd_them:2,spin:29,spirit:40,splash:[15,16],spline:22,split:[3,25,28,30,31,40,47,49,50],splittabl:49,splittablerandom:[29,48],spot:40,spread:[12,21],spreadsheet:36,spuriou:3,sql:[19,24,38,40,43,51],src:[8,12,35,46,51,52],ssd:1,ssh:[1,29],sshuser:29,ssl:[8,40],sslkeystor:[8,37,51],stabil:51,stabilis:41,stabl:[4,9,16,18,41,48,51],stack:[9,12,33,35,36],stage:[5,6,12,22,26,47,49],stai:[23,35,47,49,50],standalon:[24,32,36,40,48],standard:[3,5,9,10,12,15,17,21,22,25,28,32,33,35,40,43,45,47,48,49,50,51],standardis:[3,22,47],start:[0,1,4,5,7,8,9],startflow:[12,13,40,46,48,52],startflowdynam:[12,48],startflowpermiss:[48,52],startnod:[48,51,52],startprotocol:[8,45],startup:[8,9,33,40],startwebserv:40,startwith:48,state:[0,3,4,6,7,8,9],stateandref:[12,21,22,36,40,47,49,54],statehistori:54,statemachinemanag:[9,12],statemachinerunid:12,statement:[5,12,36,49],stateref:[11,22,25,30,38,47,54],statesoftyp:[47,49],staticservedir:9,statist:33,statu:[47,51],status:23,stdlib:51,stem:49,stereotyp:47,still:[11,12,16,21,32,36,40,43,47,49],stock:[23,28,36],stone:29,stood:38,stop:[5,12,35,51],stopnod:13,storag:[8,12,13,17,18,22,23],store:[8,9,10,12,13,16,21,22,28,33,35,37,40,42,43,47,49,51,54],stori:[5,40],straight:1,straightforward:[12,49],strain:29,straincpu:29,stream:[4,12,31,32,40,46,48,52],strength:15,stress:[5,29,40],strictli:[7,9],string:[0,8,12,22,29,36,38,43,48,49,51,54],strip:49,strong:14,strongli:15,stub:[40,43],stuck:18,studi:49,stuff:5,stx1:13,stx2:13,stx:[12,22,46],sub:[1,4,5],subclass:[6,12,22,38,49],subclaus:[40,50],subcompon:27,subdirectori:33,subflow:[9,12,21,35,36,47,54],subfold:[9,35],subgroup:23,subject:[8,10,17,27,31,43,51],submiss:36,submit:[1,5,12,21,29,31,37,40,43,51],subnet:51,subscrib:[4,31,40,46,48],subscript:1,subsequ:[17,28,37,40,47,49,52,53],subset:[6,30,40,50],substanc:51,substitut:[8,9,47],subsystem:[9,31],subtask:12,subtl:5,subtract:25,subtyp:[12,40],subvert:44,success:[3,28,31,43,47],successfulli:[23,43,45,46,48],successor:[11,14,21],succinct:5,sudo:[2,16],suffer:43,suffic:12,suffici:[22,31,36,40,41,43,47,48],suffix:51,suggest:[10,15,31,33,49],suggestinterestrateannouncementtimewindow:[11,36],suit:[40,46],suitabl:[11,31,35,36,41],suitablecashst:47,sukrit:40,sum:[29,43,47,48,49,51],sumcashbi:[12,49],summari:[1,18,22,40,41],sumorthrow:3,sumorzero:3,sun:5,superclass:[6,40],superior:5,superset:8,supertyp:49,suppli:[6,29,48],support:[3,4,5,6,7,8,10,12,14,15,18,19,21],supportedschema:38,suppos:[12,23,49],suppress:[5,40],suppresswarn:5,sure:[15,18,21,39,40,41,44,46,49,51,52],surfac:12,surround:5,surviv:12,suspend:10,suspens:[9,35],swap:1,swapping_signatures:12,swapsignatureswithsel:12,sync:[35,49,51],synchronis:[5,21,35,43],syntax:[0,14,49],system:[0,4,8,10,12,19,21,27,28,29,30,31,33,34,35,38,40,49,51],systemd:[29,45],systemus:31,tab:[1,5,10,15,16,40,43,51],tabl:[10,33,34,35,38,40,43,51],tableprefix:38,tackl:40,tag:[4,5,17,41,51],tag_nam:51,take:[1,3,5,7,9,11,12,13,19,22,23,24,26,29,30,33,36,37,40,41,43,44,47,49,50,51,53],taken:[1,9,49],talk:[13,50],tamper:12,target:[2,5,8,13,14,15,23,32,33,51],tasknam:15,tcp:[10,33,43,51],tear:[18,21,23,27],teardown:13,techniqu:[5,19,27,36,51],tell:[2,12,48,51],templat:[0,8],tempor:23,temporari:[10,12,31],temporarili:[12,41],tempt:[44,49],ten:49,tend:17,tenor:[7,22,33,36],term:[1,3,6,8,11,17,22,25,27,31,43,45,50],termin:[7,10,12,33,35,40,43,48,51],test:[0,1,2,3,6,8,10,12],test_tx_time:53,testcompil:51,testnam:29,testnet:[8,10,37,40,45,51],testpassword:52,testtimelock:49,testuser:52,texa:25,text:[1,5,33,40,51,53],textual:28,than:[3,4,5,10,12,15,16,21,22,23,27,31,32,33,36,37,40,47,49,51,53],thank:40,thei:[0,1,3,4,5,6,7,9,10,11,12,16,17,18,21,23,24,25,26,27,29,30,31,32,33,35,36,38,40,41,43,44,45,46,47,49,50,51],theirsign:47,theirstat:47,them:[0,3,4,5,7,8,9,11,12,13,16,18,19,21,22,23,29,30,31,33,35,36,38,40,41,43,45,46,47,48,49],theme:[40,44],themselv:[4,12,13,22,29,31,32,35,36,43,44,48,49,50,51],therefor:[0,4,9,10,12,17,19,35,41,43,44,47,49],thi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54],thin:31,thing:[0,5,11,12,13,18,19,22,23,25,29,33,36,40,44,46,48],think:[5,12,20,31,44,49],third:[24,30,40,43,51],thisstateref:11,thoma:40,thorough:12,those:[0,1,4,11,12,21,23,24,33,36,43,44,49,50,51],though:[12,30,33,36,49],thought:[14,23,24],threadsaf:5,three:[1,3,10,12,23,30,34,43,49,50,52],threshold:[17,22,33,35,40],through:[3,4,7,9,11,12,23,24,25,31,32,33,35,36,40,47,49,51,53],throughout:51,throughput:21,thrown:[4,12,40,44,49],thu:[3,5,8,11,12,21,22,23,27,28,33,35,36,40,47,49,50],tick:51,ticket:12,tidi:13,tighten:49,tightli:12,time:[0,1,5,6,7,10,11,12,13,15,16,17,18,21,22,23,24,32,33,35,36,37,38,40,43,46,47],timelin:49,timem:49,timeout:4,timestamp:[5,12,18,19],titl:16,tls1:35,tls:[8,24,27,31,40],toblock:46,todo:[5,12,36,46,49],togeth:[1,3,6,9,23,28,30,40,49,50,51],toinstant:51,token:[3,9,12,25,47,50],tokeypair:36,told:5,toledgertransact:[22,47],toler:[11,21],tolist:47,too:[5,12,15,40,47,49],took:[12,50],tool:[0,12,14,15,17,23,24,29,31,32,33,34,38,40,43,46,51],top:[1,3,5,9,12,16,29,31,34,40,43,48,50,51,53],topic:[21,31,49],topicsess:[31,40],topolog:34,topriv:12,torn:40,toset:47,tosignedtransact:[12,13,22,46,47,49,54],tostateandref:47,tostr:[5,12,38,49],total:[0,22,29,33,47],totypedarrai:47,touch:[15,18],toward:[40,41],towiretransact:[22,30,36],trace:[12,33,50],track:11,tracker:[12,26,40],trade:[1,7],tradeapprovalcontract:47,tradeoff:[5,36,40],trader:[18,24,34,40],traderequest:12,traffic:[8,32],transact:[1,3,6,11,12,13,17,18,21],transactionbuild:[12,22,36,40,46,47,49,54],transactionforcontract:[3,49,50],transactionforverif:49,transactionst:[21,22,30,40],transactionstorag:35,transactiontyp:[12,40,46,47,54],transactionverificationexcept:53,transfer:[28,43,44,47,49,53,54],transferedfundsoutput:47,transform:26,transit:[22,23,25,27,35,44,47,49],translat:35,transmit:[18,40],transport:[0,8,10,51],travel:49,treat:[4,10,12,31,40,44,49],treatment:12,tree:[12,17,18,22,23,27],tri:[0,40,49],tricki:12,trigger:[3,6,11,12,29,35,36,43,50],trivial:[5,46],troubl:16,troubleshoot:15,trust:[6,8,23,27,35,37,44,47],trustpass:[8,45],truststor:[8,35,40,51],truststorepassword:[8,45],truth:12,tune:18,tunnel:45,tupl:5,ture:23,turn:[3,12,25,49,50,53],tutori:[0,4,6,12,14,18,19,23,32,40,45,46],tweak:[29,40,53],twice:53,two:[1,3,5,6,7,10,11],twopartydealflow:11,twopartytradeflow:[12,26],txb:22,txhash:[12,48,49,54],txid:47,txstate:36,txt:[33,51],type:1,typenam:12,typeonlycommanddata:[49,50],typetobui:12,typic:[0,1,9,11,12,22,25,31,33,35,36,38,44,46,47,49],ugli:12,ultim:[35,47],ultimat:33,unaccept:12,unacceptablepriceexcept:12,unavoid:12,uncertain:43,unchang:40,unclutt:12,unconfirm:47,unconsum:[28,35,38],undelet:[15,16],under:[2,10,22,29,35,40,41,43,48,49,50,53],undergo:40,underli:[6,7,12,22,25,27,40],underpin:20,underscor:5,understand:[0,32,33,36,47,49,50,51],unencrypt:8,unexpect:[12,44,51],unfamiliar:15,unfinish:12,unfortun:[12,33,44,49],unicredit:40,unifi:40,uniform:11,unilater:47,unindex:16,union:47,uniqu:[11,12,21,22,23,24,25,31,35,36,37,39,40,46],uniqueidentifi:18,uniquenessprovid:35,unit:[0,3,12,13,21,22,28,29,31,35,36,40,47,49,51,53],univers:40,unknow:21,unknown:[22,47],unknownfix:36,unless:[5,12,36,41,49,51],unlik:[35,49],unlike:[4,6],unlink:16,unlock:8,unmerg:51,unpack:[10,35,49],unpars:23,unprocess:[3,50],unread:12,unrecognis:49,unrel:[49,50,51],unschedul:11,unserialis:12,unset:7,unspecifi:52,unspent:[17,23,28],unstabl:15,unstarted:12,unsubscrib:4,unsubscript:4,unsupportedoperationexcept:[4,49],until:[4,7,11,12,13,21,35,36,40,41,43,45,51,53],untrust:12,untrustworthi:27,untrustworthydata:[12,40,44],unverifiedtransact:53,unwrap:[12,36,40,47],upcom:[11,40],updat:[4,9,10,12,15,16,23,28,29,31,35,40,41,47,48,49,51,52],update:52,upgrad:[12,16,26,38,40,49],upgrade:40,uphold:49,upload:18,uploadattach:46,uploadrat:43,upon:[7,10,12,16,17,24,28,35,43,47,49,51],upward:41,urandom:29,url:[8,10,15,33,37,40,43,45,51],usa:34,usabl:[0,40,41,49],usag:[0,5,12,18],usage:[3,48],usb:51,usd:[29,34,48],use:[1,5,6,34,43,51],usehttps:[8,45],useless:49,user1:[8,34,43,45,51],usernam:[1,4,8,27,31,33,34,39,43,48],using:3,usr:2,usual:[5,10,16,23,28,43,47,49,50,51],usualli:[3,41,50,51],utc:11,util:[8,10,13,18,21,22,33,35],utilis:[32,48],utiliti:37,utxo:[11,17,23],uuid:[22,40],vagu:5,val:[3,5,11,12,13,21,22,29,30,36,38,46,47,48,49,50,51,52,53,54],valid:[1,4,7,8,10,12,13,17,18],validatedtransact:13,validfrom:49,valu:[4,5,6,7,8,9,12,21,28,30,34,35,36,40,42,43,47,49,50,51,53],valuabl:36,valueof:48,vanilla:[6,7],vari:18,variabl:[5,7,10,12,39,49],variant:[35,49],variou:[5,9,12,23,31,33,35,40,43,44,49,51],vault:[9,12,18,20,24,26],vaultandupdat:[48,52],vaultservic:[12,35,47],vaultsselfissu:29,vega:40,vendor:[19,33],verbos:49,verdict:47,veri:[5,6,8,12,17,33,35,36,43,44,49,53],verif:[0,3,6,8,17,19],verifi:[3,12,13,17,18,21,22,23,24,25,30,35,36,40,43,46,47],verifiedtransact:[46,48],verifyclaus:[3,50],verifying:12,verifylifecycl:3,verifypropos:40,verifysignatur:[12,47],versa:[6,7,12,23,25],versionnumb:51,versu:12,vertic:5,vet:44,vice:[6,7,12,23,25],video:40,virtual:[1,9,17,23,44],visibl:[1,18,23,27,30,34,35,43],vision:[18,51],visit:[1,8],visual:[34,40,43],visualis:[31,32,48,51],visualvm:33,vital:12,vpn:45,wai:[3,4,5,10,11,12,15,16,17,21,23,29,30,31,33,34,36,38,40,43,45,47,49,51,53],wait:[11,12,13,16,29,35,36,40,43,46,51,52],waitforallnodestofinish:[48,51],wake:40,walk:23,wallet:[11,12,17,28,40,49],want:[0,3,4,5,12,15,18,22,29,30,33,36,40,43,44,49,50,51,52,53,54],warn:4,watch:[18,44,46],weak:[22,36],wear:41,web:[1,8,9,10,18,19,27,33],webaddress:[8,45],webapi:9,webapp:40,webinar:18,webport:[10,51],webserv:[8,40,45],websit:[1,15,16],week:14,weekend:7,weight:22,well:[0,2,5,7,9,11,12,17,19,23,24,30,33,35,38,40,46,47,49,50,51],went:5,were:[3,5,12,35,36,43,47,49,51],west:25,what:[1,5,6,7,11,12,13,18],whatev:[5,12,25,32,35,36,47],when:[0,1,3,4,5,6,7,8,9,10,11,12,13,15,16,21,22,23,25,26,29,31,32,33,34,35,36,37,38,40,43,44,46,47,48,49,50,51,53],whenev:[5,15],where:[1,4,5,10,12,16,17,18,21,22,23,24,25,27,28,29,30,32,33,34,35,36,38,40,41,43,46,47],wherea:[7,40,43],wherebi:[1,50],wherev:33,whether:[3,4,6,12,21,22,26,29,35,36,40,45,49,50],which:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,35,36,38,40,41,43,45,46,47,48,49,50,51,52,53,54],whilst:[12,32,35,36,40,44,49],white:[9,18,20,21,23,26,27,28,40,51],whitelist:[6,9,10,11,12,48],who:[5,8,12,14,21,22,23,27,31,36,40,43,49,51],whole:[30,35,42,53],whom:6,whose:[6,21,33],why:[5,14,18],wide:[4,5,30],widescreen:5,widespread:5,widget:[34,51],width:5,wiki:[49,50],wikipedia:[49,50],wipe:16,wiretransact:[12,18,22,30],wish:[1,10,12,25,36,38,39,40,43,47,49,51],wit:45,withattach:13,within:[2,5,8,9,13,14,15,17,18,21,23,26,32,33,34],withitem:[22,47,49],withkei:[12,47],withnewown:[12,49],without:[0,5,12,17,19,22,23,26,27,31,32,35,40,42,43,44,47,49,50,51,54],withoutissu:[12,49],withoutown:[49,50],withowner:[49,53],won:[12,16,31,34,36,40,48,49,51,52,53],word:[5,8,21],work:0,worker:5,workflow:[1,9,23,26,47],workflowtransactionbuildtutori:47,workflowtransactionbuildtutorialtest:47,working:36,workspac:[8,9,10,35,37,47],world:[8,12,23,32,34,36,43,45,47,49,53],worn:49,worri:[5,12,49,51],worth:[5,44,49,50,51],worthless:36,would:[0,4,5,6,7,9,10,12,17,19,22,23,32,33,36,40,43,44,46,47,49,50,51,52,54],wouldn:36,wow:51,wrap:[3,5,12,22,25,31,33,35,40,44,49,50],wrapper:[0,5,12,15,21,48,51],write:[0,3,5,9],written:[2,3,4,7,14,15,23,26,36,40,47,49,51,52],wrong:[4,5,12,53],wtx:[12,30,36,46,47],www:2,xml:33,xmx1024m:33,xsrf:51,xss:51,xterm:10,year:[7,12],yellow:26,yet:[5,7,12,17,19,22,28,32,34,37,40,47,52],yield:[23,33],york:10,you:[0,1,2,3,4,5,10,11,12,13,14,15,16,18,19,22,25,29,30,31,32,33,34,35,36,37,38,39,40,42,43,44,45,48,49,50,51,52,53],your:[1,4,5,9],yourself:[11,18,22,44,50,51],zero:[3,17,23,24,36,49,51],zip:[23,33,43,46],zone:11,zoneddatetim:11,zoom:40},titles:["CLI vs IDE","Working with the Corda Demo on Azure Marketplace","Building the documentation","Clauses","Client RPC","Code style guide","Contract catalogue","Interest rate swaps","Node configuration","The Corda plugin framework","CorDapp basics","Event scheduling","Writing flows","Writing flow tests","Further notes on Kotlin","Getting set up","Troubleshooting","Glossary","Welcome to the Corda documentation!","What’s included?","Overview","Consensus and notaries","Core types","Data model","Corda ecosystem","Financial model","Flow framework","Security model","Vault","Load testing","Transaction tear-offs","Networking and messaging","Network Simulator","Node administration","Node Explorer","Brief introduction to the node services","Writing oracle services","Network permissioning","Persistence","Publishing Corda","Release notes","Release process","Running a notary service","Running the demos","Secure coding guidelines","What is a corda network?","Using attachments","Building transactions","Client RPC API tutorial","Writing a contract","Writing a contract using clauses","The CorDapp template","Integration testing","Writing a contract test","Using a notary service"],titleterms:{"class":[4,36,48,49,50],"function":[12,49],"import":16,"try":16,about:16,abstractconserveamount:3,abstractissu:3,access:33,across:51,adding:49,administr:33,advanc:1,again:16,against:10,agreement:43,aka:43,allof:3,amount:25,anyof:3,api:[48,49],app:10,approach:36,artemismessagingserv:35,assert:36,assertion:5,asset:49,assign:54,attach:[33,46],attachment:[43,46],azure:1,background:[43,51],bank:43,basic:[3,10,36,47],befor:39,bind:36,brief:35,build:[2,10,37,47,51],buyer:12,cash:6,catalogu:6,central:39,certif:[37,45],chain:53,chang:21,check:49,claus:[3,49,50],cli:0,client:[4,36,48,51],cluster:29,code:[5,15,44,49],command:[0,16,47,49,51],comment:5,commerci:[6,49,50],commit:47,commod:6,common:16,compil:5,complain:16,complet:47,composit:[3,22],compositekei:22,configur:[8,16,29,45,51],connect:45,consensu:21,consol:51,construct:49,content:18,continu:36,contract:[6,23,44,49,50,53],corda:[1,9,10,15,18,24,30,39,43,45],cordapp:[10,15,24,36,48,51],cordform:10,core:[22,36],creat:7,cryptographi:22,cut:41,data:[23,30,36],databas:33,date:22,dbcheckpointstorag:35,dbtransactionmappingstorag:35,dbtransactionstorag:35,debug:[0,10,50,51],demo:[1,34,43,46],deploi:[1,51],detail:7,document:[2,18],download:33,e2etestkeymanagementservic:35,ecosystem:24,encumbranc:49,error:[4,5],event:[11,35],exampl:[8,11,30,51],exception:12,execut:43,explorer:34,extend:51,featur:12,field:8,file:[8,16,51],filteron:3,financi:25,firstof:3,fix:33,flow:[12,13,26,35,36,44],format:8,found:16,framework:[9,26,35],frequent:0,from:[36,48,51],further:14,futur:[4,12],gather:47,gener:[5,47,49],get:[15,39,51],git:15,glossari:17,gradl:[0,10,15,16,51],group:[49,50],groupclauseverifi:3,guid:5,guidelin:44,handl:[4,12],happen:[43,49],hibernateobserv:35,hide:[30,36],how:[11,29,49,50],http:51,ide:[0,15],idea:[15,16],ident:35,implement:[11,12,35,36],includ:19,individu:29,initial:43,inmemoryidentityservic:35,inmemorynetworkmapcach:35,inmemorystatemachinerecordedtransactionmappingstorag:35,inmemoryuniquenessprovid:35,input:47,install:10,instanc:7,integrat:52,intellij:[0,51],interact:51,interest:[6,7,33],interfac:[32,34],introduct:[11,12,35,36,43,47],irs:[1,43],issu:16,java:16,javafx:16,jcenter:39,jdk:16,jvm:15,kei:[22,35],kotlin:[14,15,16],kryo:[4,48],lack:16,length:5,lifecycl:[7,22,47],line:[0,5,51],load:29,local:[39,51],locat:8,log:[1,33,45],mac:0,machin:51,make:[16,49],manag:35,map:[31,38],margin:43,marketplac:1,math:22,maven:39,memori:33,merkl:30,messag:[31,35],mileston:[16,40,51],miss:16,model:[21,23,25,27],modul:16,monitor:33,multi:[22,49],multipl:21,name:5,namedbyhash:22,network:[31,32,35,36,37,45],networkmapservic:35,next:[1,15],node:[8,10,33,34,35,45,51],nodeattachmentservic:35,nodemessagingcli:35,nodeschedulerservic:35,nodeschemaservic:35,nodevaultservic:35,non:[16,49],notari:[21,35,42,43,54],notaris:54,notaryservic:35,note:[14,40],notion:43,nozerosizedoutput:3,object:38,obligat:6,observabl:4,off:30,opene:[15,51],oracl:[16,36],orient:49,other:[3,16],outdat:16,output:47,overview:[20,23],own:45,pai:36,paper:[6,49,50],parti:[12,22,49],partial:47,particular:49,per:36,permiss:37,persist:[10,35,38],persistentkeymanagementservic:35,persistentnetworkmapservic:35,persistentuniquenessprovid:35,plai:36,pleas:16,plugin:[9,10,16,36],portfolio:43,pre:1,present:16,process:41,progress:12,project:[16,51],properti:5,protocol:4,provid:[36,51],publish:39,put:49,queri:36,queue:31,raft:43,raftuniquenessprovid:35,raftvalidatingnotaryservic:35,rate:[6,7,33],refer:[16,22],regist:[4,48],relat:[16,35,38],releas:[16,40,41,51],represent:23,request:37,requir:[2,15,49],requisit:1,rpc:[4,48,51],run:[16,29,34,37,42,43,51],safeti:4,schedul:[11,35],schema:38,sdk:16,secur:[4,27,31,44,48],seller:12,server:35,servic:[10,31,35,36,42,51,54],set:[15,45],setup:39,sign:[36,37],signatur:22,signedtransact:47,simm:[1,43],simpl:50,simplenotaryservic:35,simul:32,singl:53,smart:49,snapshot:51,softwar:15,sourc:[15,16],space:5,start:[10,12,45,49,51],state:[10,22,23,25,49],statemachinemanag:35,step:[1,15,41,43],storag:35,storageserviceimpl:35,structur:[3,51],style:5,sub:[12,36],summari:50,support:22,suspend:12,swap:[6,7],task:0,tear:30,technic:7,templat:[10,51],test:[13,29,49,52,53],them:50,theori:12,thing:49,thread:[4,5],time:49,timestamp:21,track:12,trade:12,trader:43,transact:[22,23,30,36,47,49,53,54],transmit:49,tree:30,troubleshoot:16,tune:33,tutori:48,two:[12,36],type:[3,22,31],unabl:16,uniqueidentifi:22,unix:0,unresolv:16,upload:33,usag:[30,33],used:0,user:1,using:[10,36,46,49,51,54],util:37,valid:[21,23],validatingnotaryservic:35,valuat:1,vari:36,vault:[28,35],verif:22,verifi:49,version:[4,12],via:[0,36,51],view:[1,10],visibl:47,warn:5,web:[35,51],welcom:18,what:[19,32,43,45,50],where:49,why:50,window:0,wire:4,wiretransact:47,within:35,work:[1,50,51],write:[12,13,29,36,49,50,53],xterm:16,your:[10,12,33,45,48,49,51]}}) \ No newline at end of file +Search.setIndex({envversion:49,filenames:["CLI-vs-IDE","azure-vm","building-the-docs","clauses","clientrpc","codestyle","contract-catalogue","contract-irs","corda-configuration-file","corda-plugins","creating-a-cordapp","event-scheduling","flow-state-machines","flow-testing","further-notes-on-kotlin","getting-set-up","getting-set-up-fault-finding","glossary","index","inthebox","key-concepts","key-concepts-consensus-notaries","key-concepts-core-types","key-concepts-data-model","key-concepts-ecosystem","key-concepts-financial-model","key-concepts-flow-framework","key-concepts-security-model","key-concepts-vault","loadtesting","merkle-trees","messaging","network-simulator","node-administration","node-explorer","node-services","oracles","permissioning","persistence","publishing-corda","release-notes","release-process","running-a-notary","running-the-demos","secure-coding-guidelines","setting-up-a-corda-network","tutorial-attachments","tutorial-building-transactions","tutorial-clientrpc-api","tutorial-contract","tutorial-contract-clauses","tutorial-cordapp","tutorial-integration-testing","tutorial-test-dsl","using-a-notary"],objects:{},objnames:{},objtypes:{},terms:{"00z":49,"0_xx":16,"10000l":29,"100l":52,"14gb":1,"17t16":49,"1mb":12,"200mb":33,"3rd":43,"5000l":29,"500mb":33,"5xxx":0,"abstract":[3,9,12,35,36,38,40,49,50,51],"boolean":[13,29,30,36,40,48,49,50],"break":[12,16,36,41,47],"byte":[5,12,23,30,36,40,53],"case":[3,5,9,10,12,13,15,21,22,23,29,31,36,38,40,43,46,49,50,51],"catch":[5,12,40,44],"class":[],"default":[1,4,5,6,8,9,10,12,15,16,17,22,23,29,32,33,34,35,37,40,43,44,45,49,51],"enum":[40,48],"export":[12,33,38],"fa\u00e7ad":33,"final":[7,9,12,13,21,30,36,40,43,45,47,48,49,50,52,53],"float":[6,7,11],"function":[],"import":[],"instanceof":[49,50],"int":[5,29,38,49,54],"long":[5,6,9,11,28,29,38,47,49,50,51],"new":[0,1,5,7,8,9,10,12,14,18,21,22,23,24,31,32,33,34,35,37,39,40,41,43,46,47,48,49,50,51,52,53,54],"null":[8,11,13,29,30,36,38,46,49,50,53,54],"public":[1,5,8,10,12,17,19,22,23,31,33,35,37,40,43,45,49,50,51,53],"return":[3,4,5,7,9,11,12,13,21,29,30,33,35,36,38,40,44,46,47,48,49,50,51,52,53,54],"short":[3,11,41,43],"static":[9,10,12,28,35,36,43,49,51,53],"super":[3,5,50],"switch":[12,40,49],"throw":[3,4,5,12,26,29,30,36,40,47,49,50,54],"transient":12,"true":[8,13,17,21,24,29,30,36,37,45,48,49,50,51],"try":[],"var":[13,38,47,48],"void":[12,49,50,53],"while":[15,22,32,43,48,53],___:51,____:51,______:51,_________:51,_foo:5,_unless_:39,abil:[23,28,32,40],abl:[1,8,10,12,21,27,30,31,33,34,35,36,37,40,43,49,51,54],abort:[21,36,47],about:[],abov:[1,3,5,7,12,23,26,30,31,33,36,43,45,48,49,50,51,52,53],above:30,absent:[3,8],absolut:[8,21],abstractnod:[9,35],abstractstatereplacementprotocol:40,accept:[5,6,12,15,17,21,23,36,40,43,47,49],acceptablepric:12,acceptsfileupload:36,access:[],accid:12,accident:[5,44,47],accompani:[5,49],accord:[3,23,47],accordingli:[45,50],account:[1,22,23,29,39,40,46],accrual:7,accsess:30,accur:[21,43],achiev:[21,22,23,24,30],ack:40,acknowledg:35,acquir:43,acronym:43,across:[],act:[3,8,12,21,35,36,40,43],action:[3,11,23,29,35,36,42,43,47,49,52],activ:[7,8,9,11,15,22,24,26,27,29,32,35,38,40,43,47,49,51],actor:[5,12],actual:[7,12,21,29,35,36,43,44,46,49,50,51,53,54],adapt:[5,12,36],add:[3,5,10,12,17,29,30,31,33,35,36,42,44,46,47,48,49,51,52,53,54],addattach:[13,46],addcommand:[12,36,47,49,54],added:40,addedg:48,addfix:36,adding:[],addinputst:[12,49],addit:[0,5,8,10,21,22,23,25,28,31,35,38,40,47,48,49,51],addition:[12,14,15,16,27,30,38,41,43,51],addmessagehandl:40,addnod:48,addoutputst:[12,49,54],address:[0,1,8,10,12,24,31,34,35,40,45,49,51],addsignatureuncheck:36,adequ:3,adjust:[1,5,7,41,49],admin:[34,35,37,39],administ:1,administr:[],admiss:[24,27],advertis:[4,8,31,35,40,42,43,49,52,54],advertisedservic:[10,43,48,51,52],advic:41,advis:[0,36],aesthet:43,affect:[16,36,45],affinityexecutor:5,afraid:5,after:[0,3,6,7,9,10,11,12,13,14,17,18,21,29,30,35,36,43,47,49,51,53],again:[],against:[],agent:[24,29,33,35],agentlib:10,aggreg:[40,43,49,50],agil:21,agre:[1,7,11,12,17,23,43,44,47,51],agree:[7,43],agreement:[],ahead:[12,49],aid:[23,40,47,51],aim:[5,29],aka:[],albeit:40,albertsen:40,alert:16,algorithm:[19,21,22,23,27,40,49],alia:[8,39],alic:[52,53],alice:[17,22,34,48,49,52,53,54],alice_key:46,alice_pubkey:53,alicecli:52,aliceparti:54,aliceproxi:52,alicevaultupd:52,align:[16,40,47,51],aliv:[12,43],all:[1,2,3,4,5,6,7,8,9,10,12,13,14,15,17,21,22,23,24,26,27,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,47,49,50,51,52,54],allaslist:52,allcomposit:40,allevi:21,alloc:43,allow:[0,4,5,6,7,8,9,10,11,12,17,21,22,24,29,31,34,35,36,37,38,39,40,43,44,47,48,49,51,52,53],allpartysignedtx:47,almost:49,along:[1,3,12,13,21,24,36,49,51,54],alongsid:49,alreadi:[5,10,11,12,21,27,30,36,37,39,40,43,46,47,49,50,51,53,54],alright:12,also:[0,3,4,5,6,7,8,9,10,11,12,13,15,16,17,18,21,22,23,25,28,29,30,31,32,33,34,35,36,37,38,40,43,46,47,49,50,51,52,53,54],alter:[8,12,33,47],altern:[1,2,5,8,22,31,32,33,34,49,51,52],although:[7,8,12,23,34,35,40,46,49,51],alwai:[5,11,12,16,22,23,33,38,45,47,49,51],amend:47,aml:24,among:51,amongst:[0,27],amount:[],amountrequir:47,amqp:[24,31,40],analysi:3,analyt:43,ancestor:23,ani:[0,1,3,4,5,6,7,9,11,12,13,15,17,21,22,23,24,25,27,28,31,33,34,35,36,37,38,40,41,42,43,44,45,46,47,48,49,50,51,52,54],annot:[4,5,9,12,31,38],announc:[36,41],annual:1,anonym:[35,36],anonymis:[35,40],anoth:[1,4,5,10,12,16,17,21,23,24,28,31,33,34,35,36,37,40,43,46,49,50,51,53,54],another:47,answer:[5,36],answere:50,anti:51,anticip:5,any:[3,4,6,11,30,33,35,36,39,43,47,50],anycomposit:40,anycompost:50,anyon:[21,31,49],anyth:[12,13,22,23,25,44,49,50,51],anywher:[36,40,49],apach:31,apart:[21,40,47],api:[],app:[],appear:[16,36,43,49,51],append:[8,23,33],appendix:18,appli:[5,6,7,10,27,29,34,47,49],applic:[9,10,17,23,24,25,31,35,36,40,43,44,49,51],applicat:[15,17],applyfix:7,appoint:21,approach:[],appropri:[1,5,28,31,35,38,40,42,47,51],approv:[11,12,37,39,47],approxim:21,april:40,apt:16,arbitrari:[3,5,12,22,23,36,44,48],arbitrarili:[23,52],architectur:[4,18,36],archiv:28,area:[0,27,38],aren:[4,11,19,49],arg:[10,40,48,51],argument:[4,5,9,10,12,23,29,48,49],aris:15,around:[12,13,21,22,25,30,40,41,47,48,49,51,52],arrai:[48,51],arrang:[12,24],arraylist:36,arriv:[12,17,36,52],arrow:[7,51],art:25,artemi:[10,17,31,51],artemisaddress:[8,45,51],artemismq:[8,35],artemisport:[10,51],articl:[11,12,21,36,40,49],artifact:10,artifactid:51,ascertain:[43,51],ask:[5,12,27,36,39,49],aspect:[12,23],assembl:[0,3,30,49],assemblesharedtx:12,assert:[],assertequ:[13,46,52],asset:[],assetforsal:12,assetmismatchexcept:12,assettosel:12,assettypenam:12,assign:[],assist:[11,12,22,26,27,38],associ:[3,11,21,22,23,25,31,36,38,40,45,47,48,49,51],assum:[12,21,23,27,29,30,31,36,39,44,47,49,54],assume:[12,30,36,51],assumpt:[12,27],assur:43,asynchron:[26,29,47],atom:[12,21,40,43,49],attach:[],attachment:[],attachmentdemo:46,attachmentexist:46,attachmentstorag:35,attack:[21,40,44],attch:[],attempt:[21,31,44],attent:[12,51],attest:[21,23,27],attribut:[5,28],audit:[28,47],augment:23,authent:[1,4,21,24,27,31,35,40,48],authenticatedobject:[3,22,49,50],author:[5,21,24,27,35,41,54],authoris:[8,12,22,27,35,48],authorit:28,auto:[5,49],autoclos:4,autom:[11,24,49],automat:[0,2,4,8,10,11,12,21,23,27,28,31,32,34,35,36,37,38,40,46,49,51,54],auxiliari:35,avail:[0,1,2,7,8,9,10,11,12,15,18,21,28,31,32,33,35,36,39,40,41,43,44,48,49,51,54],avoid:[4,5,12,36,38],awai:[4,48],await:[10,43,47],awaiting_proposal:12,awar:[4,5,11,12,35,40,49,50],awg:41,awkward:[5,12],axi:7,back:[1,4,5,9,12,24,26,28,35,36,40,43,44,47,49,52],backend:40,background:[],backoff:31,backport:41,backward:[12,41],bad:[5,12,49,53],balanc:[3,6,21,23,28,34,40,47,49],banana:22,bananast:22,banco:40,band:12,bandwidth:5,banish:17,bank:[],bankrupt:49,bankruptci:[21,23,36,43],banner:[1,45],bar:[1,16],bare:51,barreca:40,barrel:[25,40],base:[5,7,8,10,11,12,17,18,21,22,25,27,29,31,33,35,36,37,40,43,45,48,49,51,54],basedir:[8,45],basedirectori:48,basi:[1,7,11,15,24,32,33,35,51],basic:[],bat:[0,10,15,32,34,37,51],batch:[29,51],bbva:40,bear:12,becaus:[5,11,12,16,21,22,33,35,36,47,49,50,51,53,54],becom:[5,7,11,12,18,22,36,41,47,51],been:[4,7,8,12,15,16,17,21,22,27,31,36,37,40,41,43,47,49,50,51,54],befor:[],beforesign:36,begin:[1,5,35,47,49,51],behalf:43,behav:49,behaviour:[3,6,8,12,21,29,33,47,50,51,53],behind:[12,17,20,31,49],believ:40,belong:[30,45],below:[1,5,7,8,10,11,12,15,22,30,31,35,36,43,47,49,51],beneath:17,beneficiari:6,benefit:[12,21],best:[5,15,47],bet:36,beta:43,better:[5,12,14,40,49],between:[1,5,7,11,12,17,21,23,25,26,31,32,35,36,37,38,40,41,44,47,48,49,51],beyond:[23,25,27,47],bft:[27,40],big:[5,12,40,43,49],bigdecim:[25,36],bilater:[6,7,40],bill:49,bin:[43,48,51],binari:[30,35,36,39,48],bind:[],bintrai:39,bintrayupload:39,bit:[22,40,46,49,51,53,54],bitcoin:[12,17,23,40,43,49],bitcoinj:12,black:30,blah:5,blank:[5,33,34,37,49],block:[3,4,5,10,12,21,23,26,35,36,40,43,44,46,47,51,52],blockchain:[12,19,30,49],bloom:5,bloomfilt:5,blotter:43,blue:[7,30],bob:[17,22,34,49,52,53],bob_pubkey:53,bobclient:52,bobproxi:52,bobvaultupd:52,bodi:[5,43],boil:29,boilerpl:10,bond:[49,50],bone:51,bookkeep:49,bookmark:43,boost:19,boot:51,bootstrap:[8,10,51],bore:49,borrow:53,boss:51,both:[0,6,7,12,13,14,17,21,25,26,28,29,32,35,36,38,40,43,44,46,47,48,49,50,51],bottom:[16,23],bounc:13,bound:[12,21,23,40,45,47,49],box:[1,39],branch:[15,16,18,30,40,41,51],branch_nam:51,brand:40,breadth:23,breakdown:28,breakpoint:51,breviti:[0,30,50],bridg:[31,35],brief:[],briefli:[31,36,51],bring:[29,40,43,46,52],broadcast:[1,23,24,26,27,47,49,51,54],broadcasttransactionflow:54,broader:45,broke:5,broken:[40,51],broker:[8,31,35,40,51],brought:47,brows:[33,43],browser:[1,8,43,51],bubbl:15,bucket:22,buffer:[4,33],bug:[5,15,16,40,41],bugfix:41,bui:1,build:[],buildcertsigningrequestutilityjar:37,buildcordajar:[8,37,45],builder:[12,13,22,40,44,46,47,54],buildfilteredtransact:[30,36,47],buildmerkletransact:[],buildscript:[10,17,51],buildsrc:51,buildtradepropos:47,built:[0,8,12,18,30,40,44,46,49,51],bulk:47,bullet:5,bunch:51,bundl:[8,9,10,16,23,33,35],busi:[11,12,17,19,22,23,24,26,36,38,40,47,49],businesscalendar:22,button:[1,39,43,51],bytearrai:38,bytecod:[12,23,49],cach:[31,46,51,54],calcul:[7,11,12,21,22,30,40,43,44,49],calculateoursignatur:12,calendar:[7,22,36],call:[0,3,4,5,7,9,10,12,14,21,22,23,24,25,26,33,35,36,40,41,43,44,46,47,48,49,53,54],callback:[4,5,12,35,40],caller:[36,47,49,54],came:12,camel:5,can:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43,44,45,46,47,48,49,50,51,52,53,54],cancel:4,candid:38,cannot:[3,6,17,21,23,25,32,36,40,44,47,49,51,54],capabl:[24,49],capit:5,capitan:2,capsul:32,capsule_cache_dir:10,captur:[9,11,47],cardon:40,care:[5,9,12,13,21,36,44,47,53],carefulli:14,carri:[0,25,35,47],cash:[],cash_stat:38,cashcommand:[29,48,52],cashflow:[48,52],cashkt:49,cashprotocol:[8,45],cashschema:38,cashschemav1:38,cashsigningpubkei:12,cashstat:47,cast:4,catastroph:43,categori:45,caught:[4,12],caus:[5,15,16,17,33,36,43,49,51],cbc:29,ccy_cod:38,cent:25,center:49,central:[],centralis:24,ceo:22,cer:8,certain:[3,5,9,40,43,47,49],certainli:10,certainti:21,certif:[],certificatesigningservic:[8,37,45],certsigningrequestutil:[37,45],chain:[],chaincommercialpap:53,chaincommercialpaperdoublespend:53,chaincommercialpapertweak:53,chanc:[5,12],chang:[],changenotari:21,channel:12,charact:[5,8],characterist:17,charg:36,charli:22,chart:50,check:[],checkabl:[36,40],checkfixisnearexpect:36,checknotnul:49,checkout:[15,16,51],checkpoint:[9,26,35,36,40],checksignatur:36,checkstat:49,checksufficientsignatur:[12,22,47,54],checkwithfun:[30,36],child:[0,12,22],childprogresstrack:12,children:[12,22],childrenfor:12,choic:[1,5,21,49,51],choos:[0,1,15,16,21,34,40,49,54],choreographi:[17,24],chosen:[0,12,21,29,54],christma:51,chronolog:11,chronounit:53,chunk:[49,50],circl:32,citi:51,cl1:3,cl2:3,cl4:3,cl5:3,claim:[23,49],clarifi:49,clash:[5,38,51],classic:49,classpath:[4,9,10,23],clauseverifi:50,clean:[0,12,34,40],cleaner:40,cleanup:40,clear:[0,3,4,29,44],cleardatabasebeforerun:29,clearer:[12,40],clearli:[5,16,47],click:[1,15,16,34,39,43,51],client:[],clint:1,clock:[1,11,12,21,23,36,43,47],clone:[0,1,5,15,16,49,51],close:[4,6,21,51],closeabl:4,closer:21,closest:1,closur:[5,53],cloud:33,cluster:[],cmd:[30,49,50],code:[],codebas:[1,5,18,38,39],coin:28,collabor:40,collaps:29,colleagu:5,collect:[4,5,17,29,33,38,40,42,47,49,50],collector:[5,12,33],collis:5,colon:0,column:[10,33,38],com:[2,15,37,39,40,43,51],combin:[17,22,24,28,30,49,50],come:[4,12,13,33,35,40,41,44,49],comfort:40,commanddata:[3,36,49,50],commandvalid:[30,36],commenc:34,commerci:[],commercial_pap:[49,50],commercialpap:[3,6,38,49,50,53],commercialpaperlegaci:49,commercialpapertest:53,commit:[],committe:43,committing:12,common:[],commonleg:7,commonli:47,commun:[8,9,12,15,16,17,18,24,26,31,35,40,44,45,51],compani:[23,25,36,37,50],companion:[12,36,49,50],compar:[1,30,43,49,51],comparison:[23,44,49],compat:[4,17,21,41],compel:21,compet:23,complementari:11,complet:[],completetx:47,complex:[5,6,13,23,25,26,38,43,46,49,52],complic:[12,36,47,49,50],compon:[0,3,9,10,11,17,18,24,28,31,35,40],compos:[3,12,21,23,40,49,50],compositeclaus:[3,50],compositekei:[],compound:40,compris:[7,51],comput:[7,17,30,36,51],concaten:30,concept:[3,6,11,12,15,18,20,21,23,26,30,36,40,49,50],concern:[12,49],concis:40,conclus:36,concret:[9,35],concurr:29,concurrenthashmap:5,condit:[3,9,21,29,35,36,40,50,53],conf:[8,10,35,37,45,51],config:[8,10,29,33,37,40,43,48,51],configur:[],configurationfil:33,confirm:[16,17,21,43,47],conflict:[21,23,29,54],confus:[0,12],conjunct:34,connect:[],consensu:[],consequ:47,conserv:[3,47],conserveamount:3,consid:[5,7,11,17,22,23,24,28,36,40,41,47,49,50],consider:[47,49],consist:[7,8,12,17,23,24,29,35,36,40,43,45,47,50],consol:[],consortium:17,constant:[5,38,49],constantli:[36,51],constraint:[12,36,40,49,51,52],construct:[],constructing_offer:12,constructor:[3,9,11,12,36],consum:[4,11,17,21,22,23,27,28,33,35,40,43,47,49,51,54],consumedcommand:3,consumingtx:54,consumpt:[11,36,47],contact:[12,35,40],contain:[1,3,7,8,9,10,12,17,21,22,23,25,28,30,31,33,34,35,36,37,40,41,43,46,47,49,50,51,53,54],containsal:51,content:[],context:[5,22,33,35,36,47,54],contextclassload:46,contin:36,continu:[],contract:[],contracthash:50,contractreject:53,contractst:[3,11,21,22,25,38,40,47,49],contractu:47,contrast:[12,36],contribut:[1,18,22],control:[0,4,5,8,10,12,15,16,21,22,26,33,35,38,40,43,44,49,51],conveni:[3,5,22,36,46,47,49],convent:[7,12],convers:[22,34],convert:[3,6,7,13,21,22,27,35,38,40,47,49],convinc:[12,22,30],coordin:[8,39],copi:[0,5,12,31,33,35,47,49,51,53,54],copycat:42,copyonwritearraylist:5,copyright:5,copyvault:29,cor:18,corda:[],corda_bintray_gpg_passphrase:39,corda_bintray_key:39,corda_bintray_user:39,corda_dev_ca:8,corda_gradle_plugins_vers:10,corda_vers:[10,51],cordaapp:51,cordacadevpass:[8,45],cordapluginregistri:[9,10,36,48,51],cordapp:[],cordarpccli:[4,46],cordarpcop:[4,9,12,46,48],cordarpcopsimpl:35,cordform:[],core:[],corner:[1,16],corp:[34,37],corpor:[43,50],correct:[6,12,16,36,40,41,43,47,49,51,53],correctli:[12,17,23,35,36,40,47,49],correspond:[4,17,22,29,31,43,49,50],correspondingli:[5,46],cost:[1,4,36,49],could:[5,6,12,21,22,29,36,44,47,49],couldn:[30,36],count:[7,43],countabl:[25,40],counter:[5,12,51],counterparti:[1,6,7,12,17,24,31,40,43,44,46,47],counterparty:51,countri:[22,36,51],coupl:[12,13,29,48,51],cours:[12,29,33,36,38,49],coven:49,cover:[6,12,21,36,43,49,51],cpu:29,crash:[12,35,36],crazi:51,creat:[],createcommand:54,createdummyirs:7,createsomenod:13,creation:[7,30,49],creator:36,credenti:[34,39,48,51],credit:[40,43],crisi:43,crisp:49,criteria:6,critic:41,cross:27,crude:25,cryptic:15,crypto:[40,51],cryptocurr:28,cryptograph:[17,22,30],cryptographi:[],csr:40,ctrl:51,curl:[33,51],currenc:[3,6,7,12,25,28,29,34,38,40,47,49],current:[0,4,5,7,8,10,11,12,15,18,19,21,22,23,25,27,28,29,30,31,32,34,35,36,37,38,40,41,42,44,48,49,51,53,54],currentstep:[12,36],currentthread:46,currenttim:12,currentvault:47,curv:7,custodi:[12,13,22],custom:[4,8,9,12,21,22,23,26,28,33,35,38,40,43],customis:[4,38,48],cut:[],cutoff:29,cycl:[5,12,49],dai:[7,12,21,22,26,33,36,41,53],daili:51,daniel:40,danks:40,dao:40,dashboard:[33,34],data:[],databas:[],databaseschema:38,databasetransact:13,dataset:[7,43],datasourc:[8,45],datasourceclassnam:[8,45],datasourceproperti:[8,45],datastructur:29,date:[],dateoffset:40,daterollconvent:22,david:40,days:53,dcapsul:10,dead:31,deadlin:[22,36],deal:[1,5,12,22,25,28,36,43,49],dealstat:25,debt:[6,43],debugg:10,decd098666b9657314870e192ced0c3519c2c9d395507a238338f8d003929de9:33,decd:33,decentralis:[27,36,40],decid:[26,30,36,38,47,49],decis:[21,47,49],declar:[5,8,9,12,35,36,53],deconflict:27,dedic:[1,5],dedupl:[35,40],defaultissu:49,defaultref:53,defens:47,defin:[3,5,9,12,13,19,21,22,23,24,25,29,33,35,38,40,48,49,50,51,53],definit:[3,12,17,21,25,40,49],delai:[7,36],deleg:[47,50,54],delet:[5,12,25,35,40,49],deliber:53,deliv:[6,13,35],deliveri:[12,19,27,31,43,51],deliveryaddress:[],deliveryd:[],demand:[1,12,21,24,40],demo:[],demonstr:[0,27,34,40,43,51,52],denial:21,denot:30,dens:5,depend:[0,1,5,10,11,12,13,16,17,21,23,24,27,36,40,43,45,47,49,51],dependson:[10,51],depict:[23,26],deploi:[],deploy:[0,1,10,17,23,32,51],deploynod:[8,10,43,46,48,51],deployvisualis:32,deposit:49,deprec:40,depth:21,deregist:31,deriv:[0,7,12,17,22,38,40,49],describ:[5,11,12,16,18,20,21,22,23,25,28,29,30,31,35,43,44,48,49,51,54],descript:[1,3,5,27,28],deserv:[29,41],design:[5,14,17,18,21,24,27,36,40,44,49,50,51],desir:[9,12,22],desktop:33,despit:[12,46,49],destin:31,destroi:[6,23,47,49],destructur:49,detail:[],detect:5,determin:[0,3,6,7,11,17,24,31,47,49,50,51,52],determinist:[4,23,27,29,40,52],dev:[8,29,33],develop:[0,1,5,8,10,12,14,15,16,18,23,24,25,26,28,33,35,37,38,40,41,43,47,49,51],developer:51,devic:[8,27],devmod:[8,37,45],diagnos:45,diagram:[7,23,24,25,26,28,30,49],dialog:1,dialogu:51,diamond:17,did:30,didn:[5,12,30,41,49,51,53],differ:[1,3,5,6,7,8,9,10,11,12,21,22,23,25,27,29,30,31,34,36,38,40,43,47,48,49,50,51,52,53],differenti:[37,54],difficult:12,difficulti:50,digit:[12,23,36,40,47,49],digitalsignatur:[12,30,36,47,54],dir:[37,45],direct:[1,5,17,24,30,35,38],directli:[0,4,5,12,13,15,17,22,25,26,28,31,33,35,40,43,47,48,49,50,51,52,54],directori:[0,1,2,8,9,10,16,18,29,33,35,37,43,45,51],directthreadexecutor:5,dirti:49,disabl:[22,35],disagr:43,disambigu:38,discard:44,discoveri:32,discuss:[12,22,36,47,51],disk:[1,12,22,31,40],disobei:36,dispens:43,displai:[0,1,21,40,43,48],disput:[7,21,49],disrupt:[29,31,40],disruptionpattern:29,disruptionspec:29,distinct:[5,45],distribut:[8,9,10,12,16,17,18,19,20,21,23,24,27,28,36,40,42,43,47],distrust:[12,21],dive:18,divid:21,divis:25,dlog4j:33,doc:[0,2,4,5,16,18,40,43,48,51,52],docker:33,docsit:[2,18,41,51],document:[],doe:[5,6,7,8,10,11,12,13,19,23,31,33,35,36,37,38,40,43,44,46,47,49,51,52,54],doesn:[3,5,8,12,13,16,19,21,30,33,36,44,46,49,53,54],dokka:2,dollar:[25,49,52],dollars:[49,52,53],domain:[17,22,40,49],domicil:49,domino:43,don:[4,5,12,14,22,29,34,36,41,43,44,49,50,53],done:[2,3,4,12,13,15,23,29,30,31,37,40,48,49,51],doorman:31,dot:7,doubl:[12,19,21,34,35,45,49,51,53],doubt:[5,16],down:[1,5,8,12,29,34,47,49,50,51,52],download:[],downsid:5,drain:[4,12],draw:[40,48],drawn:48,drive:47,driver:[0,8,33,35,38,40,48,51,52],driverdirectori:48,drm:36,drop:[1,51],dsl:[0,10,17,40,51,52,53],dt_socket:[0,10,51],due:[0,5,7,11,12,14,15,21,35,38,43,49,50],dummi:[6,13,46,53],dummy1:13,dummy2:13,dummy_notary_key:13,dummy_pubkey_1:[49,53],dummycontract:[13,54],dump:48,duplic:[12,25],durat:[11,36,47],durationsecond:29,dure:[5,7,8,9,10,12,32,33,35,40,49],dynam:[9,23,40,49],each:[0,1,3,4,5,7,8,9,10,11,12,17,21,22,23,24,26,27,29,30,31,32,35,36,38,40,41,43,46,47,48,49,50,51,52,53],earli:[5,6,35],earlier:[0,15,44],earliest:[7,11],easi:[0,1,5,14,36,40,49],easier:[5,10,12,15,40,49],easiest:[4,49],easili:[5,12,18,28,43,49,51],echo:51,econom:[1,7],ecosystem:[],ed25519:40,edg:48,edge:48,edit:[0,22,33,39,45,51],edition:15,editor:1,effect:[7,8,12,13,38,43,53],either:[0,3,4,5,6,7,8,9,12,16,17,21,22,23,29,30,34,38,43,48,49,51,53],elbonia:22,elem:[30,36],element:[5,17,36,47,49,51],elementari:[50,51],elimin:[19,23,40],els:[12,13,21,25,28,30,35,36,46,47,48,49,50,54],elsewher:9,elucid:47,email:12,emailaddress:37,emb:26,embed:[8,19,23,26,30,36,40,51],embedd:31,emit:[4,40,52],emoji:46,empti:[8,34,40,49,53],emptyledg:53,emptyset:3,enabl:[0,8,9,10,12,21,26,35,40,50],enact:43,enc:29,encapsul:[3,5,22,36],enclos:[5,36],encod:[31,36,47],encount:[1,11,15,35,47],encourag:[18,38,46],encrypt:[37,47],encumb:49,encumberedst:49,encumbr:[40,49],encumbranc:[],end:[3,5,7,12,18,21,23,29,31,35,36,41,47,50,51,53],endeavour:51,endpoint:[10,31,33,51],enforc:[3,5,23,40,49],enforceverifyorfail:53,engin:43,england:50,english:[5,49],enhanc:40,enjoy:40,enorm:12,enough:[5,12,13,43,47,49],ensur:[3,5,9,12,15,17,21,22,23,28,30,35,37,40,41,44,47,49,50,51],ensure:[1,16,21,36,43,51],enter:[10,26,39,43,51,52,53],entir:[7,12,21,35,36,49,51],entireti:[7,23],entiti:[21,22,23,30,36,37,38,49,51],entitl:[27,48],entri:[7,8,10,12,23,38,40,44,49,50],enumer:[7,38,43,47,51],environ:[0,1,5,10,12,24,34,36,39,47],envis:18,envisag:[23,49],equal:[3,12,21,22,25,40,47,49,50],equiti:38,equival:[5,7,22,25,34,35,42,47,49],eras:15,error:[],escal:36,especi:[22,47],essenti:[0,33,35,36,47,49,50],establish:[11,31,43,45,52],estim:1,etc:[0,5,6,7,12,17,19,21,22,24,25,30,33,34,36,40,41,43,45,49,50,51],ethereum:[12,23,49],eur:1,euribor:[1,33,36],euro:25,evalu:[7,33,36,50],even:[4,12,14,15,21,26,30,35,36,38,40,43,49,50,53],event:[],eventu:[29,35,45],eventual:[21,41],ever:5,everi:[0,3,4,9,12,21,22,23,24,27,29,30,31,35,36,38,40,41,43,44,49,50],everyon:[21,36,49],everyth:[15,21,44,48,49],evid:[36,47],evolut:[23,28,50],evolv:[22,38,40,45,48,49,51],exact:[0,21],exactli:[22,23,35,36,40,49],examin:[5,10,13,49],exampl:[],exampleapi:51,exampleclientrpc:51,exampleflow:51,exampleplugin:51,examplerpccordapluginregistri:48,examplerpcvalu:48,exampleservic:51,exampletest:51,exampleweb:51,exce:29,excel:36,except:[3,4,5,9,12,21,26,31,40,44,47,49],exception:[],excess:[5,33],exchang:[7,12,17,25,35,47],exclud:[8,38,47],exclus:6,execut:[],executor:[5,24],exemplifi:53,exhaust:[35,40],exist:[1,5,6,7,8,10,11,21,22,23,25,32,35,37,38,40,49,51,53],exit:[3,6,8,13,25,34,35,37,40,43,48,49],exitcash:48,expand:[34,47,51],expect:[1,4,5,6,8,11,12,21,22,24,29,30,35,36,37,38,40,41,44,46,47,49,50,51,52,53],expectedtypenam:12,expectev:52,expens:[4,5],experi:[10,40,41,51],experiment:[5,40,43],expir:37,explain:[5,11,12,29,32,37,40,51],explan:[3,5,32,36,48],explicit:[5,12,47,49],explicitli:[5,9,23,26,28,35,43,47,53],explor:[5,13,15,19,33,34,40,43,47,49,51],explorer:[],expos:[5,9,10,11,12,22,23,27,28,33,35,38,40,47,48,54],expose:22,exposur:[6,7,17],express:[7,17,21,22,23,40,49,53],ext:[10,51],extend:[],extens:[0,5,9,12,17,28,32,33,35,36,40,44,47,49],extern:[8,12,35,45,47,51],extraadvertisedserviceid:[8,35,42,45],extract:[22,28,33,36,43,47,49],extractcommand:50,extrem:[14,17,21,29],face:[16,49,50,53],facevalu:[3,49,53],facil:[17,28,35],facilit:51,fact:[0,5,7,12,17,21,23,24,36,40,45,49,51,53],factor:[7,43],fail:[3,9,40,49,50,53],failswith:53,failur:[12,17,53],fairli:[5,13,43],fall:31,fals:[5,8,12,13,22,30,36,45,47,49,54],famili:38,familiar:[4,18,49,51,54],famou:40,fanci:49,far:[12,36,43,47,49,50,52],fashion:[5,38,43],fast:13,faster:33,faucet:43,fault:12,fear:17,featur:[],fed:[25,32],feed:[21,36],feedback:40,feel:[49,51],fetch:[31,33,35,36,46],fetchtransactionsflow:46,few:[0,5,12,14,33,36,41,43,47,49,50,51],fiber:[12,35,36],fiction:[23,34],field:[],file:[],fill:[5,12,43,47,49],filter:[3,5,29,30,36,38,40,47],filtercommand:[],filteredleav:[30,36],filteredtransact:[30,36,47],filterfun:[],filterisinst:49,filterst:3,filtertransact:36,finalis:7,finalityflow:[12,46,47,54],financ:[10,12,24,25,40,51],financi:[],find:[0,2,12,13,14,16,18,19,30,33,36,44,47,51],fine:[4,15,33,53],finish:[12,40,51,52],finishedstx:12,fire:12,firm:28,first:[0,3,4,5,7,8,10,11,12,13,14,15,16,17,21,23,31,33,36,37,38,39,40,43,46,47,48,49,50,51,52,54],firstcomposit:40,firstli:[9,34,43,46,49,51],fit:[5,23],fix:[],fixedleg:7,fixedlegpaymentschedul:7,fixedratepaymentev:7,fixer:36,fixingflow:36,fixingroledecid:11,fixingsessioninitiationhandl:11,fixof:36,fixqueryflow:36,fixqueryhandl:36,fixsignflow:36,fixsignhandl:36,flag:[8,33,37],flat:38,flesh:22,flexibl:[21,22,23],flight:4,floatingleg:[7,11],floatinglegpaymentschedul:7,floatingratepaymentev:7,flow:[],flowexcept:[12,40],flowhandl:[12,52],flowlog:[11,12,26,35,36],flowlogicreffactori:[9,11],flowstatemachineimpl:35,flowtrack:12,flux:10,fly:12,focu:30,focus:[3,50],fold:[5,48],folder:[2,8,10,35,37,43,47,51],follow:[1,2,5,8,10,11,12,15,16,18,20,21,23,24,25,26,27,28,29,32,33,34,35,36,37,39,42,43,47,48,49,50,51,53,54],font:5,foo:[5,48],foobrokenexcept:5,foot:44,fooutil:49,forc:[33,40,49,53],fordai:[11,36],foreach:48,foreign:47,foreignexchangeflow:47,forev:41,forget:[12,36,49],form:[4,10,11,12,24,26,27,28,30,31,35,36,43,47,49,50,51],format:[],former:48,formerli:40,formula:40,forth:[4,12,47],fortun:43,forum:[15,18],forward:[12,31,35,36,41,43,51],found:[],four:[31,43,45,49,51],fourpmtimelock:49,fraction:25,frame:[5,12,35,43],free:[12,15,21,23,43],freed:4,freeli:36,freez:47,frequenc:[1,7],fresh:[34,36,49,53],freshkei:12,freshli:[22,51],friend:45,friendli:35,from:[],fromcountri:22,front:[49,51],frontend:19,ftx:[30,36],fulfil:6,full:[5,6,8,12,21,27,30,31,32,35,40,43,47,48,49,50],fulli:[5,8,9,12,17,21,22,27,32,35,38,40,45,47,52],fullysign:[],fun:[3,11,12,13,21,29,30,36,38,46,47,48,49,50,51,53,54],fund:[43,47,49],fundament:[20,21,49],fungibl:[3,6,17,25,26,28,47,49,50,51],fungibleasset:[6,25,40,47,50],further:[],furthermor:21,futuretransact:48,fuzz:40,fxrespons:47,fxtransactionbuildtutori:47,fxtransactionbuildtutorialtest:47,gain:[12,19,27],garbag:[4,5,12,33],gatewai:24,gather:[],gatherfrequ:29,gatherourinput:47,gatherremotest:29,gave:36,gbp:[3,34,50],gear:41,gener:[],generatecount:29,generatefix:36,generateiniti:13,generateirsandfixsom:7,generateissu:[49,50],generatemappedobject:38,generatemov:[49,50],generateredeem:[49,50],generatespend:[12,47,49],generatetransact:48,generatexxx:47,genuin:5,geograph:1,get:[],getalice_pubkey:53,getanynotari:54,getbefor:49,getbloomfilters:5,getbob_pubkey:53,getclass:49,getcommand:[49,50],getcontract:49,getdummy_pubkey_1:53,getencumbr:49,getfacevalu:49,getfix:7,getflowtrack:12,getinput:[40,49],getinstat:40,getissuanc:49,getkei:49,getlegalcontractrefer:[49,50],getmaturityd:49,getmega_corp:53,getmega_corp_pubkey:53,getnotari:54,getnotarysignatur:[],getorthrow:[13,52],getoutput:[40,49],getoutst:40,getowner:[49,50],getpap:53,getparticip:49,getprotocolvers:4,getrequiredcommand:50,getresourceasstream:46,getresultorthrow:29,getsign:[49,50],getsubtyp:43,getter:[38,49],gettest_tx_time:53,gettimestamp:49,gettransact:13,getvalu:[49,50],gigabyt:33,github:[1,2,15,18,43,51],giusepp:40,give:[10,12,13,15,21,31,33,35,36,40,47,49],given:[0,1,3,9,12,21,22,23,30,31,36,38,40,42,48,49,50,54],givenpric:12,glanc:34,global:[1,5,21,22,23,24,27,40,53],glue:12,gnu:2,goal:[5,17,19,41,50],goe:4,gone:[40,49],good:[0,5,12,13,18,30,49,50],got:[12,30,33,36,52],govern:[23,25,43],gpg:39,gps:21,gr1:3,gr2:3,gr3:3,grab:51,gradlew:[0,10,15,29,32,34,37,39,43,45,48,51,52],grain:[4,33],grammar:5,graph:[1,4,13,19,23,24,26,27,33,38,40,48],graphit:33,graphstream:48,great:[0,40,43],greater:5,green:[26,30,51],grei:23,ground:27,group:[],groupclaus:50,groupid:51,groupingkei:[3,50],groupstat:[3,49,50],grow:48,guarante:[17,22,23,24,31,41],guava:[5,49],gui:[12,16,40,51],guidelin:[],h2databas:43,hack:40,had:[12,13,21,22,40,49],hand:[1,11,15,23,27,28,32,35,45,47,49,51],handa:40,handi:13,handler:[10,11,12,35],handshak:[31,36],happen:[],happi:[43,46],happili:[30,33,36],hard:[5,12,30,41],harder:[44,49],hardwar:[1,8,27],hash:[13,17,19,22,23,27,30,33,36,40,46,47,49],hashcod:[3,49],hashmap:29,haskel:40,hasn:29,hassl:12,hat:41,have:[0,1,3,4,5,6,7,9,10,11,12,13,15,16,17,19,21,22,23,26,27,29,30,31,33,34,35,36,38,39,40,41,42,43,44,45,46,47,48,49,50,51,53,54],haven:[49,51],head:[1,3],heap:[12,33,40],hear:15,heart:49,heavi:41,heavili:23,hedg:[6,7],held:[35,38,49],hell:12,hello:12,help:[5,11,12,32,36,43,47,49,51],helper:[3,7,22,35,46,47,49,53,54],henc:[7,21,35],her:[49,53],here:[0,1,5,8,10,12,13,14,15,16,17,18,21,22,25,30,31,32,33,36,38,40,47,48,49,50,51],herself:48,hidden:[31,35,36],hide:[],hierarch:[0,12],hierarchi:[5,12,25],high:[12,40],higher:[4,5,21,33,51],highli:[0,40],highlight:[24,40],hint:0,histor:36,histori:42,hoc:40,hocon:8,hold:[3,9,22,29,30,35,40,47],holder:[5,49],holidai:[7,22,36],home:[16,43],homepath:[10,51],hood:53,hope:35,hospit:[12,26],host1:29,host2:29,host:[8,10,24,29,31,32,35,36,37,39,40,45,51],hostil:44,hostnam:45,hotspot:5,hour:12,hous:34,how:[],howev:[0,6,7,8,12,15,21,30,35,36,37,38,42,46,47,49,50,51,53],html:[2,5,43,51],http:[],https:8,hub:[12,17],human:[8,12,21,23,26,36,43],hundr:12,hurt:[12,36],icommercialpaperst:53,icon:1,idea:[],ideal:[12,49],idempot:40,ident:[],identicon:40,identifi:[1,7,12,16,17,21,22,23,25,30,31,33,35,36,38,40,43,47,52],identiti:[12,21,22,27,35,54],identityless:23,identityservic:35,ifmatch:40,ifnotmatch:40,ignor:[12,48,49,50,51],iii:9,illegalargumentexcept:[5,30,36,49,50,53],illegalstateexcept:[3,5,47,49,50,53],illustr:[1,22,23,24,25,26,28,32,49],illustrat:5,imag:[1,30,51],imagin:[3,5,12,49,50],immedi:[4,35,47],immut:[5,7,23,28,36,49],immutabl:5,immutablelist:49,imper:5,implement:[],impli:[12,24,31,38],implic:[12,21,23],implicit:52,implicitli:7,important:41,importantli:47,impos:[36,49],imposs:[30,36],improv:[21,28,40,41,49,50],improvement:40,inact:35,inadvert:49,inbound:31,includ:[],include:9,inclus:[3,30],incom:[35,40],incompat:53,incomplet:29,inconsist:0,inconveni:49,incorpor:[31,36],increas:[5,40,43],increment:[0,4],inde:36,indent:5,independ:[21,36,38,43,50],index:[7,11,23,38,41,49,51,54],indexsourc:11,indic:[4,5,7,8,11,12,22,40,45,47,49],indicat:29,indirectli:26,individu:[],indivis:25,industri:[14,15,17,33,43],inf:[9,51],infer:53,influenc:33,info:[12,13,38,48],inform:[1,5,8,9,12,13,15,16,21,22,24,26,30,31,34,35,36,37,40,43,46,49,51,52],infrastructur:[4,13,19,23,24,33,35,40,49],ingredi:47,inherit:[5,49],init:36,initi:[9,12,16,22,29,31,35,36,40,43,45,47,48],initial:[],initialis:[13,32,35,38,54],inlin:[12,47],inmemorynetworkmapservic:35,inner:36,inoutgroup:[3,49,50],input:[],inputindex:54,inputpap:53,inputslist:47,inputst:54,inquisit:51,insert:[5,13,21,33,35,36,38,47],insid:[4,9,12,13,23,30,35,40,43,44,47,49],inspect:[29,51,52],instal:[0,2,8,10,11,15,16,39,40,43,48,49,51],installat:15,installdist:[43,48],instanc:[],instance:53,instant:[5,11,12,22,36,47,49],instanti:[9,11,12,33,40],instat:53,instead:[1,5,12,13,15,16,19,22,23,31,35,40,49,54],instigat:21,instruct:[15,16,17,18,33,43,46,48,49,51],instruction:15,instrument:[6,7,11,35,47,51],insuffici:47,insufficientbalanceexcept:49,integ:[4,25,40,49,54],integer:49,integr:[0,5,8,12,15,23,30,33,36,38,40,43,51,52],integrat:[],integrationtest:52,integrationtestingtutori:52,intellig:5,intend:[5,6,10,12,13,22,23,24,25,33,34,35,36,38,44,46,51,53],intent:[3,9,32,36,40,49],intention:5,inter:[24,40],interact:[],interchang:[17,25,47],interest:[],interest_r:[8,45],interfac:[],interior:40,interleav:29,interledg:40,intermedi:47,intermediari:[22,43],intern:[5,9,10,12,28,31,33,35,38,40,49,51],internalis:5,interop:[14,40,49],interoper:35,interpol:22,interpret:[5,23,29],intersect:49,interv:[22,29],intervent:35,intesa:40,introduc:[5,11,17,23,36,40,49],introductori:[18,51],intuit:[5,34],invalid:[12,21,22,23,30,36,49],invari:[29,49,52],investig:12,invoc:[4,12],invoic:46,invok:[4,5,9,11,12,23,26,33,35,36,40,51],invoke:12,involv:[6,12,18,21,22,35,42,47,49,52,54],iou:51,ioucontract:51,ioustate:51,ipsa:36,irrelev:11,irsdemo:[1,8,30,43],irsexport:7,irstest:7,irsutil:7,isbefor:49,isconsist:29,isda:[40,43],isdebug:51,isempti:[47,49,51],isinstanc:12,isn:[4,5,12,22,31,44,49],isnotari:48,isnotempti:[46,48],isol:50,issu:[],issuanc:[6,22,23,25,28,29,40,43,49,50,53],issue:[3,6,17,29,43,48,49,50,53],issuecash:[29,48,52],issuecommand:50,issuedbi:[52,53],issuer:[6,12,13,25,28,34,40,43,47,49,50,53],issuer_kei:38,issuer_ref:38,issueref:[48,52],issuerparti:38,issuerref:38,issuetransact:54,istribut:18,item:[17,47,49,51],iter:[12,40,41,49],iterabl:38,iterat:[36,47],itself:[4,7,8,11,12,15,18,21,23,31,33,34,35,36,38,40,43,46,47,48,49,53],jar:[0,2,8,9,10,23,32,33,37,40,45,46,47,51],jarandsourc:10,jav:16,java:[],javaag:47,javaclass:[12,38],javacommercialpap:[49,53],javadoc:[5,10,51],javadocjar:10,javatesthelp:53,javax:38,jax:9,jcenter:[],jdbc:[8,10,28,33,38,40,43,45,51],jdbcdatasourc:[8,45],jdbcx:[8,45],jdk1:16,jdk:[],jdwp:10,jersey_vers:51,jetbrain:[14,15,16,51],jetti:33,jms:31,jmx2graphit:33,jmx:33,jmxtran:33,job:[12,29],jobs:29,johann:40,join:[8,28,31,38,40,49],jolokia:33,jpa:38,json:[8,33,35,51],judgement:5,junit:51,just:[4,5,12,15,16,22,23,29,31,33,36,40,43,44,46,47,48,49,51,53,54],jvm:[],kdoc:5,keep:[12,15,23,28,47,49,51],kei:[],kept:[12,37,54],keymanagementservic:[12,35,36],keypair:[12,35,36,49,54],keystor:[8,35,37,40],keystorepassword:[8,45],keyword:[5,53],kick:12,kill:[26,29],kind:[12,22,36,44,49,51],knob:29,know:[1,4,11,12,13,14,21,24,27,30,36,44,47,49,50,51,53,54],knowledg:36,known:[1,7,13,15,17,23,24,30,35,36,40,41,43],knownfix:[30,36],korea:49,kotlin:[],kotlin_vers:51,kyc:24,label:[12,30,53],lack:[],lambda:[12,33,53],land:7,lang:[9,53],languag:[4,5,10,12,14,15,16,17,22,23,25,40,49,51],larg:[12,22,25,31,36,40,46,47,49],larger:[5,23,44],last:[12,26,29,36,41,53],lastli:51,late:15,lateinit:13,latenc:21,later:[4,5,12,13,19,22,36,38,40,44,48,49,50,51,52],latest:[5,9,15,16,18,40,47,51],latestrecord:47,latex:40,latter:[5,48,49],launch:[11,34,36,43,48],lawsuit:12,layer:[8,12,13,31,35,36,38,40,42],layout:[10,32,40,51],lazi:36,lazili:33,ldap:40,lead:[5,50],leader:8,leaf:[17,30],leak:[4,12,21,36],learn:[12,13,14,18,22,49],least:[1,8,29,40,43,46,49,50,51],leav:[1,3,5,16,22,30,34,36],ledger:[1,6,7,12,17,18,20,21,22,23,24,25,26,28,33,34,36,38,40,43,45,46,47,49,51,52,53],ledgertransact:[12,22,40],leewai:44,left:[1,12,32,37,43,50,51,53],leg:[7,11],legaci:35,legal:[8,21,23,31,35,36,37,40,47,49,51,54],legalcontractrefer:[49,50],legalident:[13,47,48,52,54],legalidentitykei:[47,54],legallyidentifi:[12,30,36],legalnam:[8,45,51],legitim:23,less:[12,33,40,46,50,53],lesser:49,let:[1,3,5,11,12,13,22,29,30,31,33,36,40,47,48,49,50,51,53,54],letmein:[8,45],letter:[5,31],level:[0,3,5,7,9,12,16,21,22,27,29,30,31,33,34,35,40,43,44,47,49,50,53],lib:[2,10,32,37,45,47,51],liber:5,libopenjfx:16,libor:[7,33,36],librari:[0,4,5,12,17,18,22,25,26,33,35,36,40,43,48,49,51],licat:18,licens:[5,43],license:51,life:[12,49],lifecycl:[],lifetim:[7,22],light:30,lightweight:[13,17],like:[3,4,5,7,11,12,13,21,22,23,25,28,29,30,31,32,33,36,40,41,43,47,48,49,51],likewis:[36,49],limit:[3,6,17,29,33,49,54],linear:[25,28,35],linearhead:47,linearheadsoftyp:47,linearid:47,linearst:[25,47],liner:5,link:[5,12,16,23,36,39,40,45,51,52],linkag:23,linux:[10,15,33,40],list:[0,2,3,8,9,12,16,22,23,27,29,30,31,35,36,38,40,41,42,43,47,48,49,50,51,54],listen:[0,1,5,8,31,35,40,48,51],listenablefutur:4,listof:[13,36,38,47,48,49,51,52],littl:[5,49,53],live:[7,9,12,35,40,43],lizard:17,llc:37,load:[],loadtest:29,loan:[6,7,36],local:[],local_branch_nam:51,localcertificatesbasedirectori:29,locald:36,localhost:[1,8,33,34,43,45,51],localtunnelstartingport:29,locat:[],lock:[5,6,8,28,38,49],log4j2:[33,45],log4j:[40,51],log:[],logger:[12,33],loggerfor:33,logic:[3,11,12,13,17,21,22,23,24,31,38,40,44,46,47,49,50],login:[10,34,39,40,43,48],loglevel:33,london:[8,10,37,45,46,51],longer:[0,5,7,8,12,37,40],longrang:29,look:[0,1,3,5,7,12,13,22,29,31,33,36,41,43,46,49,50,51,53],lookup:[8,31],loop:[5,7,29,48,49,52],loquitur:36,loss:36,lot:[5,7,40,43,44,49],low:[12,21],lower:[5,12,15,27,47],lowest:31,lurch:[],machin:[],macos:[10,40],made:[5,7,12,22,35,36,40,41,46,47,48,51],magicnumb:54,mai:[0,1,4,5,10,12,15,16,17,18,21,22,23,24,25,26,27,28,29,31,32,33,34,35,36,38,40,41,43,44,45,47,48,49,50,51,52,53],mail:41,mailbox:35,main:[0,8,11,12,16,23,29,31,35,40,46,48,50,51],mainstream:19,maintain:[17,21,36,49,54],mainten:31,major:[0,12,40,41,43],make:[],maker:14,maketransact:13,malici:[12,27,40,44,47],man:40,manag:[],managa:28,mandatori:49,mani:[5,10,11,12,13,16,21,22,23,25,27,29,36,40,46,49,51],manifest:0,manipul:[22,25,47],manner:[4,12,23,31,40,48,49,50],manual:[0,10,11,12,26,32,47,54],map:[],mappabl:49,mappedschema:38,mappedtyp:38,margin:[],mark:[4,5,6,12,17,30,38,49],markdown:5,marker:[12,44],market:51,marshal:4,master:[15,16,41,51],match:[3,4,8,12,22,23,24,30,31,36,40,44,47,48,50,52],materi:50,math:[],mathemat:22,matter:[12,30,36,43,49],matur:[6,7,21,27,32,33,36,49,53],maturityd:[49,53],maven:[],mavenloc:10,mavenpubl:10,maximis:23,maybestx:[],maybetraderequest:12,mbean:33,mean:[4,5,9,11,12,13,16,17,21,23,25,26,27,29,30,36,40,43,47,48,50],meandref:48,meaning:[6,21],meaningfulli:46,meant:[12,29,51],meantim:52,meanwhil:[48,50],measur:[7,28,43],mechan:[17,28,31,36,40],meet:[3,35,47,49,51],mega:37,mega_corp:[13,53],mega_corp_key:13,mega_corp_pubkey:53,megacorp:[13,53],member:[7,8,40,43],membership:26,memori:[],menlo:5,mention:[11,12,36,49],menu:[1,51],mere:7,merg:[25,28,40,47,49,51],mergeabl:49,merkl:[],merkleroot:[30,36],merkletreeexcept:[30,36],mess:12,messag:[],messagingserveraddress:[8,35],messagingservic:[31,35],met:[9,22,51],meta:[9,51],metadata:[33,46,54],method:[3,4,5,8,9,11,12,13,21,22,25,29,33,35,36,38,40,44,45,46,47,49,54],metric:[33,43],micro:[40,50],microsoft:1,mid:21,middl:[5,12,40],middlewar:[17,35],midpoint:[],might:[5,7,12,36,38,44,47,49,51],migrat:47,mileston:[],million:26,min:48,mind:[5,12,36],miner:23,mini_corp_pubkey:13,minim:[3,12,15],minimis:[6,21,31],minimum:[4,7,22,23,47],minor:[31,40,41],minu:49,minut:[0,1,12,14,36,39,51],mismatch:[49,53],miss:[],mission:33,mistak:[40,44,47],mix:[0,5,40],mobil:23,mock:[13,51],mocknetwork:[13,32],mocknod:[13,35],mockservic:22,modal:51,mode:[8,32,34,37,40],model:[],modif:[35,47,49],modifi:[1,6,7,9,10,12,17,22,40,47,49,51,53],modul:[],moment:[12,13,40],monei:[36,47,49],monitor:[],month:[7,12,41],monthli:51,more:[0,1,3,4,5,6,7,8,10,12,13,14,16,17,18,21,22,23,24,25,27,30,31,32,33,35,36,37,38,40,42,43,46,47,48,49,50,51,52,54],moreexecutor:5,mortensen:40,most:[0,3,5,7,12,15,31,32,33,45,49,50,51],mostli:[23,49],motiv:[18,51],move:[3,6,12,13,23,34,40,41,43,47,48,49,50,51,53,54],movement:[12,25,49],movetransact:54,movetransactionbuild:54,mtx:36,much:[5,12,14,27,30,36,38,40,44,47,49],multi:[],multigraph:48,multilater:[6,40],multipl:[],multipli:7,must:[3,4,5,6,8,9,10,11,12,21,22,23,25,27,31,33,35,36,38,39,40,44,45,46,47,48,49,50,51],mustafa:40,mutabl:[5,22,49],mutablelistof:47,mutat:[35,47],mutual:[6,12,21,44],myfil:33,myident:[36,54],myinfo:[36,47,54],mykei:22,mykeypair:12,mylegalnam:[8,37,45],mynodeinfo:36,mypublickei:12,mysigningkei:[36,54],mysql:19,nail:5,name:[],namedbyhash:[],namespac:[],narrow:[3,5,34],nativ:[12,47],natixi:40,natur:[0,23,47,49],naval:21,navig:[1,10,39,43,51],navistar:21,nearest:30,nearestc:[8,10,37,45,51],neat:53,necessari:[5,12,17,24,36,40,41,51],necessarili:[22,38],nee:40,need:[0,1,2,3,4,5,7,9,11,12,13,15,16,17,21,22,23,24,25,29,30,33,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54],neg:[25,51],negoti:[22,47],neither:12,nest:[12,52],net:[3,6,7,8,9,10,12,13,33,35,37,38,39,40,42,43,45,46,47,48,49,51,52,53],network:[],networkmap:[10,31,51],networkmapcach:[8,12,35,54],networkmapservic:[],networkmapupd:48,neutral:19,never:[5,17,21,49],newdeal:36,newli:[11,51,54],newnotari:21,newowner:[49,54],newsecurerandom:40,newstat:47,nextdoubl:48,nextfixingof:11,nextlong:48,nextscheduledact:11,nextstep:[],nfinal:46,nice:[36,49],nio:5,noddi:33,node:[],node_dir:10,node_directory:45,nodea:[1,10,51],nodeb:[1,10,51],nodec:[1,51],nodefilt:29,nodehandl:[29,52],nodehost:29,nodeident:48,nodeinfo:[8,12,35,52],nodeinterestr:[9,30,36,47],nodenam:51,nodex:51,nodisruptionwindowm:29,non:[],nonc:50,nondeterminist:52,none:[3,11,12,36,38,43,50],nonemptyset:40,nordea:40,normal:[3,4,6,7,9,10,22,29,30,31,32,34,35,40,46,47,49,50,54],north:49,notabl:[5,51],notari:[],notaris:[],notary:[],notary_committed_states:43,notarychang:[40,47],notarychangeflow:21,notaryclusteraddress:[8,35],notaryexcept:[40,54],notaryflow:[26,35,40,47,54],notaryident:[12,13,48,52],notarynod:[12,13],notarynodeaddress:8,notarysig:12,notarysignatur:54,notarytous:22,note:[],noth:[5,11,12,23,40,44,49,51],notic:[5,30,43,50,53],notif:[26,29,31,35,46],notifi:[31,32,54],notion:[],notnul:[49,50],now:[1,5,10,12,13,22,30,33,39,40,43,45,47,48,49,51,52,53,54],nugget:49,nullabl:[12,49],nullpublickei:49,number:[0,3,5,6,7,13,15,17,22,25,29,31,34,35,36,38,39,41,43,45,47,49,51],numer:9,obj:[49,50],object:[],oblig:[6,7,25,40,47,51],obligat:[],obligor:6,observ:[4,7,11,12,21,26,29,32,40,46,51],observatori:21,obsolet:[11,40],obtain:[5,8,11,13,15,21,24,27,30,36,37,40,43,51,54],obviou:[5,21,36],obvious:[0,7,17,32],occasion:0,occur:[11,12,21,35,49,52],occurr:[12,21],odd:49,off:[],offer:[12,27,35,38,51],offici:15,offlin:31,offset:7,ofsecond:47,often:[5,6,7,12,16,36,47,49],oftenor:36,oil:[25,40],old:[12,17,21,39,40,47,49,54],older:15,omit:[11,30,43],onc:[4,5,9,17,21,22,26,37,41,47,49,52],once:[1,2,7,10,11,12,15,17,18,22,31,32,37,38,39,43,45,46,47,49,51],one:[3,21,24,30,36,43,47,51],ongo:4,onledgerasset:[6,49],onli:[0,3,4,5,7,8,10,11,12,14,17,21,22,23,24,25,30,31,32,33,34,35,36,37,40,41,43,44,45,47,48,49,50,51,52,53,54],only:[12,31,35,39,45,51],onto:[4,5,12,31,49,53],opaquebyt:[40,48,52,53],open:[0,1,3,4,10,12,15,16,18,21,23,31,33,35,40,43,48,51,52],opengamma:[40,43],openjdk:[15,16],openjfx:[15,16],openssl:29,oper:[1,7,8,11,12,17,24,25,31,33,35,36,40,44,45,47,48,49,54],oppos:0,opposit:3,opt:[1,10,29,51],optim:5,optimis:[28,40],option:[0,1,2,5,7,8,11,12,17,29,32,36,37,38,40,47,49,50,51,52,54],optional:[8,47],oracl:[],oracleparti:[30,36],orang:26,orchestr:[19,23,40],ordain:7,order:[0,2,4,5,6,7,12,19,21,22,23,24,28,29,32,35,36,38,40,43,45,46,48,49,50,51,52],ordernumb:[],ordinari:[12,23,40,49],ordinarili:36,org:[2,8,45,49,50,51],organis:[0,16,28,38,39],orient:[],origin:[23,30,38,40,46,47,49,50,51,53],originalst:21,orm:[38,40],osx:51,otc:38,other:[],otherparti:[12,36],othersid:46,otherwis:[1,4,5,8,9,10,11,12,31,35,36,44,47,48,49,52],our:[0,5,11,12,13,14,15,18,22,29,30,31,35,36,39,40,41,46,47,48,49,50,51,54],ourkei:47,ournotari:54,ourselv:[12,30,36,49,54],oursign:47,oursignatur:12,ourstat:47,out:[0,3,5,6,11,12,15,16,18,21,22,23,30,31,33,35,36,40,41,42,43,44,46,47,49,50,51,54],outcom:[],outer:50,outlin:[12,36,40],output:[],outref:[13,47],outsid:[10,12,23,35,36,45],outstand:6,over:[0,1,5,7,8,10,12,13,17,21,22,23,24,29,30,31,33,36,38,40,43,47,49,51],overal:[11,21,47,53],overdu:11,overflow:5,overhead:33,overidden:[8,10],overload:25,overlord:17,overnight:22,overrid:[3,9,11,12,29,30,36,38,48,49,50],overridden:[9,10],overutilis:29,overview:[],overwrit:39,own:[],ownablest:[12,22,49],ownedquant:48,owner:[11,12,22,28,38,47,49,50,53,54],owner_kei:38,ownership:[12,13,43,49,54],owningkei:[12,30,36,47,49,54],ozturk:40,p2p:[31,40],pack:49,packag:[9,15,16,22,25,38,40,51],packet:23,pad:30,page:[1,8,15,16,36,40,41,43,51],pai:[],paid:[6,7,43,49],pair:[1,12,13,22,35,36,37,47,49],pan:40,pane:16,paper:[],paragraph:29,parallel:[4,29,36,40,52],param:[29,38,54],paramet:[4,5,9,11,12,22,29,33,36,40,46,47,49,50],parameteris:[23,29,47],parent:[12,17],pars:[22,36,49],part:[0,3,4,5,6,8,9,10,11,12,16,21,22,23,29,30,31,34,35,36,37,38,40,44,45,47,49,50,51],parti:[],partial:[],partialmerkletre:30,partialmerkletx:36,partialstx:12,partialtx:30,particip:[12,21,22,23,24,26,27,28,34,35,36,40,49,51,54],particular:[],partner:[43,47],partyandrefer:[5,25,48,49,53],partyfromnam:46,partynod:13,partyrefer:[5,49],pascal:5,pass:[1,3,9,12,22,26,28,29,30,33,35,36,38,40,43,46,47,49,50,52,54],passphras:39,password:[1,4,8,10,27,31,33,34,37,40,43,45,48],past:[1,5,43,49,51],patch:[5,40],path:[5,8,9,10,11,16,29,31,33,40,43,47,48,49,51],path_to_loadtest_conf:29,pattern:[5,47,48],paus:[10,26,32],paycash:[48,52],payer:7,payload:36,payment:[1,6,7,11,12,17,34,36,43,49],pdf:[36,46],peer:[12,19,24,30,31,34,35,36,49,51],penni:[25,38,49],peopl:[5,12,14,17,26,49],per:[],perfect:50,perform:[0,1,5,7,11,12,17,21,22,23,26,27,28,29,30,31,36,40,43,46,49,50,51],perhap:[5,31,45,49],period:[7,37,43,47],perman:[12,46,47,49,53],permiss:[],persist:[],persistentcashst:38,persistentst:38,perspect:[12,23,27,35,49],pertin:51,pervas:27,phase:40,phrase:36,physic:[1,21,35,40,45],pick:[0,12,15,31,40,41,49],piec:[5,12,17,21,23,25,29,45,49,53],pip:2,pki:[23,40],place:[2,5,7,9,11,12,19,22,23,24,30,31,36,40,41,43,48,49,50],plai:[],plain:8,plan:[12,23,36,39,40],platform:[7,9,10,11,12,14,15,18,20,21,22,23,24,30,40,43,44,49,51],plc:34,pleas:[],ploadtest:29,plu:[8,22,35,53],pluggabl:[21,24,27,40],plugin:[],pluginservicehub:[9,10,12,35,36,40],pluginserviceregistri:51,point:[4,5,6,9,10,12,16,17,21,22,23,29,33,35,36,38,40,41,44,47,48,49,50,51],pointer:[12,22],pointless:5,polish:40,polit:43,poll:[29,37],pool:5,pop:[16,51],popul:[35,47],popular:14,popup:[15,16],port:[0,1,8,10,29,34,35,40,41,43,45,51],portal:1,portfolio:[],portion:[23,47],posit:[5,12,18,49,54],possess:[12,21,54],possibl:[3,12,15,16,23,28,29,35,36,37,40,43,46,47,49,53],post:[24,35,51],postgr:19,potenti:[5,12,14,21,26,36,43,49,51],pound:[25,49],pour:25,power:[30,35],practic:[8,40,43,47,49],preced:[0,49],precis:[19,21,23],precondit:[5,49],predic:52,predict:29,prefer:[0,1,5,16,34,38,51],prefix:[5,38],preliminari:43,prematur:12,prepar:[40,49],prescrib:45,present:[],preserv:[21,28,47],press:51,pretend:[22,33,40],pretti:[],prevent:[28,31,40,43,44,47,49],previou:[12,22,29,40,50,51,53,54],previous:[7,11,21,22,23,36,40,51,54],price:[12,23,36],primari:[23,36],primarili:[0,6,15],primer:18,primit:[22,53],print:[4,33,40,43,44,45,46,48,52],println:[46,48,52],printorvisualis:48,prior:54,privaci:[5,12,19,21,23,27,28,36,40,47,49],privat:[1,5,8,9,12,13,24,27,28,31,36,37,38,45,47,49,51,53],privatefoo:5,privatekei:[12,35],probabl:[0,49],problem:[12,15,16,36,45],proce:[1,12],procedur:[12,37,49],process:[],processor:29,produc:[2,11,16,23,32,47,49,52,53],product:[0,5,10,11,14,19,25,40,41,43,47,51],profil:[33,39],program:[4,5,22,23,33,35,40,43,49],programmat:48,progress:[],progresstrack:[12,36],project:[],prolif:40,promis:40,prompt:[15,51],proof:[6,23,30],propag:[4,12,33,40,49,50,51,53],properli:[12,35,44],properti:[],proport:43,propos:[12,23,35,44,47,51],proprietari:[24,40,43],prose:[23,36,49],prospectus_hash:46,protect:[12,27,35,37,43],protocolhandl:46,protocolvers:4,prototyp:[5,19,36,40,42,49],provabl:47,prove:[12,21,49],proven:[27,43],provid:[],provis:24,provision:22,proxi:[4,46,48,52],prune:[27,28],pseudo:36,pseudonym:22,ptx:[12,36,46],pubkei:53,publicfoo:5,publickei:[12,35,49],publish:[],publishtomavenloc:39,pull:[47,51],punish:36,purchas:[1,12,43],purchaseord:[],purchaseordercontract:[],purchaseorderst:[],pure:[6,23,36,52],purpos:[1,6,12,17,21,22,27,28,31,38,42,43,45,47,48,49,51,52],push:[4,31,41],put:[],putti:1,python:[2,40,51],qualifi:[8,9,38],qualiti:47,quantifi:25,quantiti:[3,25,28,29,47,48,49,52],quasar:[9,10,12,17,35,36,47,51],quasar_vers:51,queri:[],queryablest:[35,38],queryrequest:36,question:[5,11,21,22,31,36,50],queu:[17,31],queue:[],quick:[36,51],quickcheck:40,quickli:[17,37,44,49],quit:[4,5,12,21,49],r3cev:29,r3corda:[10,40,51],r3dlg:41,r3prototyp:[2,47],radic:23,raft:[],rais:[3,21,43,50],ran:0,random63bitvalu:50,random:[11,22,23,29,31,34,40,43,47,48,54],randomis:[27,40,46],randomli:[29,34,48],rang:[1,3,21,38,51],rapid:[5,10,19,41],rare:[8,25],rate:[],ratesfixflow:[30,36,47],rather:[3,5,12,15,16,31,32,40,45,47,48,49],rational:20,raw:[1,31,33,43],rdbms:[38,40],rdms:40,reach:[7,11,21,23,24,27,36,40,43],reachabl:12,react:29,reactiv:40,read:[1,5,8,10,12,14,18,19,30,33,35,36,40,49,51],readabl:[8,12,14,23,43],reader:18,readi:[1,3,41,49,51],readili:50,readm:51,readme:[5,51],real:[5,22,32,36,37,40,43,47,49],realis:12,realist:22,realiti:[7,30,52],realli:[5,12,30,36,49],reason:[5,7,12,21,23,25,29,40,44,49],reassign:49,recal:7,receipt:[35,43],receiv:[4,6,7,9,12,17,26,29,30,31,35,36,40,41,43,44,46,47,49,51,52],receiveandcheckproposedtransact:12,receiveandvalidatetraderequest:12,received:36,receiving:12,recent:[1,40,51],recheck:47,recipi:[6,43,46,49,51,52],recognis:[9,12,23,49],recommend:[0,1,5,15,31,42,43,51],record:[11,12,13,17,21,25,26,28,35,38,43,46,47,51,54],recordtransact:[13,35,47,54],recreat:[12,16],red:[7,51],redeem:[3,6,34,49,50],redempt:49,redeploi:51,redesign:40,redirect:45,redownload:16,reduc:[5,10,43],redund:5,ref:[12,13,22,36,47,48,52,53],refactor:40,refer:[],referenc:[46,51],refin:40,reflect:[1,12,18,29,40,47,49,50,51],refresh:[0,15,40,51],refus:16,regard:[21,45,47],regardless:12,regener:[7,41],regist:[],registerflowiniti:[9,12,36],registerrpckryotyp:[9,48],registr:[9,35],registri:9,regress:40,regul:[23,47,49],regular:[1,12,17,25,33,43,45,49],reifi:47,reissu:49,reject:[8,12,21,23,31,35,37,47,49],rel:[8,14,33,36,40,47],relabelablestep:12,relai:46,relat:[],relationship:[35,49],relax:[29,37,40],releas:[],relev:[3,9,10,11,12,17,22,23,28,35,36,40,47,49,50,54],reli:[4,10,23,40,43,44],reliabl:35,relic:33,religi:5,remain:[10,11,12,36,40,47,49,51],rememb:[5,11,44,47],remind:[12,44,50],remot:[0,9,10,16,27,29,32,35,43,45,47,51],remote_branch_nam:51,remotemessagingport:29,remotenodedirectori:29,remotesystemdservicenam:29,remov:[12,30,34,40,41,49],renam:[12,40],render:[5,12,32,34,40],renderifsupport:46,repair:26,repay:50,repeat:[0,5,7,12,46],replac:[4,7,22,33,40,41,43,47,48,49,51],replai:40,replic:[8,42,43],repo:[0,1,15,16,18,51],repoint:21,report:[12,26,28,34,40,50],repositori:[0,5,10,16,39,40,41,43,51],repres:[1,5,6,7,9,12,22,23,24,25,28,29,34,35,36,38,40,47,48,49],represent:[],reproduc:47,republish:51,request:[],requestingparti:54,requir:[],requiredcommand:[3,40,50],requiredflow:9,requiresinglecommand:[49,50],requirethat:[49,50],research:40,resel:36,resend:35,resent:35,reserv:28,reset:[7,32],resid:35,residu:47,residualamount:47,residualoutput:47,resolut:[12,23,26,40,54],resolv:[5,12,13,22,27,30,36,43,45,49],resolvetransact:23,resolvetransactionsflow:[12,13,26,46],resolvetransactionsflowtest:13,resourc:[0,1,4,8,9,12,23,29,36,46,47,51],resp:36,respect:[0,5,12,22,28,47,51,52],respond:[12,35],respons:[4,9,11,12,16,21,23,28,31,35,36,38,40,47,48,51,52,54],rest:[9,19,23,30,31,33,40,50,51],restart:[9,12,26,35,37],restor:[9,12,17],restrict:[1,3,5,23,32,43,47],restructur:[40,50,51],restructuredtext:2,result:[5,7,8,12,13,21,23,34,35,36,37,38,40,43,44,46,47,49,51,54],resultfutur:13,resum:[12,35,37,40],resurrect:12,resync:15,retain:31,rethrown:4,retri:[19,31],retriev:[7,12,37,42,46],retrieveoutput:53,returnvalu:[46,52],reus:[4,23],reusabl:[3,17,23,36,40,46,49],revamp:40,reveal:[12,21,27,30,36,40],revers:[12,35],revert:6,review:[5,12,23,27,40,41,51],revis:[7,27,47],rewrit:12,richer:10,right:[1,5,12,15,16,22,33,40,41,43,44,47,51],rightmost:[],rigidli:5,risk:[12,43],robert:40,robust:40,rogerwilli:51,role:[11,27,34,35,43,48],roll:[7,12,40,43],rollov:[22,49],root:[1,8,10,24,27,30,31,35,37,41,45,47,51],roothash:36,rotat:[33,40],roughli:[21,41],rout:[12,13,27,31,40],row:[23,33,34,38,43,49],rpcclienttonod:[48,52],rpcexception:4,rpckryo:4,rpcreturnsobserv:4,rpcsincevers:4,rpcuser:[8,34,45,48,51,52],rui:40,ruin:53,rule:[5,12,23,28,35,36,40,43,49],run:[],runbuy:43,runconfigur:[15,16],rundemonod:[34,40],runexampleclientrpc:51,runnetwork:13,runnod:[0,10,40,43,48,51],runparamet:29,runrecipi:43,runrpccashissu:43,runsel:43,runsend:[0,43],runshellcommandgetoutput:29,runsimulationnod:34,runtim:[5,12,51],runwebcashissu:43,sacrif:51,safe:[4,5,9,12,37,44,48,52],sai:[5,21,29,43,45,49,50,54],sake:[43,52],sale:49,same:[0,1,4,5,6,7,8,10,11,12,21,22,23,25,28,29,31,33,35,36,37,40,43,45,47,48,49,50,51,53],sampl:[0,9,10,12,15,16,18,26,32,33,34,40,43,46,51],sanction:49,sandbox:[11,19,23,27,40,44],saniti:12,santiago:40,sate:54,satisfi:[12,22,43,49,50],save:[5,12,40,49],saw:52,scala:[14,49],scalabl:[5,21],scale:[7,44],scenario:[22,26,27,32,35,47,51,52],scene:[12,49],schedul:[],schedulablest:[11,22,35],scheduledact:11,schedulerservic:35,schema:[],schemafamili:38,schemaopt:38,schemaservic:38,scheme:[30,35],schroeter:40,scienc:51,scope:[3,34,36,46,50],scotiabank:40,scotland:50,scrape:33,scratch:[22,49,51],screen:[1,5,15,16,34,40,49],script:[0,2,10,40,43,46,51],scroll:43,scrub:12,seamless:14,search:[1,23,34,35,47,49],sec:51,second:[3,7,9,12,13,22,29,36,43,46,47,49,51,52],secondari:[],secp256r1:40,secret:8,section:[8,20,21,26,27,28,29,36,40,41,47,51,54],securehash:[13,22,30,36,49,50,54],securerandom:40,see:[1,2,3,4,5,6,7,8,10,11,12,13,15,16,21,22,23,24,25,27,29,30,32,36,37,38,39,40,42,43,45,46,47,48,49,50,51,52],seed:12,seek:40,seen:[5,7,9,12,36,49],segment:10,select:[1,3,16,21,27,28,38,40,43,47,49,50,51],selector:3,selectschema:38,self:[10,28,29,40,43,52],selfissuecommand:29,selfissuest:29,selfissuetest:29,selfsignedtx:47,sell:[12,47,49,50,53],sellamount:47,sellerownerkei:12,sellersig:12,sellertradeinfo:12,semant:26,semi:[1,24,27],send:[1,5,12,13,21,24,26,28,30,31,33,35,36,40,41,43,46,47,49,51,52,54],sendandrec:[12,36],sender:[12,43,46,51],sending:36,sending_offer_and_receiving_partial_transaction:12,sending_signatures:12,sending_sigs:[],sendrec:26,sendsignatur:[],sens:[7,36,49,50],sensit:[11,21,23,30,43,44],sent:[11,12,22,26,31,36,40,46,47,49],separ:[0,1,3,8,10,12,22,30,31,33,36,40,43,47,49,51],septemb:43,sequenc:[26,35,40,52],sequenti:[12,52],seri:[12,22],serial:[4,9,19,35,36,49],serialis:[4,5,9,12,17,19,36,40,49],seriou:41,serv:[9,10,35,51,52],server:[],servic:[],servicehub:[10,12,31,35,36,47,54],servicehubintern:40,serviceident:36,serviceinfo:[43,48,51,52],serviceload:[9,36],serviceplugin:[9,36],servicetyp:[8,35,43,54],servlet:51,session:[11,12,31,35,40],sessionid:11,set:[],setlifecycl:3,setof:[3,12,13,43,46,47,48,50,51,52,54],setter:[38,49],settim:[12,22,36,47],settl:[3,6,13,25,46],settlement:[6,12],setup:[],sever:[0,8,10,12,31,35,36,38,42,43,45,48,49,51,52,53],sha256:[22,30,49,50],sha256sum:33,sha:[23,33],shade:23,shadow:28,share:[0,1,6,7,12,17,22,23,24,25,35,36,40,44,46,47,49,51],shasum:33,she:49,shell:[29,51],ship:[1,23],shoot:44,shortcut:19,shorthand:53,shortli:0,should:[0,1,3,5,6,9,10,11,12,15,16,18,19,21,22,24,26,29,30,35,36,37,38,39,40,43,44,45,46,47,48,49,50,51,52,53],shoulder:5,shouldn:[12,23,30,47,49,51],shoutout:40,show:[1,14,23,32,34,35,40,43,49,50,51],shown:[1,4,8,12,13,22,32,47,51],shut:52,shutdown:[12,35],side:[4,11,12,15,25,26,32,36,43,44,46,47,51],sidebar:32,sidenot:45,sig:[36,40,49],sign:[],signal:[17,47],signatori:47,signatur:[],signaturesfromsel:12,signedtransact:[],signer:[30,36,43,47,49,50,51,53],signfirsttx:13,signific:[0,36,40],significantli:[7,21,22,29,40,46],signing:[12,36],signingkei:[30,36],signrequest:36,signwith:[12,13,22,46,47,49,54],signwithecdsa:[30,36],signwithourkei:12,silver:5,similar:[4,5,12,31,36,40,47,48,49,50],similarli:[27,38,47],simmvaluationdemo:[1,43],simpl:[],simplecp:53,simplecpdoesntcompil:53,simplecpmov:53,simplecpmovefail:53,simplecpmovesuccess:53,simpleissuancewithtweak:53,simpleissuancewithtweaktopleveltx:53,simplenam:38,simpler:[14,23,50],simplest:[12,49],simpli:[1,5,10,12,13,22,29,35,38,40,42,49,51,53],simplic:47,simplif:40,simplifi:[3,5,6,23,25,35,42,47,49],simul:[],simultan:[12,22,28,43,49],sinc:[30,49,50,51],singl:[],singlemessagerecipi:31,singleownerst:54,singleton:[9,12,36,49,50],singletonserializeastoken:[9,36],site:[5,40,41],situat:[5,30,40,47],size:[1,5,7,12,33,49,50,51],skeleton:13,skip:[12,22,49,51],sl4j:33,slack:[15,18],sleep:[29,48],slf4j:[],slightli:[0,42,47,49],slip:41,slot:40,slow:[5,29],small:[3,4,11,12,23,24,25,33,36,40,44,46,49],smaller:[3,40,50],smallest:25,smart:[],smooth:49,snapshot:[],snapshots:51,snide:2,snippet:[12,30,51],socket:33,soft:28,softwar:[],sofu:40,sold:[12,22],sole:[21,31,40],solut:[12,27],solv:[12,16,36],solvenc:36,some:[0,1,4,5,6,9,11,12,13,16,18,19,21,22,23,24,25,26,29,30,33,34,35,36,38,40,43,45,47,48,49,50,51,52,53,54],somed:49,somehow:29,someon:[21,28,49,54],someth:[4,5,7,12,40,49],sometim:[0,12,17,22,23,33,47],someusernam:29,somewhat:[4,12,29,40,43],somewher:49,sonatyp:39,soon:[40,49],sort:[12,36,40],sound:[5,12,49],sourc:[],sourcejar:10,sourcenotari:47,sourceset:33,sparingli:5,spawn:[9,52],speak:40,spec:40,special:[3,4,12,21,23,50,53],specif:[3,4,6,9,10,11,12,17,21,22,23,25,28,29,31,33,35,40,47,49,50,51,52],specifi:[1,2,3,4,5,6,8,10,12,17,19,21,22,23,29,30,37,38,40,45,46,47,49,50,51,52,53,54],speed:[12,14,51],spend:[12,13,19,21,26,28,34,35,44,45,47,49,52,53],spent:[23,28,49,53],sphere:23,sphinx:2,sphinx_rtd_them:2,spin:29,spirit:40,splash:[15,16],spline:22,split:[3,25,28,30,31,40,47,49,50],splittabl:49,splittablerandom:[29,48],spot:40,spread:[12,21],spreadsheet:36,spuriou:3,sql:[19,24,38,40,43,51],src:[8,12,35,46,51,52],ssd:1,ssh:[1,29],sshuser:29,ssl:[8,40],sslkeystor:[8,37,51],stabil:51,stabilis:41,stabl:[4,9,16,18,41,48,51],stack:[9,12,33,35,36],stage:[5,6,12,22,26,47,49],stai:[23,35,47,49,50],standalon:[24,32,36,40,48],standard:[3,5,9,10,12,15,17,21,22,25,28,32,33,35,40,43,45,47,48,49,50,51],standardis:[3,22,47],start:[],startflow:[12,13,40,46,48,52],startflowdynam:[12,48],startflowpermiss:[48,52],startnod:[48,51,52],startprotocol:[8,45],startup:[8,9,33,40],startwebserv:40,startwith:48,state:[],stateandref:[12,21,22,36,40,47,49,54],statehistori:54,statemachinemanag:[],statemachinerunid:12,statement:[5,12,36,49],stateref:[11,22,25,30,38,47,54],statesoftyp:[47,49],staticservedir:9,statist:33,statu:[47,51],status:23,stdlib:51,stem:49,stereotyp:47,still:[11,12,16,21,32,36,40,43,47,49],stock:[23,28,36],stone:29,stood:38,stop:[5,12,35,51],stopnod:13,storag:[],store:[8,9,10,12,13,16,21,22,28,33,35,37,40,42,43,47,49,51,54],stori:[5,40],straight:1,straightforward:[12,49],strain:29,straincpu:29,stream:[4,12,31,32,40,46,48,52],strength:15,stress:[5,29,40],strictli:[7,9],string:[0,8,12,22,29,36,38,43,48,49,51,54],strip:49,strong:14,strongli:15,stub:[40,43],stuck:18,studi:49,stuff:5,stx1:13,stx2:13,stx:[12,22,46],sub:[],subclass:[6,12,22,38,49],subclaus:[40,50],subcompon:27,subdirectori:33,subflow:[9,12,21,35,36,47,54],subfold:[9,35],subgroup:23,subject:[8,10,17,27,31,43,51],submiss:36,submit:[1,5,12,21,29,31,37,40,43,51],subnet:51,subscrib:[4,31,40,46,48],subscript:1,subsequ:[17,28,37,40,47,49,52,53],subset:[6,30,40,50],substanc:51,substitut:[8,9,47],subsystem:[9,31],subtask:12,subtl:5,subtract:25,subtyp:[12,40],subvert:44,success:[3,28,31,43,47],successfulli:[23,43,45,46,48],successor:[11,14,21],succinct:5,sudo:[2,16],suffer:43,suffic:12,suffici:[22,31,36,40,41,43,47,48],suffix:51,suggest:[10,15,31,33,49],suggestinterestrateannouncementtimewindow:[11,36],suit:[40,46],suitabl:[11,31,35,36,41],suitablecashst:47,sukrit:40,sum:[29,43,47,48,49],sumcashbi:[12,49],summari:[],sumorthrow:3,sumorzero:3,sun:5,superclass:[6,40],superior:5,superset:8,supertyp:49,suppli:[6,29,48],support:[],supportedschema:38,suppos:[12,23,49],suppress:[5,40],suppresswarn:5,sure:[15,18,21,39,40,41,44,46,49,51,52],surfac:12,surround:5,surviv:12,suspend:[],suspens:[9,35],swap:[],swapping_signatures:[],swapsignatureswithsel:[],sync:[35,49,51],synchronis:[5,21,35,43],syntax:[0,14,49],system:[0,4,8,10,12,19,21,27,28,29,30,31,33,34,35,38,40,49,51],systemd:[29,45],systemus:31,tab:[1,5,10,15,16,40,43,51],tabl:[10,33,34,35,38,40,43,51],tableprefix:38,tackl:40,tag:[4,5,17,41,51],tag_nam:51,take:[1,3,5,7,9,11,12,13,19,22,23,24,26,29,30,33,36,37,40,41,43,44,47,49,50,51,53],taken:[1,9,30,49],talk:[13,50],tamper:12,target:[2,5,8,13,14,15,23,32,33,51],tasknam:15,tcp:[10,33,43,51],tear:[],teardown:13,techniqu:[5,19,27,36,51],tell:[2,12,48,51],templat:[],tempor:23,temporari:[10,12,31],temporarili:[12,41],tempt:[44,49],ten:49,tend:17,tenor:[7,22,33,36],term:[1,3,6,8,11,17,22,25,27,31,43,45,50],termin:[7,10,12,33,35,40,43,48,51],test:[],test_tx_time:53,testcompil:51,testnam:29,testnet:[8,10,37,40,45,51],testpassword:52,testtimelock:49,testuser:52,texa:25,text:[1,5,33,40,51,53],textual:28,than:[3,4,5,10,12,15,16,21,22,23,27,30,31,32,33,36,37,40,47,49,51,53],thank:40,thei:[0,1,3,4,5,6,7,9,10,11,12,16,17,18,21,23,24,25,26,27,29,30,31,32,33,35,36,38,40,41,43,44,45,46,47,49,50,51],theirsign:47,theirstat:47,them:[],theme:[40,44],themselv:[4,12,13,22,29,31,32,35,36,43,44,48,49,50,51],therefor:[0,4,9,10,12,17,19,35,41,43,44,47,49],thi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54],thin:31,thing:[],think:[5,12,20,31,44,49],third:[24,30,40,43],thisstateref:11,thoma:40,thorough:12,thoroughli:12,those:[0,1,4,11,12,21,23,24,33,36,43,44,49,50,51],though:[12,30,33,36,49],thought:[14,23,24],threadsaf:5,three:[1,3,10,12,23,34,43,49,50,52],threshold:[17,22,33,35,40],through:[3,4,7,9,11,12,23,24,25,31,32,33,35,36,40,47,49,51,53],throughout:51,throughput:21,thrown:[4,12,40,44,49],thu:[3,5,8,11,12,21,22,23,27,28,33,35,36,40,47,49,50],tick:51,ticket:12,tidi:13,tighten:49,tightli:12,time:[],timelin:49,timem:49,timeout:4,timestamp:[],titl:16,tls1:35,tls:[8,24,27,31,40],toblock:46,todo:[5,12,36,46,49],togeth:[1,3,6,9,12,23,28,30,40,49,50,51],toinstant:[],token:[3,9,12,25,47,50],tokeypair:36,told:5,toledgertransact:[22,47],toler:[11,21],tolist:47,too:[5,12,15,40,47,49],took:[12,50],tool:[0,12,14,15,17,23,24,29,31,32,33,34,38,40,43,46,51],top:[1,3,5,9,12,16,29,31,34,40,43,48,50,51,53],topic:[21,31,49],topicsess:[31,40],topolog:34,topriv:12,torn:40,toset:47,tosignedtransact:[12,13,22,46,47,49,54],tostateandref:47,tostr:[5,12,38,49],total:[0,22,29,33,47],totypedarrai:47,touch:[15,18],toward:[40,41],towiretransact:[22,30,36],trace:[12,33,50],track:[],tracker:[12,26,40],trade:[],tradeapprovalcontract:47,tradeoff:[5,36,40],trader:[],traderequest:12,traffic:[8,32],transact:[],transactionbuild:[12,22,36,40,46,47,49,54],transactionforcontract:[3,49,50],transactionforverif:49,transactionst:[21,22,40],transactionstorag:35,transactiontyp:[12,40,46,47,54],transactionverificationexcept:53,transfer:[28,43,44,47,49,53,54],transferedfundsoutput:47,transform:26,transit:[22,23,25,27,35,44,47,49],translat:35,transmit:[],transport:[0,8,10,51],travel:49,treat:[4,10,12,31,40,44,49],treatment:12,tree:[],tri:[0,40,49],tricki:12,trigger:[3,6,11,12,29,35,36,43,50],trivial:[5,46],troubl:16,troubleshoot:[],trust:[6,8,23,27,35,37,44,47],trustpass:[8,45],truststor:[8,35,40,51],truststorepassword:[8,45],truth:12,tune:[],tunnel:45,tupl:5,ture:23,turn:[3,12,25,49,50,53],tutori:[],tweak:[29,40,53],twice:53,two:[],twopartydealflow:11,twopartytradeflow:[12,26],txb:22,txhash:[12,48,49,54],txid:47,txstate:36,txt:[33,51],type:[],typenam:12,typeonlycommanddata:[49,50],typetobui:12,typic:[0,1,9,11,12,22,25,31,33,35,36,38,44,46,47,49],ugli:12,ultim:[35,47],ultimat:33,unaccept:12,unacceptablepriceexcept:12,unavoid:12,uncertain:43,unchang:40,unclutt:12,unconfirm:47,unconsum:[28,35,38],undelet:[15,16],under:[2,10,22,29,35,40,41,43,48,49,50,53],undergo:40,underli:[6,7,12,22,25,27,40],underpin:20,underscor:5,understand:[0,32,33,36,47,49,50,51],unencrypt:8,unexpect:[12,44,51],unfamiliar:15,unfinish:12,unfortun:[12,33,44,49],unicredit:40,unifi:40,uniform:11,unilater:47,unindex:16,union:47,uniqu:[11,12,21,22,23,24,25,31,35,36,37,39,40,46],uniqueidentifi:[],uniquenessprovid:35,unit:[0,3,12,13,21,22,28,29,31,35,36,40,47,49,51,53],univers:40,unknow:21,unknown:[22,30,36,47],unknownfix:[30,36],unless:[5,12,36,41,49,51],unlik:[35,49],unlike:[4,6],unlink:16,unlock:8,unmerg:51,unnotarisedstx:12,unnotarisedtransact:12,unpack:[10,35,49],unpars:23,unprocess:[3,50],unread:12,unrecognis:49,unrel:[49,50],unschedul:11,unserialis:12,unset:7,unspecifi:52,unspent:[17,23,28],unstabl:15,unstarted:12,unsubscrib:4,unsubscript:4,unsupportedoperationexcept:[4,49],until:[4,7,11,12,13,21,35,36,40,41,43,45,51,53],untrust:12,untrustedstx:12,untrustworthi:27,untrustworthydata:[12,40,44],unverifiedtransact:53,unwrap:[12,36,40,47],upcom:[11,40],updat:[4,9,10,12,15,16,23,28,29,31,35,40,41,47,48,49,51,52],update:52,upgrad:[12,16,26,38,40,49],upgrade:40,uphold:49,upload:[],uploadattach:46,uploadrat:43,upon:[7,10,12,16,17,18,24,28,35,43,47,49,51],upward:41,urandom:29,url:[8,10,15,33,37,40,43,45,51],usa:34,usabl:[0,40,41,49],usag:[],usage:[3,48],usb:51,usd:[29,34,48],use:[1,5,6,34,43,51],usehttps:[8,45],useless:49,user1:[8,34,43,45,51],usernam:[1,4,8,27,31,33,34,39,43,48],using:[],usr:2,usual:[5,10,16,23,28,43,47,49,50,51],usualli:[3,41,50,51],utc:11,util:[],utilis:[32,48],utiliti:37,utxo:[11,17,23],uuid:[22,40],vagu:5,val:[3,5,11,12,13,21,22,29,30,36,38,46,47,48,49,50,51,52,53,54],valid:[],validatedtransact:13,validfrom:49,valu:[4,5,6,7,8,9,12,21,28,30,34,35,36,40,42,43,47,49,50,51,53],valuabl:36,valueof:48,vanilla:[6,7],vari:[],variabl:[5,7,10,12,36,39,49],variant:[35,49],variou:[5,9,12,23,31,33,35,40,43,44,49,51],vault:[],vaultandupdat:[48,52],vaultservic:[12,35,47],vaultsselfissu:29,vega:40,vendor:[19,33],verbos:49,verdict:47,veri:[5,6,8,12,17,33,35,36,43,44,49,53],verif:[],verifi:[],verifiedtransact:[46,48],verifyclaus:[3,50],verifying:12,verifylifecycl:3,verifypropos:40,verifysignatur:[12,47],verifywithfunct:30,versa:[6,7,12,23,25],versionnumb:51,versu:12,vertic:5,vet:44,vice:[6,7,12,23,25],video:[18,40],violet:30,virtual:[1,9,17,23,44],visibl:[],vision:[18,51],visit:[1,8],visual:[34,40,43],visualis:[31,32,48,51],visualvm:33,vital:12,vpn:45,wai:[3,4,5,10,11,12,15,16,17,21,23,29,30,31,33,34,36,38,40,43,45,47,49,51,53],wait:[11,12,13,16,29,35,36,40,43,46,52],waitforallnodestofinish:[48,51],waitforledgercommit:12,waiting_for_tx:12,wake:40,walk:23,wallet:[11,12,17,28,40,49],want:[0,3,4,5,12,15,16,18,22,29,30,33,36,40,43,44,49,50,51,52,53,54],warn:[],watch:[44,46],weak:[22,36],wear:41,web:[],webaddress:[8,45],webapi:9,webapp:40,webinar:18,webport:[10,51],webserv:[8,40,45],websit:[1,15,16],week:14,weekend:7,weight:22,well:[0,2,5,7,9,11,12,17,19,23,24,30,33,35,38,40,46,47,49,50,51],went:5,were:[3,5,12,35,36,43,47,49,51],west:25,what:[],whatev:[5,12,25,32,35,36,47],when:[0,1,3,4,5,6,7,8,9,10,11,12,13,15,16,21,22,23,25,26,29,30,31,32,33,34,35,36,37,38,40,43,44,46,47,48,49,50,51,53],whenev:[5,15],where:[],wherea:[7,40,43],wherebi:[1,50],wherev:33,whether:[3,4,6,12,21,22,26,29,35,36,40,45,49,50],which:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,35,36,38,40,41,43,45,46,47,48,49,50,51,52,53,54],whilst:[12,32,35,36,40,44,49],white:[9,18,20,21,23,26,27,28,40,51],whitelist:[6,9,10,11,12,48],who:[5,8,12,14,21,22,23,27,31,36,40,43,49,51],whole:[30,35,42,53],whom:6,whose:[6,21,33],why:[],wide:[4,5,30],widescreen:5,widespread:5,widget:34,width:5,wiki:[49,50],wikipedia:[49,50],wipe:16,wiretransact:[],wish:[1,10,12,25,36,38,39,40,43,47,49,51],wit:45,withattach:13,within:[],withitem:[22,47,49],withkei:[12,47],withnewown:[12,49],without:[0,5,12,17,19,22,23,26,27,31,32,35,40,42,43,44,47,49,50,51,54],withoutissu:[12,49],withoutown:[49,50],withowner:[49,53],won:[12,16,31,34,36,40,48,49,51,52,53],word:[5,8,21],work:[],worker:5,workflow:[1,9,23,26,47],workflowtransactionbuildtutori:47,workflowtransactionbuildtutorialtest:47,working:36,workspac:[8,9,10,35,37,47],world:[8,12,23,32,34,36,43,45,47,49,53],worn:49,worri:[5,12,49,51],worth:[5,44,49,50,51],worthless:[30,36],would:[0,4,5,6,7,9,10,12,17,19,22,23,32,33,36,40,43,44,46,47,49,50,51,52,54],wouldn:36,wow:51,wrap:[3,5,22,25,31,33,35,40,44,49,50],wrapper:[0,5,12,15,21,48,51],write:[],written:[2,3,4,7,14,15,23,26,36,40,47,49,51,52],wrong:[4,5,12,53],wtx:[12,30,36,46,47],www:2,xml:33,xmx1024m:33,xsrf:51,xss:51,xterm:[],year:[7,12],yellow:26,yet:[5,7,12,17,19,22,28,32,34,37,40,47,52],yield:[23,33],york:10,you:[0,1,2,3,4,5,10,11,12,13,14,15,16,18,19,22,25,29,30,31,32,33,34,35,36,37,38,39,40,42,43,44,45,48,49,50,51,52,53],your:[],yourself:[11,18,22,44,50,51],zero:[3,17,23,24,30,36,49],zip:[23,33,43,46],zone:11,zoneddatetim:11,zoom:40},titles:["CLI vs IDE","Working with the Corda Demo on Azure Marketplace","Building the documentation","Clauses","Client RPC","Code style guide","Contract catalogue","Interest rate swaps","Node configuration","The Corda plugin framework","CorDapp basics","Event scheduling","Writing flows","Writing flow tests","Further notes on Kotlin","Getting set up","Troubleshooting","Glossary","Welcome to the Corda documentation!","What’s included?","Overview","Consensus and notaries","Core types","Data model","Corda ecosystem","Financial model","Flow framework","Security model","Vault","Load testing","Transaction tear-offs","Networking and messaging","Network Simulator","Node administration","Node Explorer","Brief introduction to the node services","Writing oracle services","Network permissioning","Persistence","Publishing Corda","Release notes","Release process","Running a notary service","Running the demos","Secure coding guidelines","What is a corda network?","Using attachments","Building transactions","Client RPC API tutorial","Writing a contract","Writing a contract using clauses","The example CorDapp","Integration testing","Writing a contract test","Using a notary service"],titleterms:{"class":[4,36,48,49,50],"function":[12,49],"import":16,"try":16,about:16,abstractconserveamount:3,abstractissu:3,access:33,across:51,adding:49,administr:33,advanc:1,again:16,against:10,agreement:43,aka:43,allof:3,amount:25,anyof:3,api:[48,49],app:10,approach:36,artemismessagingserv:35,assert:36,assertion:5,asset:49,assign:54,attach:[33,46],attachment:[43,46],azure:1,background:[43,51],bank:43,basic:[3,10,36,47],befor:39,bind:36,brief:35,build:[2,10,37,47,51],buyer:12,cash:6,catalogu:6,central:39,certif:[37,45],chain:53,chang:21,check:49,claus:[3,49,50],cli:0,client:[4,36,48,51],cluster:29,code:[5,15,44,49],command:[0,16,47,49,51],comment:5,commerci:[6,49,50],commit:47,commod:6,common:16,compil:5,complain:16,complet:47,composit:[3,22],compositekei:22,configur:[8,16,29,45,51],connect:45,consensu:21,consol:51,construct:49,content:18,continu:36,contract:[6,23,44,49,50,53],corda:[1,9,10,15,18,24,30,39,43,45],cordapp:[10,15,24,36,48,51],cordform:10,core:[22,36],creat:7,cryptographi:22,cut:41,data:[23,30,36],databas:33,date:22,dbcheckpointstorag:35,dbtransactionmappingstorag:35,dbtransactionstorag:35,debug:[0,10,50,51],demo:[1,34,43,46],deploi:[1,51],detail:7,document:[2,18],download:33,e2etestkeymanagementservic:35,ecosystem:24,encumbranc:49,error:[4,5],event:[11,35],exampl:[8,11,30,51],exception:12,execut:43,explorer:34,extend:51,featur:12,field:8,file:[8,16,51],filteron:3,finalis:12,financi:25,firstof:3,fix:33,flow:[12,13,26,35,36,44],format:8,found:16,framework:[9,26,35],frequent:0,from:[36,48,51],further:14,futur:[4,12],gather:47,gener:[5,47,49],get:[15,39,51],git:15,glossari:17,gradl:[0,10,15,16,51],group:[49,50],groupclauseverifi:3,guid:5,guidelin:44,handl:[4,12],happen:[43,49],hibernateobserv:35,hide:[30,36],how:[11,29,49,50],http:51,ide:[0,15],idea:[15,16],ident:35,implement:[11,12,35,36],includ:19,individu:29,initial:43,inmemoryidentityservic:35,inmemorynetworkmapcach:35,inmemorystatemachinerecordedtransactionmappingstorag:35,inmemoryuniquenessprovid:35,input:47,install:10,instanc:7,integrat:52,intellij:[0,51],interact:51,interest:[6,7,33],interfac:[32,34],introduct:[11,12,35,36,43,47],irs:[1,43],issu:16,java:16,javafx:16,jcenter:39,jdk:16,jvm:15,kei:[22,35],kotlin:[14,15,16],kryo:[4,48],lack:16,length:5,lifecycl:[7,22,47],line:[0,5,51],load:29,local:[39,51],locat:8,log:[1,33,45],mac:0,machin:51,make:[16,49],manag:35,map:[31,38],margin:43,marketplac:1,math:22,maven:39,memori:33,merkl:30,messag:[31,35],mileston:[16,40,51],miss:16,model:[21,23,25,27],modul:16,monitor:33,multi:[22,49],multipl:21,name:5,namedbyhash:22,network:[31,32,35,36,37,45],networkmapservic:35,next:[1,15],node:[8,10,33,34,35,45,51],nodeattachmentservic:35,nodemessagingcli:35,nodeschedulerservic:35,nodeschemaservic:35,nodevaultservic:35,non:[16,49],notari:[21,35,42,43,54],notaris:54,notaryservic:35,note:[14,40],notion:43,nozerosizedoutput:3,object:38,obligat:6,observabl:4,off:30,opene:[15,51],oracl:[16,36],orient:49,other:[3,16],outdat:16,output:47,overview:[20,23],own:45,pai:36,paper:[6,49,50],parti:[12,22,49],partial:47,particular:49,per:36,permiss:37,persist:[10,35,38],persistentkeymanagementservic:35,persistentnetworkmapservic:35,persistentuniquenessprovid:35,plai:36,pleas:16,plugin:[9,10,16,36],portfolio:43,pre:1,present:16,process:41,progress:12,project:[16,51],properti:5,protocol:4,provid:[36,51],publish:39,put:49,queri:36,queue:31,raft:43,raftuniquenessprovid:35,raftvalidatingnotaryservic:35,rate:[6,7,33],refer:[16,22],regist:[4,48],relat:[16,35,38],releas:[16,40,41,51],represent:23,request:37,requir:[2,15,49],requisit:1,rpc:[4,48,51],run:[16,29,34,37,42,43,51],safeti:4,schedul:[11,35],schema:38,sdk:16,secur:[4,27,31,44,48],seller:12,server:35,servic:[10,31,35,36,42,51,54],set:[15,45],setup:39,sign:[36,37],signatur:22,signedtransact:47,simm:[1,43],simpl:50,simplenotaryservic:35,simul:32,singl:53,smart:49,snapshot:51,softwar:15,sourc:[15,16],space:5,start:[10,12,45,49,51],state:[10,22,23,25,49],statemachinemanag:35,step:[1,15,41,43],storag:35,storageserviceimpl:35,structur:[3,51],style:5,sub:[12,36],summari:50,support:22,suspend:12,swap:[6,7],task:0,tear:30,technic:7,templat:10,test:[13,29,49,52,53],them:50,theori:12,thing:49,thread:[4,5],time:49,timestamp:21,track:12,trade:12,trader:43,transact:[22,23,30,36,47,49,53,54],transmit:49,tree:30,troubleshoot:16,tune:33,tutori:[48,51],two:[12,36],type:[3,22,31],unabl:16,uniqueidentifi:22,unix:0,unresolv:16,upload:33,usag:[30,33],used:0,user:1,using:[10,36,46,49,51,54],util:37,valid:[21,23],validatingnotaryservic:35,valuat:1,vari:36,vault:[28,35],verif:22,verifi:49,version:[4,12],via:[0,36,51],view:[1,10],visibl:47,warn:5,web:[35,51],welcom:18,what:[19,32,43,45,50],where:49,why:50,window:0,wire:4,wiretransact:47,within:35,work:[1,50,51],write:[12,13,29,36,49,50,53],xterm:16,your:[10,12,33,45,48,49,51]}}) \ No newline at end of file diff --git a/docs/build/html/secure-coding-guidelines.html b/docs/build/html/secure-coding-guidelines.html index 91f2422907..7433ed9e8c 100644 --- a/docs/build/html/secure-coding-guidelines.html +++ b/docs/build/html/secure-coding-guidelines.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

                                                                            The Corda node

                                                                              diff --git a/docs/build/html/setting-up-a-corda-network.html b/docs/build/html/setting-up-a-corda-network.html index b01c95f5c7..d73fb7cd89 100644 --- a/docs/build/html/setting-up-a-corda-network.html +++ b/docs/build/html/setting-up-a-corda-network.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

                                                                              The Corda node

                                                                                diff --git a/docs/build/html/tutorial-attachments.html b/docs/build/html/tutorial-attachments.html index c47bf1ebf2..b561a7c72f 100644 --- a/docs/build/html/tutorial-attachments.html +++ b/docs/build/html/tutorial-attachments.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

                                                                                The Corda node

                                                                                  diff --git a/docs/build/html/tutorial-building-transactions.html b/docs/build/html/tutorial-building-transactions.html index 746383fc33..e78429aba1 100644 --- a/docs/build/html/tutorial-building-transactions.html +++ b/docs/build/html/tutorial-building-transactions.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

                                                                                  The Corda node

                                                                                    @@ -406,6 +409,7 @@ inline fun <reified T : LinearState> ServiceHub.latest(ref: StateRef): Sta val original = toStateAndRef<T>(ref) return linearHeads.get(original.state.data.linearId)!! } +
                                                            @@ -608,9 +612,8 @@ signature. Then the flow should ensure that all nodes end with all signatures and that they call ServiceHub.recordTransactions. The code for this is standardised in the FinalityFlow, or more explicitly an example is:

                                                            -
                                                                    // Run the FinalityFlow to notarise and distribute the completed transaction.
                                                            -        subFlow(FinalityFlow(allPartySignedTx,
                                                            -                setOf(latestRecord.state.data.source, latestRecord.state.data.counterparty)))
                                                            +
                                                                    // Notarise and distribute the completed transaction.
                                                            +        subFlow(FinalityFlow(allPartySignedTx, setOf(latestRecord.state.data.source, latestRecord.state.data.counterparty)))
                                                             
                                                            diff --git a/docs/build/html/tutorial-clientrpc-api.html b/docs/build/html/tutorial-clientrpc-api.html index 6279e1578a..bf098ec07d 100644 --- a/docs/build/html/tutorial-clientrpc-api.html +++ b/docs/build/html/tutorial-clientrpc-api.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

                                                            The Corda node

                                                              diff --git a/docs/build/html/tutorial-contract-clauses.html b/docs/build/html/tutorial-contract-clauses.html index 698fdb1158..75608255f9 100644 --- a/docs/build/html/tutorial-contract-clauses.html +++ b/docs/build/html/tutorial-contract-clauses.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

                                                              The Corda node

                                                                diff --git a/docs/build/html/tutorial-contract.html b/docs/build/html/tutorial-contract.html index fd6046ba36..7853a514d1 100644 --- a/docs/build/html/tutorial-contract.html +++ b/docs/build/html/tutorial-contract.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

                                                                The Corda node

                                                                  diff --git a/docs/build/html/tutorial-cordapp.html b/docs/build/html/tutorial-cordapp.html index 3cd92501b4..cd6d252fa6 100644 --- a/docs/build/html/tutorial-cordapp.html +++ b/docs/build/html/tutorial-cordapp.html @@ -12,7 +12,7 @@ - The CorDapp template — R3 Corda latest documentation + The example CorDapp — R3 Corda latest documentation @@ -34,6 +34,9 @@ + + @@ -117,28 +120,28 @@ API reference: Kotlin/ CorDapps

                                                                  • CorDapp basics
                                                                  • -
                                                                  • The CorDapp template
                                                                      +
                                                                    • The example CorDapp
                                                                      • Background
                                                                      • Getting started
                                                                      • -
                                                                      • Building the CorDapp template
                                                                      • -
                                                                      • Running the CorDapp template
                                                                          -
                                                                        • Running the CorDapp template from the command line
                                                                        • +
                                                                        • Building the example CorDapp
                                                                        • +
                                                                        • Running the example CorDapp
                                                                        • -
                                                                        • Interacting with the CorDapp template
                                                                            +
                                                                          • Interacting with the example CorDapp
                                                                          • -
                                                                          • Extending the CorDapp template
                                                                              -
                                                                            • CorDapp-template project structure
                                                                            • +
                                                                            • Extending the example CorDapp
                                                                                +
                                                                              • cordapp-tutorial project structure
                                                                              • The build.gradle file
                                                                              • Service Provider Configuration File
                                                                              • Re-Deploying Your Nodes Locally
                                                                              • @@ -234,7 +237,7 @@ API reference: Kotlin/
                                                                              • Docs »
                                                                              • -
                                                                              • The CorDapp template
                                                                              • +
                                                                              • The example CorDapp
                                                                              • @@ -249,13 +252,19 @@ API reference: Kotlin/ -
                                                                                -

                                                                                The CorDapp template

                                                                                -

                                                                                This guide covers how to get started with the cordapp-template. Please note there are two Corda repositories:

                                                                                +
                                                                                +

                                                                                The example CorDapp

                                                                                +
                                                                                +

                                                                                Note

                                                                                +

                                                                                The example CorDapp was previously hosted in the cordapp-template repository. It has now been +moved into a new cordapp-tutorial repository. Going forward, the cordapp-template repo will contain an +actual CorDapp template, which should be used as the basis for your CorDapps going forward.

                                                                                +
                                                                                +

                                                                                This guide covers how to get started with the example CorDapp. Please note there are several Corda repositories:

                                                                                  -
                                                                                • corda which contains the core platform code and sample CorDapps.
                                                                                • -
                                                                                • cordapp-template which contains a template CorDapp you can use to bootstrap your own CorDapps. It is the subject -of this tutorial and should help you understand the basics of building a CorDapp.
                                                                                • +
                                                                                • corda which contains the core platform code and sample CorDapps.
                                                                                • +
                                                                                • cordapp-tutorial which contains an example CorDapp you can use to bootstrap your own CorDapps. It is the subject of this tutorial and should help you understand the basics of building a CorDapp.
                                                                                • +
                                                                                • cordapp-template which contains a bare-bones template on which to build your own CorDapps.

                                                                                We recommend you read the non-technical white paper and technical white paper before you get started with Corda:

                                                                                  @@ -268,27 +277,26 @@ that because the technical white paper describes the intended end state, it does

                                                                                Background

                                                                                -

                                                                                The Example CorDapp implements a basic scenario where a buyer wishes to submit purchase orders to a seller. The scenario +

                                                                                The Example CorDapp implements a basic scenario where one party wishes to send an IOU to another party. The scenario defines four nodes:

                                                                                  -
                                                                                • Controller which hosts the network map service and validating notary service.
                                                                                • -
                                                                                • NodeA who is the buyer.
                                                                                • -
                                                                                • NodeB who is the seller.
                                                                                • -
                                                                                • NodeC an unrelated third party.
                                                                                • +
                                                                                • Controller, which hosts the network map service and validating notary service
                                                                                • +
                                                                                • NodeA
                                                                                • +
                                                                                • NodeB
                                                                                • +
                                                                                • NodeC
                                                                                -

                                                                                NodeA can generate purchase orders for lists and quantities of items and associated metadata such as delivery address -and delivery date. The flows used to facilitate the agreement process always results in an agreement with the seller as -long as the purchase order meets the contract constraints which are defined in PurchaseOrderContract.kt.

                                                                                -

                                                                                All agreed purchase orders between NodeA and NodeB become “shared facts” between NodeA and NodeB. But note that NodeC -won’t see any of these transactions or have copies of any of the resulting PurchaseOrderState objects. This is +

                                                                                The nodes can generate IOUs and send them to other nodes. The flows used to facilitate the agreement process always results in +an agreement with the recipient as long as the IOU meets the contract constraints which are defined in IOUContract.kt.

                                                                                +

                                                                                All agreed IOUs between NodeA and NodeB become “shared facts” between NodeA and NodeB. But note that NodeC +won’t see any of these transactions or have copies of any of the resulting IOUState objects. This is because data is only propagated on a need-to-know basis.

                                                                                Getting started

                                                                                -

                                                                                There are two ways to get started with the CorDapp template. You can either work from a milestone release of Corda or a +

                                                                                There are two ways to get started with the example CorDapp. You can either work from a milestone release of Corda or a SNAPSHOT release of Corda.

                                                                                Using a monthly Corda milestone release. If you wish to develop your CorDapp using the most recent milestone release -then you can get started simply by cloning the cordapp-template repository. Gradle will grab all the required dependencies +then you can get started simply by cloning the cordapp-tutorial repository. Gradle will grab all the required dependencies for you from our public Maven repository.

                                                                                Using a Corda SNAPSHOT build. Alternatively, if you wish to work from the master branch of the Corda repo which contains the most up-to-date Corda feature set then you will need to clone the corda repository and publish the latest master @@ -303,24 +311,24 @@ already have it.

                                                                                The process for developing your CorDapp from a milestone release is the most simple way to get started and is the preferred approach.

                                                                                We publish all our milestone releases to a public Maven repository on a monthly basis. As such, Gradle will automatically -grab the appropriately versioned (specified in the cordapp-template‘s build.gradle file) dependencies for you from Maven. -All you have to do is check out the release tag of the template version you wish to use.

                                                                                -

                                                                                By default, the master branch of the cordapp-template points to a SNAPSHOT release of Corda, this is because it is +grab the appropriately versioned (specified in the cordapp-tutorial‘s build.gradle file) dependencies for you from Maven. +All you have to do is check out the release tag of the tutorial version you wish to use.

                                                                                +

                                                                                By default, the master branch of the cordapp-tutorial points to a SNAPSHOT release of Corda, this is because it is being constantly updated to reflect the changes in the master branch of the corda repository.

                                                                                Note

                                                                                If you wish to use a SNAPSHOT release then follow the instructions below: Using a SNAPSHOT release.

                                                                                -

                                                                                To clone the cordapp-template repository, use the following command:

                                                                                -

                                                                                git clone https://github.com/corda/cordapp-template

                                                                                +

                                                                                To clone the cordapp-tutorial repository, use the following command:

                                                                                +

                                                                                git clone https://github.com/corda/cordapp-tutorial

                                                                                Now change directories to the freshly cloned repo:

                                                                                -

                                                                                cd cordapp-template

                                                                                +

                                                                                cd cordapp-tutorial

                                                                                To enumerate all the tagged releases. Use:

                                                                                git tag

                                                                                To checkout a specific tag, use:

                                                                                git checkout -b [local_branch_name] tags/[tag_name]

                                                                                where local_branch_name is a name of your choice and tag_name is the name of the tag you wish to checkout.

                                                                                -

                                                                                Gradle will handle all the dependencies for you. Now you are now ready to get started building the CorDapp Template.

                                                                                +

                                                                                Gradle will handle all the dependencies for you. Now you are now ready to get started building the example CorDapp.

                                                                                Using a SNAPSHOT release

                                                                                @@ -361,7 +369,7 @@ to checkout.

                                                                                Note

                                                                                When working with master you will have access to the most up-to-date feature set. However you will be -potentially sacrificing stability. We will endeavour to keep the master branch of the cordapp-template repo in sync +potentially sacrificing stability. We will endeavour to keep the master branch of the cordapp-tutorial repo in sync with the master branch of corda repo. A milestone tagged release would be more stable for CorDapp development.

                                                                                The next step is to publish the Corda JARs to your local Maven repository. By default the Maven local repository can be @@ -410,15 +418,15 @@ SNAPSHOT build such that Maven reflects the changes you have made.

                                                                                Once you have published the Corda JARs to your local Maven repository, you are ready to get started building your CorDapp using the latest Corda features.

                                                                                -
                                                                                -

                                                                                Opening the CorDapp Template with IntelliJ

                                                                                +
                                                                                +

                                                                                Opening the example CorDapp with IntelliJ

                                                                                For those familiar with IntelliJ, you can skip this section.

                                                                                As noted in the getting started guide, we recommend using the IntelliJ IDE. Assuming you have already downloaded and -installed IntelliJ, lets now open the CorDapp Template with IntelliJ.

                                                                                +installed IntelliJ, lets now open the example CorDapp with IntelliJ.

                                                                                For those completely new to IntelliJ

                                                                                Firstly, load up IntelliJ. A dialogue will appear:

                                                                                _images/intellij-welcome.png -

                                                                                Click open, then navigate to the folder where you cloned the cordapp-template and click OK.

                                                                                +

                                                                                Click open, then navigate to the folder where you cloned the cordapp-tutorial and click OK.

                                                                                Next, IntelliJ will show a bunch of pop-up windows. One of which requires our attention:

                                                                                _images/unlinked-gradle-project.png

                                                                                Click the ‘import gradle project’ link. A dialogue will pop-up. Press OK. Gradle will now obtain all the @@ -426,38 +434,38 @@ project dependencies and perform some indexing. It usually takes a minute or so. dialogue, simply close and re-open IntelliJ again to see it again.

                                                                                Alternative approach

                                                                                Alternatively, one can instruct IntelliJ to create a new project through cloning a repository. From the IntelliJ welcome -dialogue (shown above), opt to ‘check out from version control’, then select git and enter the git URL for the CorDapp template -(https://github.com/corda/cordapp-template). You’ll then need to import the Gradle project when prompted, as explained above.

                                                                                +dialogue (shown above), opt to ‘check out from version control’, then select git and enter the git URL for the example CorDapp +(https://github.com/corda/cordapp-tutorial). You’ll then need to import the Gradle project when prompted, as explained above.

                                                                                If you already have IntelliJ open

                                                                                -

                                                                                From the File menu, navigate to Open ... and then navigate to the directory where you cloned the cordapp-template. +

                                                                                From the File menu, navigate to Open ... and then navigate to the directory where you cloned the cordapp-tutorial. Alternatively, if you wish to clone from github directly then navigate to File > New > Project from existing sources ... -and enter the URL to the CorDapp Template (specified above). When instructed, be sure to import the Gradle project when prompted.

                                                                                +and enter the URL to the example CorDapp (specified above). When instructed, be sure to import the Gradle project when prompted.

                                                                                The Gradle plugin

                                                                                IntelliJ can be used to run Gradle tasks through the Gradle plugin which can be found via View > Tool windows > Gradle. All the Gradle projects are listed in the window on the right hand side of the IDE. Click on a project, then ‘tasks’ to see all available Gradle tasks.

                                                                                  -
                                                                                • For the CorDapp Template repo there will only be one Gradle project listed.
                                                                                • +
                                                                                • For the example CorDapp repo there will only be one Gradle project listed.
                                                                                • For the Corda repo there will be many project listed, the root project corda and associated sub-projects: core, finance, node, etc.

                                                                                Note

                                                                                -

                                                                                It’s worth noting that when you change branch in the CorDapp template, the corda_version will change to +

                                                                                It’s worth noting that when you change branch in the example CorDapp, the corda_version will change to reflect the version of the branch you are working from.

                                                                                To execute a task, double click it. The output will be shown in a console window.

                                                                                -
                                                                                -

                                                                                Building the CorDapp template

                                                                                +
                                                                                +

                                                                                Building the example CorDapp

                                                                                From the command line

                                                                                -

                                                                                Firstly, return to your terminal window used above and make sure you are in the cordapp-template directory.

                                                                                -

                                                                                To build the CorDapp template use the following command:

                                                                                +

                                                                                Firstly, return to your terminal window used above and make sure you are in the cordapp-tutorial directory.

                                                                                +

                                                                                To build the example CorDapp use the following command:

                                                                                Unix/Mac OSX: ./gradlew deployNodes

                                                                                Windows: gradlew.bat deployNodes

                                                                                -

                                                                                This build process will build the example CorDapp defined in the CorDapp template source. CorDapps can be written in -any language targeting the JVM. In our case, we’ve provided the template source in both Kotlin (/kotlin/src) and +

                                                                                This build process will build the example CorDapp defined in the example CorDapp source. CorDapps can be written in +any language targeting the JVM. In our case, we’ve provided the example source in both Kotlin (/kotlin/src) and Java (/java/src) Since both sets of source files are functionally identical, we will refer to the Kotlin build throughout the documentation.

                                                                                For more information on the example CorDapp see “The Example CorDapp” section below. Gradle will then grab all the @@ -465,7 +473,7 @@ dependencies for you and build the example CorDapp.

                                                                                The deployNodes Gradle task allows you easily create a formation of Corda nodes. In the case of the example CorDapp we are creating four nodes.

                                                                                After the building process has finished to see the newly built nodes, you can navigate to the kotlin/build/nodes folder -located in the cordapp-template root directory. You can ignore the other folders in /build for now. The nodes +located in the cordapp-tutorial root directory. You can ignore the other folders in /build for now. The nodes folder has the following structure:

                                                                                . nodes
                                                                                 ├── controller
                                                                                @@ -501,10 +509,10 @@ a node.conf file. See 
                                                                                -

                                                                                Running the CorDapp template

                                                                                -
                                                                                -

                                                                                Running the CorDapp template from the command line

                                                                                +
                                                                                +

                                                                                Running the example CorDapp

                                                                                +
                                                                                +

                                                                                Running the example CorDapp from the command line

                                                                                To run the sample CorDapp navigate to the kotlin/build/nodes folder and execute the runnodes shell script with:

                                                                                Unix: ./runnodes or sh runnodes

                                                                                Windows: runnodes.bat

                                                                                @@ -518,7 +526,7 @@ message and some pertinent config information, see below:

                                                                                --- DEVELOPER SNAPSHOT ------------------------------------------------------------ -Logs can be found in : /Users/rogerwillis/Documents/Corda/cordapp-template/kotlin/build/nodes/nodea/logs +Logs can be found in : /Users/rogerwillis/Documents/Corda/cordapp-tutorial/kotlin/build/nodes/nodea/logs Database connection URL is : jdbc:h2:tcp://10.18.0.196:50661/node Node listening on address : localhost:10004 Loaded plugins : com.example.plugin.ExamplePlugin @@ -583,12 +591,12 @@ and sets up an RPC user for all but the “Controller” node (which hos

                                                                                The node driver can also be used to as a basis for debugging your CorDapp

                                                                                -
                                                                                -

                                                                                Interacting with the CorDapp template

                                                                                +
                                                                                +

                                                                                Interacting with the example CorDapp

                                                                                Via HTTP

                                                                                The CorDapp defines a few HTTP API end-points and also serves some static web content. The end-points allow you to -list purchase orders and add purchase orders.

                                                                                +list IOUs and add IOUs.

                                                                                The nodes can be found using the following port numbers, defined in build.gradle and the respective node.conf file for each node found in kotlin/build/nodes/NodeX` etc:

                                                                                  @@ -603,11 +611,11 @@ served are as follows:

                                                                                  • /api/example/me
                                                                                  • /api/example/peers
                                                                                  • -
                                                                                  • /api/example/purchase-orders
                                                                                  • -
                                                                                  • /api/example/{COUNTERPARTY}/create-purchase-order
                                                                                  • +
                                                                                  • /api/example/ious
                                                                                  • +
                                                                                  • /api/example/{COUNTERPARTY}/create-iou

                                                                                  The static web content is served from /web/example.

                                                                                  -

                                                                                  A purchase order can be created via accessing the api/example/create-purchase-order end-point directly or through the +

                                                                                  An IOU can be created via accessing the api/example/create-iou end-point directly or through the the web form hosted at /web/example.

                                                                                  @@ -616,16 +624,16 @@ the web form hosted at /web/exa anti-XSS, anti-XSRF or any other security techniques. Do not copy such code directly into products meant for production use.

                                                                                  -

                                                                                  Submitting a purchase order via HTTP API:

                                                                                  -

                                                                                  To create a purchase order from NodeA to NodeB, use:

                                                                                  -
                                                                                  echo '{"orderNumber": "1","deliveryDate": "2018-09-15","deliveryAddress": {"city": "London","country": "UK"},"items" : [{"name": "widget","amount": "3"},{"name": "thing","amount": "4"}]}' | cURL -T - -H 'Content-Type: application/json' http://localhost:10005/api/example/NodeB/create-purchase-order
                                                                                  +

                                                                                  Submitting an IOU via HTTP API:

                                                                                  +

                                                                                  To create an IOU from NodeA to NodeB, use:

                                                                                  +
                                                                                  echo '{"value": "1"}' | cURL -T - -H 'Content-Type: application/json' http://localhost:10005/api/example/NodeB/create-iou
                                                                                   

                                                                                  Note the port number 10005 (NodeA) and NodeB referenced in the API end-point path. This command instructs NodeA to -create and send a purchase order to NodeB. Upon verification and completion of the process, both nodes (but not NodeC) will -have a signed, notarised copy of the purchase order.

                                                                                  -

                                                                                  Submitting a purchase order via web/example:

                                                                                  -

                                                                                  Navigate to the “create purchase order” button at the top left of the page, enter in the purchase order details e.g.

                                                                                  +create and send an IOU to NodeB. Upon verification and completion of the process, both nodes (but not NodeC) will +have a signed, notarised copy of the IOU.

                                                                                  +

                                                                                  Submitting an IOU via web/example:

                                                                                  +

                                                                                  Navigate to the “create IOU” button at the top left of the page, and enter the IOU details - e.g.

                                                                                  Counter-party: Select from list
                                                                                   Order Number:  1
                                                                                   Delivery Date: 2018-09-15
                                                                                  @@ -636,52 +644,56 @@ Item amount:   5
                                                                                   

                                                                                  and click submit (note you can add additional item types and amounts). Upon pressing submit, the modal dialogue should close. -To check what validation is performed over the purchase order data, have a look at the PurchaseOrderContract.Place class in -PurchaseOrderContract.kt which defines the following contract constraints (among others not included here):

                                                                                  -
                                                                                  // Purchase order specific constraints.
                                                                                  -"We only deliver to the UK." by (out.po.deliveryAddress.country == "UK")
                                                                                  -"You must order at least one type of item." by (out.po.items.size > 0)
                                                                                  -"You cannot order zero or negative amounts of an item." by (out.po.items.map(Item::amount).all { it > 0 })
                                                                                  -"You can only order up to 10 items at a time." by (out.po.items.map(Item::amount).sum() <= 10)
                                                                                  -val time = tx.timestamp?.midpoint
                                                                                  -"The delivery date must be in the future." by (out.po.deliveryDate.toInstant() > time)
                                                                                  +To check what validation is performed over the IOU data, have a look at the IOUContract.Create class in
                                                                                  +IOUContract.kt which defines the following contract constraints (among others not included here):

                                                                                  +
                                                                                  // Generic constraints around the IOU transaction.
                                                                                  +"No inputs should be consumed when issuing an IOU." by (tx.inputs.isEmpty())
                                                                                  +"Only one output state should be created." by (tx.outputs.size == 1)
                                                                                  +val out = tx.outputs.single() as IOUState
                                                                                  +"The sender and the recipient cannot be the same entity." by (out.sender != out.recipient)
                                                                                  +"All of the participants must be signers." by (command.signers.containsAll(out.participants))
                                                                                  +
                                                                                  +// IOU-specific constraints.
                                                                                  +"The IOU's value must be non-negative." by (out.iou.value > 0)
                                                                                   
                                                                                  -

                                                                                  Once a purchase order has been submitted:

                                                                                  +

                                                                                  Once an IOU has been submitted:

                                                                                  Inspect the terminal windows for the nodes. Assume all of the above contract constraints are met, you should see some activity in the terminal windows for NodeA and NodeB (note: the green ticks are only visible on unix/mac):

                                                                                  NodeA:

                                                                                  -
                                                                                  ✅  Constructing proposed purchase order.
                                                                                  -✅  Sending purchase order to seller for review.
                                                                                  -✅  Received partially signed transaction from seller.
                                                                                  -✅  Verifying signatures and contract constraints.
                                                                                  +
                                                                                  
                                                                                  +
                                                                                  +
                                                                                  +

                                                                                  ✅ Generating transaction based on new IOU. +✅ Verifying contract constraints. ✅ Signing transaction with our private key. -✅ Obtaining notary signature. - ✅ Requesting signature by Notary service - ✅ Validating response from Notary service -✅ Recording transaction in vault. -✅ Sending fully signed transaction to seller. -✅ Done -

                                                                                  -
                                                                                  +✅ Sending proposed transaction to recipient for review. +✅ Done

                                                                                  NodeB:

                                                                                  -
                                                                                  ✅  Receiving proposed purchase order from buyer.
                                                                                  -✅  Generating transaction based on proposed purchase order.
                                                                                  -✅  Signing proposed transaction with our private key.
                                                                                  -✅  Sending partially signed transaction to buyer and wait for a response.
                                                                                  -✅  Verifying signatures and contract constraints.
                                                                                  -✅  Recording transaction in vault.
                                                                                  -✅  Done
                                                                                  +
                                                                                  
                                                                                   
                                                                                  +

                                                                                  ✅ Receiving proposed transaction from sender. +✅ Verifying signatures and contract constraints. +✅ Signing proposed transaction with our private key. +✅ Obtaining notary signature and recording transaction.

                                                                                  +
                                                                                  +
                                                                                  +
                                                                                  ✅ Requesting signature by notary service
                                                                                  +
                                                                                  ✅ Requesting signature by Notary service +✅ Validating response from Notary service
                                                                                  +
                                                                                  +

                                                                                  ✅ Broadcasting transaction to participants

                                                                                  +
                                                                                  +

                                                                                  ✅ Done

                                                                                  NodeC:

                                                                                  You shouldn't see any activity.
                                                                                   
                                                                                  -

                                                                                  Next you can view the newly created purchase order by accessing the vault of NodeA or NodeB:

                                                                                  +

                                                                                  Next you can view the newly created IOU by accessing the vault of NodeA or NodeB:

                                                                                  Via the HTTP API:

                                                                                  -

                                                                                  For NodeA. navigate to http://localhost:10005/api/example/purchase-orders. For NodeB, -navigate to http://localhost:10007/api/example/purchase-orders.

                                                                                  +

                                                                                  For NodeA. navigate to http://localhost:10005/api/example/ious. For NodeB, +navigate to http://localhost:10007/api/example/ious.

                                                                                  Via web/example:

                                                                                  Navigate to http://localhost:10005/web/example the refresh button in the top left-hand side of the page. You should see the newly created agreement on the page.

                                                                                  @@ -700,7 +712,7 @@ section, above. Change directories to the bin folder:

                                                                                  The h2 web console should start up in a web browser tab. To connect we first need to obtain a JDBC connection string. Each node outputs its connection string in the terminal window as it starts up. In a terminal window where a node is running, look for the following string:

                                                                                  -

                                                                                  Database connection URL is              : jdbc:h2:tcp://10.18.0.150:56736/node

                                                                                  +

                                                                                  Database connection URL is              : jdbc:h2:tcp://10.18.0.150:56736/node

                                                                                  you can use the string on the right to connect to the h2 database: just paste it in to the JDBC URL field and click Connect. You will be presented with a web application that enumerates all the available tables and provides an interface for you to query them using SQL.

                                                                                  @@ -708,9 +720,9 @@ query them using SQL.

                                                                                  Using the Example RPC client

                                                                                  The /src/main/kotlin/com/example/client/ExampleClientRPC.kt file is a simple utility which uses the client RPC library -to connect to a node and log the ‘placed’ purchase orders. It will log any existing purchase orders and listen for any future -purchase orders. If you haven’t placed any purchase orders when you connect to one of the Nodes via RPC then the client will log -and future purchase orders which are agreed.

                                                                                  +to connect to a node and log the created IOUs. It will log any existing IOUs and listen for any future +IOUs. If you haven’t created any IOUs when you connect to one of the Nodes via RPC then the client will log +and future IOUs which are agreed.

                                                                                  To build the client use the following gradle task:

                                                                                  ./gradlew runExampleClientRPC

                                                                                  To run the client, via IntelliJ:

                                                                                  @@ -727,12 +739,12 @@ application see:

                                                                                -
                                                                                -

                                                                                Extending the CorDapp template

                                                                                -
                                                                                -

                                                                                CorDapp-template project structure

                                                                                -

                                                                                The CorDapp template has the following directory structure:

                                                                                -
                                                                                . cordapp-template
                                                                                +
                                                                                +

                                                                                Extending the example CorDapp

                                                                                +
                                                                                +

                                                                                cordapp-tutorial project structure

                                                                                +

                                                                                The example CorDapp has the following directory structure:

                                                                                +
                                                                                . cordapp-tutorial
                                                                                 ├── README.md
                                                                                 ├── LICENSE
                                                                                 ├── build.gradle
                                                                                @@ -746,7 +758,7 @@ application see:

                                                                                ├── lib │   ├── ... ├── settings.gradle -├── kotlin +├── kotlin-source │ └── src │ ├── main │    │   ├── kotlin @@ -758,10 +770,10 @@ application see:

                                                                                │    │   │   ├── client │    │   │   │   └── ExampleClientRPC.kt │    │   │   ├── contract -│    │   │   │   ├── PurchaseOrderContract.kt -│    │   │   │   └── PurchaseOrderState.kt +│    │   │   │   ├── IOUContract.kt +│    │   │   │   └── IOUState.kt │    │   │   ├── model -│    │   │   │   └── PurchaseOrder.kt +│    │   │   │   └── IOU.kt │    │   │   ├── plugin │    │   │   │   └── ExamplePlugin.kt │    │   │   └── flow @@ -788,7 +800,7 @@ application see:

                                                                                │ │   └── example │ │   └── ExampleTest.kt │    └── resources -└── java +└── java-source └── src ├── main    │   ├── java @@ -800,10 +812,10 @@ application see:

                                                                                   │   │   ├── client    │   │   │   └── ExampleClientRPC.java    │   │   ├── contract -    │   │   │   ├── PurchaseOrderContract.java -    │   │   │   └── PurchaseOrderState.java +    │   │   │   ├── IOUContract.java +    │   │   │   └── IOUState.java    │   │   ├── model -    │   │   │   └── PurchaseOrder.java +    │   │   │   └── IOU.java    │   │   ├── plugin    │   │   │   └── ExamplePlugin.java    │   │   └── flow @@ -865,8 +877,8 @@ are available for use in the rest of the build script. It also specifies version things.

                                                                                If you are working from a Corda SNAPSHOT release which you have publish to Maven local then ensure that corda_version is the same as the version of the Corda core modules you published to Maven local. If not then change the -kotlin_version property. Also, if you are working from a previous milestone release, then be sure to git checkout -the correct version of the CorDapp template from the cordapp-template repo.

                                                                                +kotlin_version property. Also, if you are working from a previous cordapp-tutorial milestone release, then be sure to git checkout +the correct version of the example CorDapp from the cordapp-tutorial repo.

                                                                                buildscript {
                                                                                     ext.kotlin_version = '1.0.4'
                                                                                     ext.corda_version = '0.5-SNAPSHOT' // Ensure this version is the same as the corda core modules you are using.
                                                                                @@ -939,7 +951,7 @@ like to deploy for testing. See further details below:

                                                                                only requirement is that you must specify a node to run as the network map service and one as the notary service.

                                                                                Note

                                                                                -

                                                                                CorDapps in the current cordapp-template project are automatically registered with all nodes defined in +

                                                                                CorDapps in the current cordapp-tutorial project are automatically registered with all nodes defined in deployNodes, although we expect this to change in the near future.

                                                                                @@ -950,7 +962,7 @@ only requirement is that you must specify a node to run as the network map servi

                                                                                Service Provider Configuration File

                                                                                -

                                                                                If you are building a CorDapp from scratch or adding a new CorDapp to the CorDapp-template project then you must provide +

                                                                                If you are building a CorDapp from scratch or adding a new CorDapp to the cordapp-tutorial project then you must provide a reference to your sub-class of CordaPluginRegistry in the provider-configuration file in located in the resources/META-INF/services directory.

                                                                                @@ -989,8 +1001,8 @@ the following changes:

                                                                                controller node is running and to its legal name (e.g. networkMapService.address=”10.18.0.166:10002” and networkMapService.legalName=controller) (please note that the controller will not have the networkMapService config)

                                                                                Each machine should now run its nodes using runnodes or runnodes.bat -files. Once they are up and running, the nodes should be able to place -purchase orders among themselves in the same way as when they were running on +files. Once they are up and running, the nodes should be able to create +IOUs among themselves in the same way as when they were running on the same machine.

                                                                                diff --git a/docs/build/html/tutorial-integration-testing.html b/docs/build/html/tutorial-integration-testing.html index ef6045509e..8dcc4f699f 100644 --- a/docs/build/html/tutorial-integration-testing.html +++ b/docs/build/html/tutorial-integration-testing.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

                                                                                The Corda node

                                                                                  diff --git a/docs/build/html/tutorial-test-dsl.html b/docs/build/html/tutorial-test-dsl.html index 71c124f20d..addf24da99 100644 --- a/docs/build/html/tutorial-test-dsl.html +++ b/docs/build/html/tutorial-test-dsl.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

                                                                                  The Corda node

                                                                                    diff --git a/docs/build/html/using-a-notary.html b/docs/build/html/using-a-notary.html index 43a5ea9198..854dc64e26 100644 --- a/docs/build/html/using-a-notary.html +++ b/docs/build/html/using-a-notary.html @@ -34,6 +34,9 @@ + + @@ -117,7 +120,7 @@ API reference: Kotlin/ CorDapps

                                                                                    The Corda node

                                                                                      From c0bcbc381d54c3078aa8d2c28460bda6a3a2e630 Mon Sep 17 00:00:00 2001 From: chalkido Date: Wed, 8 Feb 2017 11:46:08 +0000 Subject: [PATCH 24/33] Extract Class pattern: Move MerkleTree (from MerkleTransaction) to its own class file inside core.crypto package. --- .../net/corda/core/crypto/MerkleTree.kt | 69 +++++++++++++++++++ .../corda/core/crypto/PartialMerkleTree.kt | 2 +- .../core/transactions/MerkleTransaction.kt | 66 ------------------ .../core/transactions/WireTransaction.kt | 1 + 4 files changed, 71 insertions(+), 67 deletions(-) create mode 100644 core/src/main/kotlin/net/corda/core/crypto/MerkleTree.kt diff --git a/core/src/main/kotlin/net/corda/core/crypto/MerkleTree.kt b/core/src/main/kotlin/net/corda/core/crypto/MerkleTree.kt new file mode 100644 index 0000000000..817ef515e6 --- /dev/null +++ b/core/src/main/kotlin/net/corda/core/crypto/MerkleTree.kt @@ -0,0 +1,69 @@ +package net.corda.core.crypto + +import java.util.* + +/** + * Creation and verification of a Merkle Tree for a Wire Transaction. + * + * See: https://en.wikipedia.org/wiki/Merkle_tree + * + * Transaction is split into following blocks: inputs, attachments' refs, outputs, commands, notary, + * signers, tx type, timestamp. Merkle Tree is kept in a recursive data structure. Building is done bottom up, + * from all leaves' hashes. If number of leaves is not a power of two, the tree is padded with zero hashes. + */ +sealed class MerkleTree(val hash: SecureHash) { + class Leaf(val value: SecureHash) : MerkleTree(value) + class Node(val value: SecureHash, val left: MerkleTree, val right: MerkleTree) : MerkleTree(value) + + companion object { + private fun isPow2(num: Int): Boolean = num and (num-1) == 0 + + /** + * Merkle tree building using hashes, with zero hash padding to full power of 2. + */ + @Throws(IllegalArgumentException::class) + fun getMerkleTree(allLeavesHashes: List): MerkleTree { + val leaves = padWithZeros(allLeavesHashes).map { Leaf(it) } + return buildMerkleTree(leaves) + } + + // If number of leaves in the tree is not a power of 2, we need to pad it with zero hashes. + private fun padWithZeros(allLeavesHashes: List): List { + var n = allLeavesHashes.size + if (isPow2(n)) return allLeavesHashes + val paddedHashes = ArrayList(allLeavesHashes) + while (!isPow2(n)) { + paddedHashes.add(SecureHash.zeroHash) + n++ + } + return paddedHashes + } + + /** + * Tailrecursive function for building a tree bottom up. + * @param lastNodesList MerkleTree nodes from previous level. + * @return Tree root. + */ + private tailrec fun buildMerkleTree(lastNodesList: List): MerkleTree { + if (lastNodesList.isEmpty()) + throw MerkleTreeException("Cannot calculate Merkle root on empty hash list.") + if (lastNodesList.size == 1) { + return lastNodesList[0] //Root reached. + } else { + val newLevelHashes: MutableList = ArrayList() + var i = 0 + val n = lastNodesList.size + while (i < n) { + val left = lastNodesList[i] + require(i+1 <= n-1) { "Sanity check: number of nodes should be even." } + val right = lastNodesList[i+1] + val newHash = left.hash.hashConcat(right.hash) + val combined = Node(newHash, left, right) + newLevelHashes.add(combined) + i += 2 + } + return buildMerkleTree(newLevelHashes) + } + } + } +} \ No newline at end of file diff --git a/core/src/main/kotlin/net/corda/core/crypto/PartialMerkleTree.kt b/core/src/main/kotlin/net/corda/core/crypto/PartialMerkleTree.kt index d03767176c..488d4c52c7 100644 --- a/core/src/main/kotlin/net/corda/core/crypto/PartialMerkleTree.kt +++ b/core/src/main/kotlin/net/corda/core/crypto/PartialMerkleTree.kt @@ -1,6 +1,6 @@ package net.corda.core.crypto -import net.corda.core.transactions.MerkleTree +import net.corda.core.crypto.MerkleTree import net.corda.core.crypto.SecureHash.Companion.zeroHash import java.util.* diff --git a/core/src/main/kotlin/net/corda/core/transactions/MerkleTransaction.kt b/core/src/main/kotlin/net/corda/core/transactions/MerkleTransaction.kt index c0198ec456..2cd6811dd3 100644 --- a/core/src/main/kotlin/net/corda/core/transactions/MerkleTransaction.kt +++ b/core/src/main/kotlin/net/corda/core/transactions/MerkleTransaction.kt @@ -13,72 +13,6 @@ fun serializedHash(x: T): SecureHash { return x.serialize(kryo).hash } -/** - * Creation and verification of a Merkle Tree for a Wire Transaction. - * - * See: https://en.wikipedia.org/wiki/Merkle_tree - * - * Transaction is split into following blocks: inputs, attachments' refs, outputs, commands, notary, - * signers, tx type, timestamp. Merkle Tree is kept in a recursive data structure. Building is done bottom up, - * from all leaves' hashes. If number of leaves is not a power of two, the tree is padded with zero hashes. - */ -sealed class MerkleTree(val hash: SecureHash) { - class Leaf(val value: SecureHash) : MerkleTree(value) - class Node(val value: SecureHash, val left: MerkleTree, val right: MerkleTree) : MerkleTree(value) - - companion object { - private fun isPow2(num: Int): Boolean = num and (num-1) == 0 - - /** - * Merkle tree building using hashes, with zero hash padding to full power of 2. - */ - @Throws(IllegalArgumentException::class) - fun getMerkleTree(allLeavesHashes: List): MerkleTree { - val leaves = padWithZeros(allLeavesHashes).map { MerkleTree.Leaf(it) } - return buildMerkleTree(leaves) - } - - // If number of leaves in the tree is not a power of 2, we need to pad it with zero hashes. - private fun padWithZeros(allLeavesHashes: List): List { - var n = allLeavesHashes.size - if (isPow2(n)) return allLeavesHashes - val paddedHashes = ArrayList(allLeavesHashes) - while (!isPow2(n)) { - paddedHashes.add(zeroHash) - n++ - } - return paddedHashes - } - - /** - * Tailrecursive function for building a tree bottom up. - * @param lastNodesList MerkleTree nodes from previous level. - * @return Tree root. - */ - private tailrec fun buildMerkleTree(lastNodesList: List): MerkleTree { - if (lastNodesList.isEmpty()) - throw MerkleTreeException("Cannot calculate Merkle root on empty hash list.") - if (lastNodesList.size == 1) { - return lastNodesList[0] //Root reached. - } else { - val newLevelHashes: MutableList = ArrayList() - var i = 0 - val n = lastNodesList.size - while (i < n) { - val left = lastNodesList[i] - require(i+1 <= n-1) { "Sanity check: number of nodes should be even." } - val right = lastNodesList[i+1] - val newHash = left.hash.hashConcat(right.hash) - val combined = Node(newHash, left, right) - newLevelHashes.add(combined) - i += 2 - } - return buildMerkleTree(newLevelHashes) - } - } - } -} - /** * Interface implemented by WireTransaction and FilteredLeaves. * Property traversableList assures that we always calculate hashes in the same order, lets us define which diff --git a/core/src/main/kotlin/net/corda/core/transactions/WireTransaction.kt b/core/src/main/kotlin/net/corda/core/transactions/WireTransaction.kt index 583448f518..999f4ff41c 100644 --- a/core/src/main/kotlin/net/corda/core/transactions/WireTransaction.kt +++ b/core/src/main/kotlin/net/corda/core/transactions/WireTransaction.kt @@ -3,6 +3,7 @@ package net.corda.core.transactions import com.esotericsoftware.kryo.Kryo import net.corda.core.contracts.* import net.corda.core.crypto.CompositeKey +import net.corda.core.crypto.MerkleTree import net.corda.core.crypto.Party import net.corda.core.crypto.SecureHash import net.corda.core.indexOfOrThrow From 0287876987e798c8a640985e68a8d9bfcc5f1035 Mon Sep 17 00:00:00 2001 From: Konstantinos Chalkias Date: Wed, 8 Feb 2017 15:21:40 +0000 Subject: [PATCH 25/33] minor changes in for/while loops. Sanity check for even number of nodes (in buildMerkleTree) has now been moved before entering the loop. --- core/src/main/kotlin/net/corda/core/crypto/MerkleTree.kt | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/core/src/main/kotlin/net/corda/core/crypto/MerkleTree.kt b/core/src/main/kotlin/net/corda/core/crypto/MerkleTree.kt index 817ef515e6..85e6911f8d 100644 --- a/core/src/main/kotlin/net/corda/core/crypto/MerkleTree.kt +++ b/core/src/main/kotlin/net/corda/core/crypto/MerkleTree.kt @@ -32,9 +32,8 @@ sealed class MerkleTree(val hash: SecureHash) { var n = allLeavesHashes.size if (isPow2(n)) return allLeavesHashes val paddedHashes = ArrayList(allLeavesHashes) - while (!isPow2(n)) { + while (!isPow2(n++)) { paddedHashes.add(SecureHash.zeroHash) - n++ } return paddedHashes } @@ -51,16 +50,14 @@ sealed class MerkleTree(val hash: SecureHash) { return lastNodesList[0] //Root reached. } else { val newLevelHashes: MutableList = ArrayList() - var i = 0 val n = lastNodesList.size - while (i < n) { + require((n and 1) == 0) { "Sanity check: number of nodes should be even." } + for (i in 0..n-2 step 2) { val left = lastNodesList[i] - require(i+1 <= n-1) { "Sanity check: number of nodes should be even." } val right = lastNodesList[i+1] val newHash = left.hash.hashConcat(right.hash) val combined = Node(newHash, left, right) newLevelHashes.add(combined) - i += 2 } return buildMerkleTree(newLevelHashes) } From 47d260625a2a488628f5b40996884fe9a226cea1 Mon Sep 17 00:00:00 2001 From: Ross Nicoll Date: Thu, 2 Feb 2017 16:56:25 +0000 Subject: [PATCH 26/33] Add AnonymousParty superclass of Party Add AnonymousParty superclass of Party in preparation for anonymising parties stored in contract states. Signed-off-by: Ross Nicoll --- .../net/corda/core/contracts/Structures.kt | 5 ++-- .../net/corda/core/crypto/AnonymousParty.kt | 24 +++++++++++++++++ .../kotlin/net/corda/core/crypto/Party.kt | 13 ++------- .../core/node/services/IdentityService.kt | 6 +++++ .../net/corda/core/node/services/Services.kt | 7 ++--- .../net/corda/core/node/isolated.jar | Bin 7968 -> 7893 bytes .../kotlin/net/corda/core/crypto/PartyTest.kt | 20 ++++++++++++++ docs/source/key-concepts-core-types.rst | 15 ++++++----- docs/source/release-notes.rst | 7 +++++ .../kotlin/net/corda/contracts/asset/Cash.kt | 4 +-- .../main/kotlin/net/corda/flows/CashFlow.kt | 1 + .../kotlin/net/corda/flows/IssuerFlowTest.kt | 6 ++--- .../identity/InMemoryIdentityService.kt | 9 +++++++ .../node/services/vault/NodeVaultService.kt | 4 +-- .../node/messaging/TwoPartyTradeFlowTests.kt | 7 ++--- .../net/corda/testing/node/MockServices.kt | 3 +++ .../views/cordapps/cash/CashViewer.kt | 3 ++- .../net/corda/loadtest/tests/CrossCashTest.kt | 25 +++++++++--------- .../corda/loadtest/tests/GenerateHelpers.kt | 3 ++- .../net/corda/loadtest/tests/SelfIssueTest.kt | 7 ++--- 20 files changed, 115 insertions(+), 54 deletions(-) create mode 100644 core/src/main/kotlin/net/corda/core/crypto/AnonymousParty.kt create mode 100644 core/src/test/kotlin/net/corda/core/crypto/PartyTest.kt diff --git a/core/src/main/kotlin/net/corda/core/contracts/Structures.kt b/core/src/main/kotlin/net/corda/core/contracts/Structures.kt index 3aa1298d62..aeefce5674 100644 --- a/core/src/main/kotlin/net/corda/core/contracts/Structures.kt +++ b/core/src/main/kotlin/net/corda/core/contracts/Structures.kt @@ -1,6 +1,7 @@ package net.corda.core.contracts import net.corda.core.contracts.clauses.Clause +import net.corda.core.crypto.AnonymousParty import net.corda.core.crypto.CompositeKey import net.corda.core.crypto.Party import net.corda.core.crypto.SecureHash @@ -349,8 +350,8 @@ inline fun Iterable>.filt * Reference to something being stored or issued by a party e.g. in a vault or (more likely) on their normal * ledger. The reference is intended to be encrypted so it's meaningless to anyone other than the party. */ -data class PartyAndReference(val party: Party, val reference: OpaqueBytes) { - override fun toString() = "${party.name}$reference" +data class PartyAndReference(val party: AnonymousParty, val reference: OpaqueBytes) { + override fun toString() = "${party}$reference" } /** Marker interface for classes that represent commands */ diff --git a/core/src/main/kotlin/net/corda/core/crypto/AnonymousParty.kt b/core/src/main/kotlin/net/corda/core/crypto/AnonymousParty.kt new file mode 100644 index 0000000000..30745dec02 --- /dev/null +++ b/core/src/main/kotlin/net/corda/core/crypto/AnonymousParty.kt @@ -0,0 +1,24 @@ +package net.corda.core.crypto + +import net.corda.core.contracts.PartyAndReference +import net.corda.core.serialization.OpaqueBytes +import java.security.PublicKey + +/** + * The [AnonymousParty] class contains enough information to uniquely identify a [Party] while excluding private + * information such as name. It is intended to represent a party on the distributed ledger. + */ +open class AnonymousParty(val owningKey: CompositeKey) { + /** A helper constructor that converts the given [PublicKey] in to a [CompositeKey] with a single node */ + constructor(owningKey: PublicKey) : this(owningKey.composite) + + /** Anonymised parties do not include any detail apart from owning key, so equality is dependent solely on the key */ + override fun equals(other: Any?): Boolean = other is AnonymousParty && this.owningKey == other.owningKey + override fun hashCode(): Int = owningKey.hashCode() + // Use the key as the bulk of the toString(), but include a human readable identifier as well, so that [Party] + // can put in the key and actual name + override fun toString() = "${owningKey.toBase58String()} " + + fun ref(bytes: OpaqueBytes) = PartyAndReference(this, bytes) + fun ref(vararg bytes: Byte) = ref(OpaqueBytes.of(*bytes)) +} \ No newline at end of file diff --git a/core/src/main/kotlin/net/corda/core/crypto/Party.kt b/core/src/main/kotlin/net/corda/core/crypto/Party.kt index a8f0dd7378..600db47bb5 100644 --- a/core/src/main/kotlin/net/corda/core/crypto/Party.kt +++ b/core/src/main/kotlin/net/corda/core/crypto/Party.kt @@ -1,7 +1,5 @@ package net.corda.core.crypto -import net.corda.core.contracts.PartyAndReference -import net.corda.core.serialization.OpaqueBytes import java.security.PublicKey /** @@ -22,15 +20,8 @@ import java.security.PublicKey * * @see CompositeKey */ -class Party(val name: String, val owningKey: CompositeKey) { +class Party(val name: String, owningKey: CompositeKey) : AnonymousParty(owningKey) { /** A helper constructor that converts the given [PublicKey] in to a [CompositeKey] with a single node */ constructor(name: String, owningKey: PublicKey) : this(name, owningKey.composite) - - /** Anonymised parties do not include any detail apart from owning key, so equality is dependent solely on the key */ - override fun equals(other: Any?): Boolean = other is Party && this.owningKey == other.owningKey - override fun hashCode(): Int = owningKey.hashCode() - override fun toString() = name - - fun ref(bytes: OpaqueBytes) = PartyAndReference(this, bytes) - fun ref(vararg bytes: Byte) = ref(OpaqueBytes.of(*bytes)) + override fun toString() = "${owningKey.toBase58String()} (name)" } \ No newline at end of file diff --git a/core/src/main/kotlin/net/corda/core/node/services/IdentityService.kt b/core/src/main/kotlin/net/corda/core/node/services/IdentityService.kt index e3a17ba222..ef1dcf4d9b 100644 --- a/core/src/main/kotlin/net/corda/core/node/services/IdentityService.kt +++ b/core/src/main/kotlin/net/corda/core/node/services/IdentityService.kt @@ -1,5 +1,7 @@ package net.corda.core.node.services +import net.corda.core.contracts.PartyAndReference +import net.corda.core.crypto.AnonymousParty import net.corda.core.crypto.CompositeKey import net.corda.core.crypto.Party @@ -10,6 +12,7 @@ import net.corda.core.crypto.Party */ interface IdentityService { fun registerIdentity(party: Party) + /** * Get all identities known to the service. This is expensive, and [partyFromKey] or [partyFromName] should be * used in preference where possible. @@ -22,4 +25,7 @@ interface IdentityService { fun partyFromKey(key: CompositeKey): Party? fun partyFromName(name: String): Party? + + fun partyFromAnonymous(party: AnonymousParty): Party? + fun partyFromAnonymous(partyRef: PartyAndReference) = partyFromAnonymous(partyRef.party) } diff --git a/core/src/main/kotlin/net/corda/core/node/services/Services.kt b/core/src/main/kotlin/net/corda/core/node/services/Services.kt index 8d90ba7c77..645dbe43ee 100644 --- a/core/src/main/kotlin/net/corda/core/node/services/Services.kt +++ b/core/src/main/kotlin/net/corda/core/node/services/Services.kt @@ -2,10 +2,7 @@ package net.corda.core.node.services import com.google.common.util.concurrent.ListenableFuture import net.corda.core.contracts.* -import net.corda.core.crypto.CompositeKey -import net.corda.core.crypto.Party -import net.corda.core.crypto.SecureHash -import net.corda.core.crypto.toStringShort +import net.corda.core.crypto.* import net.corda.core.toFuture import net.corda.core.transactions.TransactionBuilder import net.corda.core.transactions.WireTransaction @@ -198,7 +195,7 @@ interface VaultService { fun generateSpend(tx: TransactionBuilder, amount: Amount, to: CompositeKey, - onlyFromParties: Set? = null): Pair> + onlyFromParties: Set? = null): Pair> } inline fun VaultService.linearHeadsOfType() = linearHeadsOfType_(T::class.java) diff --git a/core/src/main/resources/net/corda/core/node/isolated.jar b/core/src/main/resources/net/corda/core/node/isolated.jar index 1b898104509733aba0b3967813598182d35b8fc2..0b6d090c585b0e9a4d2da725f3644b98aaeff491 100644 GIT binary patch delta 3303 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 diff --git a/core/src/test/kotlin/net/corda/core/crypto/PartyTest.kt b/core/src/test/kotlin/net/corda/core/crypto/PartyTest.kt new file mode 100644 index 0000000000..d1a4a0b2b3 --- /dev/null +++ b/core/src/test/kotlin/net/corda/core/crypto/PartyTest.kt @@ -0,0 +1,20 @@ +package net.corda.core.crypto + +import org.junit.Test +import java.math.BigInteger +import kotlin.test.assertEquals +import kotlin.test.assertNotEquals + +class PartyTest { + @Test + fun `equality`() { + val key = entropyToKeyPair(BigInteger.valueOf(20170207L)).public.composite + val differentKey = entropyToKeyPair(BigInteger.valueOf(7201702L)).public.composite + val anonymousParty = AnonymousParty(key) + val party = Party("test key", key) + assertEquals(party, anonymousParty) + assertEquals(anonymousParty, party) + assertNotEquals(AnonymousParty(differentKey), anonymousParty) + assertNotEquals(AnonymousParty(differentKey), party) + } +} \ No newline at end of file diff --git a/docs/source/key-concepts-core-types.rst b/docs/source/key-concepts-core-types.rst index a052a2cebd..4fca77796f 100644 --- a/docs/source/key-concepts-core-types.rst +++ b/docs/source/key-concepts-core-types.rst @@ -87,14 +87,15 @@ Party and CompositeKey Entities using the network are called *parties*. Parties can sign structures using keys, and a party may have many keys under their control. -Parties may sometimes be identified pseudonymously. For example, in a transaction sent to your node as part of a -chain of custody it is important you can convince yourself of the transaction's validity, but equally important that -you don't learn anything about who was involved in that transaction. In these cases a public key may be present -without any identifying information about who owns it. +Parties can be represented either in full (including name) or pseudonymously, using the ``Party`` or ``AnonymousParty`` +classes respectively. For example, in a transaction sent to your node as part of a chain of custody it is important you +can convince yourself of the transaction's validity, but equally important that you don't learn anything about who was +involved in that transaction. In these cases ``AnonymousParty`` should be used, which contains a composite public key +without any identifying information about who owns it. In contrast, for internal processing where extended details of +a party are required, the ``Party`` class should be used. The identity service provides functionality for resolving +anonymous parties to full parties. -Identities of parties involved in signing a transaction can be represented simply by a ``CompositeKey``, or by further -information (such as name) using the ``Party`` class. An ``AuthenticatedObject`` represents an object (like a command) -that has been signed by a set of parties. +An ``AuthenticatedObject`` represents an object (like a command) that has been signed by a set of parties. .. note:: These types are provisional and will change significantly in future as the identity framework becomes more fleshed out. diff --git a/docs/source/release-notes.rst b/docs/source/release-notes.rst index 7d0af253a8..95a0e925ab 100644 --- a/docs/source/release-notes.rst +++ b/docs/source/release-notes.rst @@ -3,6 +3,13 @@ Release notes Here are brief summaries of what's changed between each snapshot release. +Milestone 9 +----------- + +* API: + + * Pseudonymous ``AnonymousParty`` class added as a superclass of ``Party``. + Milestone 8 ----------- diff --git a/finance/src/main/kotlin/net/corda/contracts/asset/Cash.kt b/finance/src/main/kotlin/net/corda/contracts/asset/Cash.kt index 55d195a8fd..0cce72c41b 100644 --- a/finance/src/main/kotlin/net/corda/contracts/asset/Cash.kt +++ b/finance/src/main/kotlin/net/corda/contracts/asset/Cash.kt @@ -192,12 +192,12 @@ fun Iterable.sumCashOrZero(currency: Issued): Amount, issueToPartyAndRef: PartyAndReference) : RunResult { + val resolvedIssuerParty = bankOfCordaNode.services.identityService.partyFromAnonymous(issueToPartyAndRef) ?: throw IllegalStateException() val issuerFuture = bankOfCordaNode.initiateSingleShotFlow(IssuerFlow.IssuanceRequester::class) { - otherParty -> IssuerFlow.Issuer(issueToPartyAndRef.party) + otherParty -> IssuerFlow.Issuer(resolvedIssuerParty) }.map { it.stateMachine } - val issueRequest = IssuanceRequester(amount, issueToPartyAndRef.party, issueToPartyAndRef.reference, bankOfCordaNode.info.legalIdentity) + val issueRequest = IssuanceRequester(amount, resolvedIssuerParty, issueToPartyAndRef.reference, bankOfCordaNode.info.legalIdentity) val issueRequestResultFuture = bankClientNode.services.startFlow(issueRequest).resultFuture return IssuerFlowTest.RunResult(issuerFuture, issueRequestResultFuture) diff --git a/node/src/main/kotlin/net/corda/node/services/identity/InMemoryIdentityService.kt b/node/src/main/kotlin/net/corda/node/services/identity/InMemoryIdentityService.kt index 0c4ee18a6c..639bc7e951 100644 --- a/node/src/main/kotlin/net/corda/node/services/identity/InMemoryIdentityService.kt +++ b/node/src/main/kotlin/net/corda/node/services/identity/InMemoryIdentityService.kt @@ -1,5 +1,7 @@ package net.corda.node.services.identity +import net.corda.core.contracts.PartyAndReference +import net.corda.core.crypto.AnonymousParty import net.corda.core.crypto.CompositeKey import net.corda.core.crypto.Party import net.corda.core.node.services.IdentityService @@ -26,4 +28,11 @@ class InMemoryIdentityService() : SingletonSerializeAsToken(), IdentityService { override fun partyFromKey(key: CompositeKey): Party? = keyToParties[key] override fun partyFromName(name: String): Party? = nameToParties[name] + override fun partyFromAnonymous(party: AnonymousParty): Party? { + return if (party is Party) + party + else + partyFromKey(party.owningKey) + } + override fun partyFromAnonymous(partyRef: PartyAndReference) = partyFromAnonymous(partyRef.party) } diff --git a/node/src/main/kotlin/net/corda/node/services/vault/NodeVaultService.kt b/node/src/main/kotlin/net/corda/node/services/vault/NodeVaultService.kt index 80154b1c07..b0b899153b 100644 --- a/node/src/main/kotlin/net/corda/node/services/vault/NodeVaultService.kt +++ b/node/src/main/kotlin/net/corda/node/services/vault/NodeVaultService.kt @@ -5,8 +5,8 @@ import net.corda.contracts.asset.Cash import net.corda.core.ThreadBox import net.corda.core.bufferUntilSubscribed import net.corda.core.contracts.* +import net.corda.core.crypto.AnonymousParty import net.corda.core.crypto.CompositeKey -import net.corda.core.crypto.Party import net.corda.core.crypto.SecureHash import net.corda.core.node.ServiceHub import net.corda.core.node.services.Vault @@ -198,7 +198,7 @@ class NodeVaultService(private val services: ServiceHub) : SingletonSerializeAsT override fun generateSpend(tx: TransactionBuilder, amount: Amount, to: CompositeKey, - onlyFromParties: Set?): Pair> { + onlyFromParties: Set?): Pair> { // Discussion // // This code is analogous to the Wallet.send() set of methods in bitcoinj, and has the same general outline. diff --git a/node/src/test/kotlin/net/corda/node/messaging/TwoPartyTradeFlowTests.kt b/node/src/test/kotlin/net/corda/node/messaging/TwoPartyTradeFlowTests.kt index b469f33c79..de17df82a4 100644 --- a/node/src/test/kotlin/net/corda/node/messaging/TwoPartyTradeFlowTests.kt +++ b/node/src/test/kotlin/net/corda/node/messaging/TwoPartyTradeFlowTests.kt @@ -4,10 +4,7 @@ import net.corda.contracts.CommercialPaper import net.corda.contracts.asset.* import net.corda.contracts.testing.fillWithSomeTestCash import net.corda.core.contracts.* -import net.corda.core.crypto.CompositeKey -import net.corda.core.crypto.Party -import net.corda.core.crypto.SecureHash -import net.corda.core.crypto.composite +import net.corda.core.crypto.* import net.corda.core.days import net.corda.core.flows.FlowStateMachine import net.corda.core.flows.StateMachineRunId @@ -490,7 +487,7 @@ class TwoPartyTradeFlowTests { private fun LedgerDSL.fillUpForBuyer( withError: Boolean, owner: CompositeKey, - issuer: Party, + issuer: AnonymousParty, notary: Party): Pair> { val interimOwnerKey = MEGA_CORP_PUBKEY // Bob (Buyer) has some cash he got from the Bank of Elbonia, Alice (Seller) has some commercial paper she diff --git a/test-utils/src/main/kotlin/net/corda/testing/node/MockServices.kt b/test-utils/src/main/kotlin/net/corda/testing/node/MockServices.kt index 97607e55a4..c72bb66b17 100644 --- a/test-utils/src/main/kotlin/net/corda/testing/node/MockServices.kt +++ b/test-utils/src/main/kotlin/net/corda/testing/node/MockServices.kt @@ -2,6 +2,7 @@ package net.corda.testing.node import kotlinx.support.jdk8.collections.putIfAbsent import net.corda.core.contracts.Attachment +import net.corda.core.contracts.PartyAndReference import net.corda.core.crypto.* import net.corda.core.flows.FlowLogic import net.corda.core.flows.FlowStateMachine @@ -73,6 +74,8 @@ class MockIdentityService(val identities: List) : IdentityService, Single override fun registerIdentity(party: Party) { throw UnsupportedOperationException() } override fun getAllIdentities(): Iterable = ArrayList(keyToParties.values) + override fun partyFromAnonymous(party: AnonymousParty): Party? = keyToParties[party.owningKey] + override fun partyFromAnonymous(partyRef: PartyAndReference): Party? = partyFromAnonymous(partyRef.party) override fun partyFromKey(key: CompositeKey): Party? = keyToParties[key] override fun partyFromName(name: String): Party? = nameToParties[name] } diff --git a/tools/explorer/src/main/kotlin/net/corda/explorer/views/cordapps/cash/CashViewer.kt b/tools/explorer/src/main/kotlin/net/corda/explorer/views/cordapps/cash/CashViewer.kt index 477ccfab6d..7bf95c0372 100644 --- a/tools/explorer/src/main/kotlin/net/corda/explorer/views/cordapps/cash/CashViewer.kt +++ b/tools/explorer/src/main/kotlin/net/corda/explorer/views/cordapps/cash/CashViewer.kt @@ -22,6 +22,7 @@ import net.corda.contracts.asset.Cash import net.corda.core.contracts.Amount import net.corda.core.contracts.StateAndRef import net.corda.core.contracts.withoutIssuer +import net.corda.core.crypto.AnonymousParty import net.corda.core.crypto.Party import net.corda.explorer.formatters.AmountFormatter import net.corda.explorer.identicon.identicon @@ -84,7 +85,7 @@ class CashViewer : CordaView("Cash") { */ sealed class ViewerNode(val equivAmount: ObservableValue>, val states: ObservableList>) { - class IssuerNode(val issuer: Party, + class IssuerNode(val issuer: AnonymousParty, sumEquivAmount: ObservableValue>, states: ObservableList>) : ViewerNode(sumEquivAmount, states) diff --git a/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/CrossCashTest.kt b/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/CrossCashTest.kt index 495f468a7d..86f90fd09c 100644 --- a/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/CrossCashTest.kt +++ b/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/CrossCashTest.kt @@ -6,6 +6,7 @@ import net.corda.contracts.asset.Cash import net.corda.core.contracts.Issued import net.corda.core.contracts.PartyAndReference import net.corda.core.contracts.USD +import net.corda.core.crypto.AnonymousParty import net.corda.core.crypto.Party import net.corda.core.flows.FlowException import net.corda.core.getOrThrow @@ -49,7 +50,7 @@ data class CrossCashCommand( * Map from node to (map from issuer to USD quantity) */ data class CrossCashState( - val nodeVaults: Map>, + val nodeVaults: Map>, // node -> (notifying node -> [(issuer, amount)]) // This map holds the queues that encode the non-determinism of how tx notifications arrive in the background. @@ -67,20 +68,20 @@ data class CrossCashState( // requires more concurrent code which is conceptually also more complex than the current design. // TODO: Alternative: We may possibly reduce the complexity of the search even further using some form of // knapsack instead of the naive search - val diffQueues: Map>>> + val diffQueues: Map>>> ) { - fun copyVaults(): HashMap> { - val newNodeVaults = HashMap>() + fun copyVaults(): HashMap> { + val newNodeVaults = HashMap>() for ((key, value) in nodeVaults) { newNodeVaults[key] = HashMap(value) } return newNodeVaults } - fun copyQueues(): HashMap>>> { - val newDiffQueues = HashMap>>>() + fun copyQueues(): HashMap>>> { + val newDiffQueues = HashMap>>>() for ((node, queues) in diffQueues) { - val newQueues = HashMap>>() + val newQueues = HashMap>>() for ((sender, value) in queues) { newQueues[sender] = ArrayList(value) } @@ -216,9 +217,9 @@ val crossCashTest = LoadTest( gatherRemoteState = { previousState -> log.info("Reifying state...") - val currentNodeVaults = HashMap>() + val currentNodeVaults = HashMap>() simpleNodes.forEach { - val quantities = HashMap() + val quantities = HashMap() val vault = it.connection.proxy.vaultAndUpdates().first vault.forEach { val state = it.state.data @@ -230,7 +231,7 @@ val crossCashTest = LoadTest( currentNodeVaults.put(it.info.legalIdentity, quantities) } val (consistentVaults, diffQueues) = if (previousState == null) { - Pair(currentNodeVaults, mapOf>>>()) + Pair(currentNodeVaults, mapOf>>>()) } else { log.info("${previousState.diffQueues.values.sumBy { it.values.sumBy { it.size } }} txs in limbo") val newDiffQueues = previousState.copyQueues() @@ -248,12 +249,12 @@ val crossCashTest = LoadTest( "\nActual gathered state:\n${CrossCashState(currentNodeVaults, mapOf())}" ) // TODO We should terminate here with an exception, we cannot carry on as we have an inconsistent model. We carry on currently because we always diverge due to notarisation failures - return@LoadTest CrossCashState(currentNodeVaults, mapOf>>>()) + return@LoadTest CrossCashState(currentNodeVaults, mapOf>>>()) } if (matches.size > 1) { log.warn("Multiple predicted states match the remote state") } - val minimumMatches = matches.fold, HashMap?>(null) { minimum, next -> + val minimumMatches = matches.fold, HashMap?>(null) { minimum, next -> if (minimum == null) { HashMap(next) } else { diff --git a/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/GenerateHelpers.kt b/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/GenerateHelpers.kt index d8e51aee2a..8bce6439a9 100644 --- a/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/GenerateHelpers.kt +++ b/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/GenerateHelpers.kt @@ -5,6 +5,7 @@ import net.corda.client.mock.generateAmount import net.corda.client.mock.pickOne import net.corda.core.contracts.Issued import net.corda.core.contracts.PartyAndReference +import net.corda.core.crypto.AnonymousParty import net.corda.core.crypto.Party import net.corda.core.serialization.OpaqueBytes import net.corda.flows.CashCommand @@ -27,7 +28,7 @@ fun generateIssue( fun generateMove( max: Long, currency: Currency, - issuer: Party, + issuer: AnonymousParty, possibleRecipients: List ): Generator { return generateAmount(1, max, Generator.pure(Issued(PartyAndReference(issuer, OpaqueBytes.of(0)), currency))).combine( diff --git a/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/SelfIssueTest.kt b/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/SelfIssueTest.kt index 51b0767b1c..c4e7106094 100644 --- a/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/SelfIssueTest.kt +++ b/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/SelfIssueTest.kt @@ -6,6 +6,7 @@ import net.corda.client.mock.pickOne import net.corda.client.mock.replicatePoisson import net.corda.contracts.asset.Cash import net.corda.core.contracts.USD +import net.corda.core.crypto.AnonymousParty import net.corda.core.crypto.Party import net.corda.core.flows.FlowException import net.corda.core.getOrThrow @@ -26,9 +27,9 @@ data class SelfIssueCommand( ) data class SelfIssueState( - val vaultsSelfIssued: Map + val vaultsSelfIssued: Map ) { - fun copyVaults(): HashMap { + fun copyVaults(): HashMap { return HashMap(vaultsSelfIssued) } } @@ -70,7 +71,7 @@ val selfIssueTest = LoadTest( }, gatherRemoteState = { previousState -> - val selfIssueVaults = HashMap() + val selfIssueVaults = HashMap() simpleNodes.forEach { node -> val vault = node.connection.proxy.vaultAndUpdates().first vault.forEach { From 9055c9d9b06235645c196de84c5bd32b751edf48 Mon Sep 17 00:00:00 2001 From: Ross Nicoll Date: Mon, 30 Jan 2017 18:34:48 +0000 Subject: [PATCH 27/33] Split CashFlow into three flows Split CashFlow into independent CashIssueFlow, CashExitFlow and CashPaymentFlow, so that users can be given access to one but not the other(s). Signed-off-by: Ross Nicoll --- .../net/corda/client/CordaRPCClientTest.kt | 21 ++- .../net/corda/client/NodeMonitorModelTest.kt | 7 +- .../net/corda/client/mock/EventGenerator.kt | 8 +- .../corda/docs/IntegrationTestingTutorial.kt | 8 +- .../net/corda/docs/ClientRpcTutorial.kt | 15 +- .../docs/FxTransactionBuildTutorialTest.kt | 16 +- docs/source/running-the-demos.rst | 4 +- .../net/corda/flows/AbstractCashFlow.kt | 32 ++++ .../kotlin/net/corda/flows/CashExitFlow.kt | 67 +++++++ .../main/kotlin/net/corda/flows/CashFlow.kt | 165 ++++-------------- .../kotlin/net/corda/flows/CashIssueFlow.kt | 46 +++++ .../kotlin/net/corda/flows/CashPaymentFlow.kt | 49 ++++++ .../main/kotlin/net/corda/flows/IssuerFlow.kt | 4 +- .../node/services/DistributedServiceTests.kt | 20 ++- .../net/corda/node/internal/AbstractNode.kt | 20 +-- .../net/corda/node/CordaRPCOpsImplTest.kt | 44 ++--- .../statemachine/StateMachineManagerTests.kt | 12 +- samples/bank-of-corda-demo/README.md | 4 +- samples/bank-of-corda-demo/build.gradle | 8 +- .../net/corda/bank/BankOfCordaDriver.kt | 6 +- .../corda/bank/api/BankOfCordaClientApi.kt | 2 +- .../views/cordapps/cash/NewTransaction.kt | 17 +- .../net/corda/loadtest/tests/CrossCashTest.kt | 17 +- .../corda/loadtest/tests/GenerateHelpers.kt | 14 +- .../net/corda/loadtest/tests/SelfIssueTest.kt | 5 +- 25 files changed, 357 insertions(+), 254 deletions(-) create mode 100644 finance/src/main/kotlin/net/corda/flows/AbstractCashFlow.kt create mode 100644 finance/src/main/kotlin/net/corda/flows/CashExitFlow.kt create mode 100644 finance/src/main/kotlin/net/corda/flows/CashIssueFlow.kt create mode 100644 finance/src/main/kotlin/net/corda/flows/CashPaymentFlow.kt diff --git a/client/src/integration-test/kotlin/net/corda/client/CordaRPCClientTest.kt b/client/src/integration-test/kotlin/net/corda/client/CordaRPCClientTest.kt index f4aaac98a8..10cb50a950 100644 --- a/client/src/integration-test/kotlin/net/corda/client/CordaRPCClientTest.kt +++ b/client/src/integration-test/kotlin/net/corda/client/CordaRPCClientTest.kt @@ -8,8 +8,8 @@ import net.corda.core.messaging.startFlow import net.corda.core.node.services.ServiceInfo import net.corda.core.random63BitValue import net.corda.core.serialization.OpaqueBytes -import net.corda.flows.CashCommand -import net.corda.flows.CashFlow +import net.corda.flows.CashIssueFlow +import net.corda.flows.CashPaymentFlow import net.corda.node.internal.Node import net.corda.node.services.User import net.corda.node.services.config.configureTestSSL @@ -23,7 +23,10 @@ import org.junit.Before import org.junit.Test class CordaRPCClientTest : NodeBasedTest() { - private val rpcUser = User("user1", "test", permissions = setOf(startFlowPermission())) + private val rpcUser = User("user1", "test", permissions = setOf( + startFlowPermission(), + startFlowPermission() + )) private lateinit var node: Node private lateinit var client: CordaRPCClient @@ -60,8 +63,8 @@ class CordaRPCClientTest : NodeBasedTest() { val proxy = client.proxy() println("Starting flow") val flowHandle = proxy.startFlow( - ::CashFlow, - CashCommand.IssueCash(20.DOLLARS, OpaqueBytes.of(0), node.info.legalIdentity, node.info.legalIdentity)) + ::CashIssueFlow, + 20.DOLLARS, OpaqueBytes.of(0), node.info.legalIdentity, node.info.legalIdentity) println("Started flow, waiting on result") flowHandle.progress.subscribe { println("PROGRESS $it") @@ -73,10 +76,10 @@ class CordaRPCClientTest : NodeBasedTest() { fun `FlowException thrown by flow`() { client.start(rpcUser.username, rpcUser.password) val proxy = client.proxy() - val handle = proxy.startFlow(::CashFlow, CashCommand.PayCash( - amount = 100.DOLLARS.issuedBy(node.info.legalIdentity.ref(1)), - recipient = node.info.legalIdentity - )) + val handle = proxy.startFlow(::CashPaymentFlow, + 100.DOLLARS.issuedBy(node.info.legalIdentity.ref(1)), + node.info.legalIdentity + ) // TODO Restrict this to CashException once RPC serialisation has been fixed assertThatExceptionOfType(FlowException::class.java).isThrownBy { handle.returnValue.getOrThrow() diff --git a/client/src/integration-test/kotlin/net/corda/client/NodeMonitorModelTest.kt b/client/src/integration-test/kotlin/net/corda/client/NodeMonitorModelTest.kt index 12eab3fb5e..4735014709 100644 --- a/client/src/integration-test/kotlin/net/corda/client/NodeMonitorModelTest.kt +++ b/client/src/integration-test/kotlin/net/corda/client/NodeMonitorModelTest.kt @@ -19,7 +19,6 @@ import net.corda.core.node.services.StateMachineTransactionMapping import net.corda.core.node.services.Vault import net.corda.core.serialization.OpaqueBytes import net.corda.core.transactions.SignedTransaction -import net.corda.flows.CashCommand import net.corda.flows.CashFlow import net.corda.node.driver.DriverBasedTest import net.corda.node.driver.driver @@ -94,7 +93,7 @@ class NodeMonitorModelTest : DriverBasedTest() { @Test fun `cash issue works end to end`() { - rpc.startFlow(::CashFlow, CashCommand.IssueCash( + rpc.startFlow(::CashFlow, CashFlow.Command.IssueCash( amount = Amount(100, USD), issueRef = OpaqueBytes(ByteArray(1, { 1 })), recipient = aliceNode.legalIdentity, @@ -119,14 +118,14 @@ class NodeMonitorModelTest : DriverBasedTest() { @Test fun `cash issue and move`() { - rpc.startFlow(::CashFlow, CashCommand.IssueCash( + rpc.startFlow(::CashFlow, CashFlow.Command.IssueCash( amount = Amount(100, USD), issueRef = OpaqueBytes(ByteArray(1, { 1 })), recipient = aliceNode.legalIdentity, notary = notaryNode.notaryIdentity )).returnValue.getOrThrow() - rpc.startFlow(::CashFlow, CashCommand.PayCash( + rpc.startFlow(::CashFlow, CashFlow.Command.PayCash( amount = Amount(100, Issued(PartyAndReference(aliceNode.legalIdentity, OpaqueBytes(ByteArray(1, { 1 }))), USD)), recipient = aliceNode.legalIdentity )) diff --git a/client/src/main/kotlin/net/corda/client/mock/EventGenerator.kt b/client/src/main/kotlin/net/corda/client/mock/EventGenerator.kt index 487bde0c56..1eb97c5963 100644 --- a/client/src/main/kotlin/net/corda/client/mock/EventGenerator.kt +++ b/client/src/main/kotlin/net/corda/client/mock/EventGenerator.kt @@ -5,7 +5,7 @@ import net.corda.core.contracts.* import net.corda.core.crypto.Party import net.corda.core.serialization.OpaqueBytes import net.corda.core.transactions.TransactionBuilder -import net.corda.flows.CashCommand +import net.corda.flows.CashFlow import java.util.* /** @@ -64,7 +64,7 @@ class EventGenerator( val issueCashGenerator = amountGenerator.combine(partyGenerator, issueRefGenerator) { amount, to, issueRef -> - CashCommand.IssueCash( + CashFlow.Command.IssueCash( amount, issueRef, to, @@ -76,7 +76,7 @@ class EventGenerator( amountIssuedGenerator.combine( partyGenerator ) { amountIssued, recipient -> - CashCommand.PayCash( + CashFlow.Command.PayCash( amount = amountIssued, recipient = recipient ) @@ -84,7 +84,7 @@ class EventGenerator( val exitCashGenerator = amountIssuedGenerator.map { - CashCommand.ExitCash( + CashFlow.Command.ExitCash( it.withoutIssuer(), it.token.issuer.reference ) diff --git a/docs/source/example-code/src/integration-test/kotlin/net/corda/docs/IntegrationTestingTutorial.kt b/docs/source/example-code/src/integration-test/kotlin/net/corda/docs/IntegrationTestingTutorial.kt index d08bcf7f76..123c473e64 100644 --- a/docs/source/example-code/src/integration-test/kotlin/net/corda/docs/IntegrationTestingTutorial.kt +++ b/docs/source/example-code/src/integration-test/kotlin/net/corda/docs/IntegrationTestingTutorial.kt @@ -9,7 +9,7 @@ import net.corda.core.messaging.startFlow import net.corda.core.node.services.ServiceInfo import net.corda.core.node.services.Vault import net.corda.core.serialization.OpaqueBytes -import net.corda.flows.CashCommand +import net.corda.core.toFuture import net.corda.flows.CashFlow import net.corda.node.driver.driver import net.corda.node.services.User @@ -56,7 +56,7 @@ class IntegrationTestingTutorial { val issueRef = OpaqueBytes.of(0) for (i in 1 .. 10) { thread { - aliceProxy.startFlow(::CashFlow, CashCommand.IssueCash( + aliceProxy.startFlow(::CashFlow, CashFlow.Command.IssueCash( amount = i.DOLLARS, issueRef = issueRef, recipient = bob.nodeInfo.legalIdentity, @@ -82,7 +82,7 @@ class IntegrationTestingTutorial { // START 5 for (i in 1 .. 10) { - val flowHandle = bobProxy.startFlow(::CashFlow, CashCommand.PayCash( + val flowHandle = bobProxy.startFlow(::CashFlow, CashFlow.Command.PayCash( amount = i.DOLLARS.issuedBy(alice.nodeInfo.legalIdentity.ref(issueRef)), recipient = alice.nodeInfo.legalIdentity )) @@ -102,4 +102,4 @@ class IntegrationTestingTutorial { } } } -// END 5 \ No newline at end of file +// END 5 diff --git a/docs/source/example-code/src/main/kotlin/net/corda/docs/ClientRpcTutorial.kt b/docs/source/example-code/src/main/kotlin/net/corda/docs/ClientRpcTutorial.kt index b7e2430e54..b61c849b56 100644 --- a/docs/source/example-code/src/main/kotlin/net/corda/docs/ClientRpcTutorial.kt +++ b/docs/source/example-code/src/main/kotlin/net/corda/docs/ClientRpcTutorial.kt @@ -12,8 +12,9 @@ import net.corda.core.node.CordaPluginRegistry import net.corda.core.node.services.ServiceInfo import net.corda.core.serialization.OpaqueBytes import net.corda.core.transactions.SignedTransaction -import net.corda.flows.CashCommand -import net.corda.flows.CashFlow +import net.corda.flows.CashExitFlow +import net.corda.flows.CashIssueFlow +import net.corda.flows.CashPaymentFlow import net.corda.node.driver.driver import net.corda.node.services.User import net.corda.node.services.startFlowPermission @@ -41,7 +42,9 @@ fun main(args: Array) { val printOrVisualise = PrintOrVisualise.valueOf(args[0]) val baseDirectory = Paths.get("build/rpc-api-tutorial") - val user = User("user", "password", permissions = setOf(startFlowPermission())) + val user = User("user", "password", permissions = setOf(startFlowPermission(), + startFlowPermission(), + startFlowPermission())) driver(driverDirectory = baseDirectory) { startNode("Notary", advertisedServices = setOf(ServiceInfo(ValidatingNotaryService.type))) @@ -114,14 +117,14 @@ fun generateTransactions(proxy: CordaRPCOps) { val n = random.nextDouble() if (ownedQuantity > 10000 && n > 0.8) { val quantity = Math.abs(random.nextLong()) % 2000 - proxy.startFlow(::CashFlow, CashCommand.ExitCash(Amount(quantity, USD), issueRef)) + proxy.startFlow(::CashExitFlow, Amount(quantity, USD), issueRef) ownedQuantity -= quantity } else if (ownedQuantity > 1000 && n < 0.7) { val quantity = Math.abs(random.nextLong() % Math.min(ownedQuantity, 2000)) - proxy.startFlow(::CashFlow, CashCommand.PayCash(Amount(quantity, Issued(meAndRef, USD)), me)) + proxy.startFlow(::CashPaymentFlow, Amount(quantity, Issued(meAndRef, USD)), me) } else { val quantity = Math.abs(random.nextLong() % 1000) - proxy.startFlow(::CashFlow, CashCommand.IssueCash(Amount(quantity, USD), issueRef, me, notary)) + proxy.startFlow(::CashIssueFlow, Amount(quantity, USD), issueRef, me, notary) ownedQuantity += quantity } } diff --git a/docs/source/example-code/src/test/kotlin/net/corda/docs/FxTransactionBuildTutorialTest.kt b/docs/source/example-code/src/test/kotlin/net/corda/docs/FxTransactionBuildTutorialTest.kt index 9a1cba3b93..ce41490c63 100644 --- a/docs/source/example-code/src/test/kotlin/net/corda/docs/FxTransactionBuildTutorialTest.kt +++ b/docs/source/example-code/src/test/kotlin/net/corda/docs/FxTransactionBuildTutorialTest.kt @@ -1,6 +1,5 @@ package net.corda.docs -import net.corda.core.crypto.Party import net.corda.core.contracts.* import net.corda.core.getOrThrow import net.corda.core.node.services.ServiceInfo @@ -8,9 +7,8 @@ import net.corda.core.serialization.OpaqueBytes import net.corda.core.toFuture import net.corda.core.utilities.DUMMY_NOTARY import net.corda.core.utilities.DUMMY_NOTARY_KEY -import net.corda.flows.CashCommand -import net.corda.flows.CashFlow -import net.corda.core.node.ServiceEntry +import net.corda.flows.CashIssueFlow +import net.corda.flows.CashPaymentFlow import net.corda.node.services.network.NetworkMapService import net.corda.node.services.transactions.ValidatingNotaryService import net.corda.node.utilities.databaseTransaction @@ -51,19 +49,19 @@ class FxTransactionBuildTutorialTest { @Test fun `Run ForeignExchangeFlow to completion`() { // Use NodeA as issuer and create some dollars - val flowHandle1 = nodeA.services.startFlow(CashFlow(CashCommand.IssueCash(DOLLARS(1000), + val flowHandle1 = nodeA.services.startFlow(CashIssueFlow(DOLLARS(1000), OpaqueBytes.of(0x01), nodeA.info.legalIdentity, - notaryNode.info.notaryIdentity))) + notaryNode.info.notaryIdentity)) // Wait for the flow to stop and print flowHandle1.resultFuture.getOrThrow() printBalances() // Using NodeB as Issuer create some pounds. - val flowHandle2 = nodeB.services.startFlow(CashFlow(CashCommand.IssueCash(POUNDS(1000), + val flowHandle2 = nodeB.services.startFlow(CashIssueFlow(POUNDS(1000), OpaqueBytes.of(0x01), nodeB.info.legalIdentity, - notaryNode.info.notaryIdentity))) + notaryNode.info.notaryIdentity)) // Wait for flow to come to an end and print flowHandle2.resultFuture.getOrThrow() printBalances() @@ -107,4 +105,4 @@ class FxTransactionBuildTutorialTest { println("BalanceB\n" + nodeB.services.vaultService.cashBalances) } } -} \ No newline at end of file +} diff --git a/docs/source/running-the-demos.rst b/docs/source/running-the-demos.rst index 73d6124a98..d51f5e779d 100644 --- a/docs/source/running-the-demos.rst +++ b/docs/source/running-the-demos.rst @@ -259,8 +259,8 @@ Launch the Explorer application to visualize the issuance and transfer of cash f Using the following login details: -- For the Bank of Corda node: localhost / port 10004 / username user1 / password test -- For the Big Corporation node: localhost / port 10006 / username user1 / password test +- For the Bank of Corda node: localhost / port 10004 / username bankUser / password test +- For the Big Corporation node: localhost / port 10006 / username bigCorpUser / password test See https://docs.corda.net/node-explorer.html for further details on usage. diff --git a/finance/src/main/kotlin/net/corda/flows/AbstractCashFlow.kt b/finance/src/main/kotlin/net/corda/flows/AbstractCashFlow.kt new file mode 100644 index 0000000000..698b5fa188 --- /dev/null +++ b/finance/src/main/kotlin/net/corda/flows/AbstractCashFlow.kt @@ -0,0 +1,32 @@ +package net.corda.flows + +import co.paralleluniverse.fibers.Suspendable +import net.corda.core.crypto.Party +import net.corda.core.flows.FlowException +import net.corda.core.flows.FlowLogic +import net.corda.core.transactions.SignedTransaction +import net.corda.core.utilities.ProgressTracker + +/** + * Initiates a flow that produces an Issue/Move or Exit Cash transaction. + */ +abstract class AbstractCashFlow(override val progressTracker: ProgressTracker) : FlowLogic() { + companion object { + object GENERATING_TX : ProgressTracker.Step("Generating transaction") + object SIGNING_TX : ProgressTracker.Step("Signing transaction") + object FINALISING_TX : ProgressTracker.Step("Finalising transaction") + + fun tracker() = ProgressTracker(GENERATING_TX, SIGNING_TX, FINALISING_TX) + } + + @Suspendable + internal fun finaliseTx(participants: Set, tx: SignedTransaction, message: String) { + try { + subFlow(FinalityFlow(tx, participants)) + } catch (e: NotaryException) { + throw CashException(message, e) + } + } +} + +class CashException(message: String, cause: Throwable) : FlowException(message, cause) \ No newline at end of file diff --git a/finance/src/main/kotlin/net/corda/flows/CashExitFlow.kt b/finance/src/main/kotlin/net/corda/flows/CashExitFlow.kt new file mode 100644 index 0000000000..de495bb9eb --- /dev/null +++ b/finance/src/main/kotlin/net/corda/flows/CashExitFlow.kt @@ -0,0 +1,67 @@ +package net.corda.flows + +import co.paralleluniverse.fibers.Suspendable +import net.corda.contracts.asset.Cash +import net.corda.core.contracts.* +import net.corda.core.crypto.Party +import net.corda.core.serialization.OpaqueBytes +import net.corda.core.transactions.SignedTransaction +import net.corda.core.transactions.TransactionBuilder +import net.corda.core.utilities.ProgressTracker +import java.util.* + +/** + * Initiates a flow that produces an cash exit transaction. + * + * @param amount the amount of a currency to remove from the ledger. + * @param issuerRef the reference on the issued currency. Added to the node's legal identity to determine the + * issuer. + */ +class CashExitFlow(val amount: Amount, val issueRef: OpaqueBytes, progressTracker: ProgressTracker) : AbstractCashFlow(progressTracker) { + constructor(amount: Amount, issueRef: OpaqueBytes) : this(amount, issueRef, tracker()) + + companion object { + fun tracker() = ProgressTracker(GENERATING_TX, SIGNING_TX, FINALISING_TX) + } + + @Suspendable + @Throws(CashException::class) + override fun call(): SignedTransaction { + progressTracker.currentStep = GENERATING_TX + val builder: TransactionBuilder = TransactionType.General.Builder(null) + val issuer = serviceHub.myInfo.legalIdentity.ref(issueRef) + try { + Cash().generateExit( + builder, + amount.issuedBy(issuer), + serviceHub.vaultService.currentVault.statesOfType().filter { it.state.data.owner == issuer.party.owningKey }) + } catch (e: InsufficientBalanceException) { + throw CashException("Exiting more cash than exists", e) + } + progressTracker.currentStep = SIGNING_TX + val myKey = serviceHub.legalIdentityKey + builder.signWith(myKey) + + // Work out who the owners of the burnt states were + val inputStatesNullable = serviceHub.vaultService.statesForRefs(builder.inputStates()) + val inputStates = inputStatesNullable.values.filterNotNull().map { it.data } + if (inputStatesNullable.size != inputStates.size) { + val unresolvedStateRefs = inputStatesNullable.filter { it.value == null }.map { it.key } + throw IllegalStateException("Failed to resolve input StateRefs: $unresolvedStateRefs") + } + + // TODO: Is it safe to drop participants we don't know how to contact? Does not knowing how to contact them + // count as a reason to fail? + val participants: Set = inputStates + .filterIsInstance() + .map { serviceHub.identityService.partyFromKey(it.owner) } + .filterNotNull() + .toSet() + + // Commit the transaction + val tx = builder.toSignedTransaction(checkSufficientSignatures = false) + progressTracker.currentStep = FINALISING_TX + finaliseTx(participants, tx, "Unable to notarise exit") + return tx + } +} diff --git a/finance/src/main/kotlin/net/corda/flows/CashFlow.kt b/finance/src/main/kotlin/net/corda/flows/CashFlow.kt index cc7d7331fc..2c921ee768 100644 --- a/finance/src/main/kotlin/net/corda/flows/CashFlow.kt +++ b/finance/src/main/kotlin/net/corda/flows/CashFlow.kt @@ -1,19 +1,13 @@ package net.corda.flows import co.paralleluniverse.fibers.Suspendable -import net.corda.contracts.asset.Cash -import net.corda.core.contracts.* -import net.corda.core.crypto.AnonymousParty +import net.corda.core.contracts.Amount +import net.corda.core.contracts.Issued import net.corda.core.crypto.Party -import net.corda.core.crypto.keys -import net.corda.core.crypto.toStringShort -import net.corda.core.flows.FlowException import net.corda.core.flows.FlowLogic import net.corda.core.serialization.OpaqueBytes import net.corda.core.transactions.SignedTransaction -import net.corda.core.transactions.TransactionBuilder import net.corda.core.utilities.ProgressTracker -import java.security.KeyPair import java.util.* /** @@ -21,8 +15,8 @@ import java.util.* * * @param command Indicates what Cash transaction to create with what parameters. */ -class CashFlow(val command: CashCommand, override val progressTracker: ProgressTracker) : FlowLogic() { - constructor(command: CashCommand) : this(command, tracker()) +class CashFlow(val command: CashFlow.Command, override val progressTracker: ProgressTracker) : FlowLogic() { + constructor(command: CashFlow.Command) : this(command, tracker()) companion object { object ISSUING : ProgressTracker.Step("Issuing cash") @@ -36,133 +30,38 @@ class CashFlow(val command: CashCommand, override val progressTracker: ProgressT @Throws(CashException::class) override fun call(): SignedTransaction { return when (command) { - is CashCommand.IssueCash -> issueCash(command) - is CashCommand.PayCash -> initiatePayment(command) - is CashCommand.ExitCash -> exitCash(command) + is CashFlow.Command.IssueCash -> subFlow(CashIssueFlow(command.amount, command.issueRef, command.recipient, command.notary)) + is CashFlow.Command.PayCash -> subFlow(CashPaymentFlow(command.amount, command.recipient)) + is CashFlow.Command.ExitCash -> subFlow(CashExitFlow(command.amount, command.issueRef)) } } - // TODO check with the recipient if they want to accept the cash. - @Suspendable - private fun initiatePayment(req: CashCommand.PayCash): SignedTransaction { - progressTracker.currentStep = PAYING - val builder: TransactionBuilder = TransactionType.General.Builder(null) - // TODO: Have some way of restricting this to states the caller controls - val (spendTX, keysForSigning) = try { - serviceHub.vaultService.generateSpend( - builder, - req.amount.withoutIssuer(), - req.recipient.owningKey, - setOf(req.amount.token.issuer.party)) - } catch (e: InsufficientBalanceException) { - throw CashException("Insufficent cash for spend", e) - } + /** + * A command to initiate the Cash flow with. + */ + sealed class Command { + /** + * A command to initiate the Cash flow with. + */ + class IssueCash(val amount: Amount, + val issueRef: OpaqueBytes, + val recipient: Party, + val notary: Party) : CashFlow.Command() - keysForSigning.keys.forEach { - val key = serviceHub.keyManagementService.keys[it] ?: throw IllegalStateException("Could not find signing key for ${it.toStringShort()}") - builder.signWith(KeyPair(it, key)) - } + /** + * Pay cash to someone else. + * + * @param amount the amount of currency to issue on to the ledger. + * @param recipient the party to issue the cash to. + */ + class PayCash(val amount: Amount>, val recipient: Party) : CashFlow.Command() - val tx = spendTX.toSignedTransaction(checkSufficientSignatures = false) - finaliseTx(setOf(req.recipient), tx, "Unable to notarise spend") - return tx - } - - @Suspendable - private fun exitCash(req: CashCommand.ExitCash): SignedTransaction { - progressTracker.currentStep = EXITING - val builder: TransactionBuilder = TransactionType.General.Builder(null) - val issuer = serviceHub.myInfo.legalIdentity.ref(req.issueRef) - try { - Cash().generateExit( - builder, - req.amount.issuedBy(issuer), - serviceHub.vaultService.currentVault.statesOfType().filter { it.state.data.owner == issuer.party.owningKey }) - } catch (e: InsufficientBalanceException) { - throw CashException("Exiting more cash than exists", e) - } - val myKey = serviceHub.legalIdentityKey - builder.signWith(myKey) - - // Work out who the owners of the burnt states were - val inputStatesNullable = serviceHub.vaultService.statesForRefs(builder.inputStates()) - val inputStates = inputStatesNullable.values.filterNotNull().map { it.data } - if (inputStatesNullable.size != inputStates.size) { - val unresolvedStateRefs = inputStatesNullable.filter { it.value == null }.map { it.key } - throw IllegalStateException("Failed to resolve input StateRefs: $unresolvedStateRefs") - } - - // TODO: Is it safe to drop participants we don't know how to contact? Does not knowing how to contact them - // count as a reason to fail? - val participants: Set = inputStates - .filterIsInstance() - .map { serviceHub.identityService.partyFromKey(it.owner) } - .filterNotNull() - .toSet() - - // Commit the transaction - val tx = builder.toSignedTransaction(checkSufficientSignatures = false) - finaliseTx(participants, tx, "Unable to notarise exit") - return tx - } - - @Suspendable - private fun finaliseTx(participants: Set, tx: SignedTransaction, message: String) { - try { - subFlow(FinalityFlow(tx, participants)) - } catch (e: NotaryException) { - throw CashException(message, e) - } - } - - // TODO This doesn't throw any exception so it might be worth splitting the three cash commands into separate flows - @Suspendable - private fun issueCash(req: CashCommand.IssueCash): SignedTransaction { - progressTracker.currentStep = ISSUING - val builder: TransactionBuilder = TransactionType.General.Builder(notary = null) - val issuer = serviceHub.myInfo.legalIdentity.ref(req.issueRef) - Cash().generateIssue(builder, req.amount.issuedBy(issuer), req.recipient.owningKey, req.notary) - val myKey = serviceHub.legalIdentityKey - builder.signWith(myKey) - val tx = builder.toSignedTransaction() - subFlow(FinalityFlow(tx)) - return tx + /** + * Exit cash from the ledger. + * + * @param amount the amount of currency to exit from the ledger. + * @param issueRef the reference previously specified on the issuance. + */ + class ExitCash(val amount: Amount, val issueRef: OpaqueBytes) : CashFlow.Command() } } - -/** - * A command to initiate the Cash flow with. - */ -sealed class CashCommand { - /** - * Issue cash state objects. - * - * @param amount the amount of currency to issue on to the ledger. - * @param issueRef the reference to specify on the issuance, used to differentiate pools of cash. Convention is - * to use the single byte "0x01" as a default. - * @param recipient the party to issue the cash to. - * @param notary the notary to use for this transaction. - */ - class IssueCash(val amount: Amount, - val issueRef: OpaqueBytes, - val recipient: Party, - val notary: Party) : CashCommand() - - /** - * Pay cash to someone else. - * - * @param amount the amount of currency to issue on to the ledger. - * @param recipient the party to issue the cash to. - */ - class PayCash(val amount: Amount>, val recipient: Party) : CashCommand() - - /** - * Exit cash from the ledger. - * - * @param amount the amount of currency to exit from the ledger. - * @param issueRef the reference previously specified on the issuance. - */ - class ExitCash(val amount: Amount, val issueRef: OpaqueBytes) : CashCommand() -} - -class CashException(message: String, cause: Throwable) : FlowException(message, cause) diff --git a/finance/src/main/kotlin/net/corda/flows/CashIssueFlow.kt b/finance/src/main/kotlin/net/corda/flows/CashIssueFlow.kt new file mode 100644 index 0000000000..f36006acc6 --- /dev/null +++ b/finance/src/main/kotlin/net/corda/flows/CashIssueFlow.kt @@ -0,0 +1,46 @@ +package net.corda.flows + +import net.corda.contracts.asset.Cash +import net.corda.core.contracts.Amount +import net.corda.core.contracts.PartyAndReference +import net.corda.core.contracts.TransactionType +import net.corda.core.contracts.issuedBy +import net.corda.core.crypto.Party +import net.corda.core.serialization.OpaqueBytes +import net.corda.core.transactions.SignedTransaction +import net.corda.core.transactions.TransactionBuilder +import net.corda.core.utilities.ProgressTracker +import java.util.* + +/** + * Initiates a flow that produces cash issuance transaction. + * + * @param amount the amount of currency to issue. + * @param issueRef a reference to put on the issued currency. + * @param recipient the party who should own the currency after it is issued. + * @param notary the notary to set on the output states. + */ +class CashIssueFlow(val amount: Amount, + val issueRef: OpaqueBytes, + val recipient: Party, + val notary: Party, + progressTracker: ProgressTracker) : AbstractCashFlow(progressTracker) { + constructor(amount: Amount, + issueRef: OpaqueBytes, + recipient: Party, + notary: Party) : this(amount, issueRef, recipient, notary, tracker()) + + override fun call(): SignedTransaction { + progressTracker.currentStep = GENERATING_TX + val builder: TransactionBuilder = TransactionType.General.Builder(notary = null) + val issuer = serviceHub.myInfo.legalIdentity.ref(issueRef) + Cash().generateIssue(builder, amount.issuedBy(issuer), recipient.owningKey, notary) + progressTracker.currentStep = SIGNING_TX + val myKey = serviceHub.legalIdentityKey + builder.signWith(myKey) + val tx = builder.toSignedTransaction() + progressTracker.currentStep = FINALISING_TX + subFlow(FinalityFlow(tx)) + return tx + } +} diff --git a/finance/src/main/kotlin/net/corda/flows/CashPaymentFlow.kt b/finance/src/main/kotlin/net/corda/flows/CashPaymentFlow.kt new file mode 100644 index 0000000000..7c0100dd88 --- /dev/null +++ b/finance/src/main/kotlin/net/corda/flows/CashPaymentFlow.kt @@ -0,0 +1,49 @@ +package net.corda.flows + +import co.paralleluniverse.fibers.Suspendable +import net.corda.core.contracts.* +import net.corda.core.crypto.Party +import net.corda.core.crypto.keys +import net.corda.core.crypto.toStringShort +import net.corda.core.transactions.SignedTransaction +import net.corda.core.transactions.TransactionBuilder +import net.corda.core.utilities.ProgressTracker +import java.security.KeyPair +import java.util.* + +/** + * Initiates a flow that produces an cash move transaction. + * + * @param amount the amount of a currency to pay to the recipient. + * @param recipient the party to pay the currency to. + */ +open class CashPaymentFlow(val amount: Amount>, val recipient: Party, progressTracker: ProgressTracker) : AbstractCashFlow(progressTracker) { + constructor(amount: Amount>, recipient: Party) : this(amount, recipient, tracker()) + + @Suspendable + override fun call(): SignedTransaction { + progressTracker.currentStep = GENERATING_TX + val builder: TransactionBuilder = TransactionType.General.Builder(null) + // TODO: Have some way of restricting this to states the caller controls + val (spendTX, keysForSigning) = try { + serviceHub.vaultService.generateSpend( + builder, + amount.withoutIssuer(), + recipient.owningKey, + setOf(amount.token.issuer.party)) + } catch (e: InsufficientBalanceException) { + throw CashException("Insufficent cash for spend", e) + } + + progressTracker.currentStep = SIGNING_TX + keysForSigning.keys.forEach { + val key = serviceHub.keyManagementService.keys[it] ?: throw IllegalStateException("Could not find signing key for ${it.toStringShort()}") + builder.signWith(KeyPair(it, key)) + } + + progressTracker.currentStep = FINALISING_TX + val tx = spendTX.toSignedTransaction(checkSufficientSignatures = false) + finaliseTx(setOf(recipient), tx, "Unable to notarise spend") + return tx + } +} \ No newline at end of file diff --git a/finance/src/main/kotlin/net/corda/flows/IssuerFlow.kt b/finance/src/main/kotlin/net/corda/flows/IssuerFlow.kt index 921a6120eb..671ac53340 100644 --- a/finance/src/main/kotlin/net/corda/flows/IssuerFlow.kt +++ b/finance/src/main/kotlin/net/corda/flows/IssuerFlow.kt @@ -79,7 +79,7 @@ object IssuerFlow { // invoke Cash subflow to issue Asset progressTracker.currentStep = ISSUING val bankOfCordaParty = serviceHub.myInfo.legalIdentity - val issueCashFlow = CashFlow(CashCommand.IssueCash(amount, issuerPartyRef, bankOfCordaParty, notaryParty)) + val issueCashFlow = CashIssueFlow(amount, issuerPartyRef, bankOfCordaParty, notaryParty) val issueTx = subFlow(issueCashFlow) // NOTE: issueCashFlow performs a Broadcast (which stores a local copy of the txn to the ledger) // short-circuit when issuing to self @@ -87,7 +87,7 @@ object IssuerFlow { return issueTx // now invoke Cash subflow to Move issued assetType to issue requester progressTracker.currentStep = TRANSFERRING - val moveCashFlow = CashFlow(CashCommand.PayCash(amount.issuedBy(bankOfCordaParty.ref(issuerPartyRef)), issueTo)) + val moveCashFlow = CashPaymentFlow(amount.issuedBy(bankOfCordaParty.ref(issuerPartyRef)), issueTo) val moveTx = subFlow(moveCashFlow) // NOTE: CashFlow PayCash calls FinalityFlow which performs a Broadcast (which stores a local copy of the txn to the ledger) return moveTx diff --git a/node/src/integration-test/kotlin/net/corda/node/services/DistributedServiceTests.kt b/node/src/integration-test/kotlin/net/corda/node/services/DistributedServiceTests.kt index 03461b23be..d798811556 100644 --- a/node/src/integration-test/kotlin/net/corda/node/services/DistributedServiceTests.kt +++ b/node/src/integration-test/kotlin/net/corda/node/services/DistributedServiceTests.kt @@ -11,8 +11,9 @@ import net.corda.core.messaging.StateMachineUpdate import net.corda.core.messaging.startFlow import net.corda.core.node.NodeInfo import net.corda.core.serialization.OpaqueBytes -import net.corda.flows.CashCommand -import net.corda.flows.CashFlow +import net.corda.core.transactions.SignedTransaction +import net.corda.flows.CashIssueFlow +import net.corda.flows.CashPaymentFlow import net.corda.node.driver.DriverBasedTest import net.corda.node.driver.NodeHandle import net.corda.node.driver.driver @@ -35,7 +36,10 @@ class DistributedServiceTests : DriverBasedTest() { override fun setup() = driver { // Start Alice and 3 notaries in a RAFT cluster val clusterSize = 3 - val testUser = User("test", "test", permissions = setOf(startFlowPermission())) + val testUser = User("test", "test", permissions = setOf( + startFlowPermission(), + startFlowPermission()) + ) val aliceFuture = startNode("Alice", rpcUsers = listOf(testUser)) val notariesFuture = startNotaryCluster( "Notary", @@ -135,15 +139,15 @@ class DistributedServiceTests : DriverBasedTest() { private fun issueCash(amount: Amount) { val issueHandle = aliceProxy.startFlow( - ::CashFlow, - CashCommand.IssueCash(amount, OpaqueBytes.of(0), alice.nodeInfo.legalIdentity, raftNotaryIdentity)) + ::CashIssueFlow, + amount, OpaqueBytes.of(0), alice.nodeInfo.legalIdentity, raftNotaryIdentity) issueHandle.returnValue.getOrThrow() } private fun paySelf(amount: Amount) { val payHandle = aliceProxy.startFlow( - ::CashFlow, - CashCommand.PayCash(amount.issuedBy(alice.nodeInfo.legalIdentity.ref(0)), alice.nodeInfo.legalIdentity)) + ::CashPaymentFlow, + amount.issuedBy(alice.nodeInfo.legalIdentity.ref(0)), alice.nodeInfo.legalIdentity) payHandle.returnValue.getOrThrow() } -} \ No newline at end of file +} diff --git a/node/src/main/kotlin/net/corda/node/internal/AbstractNode.kt b/node/src/main/kotlin/net/corda/node/internal/AbstractNode.kt index 126f53e23f..b5a79865c5 100644 --- a/node/src/main/kotlin/net/corda/node/internal/AbstractNode.kt +++ b/node/src/main/kotlin/net/corda/node/internal/AbstractNode.kt @@ -6,6 +6,8 @@ import com.google.common.util.concurrent.ListenableFuture import com.google.common.util.concurrent.MoreExecutors import com.google.common.util.concurrent.SettableFuture import net.corda.core.* +import net.corda.core.contracts.Amount +import net.corda.core.contracts.PartyAndReference import net.corda.core.crypto.Party import net.corda.core.crypto.X509Utilities import net.corda.core.flows.FlowLogic @@ -16,14 +18,12 @@ import net.corda.core.messaging.SingleMessageRecipient import net.corda.core.node.* import net.corda.core.node.services.* import net.corda.core.node.services.NetworkMapCache.MapChange +import net.corda.core.serialization.OpaqueBytes import net.corda.core.serialization.SingletonSerializeAsToken import net.corda.core.serialization.deserialize import net.corda.core.serialization.serialize import net.corda.core.transactions.SignedTransaction -import net.corda.flows.CashCommand -import net.corda.flows.CashFlow -import net.corda.flows.FinalityFlow -import net.corda.flows.sendRequest +import net.corda.flows.* import net.corda.node.services.api.* import net.corda.node.services.config.NodeConfiguration import net.corda.node.services.config.configureWithDevSSLCertificate @@ -51,7 +51,6 @@ import net.corda.node.utilities.databaseTransaction import org.apache.activemq.artemis.utils.ReusableLatch import org.jetbrains.exposed.sql.Database import org.slf4j.Logger -import java.io.File import java.nio.file.FileAlreadyExistsException import java.nio.file.Path import java.security.KeyPair @@ -82,11 +81,12 @@ abstract class AbstractNode(open val configuration: NodeConfiguration, val PUBLIC_IDENTITY_FILE_NAME = "identity-public" val defaultFlowWhiteList: Map>, Set>> = mapOf( - CashFlow::class.java to setOf( - CashCommand.IssueCash::class.java, - CashCommand.PayCash::class.java, - CashCommand.ExitCash::class.java - ), + CashFlow::class.java to setOf(CashFlow.Command.IssueCash::class.java, + CashFlow.Command.PayCash::class.java, + CashFlow.Command.ExitCash::class.java), + CashExitFlow::class.java to setOf(Amount::class.java, PartyAndReference::class.java), + CashIssueFlow::class.java to setOf(Amount::class.java, OpaqueBytes::class.java, Party::class.java), + CashPaymentFlow::class.java to setOf(Amount::class.java, Party::class.java), FinalityFlow::class.java to emptySet() ) } diff --git a/node/src/test/kotlin/net/corda/node/CordaRPCOpsImplTest.kt b/node/src/test/kotlin/net/corda/node/CordaRPCOpsImplTest.kt index 170840485f..634a2855ac 100644 --- a/node/src/test/kotlin/net/corda/node/CordaRPCOpsImplTest.kt +++ b/node/src/test/kotlin/net/corda/node/CordaRPCOpsImplTest.kt @@ -9,8 +9,8 @@ import net.corda.core.node.services.ServiceInfo import net.corda.core.node.services.Vault import net.corda.core.serialization.OpaqueBytes import net.corda.core.transactions.SignedTransaction -import net.corda.flows.CashCommand -import net.corda.flows.CashFlow +import net.corda.flows.CashIssueFlow +import net.corda.flows.CashPaymentFlow import net.corda.node.internal.CordaRPCOpsImpl import net.corda.node.services.User import net.corda.node.services.messaging.CURRENT_RPC_USER @@ -48,7 +48,10 @@ class CordaRPCOpsImplTest { aliceNode = network.createNode(networkMapAddress = networkMap.info.address) notaryNode = network.createNode(advertisedServices = ServiceInfo(SimpleNotaryService.type), networkMapAddress = networkMap.info.address) rpc = CordaRPCOpsImpl(aliceNode.services, aliceNode.smm, aliceNode.database) - CURRENT_RPC_USER.set(User("user", "pwd", permissions = setOf(startFlowPermission()))) + CURRENT_RPC_USER.set(User("user", "pwd", permissions = setOf( + startFlowPermission(), + startFlowPermission() + ))) databaseTransaction(aliceNode.database) { stateMachineUpdates = rpc.stateMachinesAndUpdates().second @@ -69,8 +72,7 @@ class CordaRPCOpsImplTest { // Tell the monitoring service node to issue some cash val recipient = aliceNode.info.legalIdentity - val outEvent = CashCommand.IssueCash(Amount(quantity, GBP), ref, recipient, notaryNode.info.notaryIdentity) - rpc.startFlow(::CashFlow, outEvent) + rpc.startFlow(::CashIssueFlow, Amount(quantity, GBP), ref, recipient, notaryNode.info.notaryIdentity) network.runNetwork() val expectedState = Cash.State(Amount(quantity, @@ -107,19 +109,19 @@ class CordaRPCOpsImplTest { @Test fun `issue and move`() { - rpc.startFlow(::CashFlow, CashCommand.IssueCash( - amount = Amount(100, USD), - issueRef = OpaqueBytes(ByteArray(1, { 1 })), - recipient = aliceNode.info.legalIdentity, - notary = notaryNode.info.notaryIdentity - )) + rpc.startFlow(::CashIssueFlow, + Amount(100, USD), + OpaqueBytes(ByteArray(1, { 1 })), + aliceNode.info.legalIdentity, + notaryNode.info.notaryIdentity + ) network.runNetwork() - rpc.startFlow(::CashFlow, CashCommand.PayCash( - amount = Amount(100, Issued(PartyAndReference(aliceNode.info.legalIdentity, OpaqueBytes(ByteArray(1, { 1 }))), USD)), - recipient = aliceNode.info.legalIdentity - )) + rpc.startFlow(::CashPaymentFlow, + Amount(100, Issued(PartyAndReference(aliceNode.info.legalIdentity, OpaqueBytes(ByteArray(1, { 1 }))), USD)), + aliceNode.info.legalIdentity + ) network.runNetwork() @@ -188,12 +190,12 @@ class CordaRPCOpsImplTest { fun `cash command by user not permissioned for cash`() { CURRENT_RPC_USER.set(User("user", "pwd", permissions = emptySet())) assertThatExceptionOfType(PermissionException::class.java).isThrownBy { - rpc.startFlow(::CashFlow, CashCommand.IssueCash( - amount = Amount(100, USD), - issueRef = OpaqueBytes(ByteArray(1, { 1 })), - recipient = aliceNode.info.legalIdentity, - notary = notaryNode.info.notaryIdentity - )) + rpc.startFlow(::CashIssueFlow, + Amount(100, USD), + OpaqueBytes(ByteArray(1, { 1 })), + aliceNode.info.legalIdentity, + notaryNode.info.notaryIdentity + ) } } } diff --git a/node/src/test/kotlin/net/corda/node/services/statemachine/StateMachineManagerTests.kt b/node/src/test/kotlin/net/corda/node/services/statemachine/StateMachineManagerTests.kt index ce06994a5d..f7a26dfcf7 100644 --- a/node/src/test/kotlin/net/corda/node/services/statemachine/StateMachineManagerTests.kt +++ b/node/src/test/kotlin/net/corda/node/services/statemachine/StateMachineManagerTests.kt @@ -24,8 +24,8 @@ import net.corda.core.serialization.deserialize import net.corda.core.utilities.unwrap import net.corda.core.transactions.SignedTransaction import net.corda.core.transactions.TransactionBuilder -import net.corda.flows.CashCommand -import net.corda.flows.CashFlow +import net.corda.flows.CashIssueFlow +import net.corda.flows.CashPaymentFlow import net.corda.flows.FinalityFlow import net.corda.flows.NotaryFlow import net.corda.node.services.persistence.checkpoints @@ -320,16 +320,16 @@ class StateMachineManagerTests { @Test fun `different notaries are picked when addressing shared notary identity`() { assertEquals(notary1.info.notaryIdentity, notary2.info.notaryIdentity) - node1.services.startFlow(CashFlow(CashCommand.IssueCash( + node1.services.startFlow(CashIssueFlow( DOLLARS(2000), OpaqueBytes.of(0x01), node1.info.legalIdentity, - notary1.info.notaryIdentity))) + notary1.info.notaryIdentity)) // We pay a couple of times, the notary picking should go round robin for (i in 1 .. 3) { - node1.services.startFlow(CashFlow(CashCommand.PayCash( + node1.services.startFlow(CashPaymentFlow( DOLLARS(500).issuedBy(node1.info.legalIdentity.ref(0x01)), - node2.info.legalIdentity))) + node2.info.legalIdentity)) net.runNetwork() } val endpoint = net.messagingNetwork.endpoint(notary1.net.myAddress as InMemoryMessagingNetwork.PeerHandle)!! diff --git a/samples/bank-of-corda-demo/README.md b/samples/bank-of-corda-demo/README.md index 3d7aeda9a1..4c81eec7f9 100644 --- a/samples/bank-of-corda-demo/README.md +++ b/samples/bank-of-corda-demo/README.md @@ -41,9 +41,9 @@ Testing of the Bank of Corda application is demonstrated at two levels: Security The RPC API requires a client to pass in user credentials: - client.start("user1","test") + client.start("bankUser","test") which are validated on the Bank of Corda node against those configured at node startup: - User("user1", "test", permissions = setOf(startFlowPermission())) + User("bankUser", "test", permissions = setOf(startFlowPermission())) startNode("BankOfCorda", rpcUsers = listOf(user)) Notary diff --git a/samples/bank-of-corda-demo/build.gradle b/samples/bank-of-corda-demo/build.gradle index 53c006ae26..806ba0417f 100644 --- a/samples/bank-of-corda-demo/build.gradle +++ b/samples/bank-of-corda-demo/build.gradle @@ -77,9 +77,9 @@ task deployNodes(type: net.corda.plugins.Cordform, dependsOn: ['build']) { webPort 10005 cordapps = [] rpcUsers = [ - ['user' : "user1", + ['user' : "bankUser", 'password' : "test", - 'permissions' : ["StartFlow.net.corda.flows.CashFlow", + 'permissions' : ["StartFlow.net.corda.flows.CashPaymentFlow", "StartFlow.net.corda.flows.IssuerFlow\$IssuanceRequester"]] ] } @@ -91,9 +91,9 @@ task deployNodes(type: net.corda.plugins.Cordform, dependsOn: ['build']) { webPort 10007 cordapps = [] rpcUsers = [ - ['user' : "user1", + ['user' : "bigCorpUser", 'password' : "test", - 'permissions' : ["StartFlow.net.corda.flows.CashFlow"]] + 'permissions' : ["StartFlow.net.corda.flows.CashPaymentFlow"]] ] } } diff --git a/samples/bank-of-corda-demo/src/main/kotlin/net/corda/bank/BankOfCordaDriver.kt b/samples/bank-of-corda-demo/src/main/kotlin/net/corda/bank/BankOfCordaDriver.kt index 1bfd3b874c..fdc003a3fb 100644 --- a/samples/bank-of-corda-demo/src/main/kotlin/net/corda/bank/BankOfCordaDriver.kt +++ b/samples/bank-of-corda-demo/src/main/kotlin/net/corda/bank/BankOfCordaDriver.kt @@ -8,7 +8,7 @@ import net.corda.flows.IssuerFlow import net.corda.core.node.services.ServiceInfo import net.corda.core.node.services.ServiceType import net.corda.core.transactions.SignedTransaction -import net.corda.flows.CashFlow +import net.corda.flows.CashPaymentFlow import net.corda.node.driver.driver import net.corda.node.services.User import net.corda.node.services.startFlowPermission @@ -51,8 +51,8 @@ private class BankOfCordaDriver { val role = options.valueOf(roleArg)!! if (role == Role.ISSUER) { driver(dsl = { - val bankUser = User(BANK_USERNAME, "test", permissions = setOf(startFlowPermission(), startFlowPermission())) - val bigCorpUser = User(BIGCORP_USERNAME, "test", permissions = setOf(startFlowPermission())) + val bankUser = User(BANK_USERNAME, "test", permissions = setOf(startFlowPermission(), startFlowPermission())) + val bigCorpUser = User(BIGCORP_USERNAME, "test", permissions = setOf(startFlowPermission())) startNode("Notary", setOf(ServiceInfo(SimpleNotaryService.type))) val bankOfCorda = startNode("BankOfCorda", rpcUsers = listOf(bankUser), advertisedServices = setOf(ServiceInfo(ServiceType.corda.getSubType("issuer.USD")))) startNode("BigCorporation", rpcUsers = listOf(bigCorpUser)) diff --git a/samples/bank-of-corda-demo/src/main/kotlin/net/corda/bank/api/BankOfCordaClientApi.kt b/samples/bank-of-corda-demo/src/main/kotlin/net/corda/bank/api/BankOfCordaClientApi.kt index 3baac0202f..5d4b01a4f2 100644 --- a/samples/bank-of-corda-demo/src/main/kotlin/net/corda/bank/api/BankOfCordaClientApi.kt +++ b/samples/bank-of-corda-demo/src/main/kotlin/net/corda/bank/api/BankOfCordaClientApi.kt @@ -32,7 +32,7 @@ class BankOfCordaClientApi(val hostAndPort: HostAndPort) { fun requestRPCIssue(params: IssueRequestParams): SignedTransaction { val client = CordaRPCClient(hostAndPort, configureTestSSL()) // TODO: privileged security controls required - client.start("user1", "test") + client.start("bankUser", "test") val proxy = client.proxy() // Resolve parties via RPC diff --git a/tools/explorer/src/main/kotlin/net/corda/explorer/views/cordapps/cash/NewTransaction.kt b/tools/explorer/src/main/kotlin/net/corda/explorer/views/cordapps/cash/NewTransaction.kt index 64ee18f7ca..fafdb48dd6 100644 --- a/tools/explorer/src/main/kotlin/net/corda/explorer/views/cordapps/cash/NewTransaction.kt +++ b/tools/explorer/src/main/kotlin/net/corda/explorer/views/cordapps/cash/NewTransaction.kt @@ -28,7 +28,6 @@ import net.corda.explorer.model.ReportingCurrencyModel import net.corda.explorer.views.bigDecimalFormatter import net.corda.explorer.views.byteFormatter import net.corda.explorer.views.stringConverter -import net.corda.flows.CashCommand import net.corda.flows.CashFlow import net.corda.flows.IssuerFlow.IssuanceRequester import org.controlsfx.dialog.ExceptionDialog @@ -88,7 +87,7 @@ class NewTransaction : Fragment() { } dialog.show() runAsync { - val handle = if (it is CashCommand.IssueCash) { + val handle = if (it is CashFlow.Command.IssueCash) { myIdentity.value?.let { myIdentity -> rpcProxy.value!!.startFlow(::IssuanceRequester, it.amount, @@ -111,9 +110,9 @@ class NewTransaction : Fragment() { Alert.AlertType.ERROR to response.message } else { val type = when (command) { - is CashCommand.IssueCash -> "Cash Issued" - is CashCommand.ExitCash -> "Cash Exited" - is CashCommand.PayCash -> "Cash Paid" + is CashFlow.Command.IssueCash -> "Cash Issued" + is CashFlow.Command.ExitCash -> "Cash Exited" + is CashFlow.Command.PayCash -> "Cash Paid" } Alert.AlertType.INFORMATION to "$type \nTransaction ID : ${(response as SignedTransaction).id}" } @@ -128,7 +127,7 @@ class NewTransaction : Fragment() { } } - private fun dialog(window: Window) = Dialog().apply { + private fun dialog(window: Window) = Dialog().apply { dialogPane = root initOwner(window) setResultConverter { @@ -137,10 +136,10 @@ class NewTransaction : Fragment() { when (it) { executeButton -> when (transactionTypeCB.value) { CashTransaction.Issue -> { - CashCommand.IssueCash(Amount(amount.value, currencyChoiceBox.value), issueRef, partyBChoiceBox.value.legalIdentity, notaries.first().notaryIdentity) + CashFlow.Command.IssueCash(Amount(amount.value, currencyChoiceBox.value), issueRef, partyBChoiceBox.value.legalIdentity, notaries.first().notaryIdentity) } - CashTransaction.Pay -> CashCommand.PayCash(Amount(amount.value, Issued(PartyAndReference(issuerChoiceBox.value, issueRef), currencyChoiceBox.value)), partyBChoiceBox.value.legalIdentity) - CashTransaction.Exit -> CashCommand.ExitCash(Amount(amount.value, currencyChoiceBox.value), issueRef) + CashTransaction.Pay -> CashFlow.Command.PayCash(Amount(amount.value, Issued(PartyAndReference(issuerChoiceBox.value, issueRef), currencyChoiceBox.value)), partyBChoiceBox.value.legalIdentity) + CashTransaction.Exit -> CashFlow.Command.ExitCash(Amount(amount.value, currencyChoiceBox.value), issueRef) else -> null } else -> null diff --git a/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/CrossCashTest.kt b/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/CrossCashTest.kt index 86f90fd09c..0dd578a95e 100644 --- a/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/CrossCashTest.kt +++ b/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/CrossCashTest.kt @@ -12,7 +12,8 @@ import net.corda.core.flows.FlowException import net.corda.core.getOrThrow import net.corda.core.messaging.startFlow import net.corda.core.serialization.OpaqueBytes -import net.corda.flows.CashCommand +import net.corda.core.toFuture +import net.corda.flows.CashException import net.corda.flows.CashFlow import net.corda.loadtest.LoadTest import net.corda.loadtest.NodeHandle @@ -28,18 +29,18 @@ private val log = LoggerFactory.getLogger("CrossCash") */ data class CrossCashCommand( - val command: CashCommand, + val command: CashFlow.Command, val node: NodeHandle ) { override fun toString(): String { return when (command) { - is CashCommand.IssueCash -> { + is CashFlow.Command.IssueCash -> { "ISSUE ${node.info.legalIdentity} -> ${command.recipient} : ${command.amount}" } - is CashCommand.PayCash -> { + is CashFlow.Command.PayCash -> { "MOVE ${node.info.legalIdentity} -> ${command.recipient} : ${command.amount}" } - is CashCommand.ExitCash -> { + is CashFlow.Command.ExitCash -> { "EXIT ${node.info.legalIdentity} : ${command.amount}" } } @@ -145,7 +146,7 @@ val crossCashTest = LoadTest( interpret = { state, command -> when (command.command) { - is CashCommand.IssueCash -> { + is CashFlow.Command.IssueCash -> { val newDiffQueues = state.copyQueues() val originators = newDiffQueues.getOrPut(command.command.recipient, { HashMap() }) val issuer = command.node.info.legalIdentity @@ -155,7 +156,7 @@ val crossCashTest = LoadTest( queue.add(Pair(issuer, quantity)) CrossCashState(state.nodeVaults, newDiffQueues) } - is CashCommand.PayCash -> { + is CashFlow.Command.PayCash -> { val newNodeVaults = state.copyVaults() val newDiffQueues = state.copyQueues() val recipientOriginators = newDiffQueues.getOrPut(command.command.recipient, { HashMap() }) @@ -182,7 +183,7 @@ val crossCashTest = LoadTest( recipientQueue.add(Pair(issuer, quantity)) CrossCashState(newNodeVaults, newDiffQueues) } - is CashCommand.ExitCash -> { + is CashFlow.Command.ExitCash -> { val newNodeVaults = state.copyVaults() val issuer = command.node.info.legalIdentity val quantity = command.command.amount.quantity diff --git a/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/GenerateHelpers.kt b/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/GenerateHelpers.kt index 8bce6439a9..ffeb83ea45 100644 --- a/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/GenerateHelpers.kt +++ b/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/GenerateHelpers.kt @@ -8,7 +8,7 @@ import net.corda.core.contracts.PartyAndReference import net.corda.core.crypto.AnonymousParty import net.corda.core.crypto.Party import net.corda.core.serialization.OpaqueBytes -import net.corda.flows.CashCommand +import net.corda.flows.CashFlow import java.util.* fun generateIssue( @@ -16,12 +16,12 @@ fun generateIssue( currency: Currency, notary: Party, possibleRecipients: List -): Generator { +): Generator { return generateAmount(0, max, Generator.pure(currency)).combine( Generator.pure(OpaqueBytes.of(0)), Generator.pickOne(possibleRecipients) ) { amount, ref, recipient -> - CashCommand.IssueCash(amount, ref, recipient, notary) + CashFlow.Command.IssueCash(amount, ref, recipient, notary) } } @@ -30,19 +30,19 @@ fun generateMove( currency: Currency, issuer: AnonymousParty, possibleRecipients: List -): Generator { +): Generator { return generateAmount(1, max, Generator.pure(Issued(PartyAndReference(issuer, OpaqueBytes.of(0)), currency))).combine( Generator.pickOne(possibleRecipients) ) { amount, recipient -> - CashCommand.PayCash(amount, recipient) + CashFlow.Command.PayCash(amount, recipient) } } fun generateExit( max: Long, currency: Currency -): Generator { +): Generator { return generateAmount(1, max, Generator.pure(currency)).map { amount -> - CashCommand.ExitCash(amount, OpaqueBytes.of(0)) + CashFlow.Command.ExitCash(amount, OpaqueBytes.of(0)) } } diff --git a/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/SelfIssueTest.kt b/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/SelfIssueTest.kt index c4e7106094..f957bb0d5c 100644 --- a/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/SelfIssueTest.kt +++ b/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/SelfIssueTest.kt @@ -11,7 +11,8 @@ import net.corda.core.crypto.Party import net.corda.core.flows.FlowException import net.corda.core.getOrThrow import net.corda.core.messaging.startFlow -import net.corda.flows.CashCommand +import net.corda.core.toFuture +import net.corda.flows.CashException import net.corda.flows.CashFlow import net.corda.loadtest.LoadTest import net.corda.loadtest.NodeHandle @@ -22,7 +23,7 @@ private val log = LoggerFactory.getLogger("SelfIssue") // DOCS START 1 data class SelfIssueCommand( - val command: CashCommand.IssueCash, + val command: CashFlow.Command.IssueCash, val node: NodeHandle ) From 50e1eb7b21d083aec5aec39babdda1ba0d6aced2 Mon Sep 17 00:00:00 2001 From: Shams Asari Date: Wed, 8 Feb 2017 16:00:39 +0000 Subject: [PATCH 28/33] End flow if waiting for ledger commit and committer flow errors --- .../kotlin/net/corda/core/flows/FlowLogic.kt | 2 +- .../services/statemachine/FlowIORequest.kt | 6 +- .../statemachine/FlowStateMachineImpl.kt | 127 ++++++++++------ .../services/statemachine/SessionMessage.kt | 25 ++-- .../statemachine/StateMachineManager.kt | 97 +++++++------ .../statemachine/StateMachineManagerTests.kt | 137 ++++++++++++------ .../kotlin/net/corda/testing/node/MockNode.kt | 2 + 7 files changed, 244 insertions(+), 152 deletions(-) diff --git a/core/src/main/kotlin/net/corda/core/flows/FlowLogic.kt b/core/src/main/kotlin/net/corda/core/flows/FlowLogic.kt index ea32e377af..59fe50ba61 100644 --- a/core/src/main/kotlin/net/corda/core/flows/FlowLogic.kt +++ b/core/src/main/kotlin/net/corda/core/flows/FlowLogic.kt @@ -203,7 +203,7 @@ abstract class FlowLogic { val theirs = subLogic.progressTracker if (ours != null && theirs != null) { if (ours.currentStep == ProgressTracker.UNSTARTED) { - logger.warn("ProgressTracker has not been started for $this") + logger.warn("ProgressTracker has not been started") ours.nextStep() } ours.setChildProgressTracker(ours.currentStep, theirs) diff --git a/node/src/main/kotlin/net/corda/node/services/statemachine/FlowIORequest.kt b/node/src/main/kotlin/net/corda/node/services/statemachine/FlowIORequest.kt index 9496feeb2e..5820facedc 100644 --- a/node/src/main/kotlin/net/corda/node/services/statemachine/FlowIORequest.kt +++ b/node/src/main/kotlin/net/corda/node/services/statemachine/FlowIORequest.kt @@ -10,6 +10,8 @@ interface FlowIORequest { val stackTraceInCaseOfProblems: StackSnapshot } +interface WaitingRequest : FlowIORequest + interface SessionedFlowIORequest : FlowIORequest { val session: FlowSession } @@ -18,7 +20,7 @@ interface SendRequest : SessionedFlowIORequest { val message: SessionMessage } -interface ReceiveRequest : SessionedFlowIORequest { +interface ReceiveRequest : SessionedFlowIORequest, WaitingRequest { val receiveType: Class } @@ -40,7 +42,7 @@ data class SendOnly(override val session: FlowSession, override val message: Ses override val stackTraceInCaseOfProblems: StackSnapshot = StackSnapshot() } -data class WaitForLedgerCommit(val hash: SecureHash, val fiber: FlowStateMachineImpl<*>) : FlowIORequest { +data class WaitForLedgerCommit(val hash: SecureHash, val fiber: FlowStateMachineImpl<*>) : WaitingRequest { @Transient override val stackTraceInCaseOfProblems: StackSnapshot = StackSnapshot() } diff --git a/node/src/main/kotlin/net/corda/node/services/statemachine/FlowStateMachineImpl.kt b/node/src/main/kotlin/net/corda/node/services/statemachine/FlowStateMachineImpl.kt index 4beab873e2..8ad9335c5a 100644 --- a/node/src/main/kotlin/net/corda/node/services/statemachine/FlowStateMachineImpl.kt +++ b/node/src/main/kotlin/net/corda/node/services/statemachine/FlowStateMachineImpl.kt @@ -51,7 +51,7 @@ class FlowStateMachineImpl(override val id: StateMachineRunId, @Transient override lateinit var serviceHub: ServiceHubInternal @Transient internal lateinit var database: Database @Transient internal lateinit var actionOnSuspend: (FlowIORequest) -> Unit - @Transient internal lateinit var actionOnEnd: (Pair?) -> Unit + @Transient internal lateinit var actionOnEnd: (Throwable?, Boolean) -> Unit @Transient internal var fromCheckpoint: Boolean = false @Transient private var txTrampoline: Transaction? = null @@ -76,7 +76,7 @@ class FlowStateMachineImpl(override val id: StateMachineRunId, // This state IS serialised, as we need it to know what the fiber is waiting for. internal val openSessions = HashMap, Party>, FlowSession>() - internal var waitingForLedgerCommitOf: SecureHash? = null + internal var waitingForResponse: WaitingRequest? = null init { logic.stateMachine = this @@ -91,11 +91,11 @@ class FlowStateMachineImpl(override val id: StateMachineRunId, } catch (e: FlowException) { // Check if the FlowException was propagated by looking at where the stack trace originates (see suspendAndExpectReceive). val propagated = e.stackTrace[0].className == javaClass.name - actionOnEnd(Pair(e, propagated)) + actionOnEnd(e, propagated) _resultFuture?.setException(e) return } catch (t: Throwable) { - actionOnEnd(null) + actionOnEnd(t, false) _resultFuture?.setException(t) throw ExecutionException(t) } @@ -105,7 +105,7 @@ class FlowStateMachineImpl(override val id: StateMachineRunId, .filter { it.state is FlowSessionState.Initiating } .forEach { it.waitForConfirmation() } // This is to prevent actionOnEnd being called twice if it throws an exception - actionOnEnd(null) + actionOnEnd(null, false) _resultFuture?.set(result) } @@ -136,10 +136,11 @@ class FlowStateMachineImpl(override val id: StateMachineRunId, sessionFlow: FlowLogic<*>): UntrustworthyData { val session = getConfirmedSession(otherParty, sessionFlow) return if (session == null) { + val newSession = startNewSession(otherParty, sessionFlow, payload, waitForConfirmation = true) // Only do a receive here as the session init has carried the payload - receiveInternal(startNewSession(otherParty, sessionFlow, payload, waitForConfirmation = true)) + receiveInternal(newSession, receiveType) } else { - sendAndReceiveInternal(session, createSessionData(session, payload)) + sendAndReceiveInternal(session, createSessionData(session, payload), receiveType) }.checkPayloadIs(receiveType) } @@ -147,8 +148,9 @@ class FlowStateMachineImpl(override val id: StateMachineRunId, override fun receive(receiveType: Class, otherParty: Party, sessionFlow: FlowLogic<*>): UntrustworthyData { - val session = getConfirmedSession(otherParty, sessionFlow) ?: startNewSession(otherParty, sessionFlow, null, waitForConfirmation = true) - return receiveInternal(session).checkPayloadIs(receiveType) + val session = getConfirmedSession(otherParty, sessionFlow) ?: + startNewSession(otherParty, sessionFlow, null, waitForConfirmation = true) + return receiveInternal(session, receiveType).checkPayloadIs(receiveType) } @Suspendable @@ -167,7 +169,7 @@ class FlowStateMachineImpl(override val id: StateMachineRunId, */ @Suspendable private fun FlowSession.waitForConfirmation() { - val (peerParty, sessionInitResponse) = receiveInternal(this) + val (peerParty, sessionInitResponse) = receiveInternal(this, null) if (sessionInitResponse is SessionConfirm) { state = FlowSessionState.Initiated(peerParty, sessionInitResponse.initiatedSessionId) } else { @@ -178,12 +180,19 @@ class FlowStateMachineImpl(override val id: StateMachineRunId, @Suspendable override fun waitForLedgerCommit(hash: SecureHash, sessionFlow: FlowLogic<*>): SignedTransaction { - waitingForLedgerCommitOf = hash logger.info("Waiting for transaction $hash to commit") suspend(WaitForLedgerCommit(hash, sessionFlow.stateMachine as FlowStateMachineImpl<*>)) - logger.info("Transaction $hash has committed to the ledger, resuming") val stx = serviceHub.storageService.validatedTransactions.getTransaction(hash) - return stx ?: throw IllegalStateException("We were resumed after waiting for $hash but it wasn't found in our local storage") + if (stx != null) return stx + // If the tx isn't committed then we may have been resumed due to an session ending in an error + for (session in openSessions.values) { + for (receivedMessage in session.receivedMessages) { + if (receivedMessage.message is ErrorSessionEnd) { + session.erroredEnd(receivedMessage.message) + } + } + } + throw IllegalStateException("We were resumed after waiting for $hash but it wasn't found in our local storage") } private fun createSessionData(session: FlowSession, payload: Any): SessionData { @@ -200,14 +209,17 @@ class FlowStateMachineImpl(override val id: StateMachineRunId, suspend(SendOnly(session, message)) } - private inline fun receiveInternal(session: FlowSession): ReceivedSessionMessage { - return suspendAndExpectReceive(ReceiveOnly(session, M::class.java)) + private inline fun receiveInternal( + session: FlowSession, + userReceiveType: Class<*>?): ReceivedSessionMessage { + return waitForMessage(ReceiveOnly(session, M::class.java), userReceiveType) } private inline fun sendAndReceiveInternal( session: FlowSession, - message: SessionMessage): ReceivedSessionMessage { - return suspendAndExpectReceive(SendAndReceive(session, message, M::class.java)) + message: SessionMessage, + userReceiveType: Class<*>?): ReceivedSessionMessage { + return waitForMessage(SendAndReceive(session, message, M::class.java), userReceiveType) } @Suspendable @@ -241,51 +253,72 @@ class FlowStateMachineImpl(override val id: StateMachineRunId, } @Suspendable - @Suppress("UNCHECKED_CAST", "PLATFORM_CLASS_MAPPED_TO_KOTLIN") - private fun suspendAndExpectReceive(receiveRequest: ReceiveRequest): ReceivedSessionMessage { - val session = receiveRequest.session - fun getReceivedMessage(): ReceivedSessionMessage? = session.receivedMessages.poll() + private fun waitForMessage( + receiveRequest: ReceiveRequest, + userReceiveType: Class<*>?): ReceivedSessionMessage { + val receivedMessage = receiveRequest.suspendAndExpectReceive() + return receivedMessage.confirmReceiveType(receiveRequest, userReceiveType) + } - val polledMessage = getReceivedMessage() - val receivedMessage = if (polledMessage != null) { - if (receiveRequest is SendAndReceive) { + @Suspendable + private fun ReceiveRequest<*>.suspendAndExpectReceive(): ReceivedSessionMessage<*> { + fun pollForMessage() = session.receivedMessages.poll() + + val polledMessage = pollForMessage() + return if (polledMessage != null) { + if (this is SendAndReceive) { // We've already received a message but we suspend so that the send can be performed - suspend(receiveRequest) + suspend(this) } polledMessage } else { // Suspend while we wait for a receive - suspend(receiveRequest) - getReceivedMessage() ?: - throw IllegalStateException("Was expecting a ${receiveRequest.receiveType.simpleName} but instead " + - "got nothing for $receiveRequest") - } - - if (receiveRequest.receiveType.isInstance(receivedMessage.message)) { - return receivedMessage as ReceivedSessionMessage - } else if (receivedMessage.message is SessionEnd) { - openSessions.values.remove(session) - if (receivedMessage.message.errorResponse != null) { - (receivedMessage.message.errorResponse as java.lang.Throwable).fillInStackTrace() - throw receivedMessage.message.errorResponse - } else { - throw FlowSessionException("${session.state.sendToParty} has ended their flow but we were expecting " + - "to receive ${receiveRequest.receiveType.simpleName} from them") - } - } else { - throw IllegalStateException("Was expecting a ${receiveRequest.receiveType.simpleName} but instead got " + - "${receivedMessage.message} for $receiveRequest") + suspend(this) + pollForMessage() ?: + throw IllegalStateException("Was expecting a ${receiveType.simpleName} but instead got nothing for $this") } } + private fun ReceivedSessionMessage<*>.confirmReceiveType( + receiveRequest: ReceiveRequest, + userReceiveType: Class<*>?): ReceivedSessionMessage { + val session = receiveRequest.session + val receiveType = receiveRequest.receiveType + if (receiveType.isInstance(message)) { + @Suppress("UNCHECKED_CAST") + return this as ReceivedSessionMessage + } else if (message is SessionEnd) { + openSessions.values.remove(session) + if (message is ErrorSessionEnd) { + session.erroredEnd(message) + } else { + val expectedType = userReceiveType?.name ?: receiveType.simpleName + throw FlowSessionException("Counterparty flow on ${session.state.sendToParty} has completed without " + + "sending a $expectedType") + } + } else { + throw IllegalStateException("Was expecting a ${receiveType.simpleName} but instead got $message for $receiveRequest") + } + } + + private fun FlowSession.erroredEnd(end: ErrorSessionEnd): Nothing { + if (end.errorResponse != null) { + @Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN") + (end.errorResponse as java.lang.Throwable).fillInStackTrace() + throw end.errorResponse + } else { + throw FlowSessionException("Counterparty flow on ${state.sendToParty} had an internal error and has terminated") + } + } + @Suspendable private fun suspend(ioRequest: FlowIORequest) { // We have to pass the thread local database transaction across via a transient field as the fiber park // swaps them out. txTrampoline = TransactionManager.currentOrNull() StrandLocalTransactionManager.setThreadLocalTx(null) - if (ioRequest is SessionedFlowIORequest) - ioRequest.session.waitingForResponse = (ioRequest is ReceiveRequest<*>) + if (ioRequest is WaitingRequest) + waitingForResponse = ioRequest var exceptionDuringSuspend: Throwable? = null parkAndSerialize { fiber, serializer -> diff --git a/node/src/main/kotlin/net/corda/node/services/statemachine/SessionMessage.kt b/node/src/main/kotlin/net/corda/node/services/statemachine/SessionMessage.kt index c1811c98b8..246d0cf07f 100644 --- a/node/src/main/kotlin/net/corda/node/services/statemachine/SessionMessage.kt +++ b/node/src/main/kotlin/net/corda/node/services/statemachine/SessionMessage.kt @@ -7,20 +7,10 @@ import net.corda.core.utilities.UntrustworthyData interface SessionMessage -interface ExistingSessionMessage : SessionMessage { - val recipientSessionId: Long -} - data class SessionInit(val initiatorSessionId: Long, val flowName: String, val firstPayload: Any?) : SessionMessage -interface SessionInitResponse : ExistingSessionMessage - -data class SessionConfirm(val initiatorSessionId: Long, val initiatedSessionId: Long) : SessionInitResponse { - override val recipientSessionId: Long get() = initiatorSessionId -} - -data class SessionReject(val initiatorSessionId: Long, val errorMessage: String) : SessionInitResponse { - override val recipientSessionId: Long get() = initiatorSessionId +interface ExistingSessionMessage : SessionMessage { + val recipientSessionId: Long } data class SessionData(override val recipientSessionId: Long, val payload: Any) : ExistingSessionMessage { @@ -29,7 +19,16 @@ data class SessionData(override val recipientSessionId: Long, val payload: Any) } } -data class SessionEnd(override val recipientSessionId: Long, val errorResponse: FlowException?) : ExistingSessionMessage +interface SessionInitResponse : ExistingSessionMessage { + val initiatorSessionId: Long + override val recipientSessionId: Long get() = initiatorSessionId +} +data class SessionConfirm(override val initiatorSessionId: Long, val initiatedSessionId: Long) : SessionInitResponse +data class SessionReject(override val initiatorSessionId: Long, val errorMessage: String) : SessionInitResponse + +interface SessionEnd : ExistingSessionMessage +data class NormalSessionEnd(override val recipientSessionId: Long) : SessionEnd +data class ErrorSessionEnd(override val recipientSessionId: Long, val errorResponse: FlowException?) : SessionEnd data class ReceivedSessionMessage(val sender: Party, val message: M) diff --git a/node/src/main/kotlin/net/corda/node/services/statemachine/StateMachineManager.kt b/node/src/main/kotlin/net/corda/node/services/statemachine/StateMachineManager.kt index 4ed04014fc..d1bb24322a 100644 --- a/node/src/main/kotlin/net/corda/node/services/statemachine/StateMachineManager.kt +++ b/node/src/main/kotlin/net/corda/node/services/statemachine/StateMachineManager.kt @@ -164,13 +164,13 @@ class StateMachineManager(val serviceHub: ServiceHubInternal, // Observe the stream of committed, validated transactions and resume fibers that are waiting for them. serviceHub.storageService.validatedTransactions.updates.subscribe { stx -> val hash = stx.id - val flows: Set> = mutex.locked { fibersWaitingForLedgerCommit.removeAll(hash) } - if (flows.isNotEmpty()) { + val fibers: Set> = mutex.locked { fibersWaitingForLedgerCommit.removeAll(hash) } + if (fibers.isNotEmpty()) { executor.executeASAP { - for (flow in flows) { - logger.info("Resuming ${flow.id} because it was waiting for tx ${flow.waitingForLedgerCommitOf!!} which is now committed.") - flow.waitingForLedgerCommitOf = null - resumeFiber(flow) + for (fiber in fibers) { + fiber.logger.info("Transaction $hash has committed to the ledger, resuming") + fiber.waitingForResponse = null + resumeFiber(fiber) } } } @@ -239,19 +239,22 @@ class StateMachineManager(val serviceHub: ServiceHubInternal, private fun resumeRestoredFiber(fiber: FlowStateMachineImpl<*>) { fiber.openSessions.values.forEach { openSessions[it.ourSessionId] = it } - val waitingForHash = fiber.waitingForLedgerCommitOf - if (fiber.openSessions.values.any { it.waitingForResponse }) { - fiber.logger.info("Restored, pending on receive") - } else if (waitingForHash != null) { - val stx = databaseTransaction(database) { - serviceHub.storageService.validatedTransactions.getTransaction(waitingForHash) - } - if (stx != null) { - fiber.logger.info("Resuming fiber as tx $waitingForHash has committed.") - resumeFiber(fiber) + val waitingForResponse = fiber.waitingForResponse + if (waitingForResponse != null) { + if (waitingForResponse is WaitForLedgerCommit) { + val stx = databaseTransaction(database) { + serviceHub.storageService.validatedTransactions.getTransaction(waitingForResponse.hash) + } + if (stx != null) { + fiber.logger.info("Resuming fiber as tx ${waitingForResponse.hash} has committed.") + fiber.waitingForResponse = null + resumeFiber(fiber) + } else { + fiber.logger.info("Restored, pending on ledger commit of ${waitingForResponse.hash}") + mutex.locked { fibersWaitingForLedgerCommit.put(waitingForResponse.hash, fiber) } + } } else { - fiber.logger.info("Restored, pending on ledger commit of $waitingForHash") - mutex.locked { fibersWaitingForLedgerCommit.put(waitingForHash, fiber) } + fiber.logger.info("Restored, pending on receive") } } else { resumeFiber(fiber) @@ -275,15 +278,17 @@ class StateMachineManager(val serviceHub: ServiceHubInternal, private fun onExistingSessionMessage(message: ExistingSessionMessage, sender: Party) { val session = openSessions[message.recipientSessionId] if (session != null) { - session.fiber.logger.trace { "Received $message on $session" } + session.fiber.logger.trace { "Received $message on $session from $sender" } if (message is SessionEnd) { openSessions.remove(message.recipientSessionId) } session.receivedMessages += ReceivedSessionMessage(sender, message) - if (session.waitingForResponse) { - // We only want to resume once, so immediately reset the flag. - session.waitingForResponse = false + if (resumeOnMessage(message, session)) { + // It's important that we reset here and not after the fiber's resumed, in case we receive another message + // before then. + session.fiber.waitingForResponse = null updateCheckpoint(session.fiber) + session.fiber.logger.debug { "About to resume due to $message" } resumeFiber(session.fiber) } } else { @@ -291,7 +296,7 @@ class StateMachineManager(val serviceHub: ServiceHubInternal, if (peerParty != null) { if (message is SessionConfirm) { logger.debug { "Received session confirmation but associated fiber has already terminated, so sending session end" } - sendSessionMessage(peerParty, SessionEnd(message.initiatedSessionId, null)) + sendSessionMessage(peerParty, NormalSessionEnd(message.initiatedSessionId)) } else { logger.trace { "Ignoring session end message for already closed session: $message" } } @@ -301,6 +306,14 @@ class StateMachineManager(val serviceHub: ServiceHubInternal, } } + // We resume the fiber if it's received a response for which it was waiting for or it's waiting for a ledger + // commit but a counterparty flow has ended with an error (in which case our flow also has to end) + private fun resumeOnMessage(message: ExistingSessionMessage, session: FlowSession): Boolean { + val waitingForResponse = session.fiber.waitingForResponse + return (waitingForResponse as? ReceiveRequest<*>)?.session === session || + waitingForResponse is WaitForLedgerCommit && message is ErrorSessionEnd + } + private fun onSessionInit(sessionInit: SessionInit, sender: Party) { logger.trace { "Received $sessionInit $sender" } val otherPartySessionId = sessionInit.initiatorSessionId @@ -379,14 +392,14 @@ class StateMachineManager(val serviceHub: ServiceHubInternal, processIORequest(ioRequest) decrementLiveFibers() } - fiber.actionOnEnd = { errorResponse: Pair? -> + fiber.actionOnEnd = { exception, propagated -> try { fiber.logic.progressTracker?.currentStep = ProgressTracker.DONE mutex.locked { stateMachines.remove(fiber)?.let { checkpointStorage.removeCheckpoint(it) } notifyChangeObservers(fiber, AddOrRemove.REMOVE) } - endAllFiberSessions(fiber, errorResponse) + endAllFiberSessions(fiber, exception, propagated) } finally { fiber.commitTransaction() decrementLiveFibers() @@ -401,10 +414,10 @@ class StateMachineManager(val serviceHub: ServiceHubInternal, } } - private fun endAllFiberSessions(fiber: FlowStateMachineImpl<*>, errorResponse: Pair?) { + private fun endAllFiberSessions(fiber: FlowStateMachineImpl<*>, exception: Throwable?, propagated: Boolean) { openSessions.values.removeIf { session -> if (session.fiber == fiber) { - session.endSession(errorResponse) + session.endSession(exception, propagated) true } else { false @@ -412,22 +425,21 @@ class StateMachineManager(val serviceHub: ServiceHubInternal, } } - private fun FlowSession.endSession(errorResponse: Pair?) { + private fun FlowSession.endSession(exception: Throwable?, propagated: Boolean) { val initiatedState = state as? Initiated ?: return - val propagatedException = errorResponse?.let { - val (exception, propagated) = it - if (propagated) { - // This exception was propagated to us. We only propagate it down the invocation chain to the flow that - // initiated us, not to flows we've started sessions with. - if (initiatingParty != null) exception else null + val sessionEnd = if (exception == null) { + NormalSessionEnd(initiatedState.peerSessionId) + } else { + val errorResponse = if (exception is FlowException && (!propagated || initiatingParty != null)) { + // Only propagate this FlowException if our local flow threw it or it was propagated to us and we only + // pass it down invocation chain to the flow that initiated us, not to flows we've started sessions with. + exception } else { - exception // Our local flow threw the exception so propagate it + null } + ErrorSessionEnd(initiatedState.peerSessionId, errorResponse) } - sendSessionMessage( - initiatedState.peerParty, - SessionEnd(initiatedState.peerSessionId, propagatedException), - fiber) + sendSessionMessage(initiatedState.peerParty, sessionEnd, fiber) recentlyClosedSessions[ourSessionId] = initiatedState.peerParty } @@ -570,10 +582,9 @@ class StateMachineManager(val serviceHub: ServiceHubInternal, val flow: FlowLogic<*>, val ourSessionId: Long, val initiatingParty: Party?, - var state: FlowSessionState, - @Volatile var waitingForResponse: Boolean = false - ) { - val receivedMessages = ConcurrentLinkedQueue>() + var state: FlowSessionState) + { + val receivedMessages = ConcurrentLinkedQueue>() val fiber: FlowStateMachineImpl<*> get() = flow.stateMachine as FlowStateMachineImpl<*> } } diff --git a/node/src/test/kotlin/net/corda/node/services/statemachine/StateMachineManagerTests.kt b/node/src/test/kotlin/net/corda/node/services/statemachine/StateMachineManagerTests.kt index f7a26dfcf7..1c24c70f82 100644 --- a/node/src/test/kotlin/net/corda/node/services/statemachine/StateMachineManagerTests.kt +++ b/node/src/test/kotlin/net/corda/node/services/statemachine/StateMachineManagerTests.kt @@ -8,7 +8,6 @@ import net.corda.core.contracts.DOLLARS import net.corda.core.contracts.DummyState import net.corda.core.contracts.issuedBy import net.corda.core.crypto.Party -import net.corda.core.crypto.SecureHash import net.corda.core.crypto.generateKeyPair import net.corda.core.flows.FlowException import net.corda.core.flows.FlowLogic @@ -21,9 +20,9 @@ import net.corda.core.random63BitValue import net.corda.core.rootCause import net.corda.core.serialization.OpaqueBytes import net.corda.core.serialization.deserialize -import net.corda.core.utilities.unwrap import net.corda.core.transactions.SignedTransaction import net.corda.core.transactions.TransactionBuilder +import net.corda.core.utilities.unwrap import net.corda.flows.CashIssueFlow import net.corda.flows.CashPaymentFlow import net.corda.flows.FinalityFlow @@ -36,6 +35,7 @@ import net.corda.testing.expectEvents import net.corda.testing.initiateSingleShotFlow import net.corda.testing.node.InMemoryMessagingNetwork import net.corda.testing.node.InMemoryMessagingNetwork.MessageTransfer +import net.corda.testing.node.InMemoryMessagingNetwork.ServicePeerAllocationStrategy.RoundRobin import net.corda.testing.node.MockNetwork import net.corda.testing.node.MockNetwork.MockNode import net.corda.testing.sequence @@ -49,10 +49,11 @@ import rx.Observable import java.util.* import kotlin.reflect.KClass import kotlin.test.assertEquals +import kotlin.test.assertFailsWith import kotlin.test.assertTrue class StateMachineManagerTests { - private val net = MockNetwork(servicePeerAllocationStrategy = InMemoryMessagingNetwork.ServicePeerAllocationStrategy.RoundRobin()) + private val net = MockNetwork(servicePeerAllocationStrategy = RoundRobin()) private val sessionTransfers = ArrayList() private lateinit var node1: MockNode private lateinit var node2: MockNode @@ -102,7 +103,7 @@ class StateMachineManagerTests { @Test fun `exception while fiber suspended`() { - node2.services.registerFlowInitiator(ReceiveFlow::class) { SendFlow(2, it) } + node2.services.registerFlowInitiator(ReceiveFlow::class) { SendFlow("Hello", it) } val flow = ReceiveFlow(node2.info.legalIdentity) val fiber = node1.services.startFlow(flow) as FlowStateMachineImpl // Before the flow runs change the suspend action to throw an exception @@ -128,8 +129,7 @@ class StateMachineManagerTests { @Test fun `flow restarted just after receiving payload`() { node2.services.registerFlowInitiator(SendFlow::class) { ReceiveFlow(it).nonTerminating() } - val payload = random63BitValue() - node1.services.startFlow(SendFlow(payload, node2.info.legalIdentity)) + node1.services.startFlow(SendFlow("Hello", node2.info.legalIdentity)) // We push through just enough messages to get only the payload sent node2.pumpReceive() @@ -138,7 +138,7 @@ class StateMachineManagerTests { node2.stop() net.runNetwork() val restoredFlow = node2.restartAndGetRestoredFlow(node1) - assertThat(restoredFlow.receivedPayloads[0]).isEqualTo(payload) + assertThat(restoredFlow.receivedPayloads[0]).isEqualTo("Hello") } @Test @@ -178,15 +178,14 @@ class StateMachineManagerTests { @Test fun `flow loaded from checkpoint will respond to messages from before start`() { - val payload = random63BitValue() - node1.services.registerFlowInitiator(ReceiveFlow::class) { SendFlow(payload, it) } + node1.services.registerFlowInitiator(ReceiveFlow::class) { SendFlow("Hello", it) } node2.services.startFlow(ReceiveFlow(node1.info.legalIdentity).nonTerminating()) // Prepare checkpointed receive flow // Make sure the add() has finished initial processing. node2.smm.executor.flush() node2.disableDBCloseOnStop() node2.stop() // kill receiver val restoredFlow = node2.restartAndGetRestoredFlow(node1) - assertThat(restoredFlow.receivedPayloads[0]).isEqualTo(payload) + assertThat(restoredFlow.receivedPayloads[0]).isEqualTo("Hello") } @Test @@ -245,7 +244,7 @@ class StateMachineManagerTests { net.runNetwork() node2.services.registerFlowInitiator(SendFlow::class) { ReceiveFlow(it).nonTerminating() } node3.services.registerFlowInitiator(SendFlow::class) { ReceiveFlow(it).nonTerminating() } - val payload = random63BitValue() + val payload = "Hello World" node1.services.startFlow(SendFlow(payload, node2.info.legalIdentity, node3.info.legalIdentity)) net.runNetwork() val node2Flow = node2.getSingleFlow().first @@ -256,14 +255,14 @@ class StateMachineManagerTests { assertSessionTransfers(node2, node1 sent sessionInit(SendFlow::class, payload) to node2, node2 sent sessionConfirm to node1, - node1 sent sessionEnd() to node2 + node1 sent normalEnd to node2 //There's no session end from the other flows as they're manually suspended ) assertSessionTransfers(node3, node1 sent sessionInit(SendFlow::class, payload) to node3, node3 sent sessionConfirm to node1, - node1 sent sessionEnd() to node3 + node1 sent normalEnd to node3 //There's no session end from the other flows as they're manually suspended ) @@ -275,8 +274,8 @@ class StateMachineManagerTests { fun `receiving from multiple parties`() { val node3 = net.createNode(node1.info.address) net.runNetwork() - val node2Payload = random63BitValue() - val node3Payload = random63BitValue() + val node2Payload = "Test 1" + val node3Payload = "Test 2" node2.services.registerFlowInitiator(ReceiveFlow::class) { SendFlow(node2Payload, it) } node3.services.registerFlowInitiator(ReceiveFlow::class) { SendFlow(node3Payload, it) } val multiReceiveFlow = ReceiveFlow(node2.info.legalIdentity, node3.info.legalIdentity).nonTerminating() @@ -290,14 +289,14 @@ class StateMachineManagerTests { node1 sent sessionInit(ReceiveFlow::class) to node2, node2 sent sessionConfirm to node1, node2 sent sessionData(node2Payload) to node1, - node2 sent sessionEnd() to node1 + node2 sent normalEnd to node1 ) assertSessionTransfers(node3, node1 sent sessionInit(ReceiveFlow::class) to node3, node3 sent sessionConfirm to node1, node3 sent sessionData(node3Payload) to node1, - node3 sent sessionEnd() to node1 + node3 sent normalEnd to node1 ) } @@ -313,7 +312,7 @@ class StateMachineManagerTests { node2 sent sessionData(20L) to node1, node1 sent sessionData(11L) to node2, node2 sent sessionData(21L) to node1, - node1 sent sessionEnd() to node2 + node1 sent normalEnd to node2 ) } @@ -321,14 +320,14 @@ class StateMachineManagerTests { fun `different notaries are picked when addressing shared notary identity`() { assertEquals(notary1.info.notaryIdentity, notary2.info.notaryIdentity) node1.services.startFlow(CashIssueFlow( - DOLLARS(2000), + 2000.DOLLARS, OpaqueBytes.of(0x01), node1.info.legalIdentity, notary1.info.notaryIdentity)) // We pay a couple of times, the notary picking should go round robin for (i in 1 .. 3) { node1.services.startFlow(CashPaymentFlow( - DOLLARS(500).issuedBy(node1.info.legalIdentity.ref(0x01)), + 500.DOLLARS.issuedBy(node1.info.legalIdentity.ref(0x01)), node2.info.legalIdentity)) net.runNetwork() } @@ -336,7 +335,7 @@ class StateMachineManagerTests { val party1Info = notary1.services.networkMapCache.getPartyInfo(notary1.info.notaryIdentity)!! assert(party1Info is PartyInfo.Service) val notary1Address: MessageRecipients = endpoint.getAddressOfParty(notary1.services.networkMapCache.getPartyInfo(notary1.info.notaryIdentity)!!) - assert(notary1Address is InMemoryMessagingNetwork.ServiceHandle) + assertThat(notary1Address).isInstanceOf(InMemoryMessagingNetwork.ServiceHandle::class.java) assertEquals(notary1Address, endpoint.getAddressOfParty(notary2.services.networkMapCache.getPartyInfo(notary2.info.notaryIdentity)!!)) sessionTransfers.expectEvents(isStrict = false) { sequence( @@ -368,12 +367,38 @@ class StateMachineManagerTests { }, expect(match = { it.message is SessionConfirm }) { it.message as SessionConfirm - require(it.from == notary1.id) + assertEquals(it.from, notary1.id) } ) } } + @Test + fun `other side ends before doing expected send`() { + node2.services.registerFlowInitiator(ReceiveFlow::class) { NoOpFlow() } + val resultFuture = node1.services.startFlow(ReceiveFlow(node2.info.legalIdentity)).resultFuture + net.runNetwork() + assertThatExceptionOfType(FlowSessionException::class.java).isThrownBy { + resultFuture.getOrThrow() + }.withMessageContaining(String::class.java.name) + } + + @Test + fun `non-FlowException thrown on other side`() { + node2.services.registerFlowInitiator(ReceiveFlow::class) { ExceptionFlow { Exception("evil bug!") } } + val resultFuture = node1.services.startFlow(ReceiveFlow(node2.info.legalIdentity)).resultFuture + net.runNetwork() + val exceptionResult = assertFailsWith(FlowSessionException::class) { + resultFuture.getOrThrow() + } + assertThat(exceptionResult.message).doesNotContain("evil bug!") + assertSessionTransfers( + node1 sent sessionInit(ReceiveFlow::class) to node2, + node2 sent sessionConfirm to node1, + node2 sent erroredEnd() to node1 + ) + } + @Test fun `FlowException thrown on other side`() { val erroringFlowFuture = node2.initiateSingleShotFlow(ReceiveFlow::class) { @@ -384,7 +409,7 @@ class StateMachineManagerTests { assertThatExceptionOfType(MyFlowException::class.java) .isThrownBy { receivingFiber.resultFuture.getOrThrow() } .withMessage("Nothing useful") - .withStackTraceContaining("ReceiveFlow") // Make sure the stack trace is that of the receiving flow + .withStackTraceContaining(ReceiveFlow::class.java.name) // Make sure the stack trace is that of the receiving flow databaseTransaction(node2.database) { assertThat(node2.checkpointStorage.checkpoints()).isEmpty() } @@ -394,10 +419,10 @@ class StateMachineManagerTests { assertSessionTransfers( node1 sent sessionInit(ReceiveFlow::class) to node2, node2 sent sessionConfirm to node1, - node2 sent sessionEnd(errorFlow.exceptionThrown) to node1 + node2 sent erroredEnd(errorFlow.exceptionThrown) to node1 ) // Make sure the original stack trace isn't sent down the wire - assertThat((sessionTransfers.last().message as SessionEnd).errorResponse!!.stackTrace).isEmpty() + assertThat((sessionTransfers.last().message as ErrorSessionEnd).errorResponse!!.stackTrace).isEmpty() } @Test @@ -450,7 +475,7 @@ class StateMachineManagerTests { node1 sent sessionInit(ReceiveFlow::class) to node2, node2 sent sessionConfirm to node1, node2 sent sessionData("Hello") to node1, - node1 sent sessionEnd() to node2 // Unexpected session-end + node1 sent erroredEnd() to node2 ) } @@ -496,11 +521,29 @@ class StateMachineManagerTests { ptx.signWith(node1.services.legalIdentityKey) val stx = ptx.toSignedTransaction() - val future1 = node2.services.startFlow(WaitingFlows.Waiter(stx.id)).resultFuture - val future2 = node1.services.startFlow(WaitingFlows.Committer(stx, node2.info.legalIdentity)).resultFuture + val committerFiber = node1 + .initiateSingleShotFlow(WaitingFlows.Waiter::class) { WaitingFlows.Committer(it) } + .map { it.stateMachine } + val waiterStx = node2.services.startFlow(WaitingFlows.Waiter(stx, node1.info.legalIdentity)).resultFuture net.runNetwork() - future1.getOrThrow() - future2.getOrThrow() + assertThat(waiterStx.getOrThrow()).isEqualTo(committerFiber.getOrThrow().resultFuture.getOrThrow()) + } + + @Test + fun `committer throws exception before calling the finality flow`() { + val ptx = TransactionBuilder(notary = notary1.info.notaryIdentity) + ptx.addOutputState(DummyState()) + ptx.signWith(node1.services.legalIdentityKey) + val stx = ptx.toSignedTransaction() + + node1.services.registerFlowInitiator(WaitingFlows.Waiter::class) { + WaitingFlows.Committer(it) { throw Exception("Error") } + } + val waiter = node2.services.startFlow(WaitingFlows.Waiter(stx, node1.info.legalIdentity)).resultFuture + net.runNetwork() + assertThatExceptionOfType(FlowSessionException::class.java).isThrownBy { + waiter.getOrThrow() + } } @@ -522,12 +565,10 @@ class StateMachineManagerTests { } private fun sessionInit(flowMarker: KClass<*>, payload: Any? = null) = SessionInit(0, flowMarker.java.name, payload) - private val sessionConfirm = SessionConfirm(0, 0) - private fun sessionData(payload: Any) = SessionData(0, payload) - - private fun sessionEnd(error: FlowException? = null) = SessionEnd(0, error) + private val normalEnd = NormalSessionEnd(0) + private fun erroredEnd(errorResponse: FlowException? = null) = ErrorSessionEnd(0, errorResponse) private fun assertSessionTransfers(vararg expected: SessionTransfer) { assertThat(sessionTransfers).containsExactly(*expected) @@ -557,7 +598,8 @@ class StateMachineManagerTests { is SessionData -> message.copy(recipientSessionId = 0) is SessionInit -> message.copy(initiatorSessionId = 0) is SessionConfirm -> message.copy(initiatorSessionId = 0, initiatedSessionId = 0) - is SessionEnd -> message.copy(recipientSessionId = 0) + is NormalSessionEnd -> message.copy(recipientSessionId = 0) + is ErrorSessionEnd -> message.copy(recipientSessionId = 0) else -> message } } @@ -578,7 +620,7 @@ class StateMachineManagerTests { } - private class SendFlow(val payload: Any, vararg val otherParties: Party) : FlowLogic() { + private class SendFlow(val payload: String, vararg val otherParties: Party) : FlowLogic() { init { require(otherParties.isNotEmpty()) } @@ -595,11 +637,11 @@ class StateMachineManagerTests { require(otherParties.isNotEmpty()) } - @Transient var receivedPayloads: List = emptyList() + @Transient var receivedPayloads: List = emptyList() @Suspendable override fun call() { - receivedPayloads = otherParties.map { receive(it).unwrap { it } } + receivedPayloads = otherParties.map { receive(it).unwrap { it } } if (nonTerminating) { Fiber.park() } @@ -630,23 +672,26 @@ class StateMachineManagerTests { } } - private class MyFlowException(message: String) : FlowException(message) { + private class MyFlowException(override val message: String) : FlowException() { override fun equals(other: Any?): Boolean = other is MyFlowException && other.message == this.message - override fun hashCode(): Int = message?.hashCode() ?: 31 + override fun hashCode(): Int = message.hashCode() } private object WaitingFlows { - class Waiter(private val hash: SecureHash) : FlowLogic() { + class Waiter(val stx: SignedTransaction, val otherParty: Party) : FlowLogic() { @Suspendable - override fun call() { - waitForLedgerCommit(hash) + override fun call(): SignedTransaction { + send(otherParty, stx) + return waitForLedgerCommit(stx.id) } } - class Committer(private val stx: SignedTransaction, private val otherParty: Party) : FlowLogic() { + class Committer(val otherParty: Party, val throwException: (() -> Exception)? = null) : FlowLogic() { @Suspendable - override fun call() { - subFlow(FinalityFlow(stx, setOf(otherParty))) + override fun call(): SignedTransaction { + val stx = receive(otherParty).unwrap { it } + if (throwException != null) throw throwException.invoke() + return subFlow(FinalityFlow(stx, setOf(otherParty))).single() } } } diff --git a/test-utils/src/main/kotlin/net/corda/testing/node/MockNode.kt b/test-utils/src/main/kotlin/net/corda/testing/node/MockNode.kt index 89d05e3626..aaeb831d48 100644 --- a/test-utils/src/main/kotlin/net/corda/testing/node/MockNode.kt +++ b/test-utils/src/main/kotlin/net/corda/testing/node/MockNode.kt @@ -282,6 +282,7 @@ class MockNetwork(private val networkSendManuallyPumped: Boolean = false, * parameter set to -1 (the default) which simply runs as many rounds as necessary to result in network * stability (no nodes sent any messages in the last round). */ + @JvmOverloads fun runNetwork(rounds: Int = -1) { check(!networkSendManuallyPumped) fun pumpAll() = messagingNetwork.endpoints.map { it.pumpReceive(false) } @@ -324,6 +325,7 @@ class MockNetwork(private val networkSendManuallyPumped: Boolean = false, * Sets up a network with the requested number of nodes (defaulting to two), with one or more service nodes that * run a notary, network map, any oracles etc. Can't be combined with [createTwoNodes]. */ + @JvmOverloads fun createSomeNodes(numPartyNodes: Int = 2, nodeFactory: Factory = defaultFactory, notaryKeyPair: KeyPair? = DUMMY_NOTARY_KEY): BasketOfNodes { require(nodes.isEmpty()) val notaryServiceInfo = ServiceInfo(SimpleNotaryService.type) From 1b3bc2ec7d6266fe76511874bd8640ecf6d02bee Mon Sep 17 00:00:00 2001 From: Clinton Alexander Date: Thu, 9 Feb 2017 15:57:31 +0000 Subject: [PATCH 29/33] Capsule fat JAR now contains a CDDL notice. --- buildSrc/scripts/runnodes | 17 ----------------- node/capsule/NOTICE | 15 +++++++++++++++ node/capsule/build.gradle | 1 + 3 files changed, 16 insertions(+), 17 deletions(-) delete mode 100755 buildSrc/scripts/runnodes create mode 100644 node/capsule/NOTICE diff --git a/buildSrc/scripts/runnodes b/buildSrc/scripts/runnodes deleted file mode 100755 index a6bec7cef8..0000000000 --- a/buildSrc/scripts/runnodes +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash -# Creates three nodes. A network map and notary node and two regular nodes that can be extended with cordapps. - -set -euo pipefail -trap 'kill $(jobs -p)' SIGINT SIGTERM EXIT -export CAPSULE_CACHE_DIR=cache -pushd nameserver -( java -jar JAR_NAME )& -popd -pushd nodea -( java -jar JAR_NAME )& -popd -pushd nodeb -( java -jar JAR_NAME )& -popd -read -p 'Any key to exit' -kill $(jobs -p) diff --git a/node/capsule/NOTICE b/node/capsule/NOTICE new file mode 100644 index 0000000000..0b8a9491f2 --- /dev/null +++ b/node/capsule/NOTICE @@ -0,0 +1,15 @@ +This JAR contains executable versions of 'Covered Software' distributed under the terms of the Common Development and Distribution License and/or the GNU General Public License with ClassPath exception. + +Source code versions of the Covered Software are available online from their source projects via the links indicated below. + +-------------------- + +JAX-RS API - licensed under CDDL-1.0 (https://opensource.org/licenses/cddl1.php) +Source code available at: https://java.net/projects/jax-rs-spec/sources/api/show + +Jersey - dual-licensed under CDDL-1.0 and GPL 2.0 with ClassPath exception (https://jersey.java.net/license.html) +Source code available at: https://maven.java.net/content/repositories/releases/org/glassfish/jersey/ + +HK2 - dual-licensed under CDDL-1.0 and GPL 2.0 with ClassPath exception (https://hk2.java.net/2.5.0-b32/license.html) +Source code available at: https://java.net/projects/hk2/sources/git/show + diff --git a/node/capsule/build.gradle b/node/capsule/build.gradle index e6f1ddc61f..992c4e9fc1 100644 --- a/node/capsule/build.gradle +++ b/node/capsule/build.gradle @@ -52,6 +52,7 @@ task buildCordaJAR(type: FatCapsule, dependsOn: ['buildCertSigningRequestUtility applicationClass 'net.corda.node.Corda' archiveName "corda-${corda_version}.jar" applicationSource = files(project.tasks.findByName('jar'), '../build/classes/main/CordaCaplet.class', 'config/dev/log4j2.xml') + from 'NOTICE' // Copy CDDL notice capsuleManifest { applicationVersion = corda_version From 21c6c499fa63648c39f5c1fb75fb2a52f20acd75 Mon Sep 17 00:00:00 2001 From: David Lee Date: Thu, 9 Feb 2017 16:07:17 +0000 Subject: [PATCH 30/33] Updated the notice ... to the last version reviewed & approved by legal counsel --- node/capsule/NOTICE | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/node/capsule/NOTICE b/node/capsule/NOTICE index 0b8a9491f2..cc2eb3b4d3 100644 --- a/node/capsule/NOTICE +++ b/node/capsule/NOTICE @@ -1,15 +1,14 @@ -This JAR contains executable versions of 'Covered Software' distributed under the terms of the Common Development and Distribution License and/or the GNU General Public License with ClassPath exception. +This JAR contains executable versions of the software listed below, each of which has been developed under an open source project not under the control of R3. All such software is distributed under the terms of its respective license as listed below and R3 makes no representations or warranties of any kind with respect to such software. See the respective licenses for the specific language governing permissions and limitation of use. -Source code versions of the Covered Software are available online from their source projects via the links indicated below. +Full text of the license and the source code versions of the software are available online from their source projects via the links indicated below. -------------------- -JAX-RS API - licensed under CDDL-1.0 (https://opensource.org/licenses/cddl1.php) +JAX-RS API - Licensed under CDDL-1.0 (https://opensource.org/licenses/cddl1.php) Source code available at: https://java.net/projects/jax-rs-spec/sources/api/show -Jersey - dual-licensed under CDDL-1.0 and GPL 2.0 with ClassPath exception (https://jersey.java.net/license.html) +Jersey - Dual-licensed under CDDL-1.0 and GPL 2.0 with ClassPath exception (https://jersey.java.net/license.html) Source code available at: https://maven.java.net/content/repositories/releases/org/glassfish/jersey/ -HK2 - dual-licensed under CDDL-1.0 and GPL 2.0 with ClassPath exception (https://hk2.java.net/2.5.0-b32/license.html) +HK2 - Dual-licensed under CDDL-1.0 and GPL 2.0 with ClassPath exception (https://hk2.java.net/2.5.0-b32/license.html) Source code available at: https://java.net/projects/hk2/sources/git/show - From c054ffe719b68ac4be8c1760a20eddc7cd0a603c Mon Sep 17 00:00:00 2001 From: Patrick Kuo Date: Thu, 9 Feb 2017 17:14:31 +0000 Subject: [PATCH 31/33] Add support for contract upgrades (#165) * Add support for contract upgrades * Add interface for the upgraded contract to implement, which provides functionality for upgrading legacy states. * Add shared upgrade command and verification code for it. * Add DummyContractV2 to illustrate what an upgraded contract looks like. * Add new functions to vault service to support upgrading state objects. * Add contract upgrade flow --- .../net/corda/core/contracts/DummyContract.kt | 18 ++- .../corda/core/contracts/DummyContractV2.kt | 59 ++++++++ .../net/corda/core/contracts/Structures.kt | 25 +++- .../net/corda/core/messaging/CordaRPCOps.kt | 15 +++ .../net/corda/core/node/services/Services.kt | 21 ++- .../flows/AbstractStateReplacementFlow.kt | 33 +++-- .../net/corda/flows/ContractUpgradeFlow.kt | 83 ++++++++++++ .../net/corda/flows/NotaryChangeFlow.kt | 2 +- .../core/contracts/DummyContractV2Tests.kt | 31 +++++ .../core/flows/ContractUpgradeFlowTest.kt | 127 ++++++++++++++++++ .../core/flows/ResolveTransactionsFlowTest.kt | 2 +- docs/source/contract-upgrade.rst | 72 ++++++++++ docs/source/index.rst | 1 + .../node/services/RaftNotaryServiceTests.kt | 2 +- .../net/corda/node/internal/AbstractNode.kt | 1 + .../corda/node/internal/CordaRPCOpsImpl.kt | 3 + .../node/services/vault/NodeVaultService.kt | 31 +++-- .../corda/node/services/NotaryChangeTests.kt | 4 +- .../corda/node/services/NotaryServiceTests.kt | 2 +- .../services/ValidatingNotaryServiceTests.kt | 2 +- .../notarydemo/flows/DummyIssueAndMove.kt | 2 +- .../net/corda/vega/flows/StateRevisionFlow.kt | 2 +- 22 files changed, 496 insertions(+), 42 deletions(-) create mode 100644 core/src/main/kotlin/net/corda/core/contracts/DummyContractV2.kt create mode 100644 core/src/main/kotlin/net/corda/flows/ContractUpgradeFlow.kt create mode 100644 core/src/test/kotlin/net/corda/core/contracts/DummyContractV2Tests.kt create mode 100644 core/src/test/kotlin/net/corda/core/flows/ContractUpgradeFlowTest.kt create mode 100644 docs/source/contract-upgrade.rst diff --git a/core/src/main/kotlin/net/corda/core/contracts/DummyContract.kt b/core/src/main/kotlin/net/corda/core/contracts/DummyContract.kt index ac27958ec9..dd0c70e314 100644 --- a/core/src/main/kotlin/net/corda/core/contracts/DummyContract.kt +++ b/core/src/main/kotlin/net/corda/core/contracts/DummyContract.kt @@ -10,7 +10,6 @@ import net.corda.core.transactions.TransactionBuilder val DUMMY_PROGRAM_ID = DummyContract() data class DummyContract(override val legalContractReference: SecureHash = SecureHash.sha256("")) : Contract { - interface State : ContractState { val magicNumber: Int } @@ -31,8 +30,7 @@ data class DummyContract(override val legalContractReference: SecureHash = Secur data class MultiOwnerState(override val magicNumber: Int = 0, val owners: List) : ContractState, State { override val contract = DUMMY_PROGRAM_ID - override val participants: List - get() = owners + override val participants: List get() = owners } interface Commands : CommandData { @@ -46,14 +44,20 @@ data class DummyContract(override val legalContractReference: SecureHash = Secur companion object { @JvmStatic - fun generateInitial(owner: PartyAndReference, magicNumber: Int, notary: Party): TransactionBuilder { - val state = SingleOwnerState(magicNumber, owner.party.owningKey) - return TransactionType.General.Builder(notary = notary).withItems(state, Command(Commands.Create(), owner.party.owningKey)) + fun generateInitial(magicNumber: Int, notary: Party, owner: PartyAndReference, vararg otherOwners: PartyAndReference): TransactionBuilder { + val owners = listOf(owner) + otherOwners + return if (owners.size == 1) { + val state = SingleOwnerState(magicNumber, owners.first().party.owningKey) + TransactionType.General.Builder(notary = notary).withItems(state, Command(Commands.Create(), owners.first().party.owningKey)) + } else { + val state = MultiOwnerState(magicNumber, owners.map { it.party.owningKey }) + TransactionType.General.Builder(notary = notary).withItems(state, Command(Commands.Create(), owners.map { it.party.owningKey })) + } } fun move(prior: StateAndRef, newOwner: CompositeKey) = move(listOf(prior), newOwner) fun move(priors: List>, newOwner: CompositeKey): TransactionBuilder { - require(priors.size > 0) + require(priors.isNotEmpty()) val priorState = priors[0].state.data val (cmd, state) = priorState.withNewOwner(newOwner) return TransactionType.General.Builder(notary = priors[0].state.notary).withItems( diff --git a/core/src/main/kotlin/net/corda/core/contracts/DummyContractV2.kt b/core/src/main/kotlin/net/corda/core/contracts/DummyContractV2.kt new file mode 100644 index 0000000000..c4cf32b255 --- /dev/null +++ b/core/src/main/kotlin/net/corda/core/contracts/DummyContractV2.kt @@ -0,0 +1,59 @@ +package net.corda.core.contracts + +import net.corda.core.crypto.CompositeKey +import net.corda.core.crypto.SecureHash +import net.corda.core.transactions.WireTransaction +import net.corda.flows.ContractUpgradeFlow + +// The dummy contract doesn't do anything useful. It exists for testing purposes. +val DUMMY_V2_PROGRAM_ID = DummyContractV2() + +/** + * Dummy contract state for testing of the upgrade process. + */ +class DummyContractV2 : UpgradedContract { + override val legacyContract = DUMMY_PROGRAM_ID + + data class State(val magicNumber: Int = 0, val owners: List) : ContractState { + override val contract = DUMMY_V2_PROGRAM_ID + override val participants: List = owners + } + + interface Commands : CommandData { + class Create : TypeOnlyCommandData(), Commands + class Move : TypeOnlyCommandData(), Commands + } + + override fun upgrade(state: DummyContract.State): DummyContractV2.State { + return DummyContractV2.State(state.magicNumber, state.participants) + } + + override fun verify(tx: TransactionForContract) { + if (tx.commands.any { it.value is UpgradeCommand }) ContractUpgradeFlow.verify(tx) + // Other verifications. + } + + // The "empty contract" + override val legalContractReference: SecureHash = SecureHash.sha256("") + + /** + * Generate an upgrade transaction from [DummyContract]. + * + * Note: This is a convenience helper method used for testing only. + * + * @return a pair of wire transaction, and a set of those who should sign the transaction for it to be valid. + */ + fun generateUpgradeFromV1(vararg states: StateAndRef): Pair> { + val notary = states.map { it.state.notary }.single() + require(states.isNotEmpty()) + + val signees = states.flatMap { it.state.data.participants }.toSet() + return Pair(TransactionType.General.Builder(notary).apply { + states.forEach { + addInputState(it) + addOutputState(upgrade(it.state.data)) + addCommand(UpgradeCommand(DUMMY_V2_PROGRAM_ID.javaClass), signees.toList()) + } + }.toWireTransaction(), signees) + } +} diff --git a/core/src/main/kotlin/net/corda/core/contracts/Structures.kt b/core/src/main/kotlin/net/corda/core/contracts/Structures.kt index aeefce5674..3898132ee9 100644 --- a/core/src/main/kotlin/net/corda/core/contracts/Structures.kt +++ b/core/src/main/kotlin/net/corda/core/contracts/Structures.kt @@ -381,7 +381,7 @@ interface IssueCommand : CommandData { val nonce: Long } -/** A common move command for contracts which can change owner. */ +/** A common move command for contract states which can change owner. */ interface MoveCommand : CommandData { /** * Contract code the moved state(s) are for the attention of, for example to indicate that the states are moved in @@ -397,6 +397,9 @@ interface NetCommand : CommandData { val type: NetType } +/** Indicates that this transaction replaces the inputs contract state to another contract state */ +data class UpgradeCommand(val upgradedContractClass: Class>) : CommandData + /** Wraps an object that was signed by a public key, which may be a well known/recognised institutional key. */ data class AuthenticatedObject( val signers: List, @@ -445,6 +448,24 @@ interface Contract { val legalContractReference: SecureHash } +/** + * Interface which can upgrade state objects issued by a contract to a new state object issued by a different contract. + * + * @param OldState the old contract state (can be [ContractState] or other common supertype if this supports upgrading + * more than one state). + * @param NewState the upgraded contract state. + */ +interface UpgradedContract : Contract { + val legacyContract: Contract + /** + * Upgrade contract's state object to a new state object. + * + * @throws IllegalArgumentException if the given state object is not one that can be upgraded. This can be either + * that the class is incompatible, or that the data inside the state object cannot be upgraded for some reason. + */ + fun upgrade(state: OldState): NewState +} + /** * An attachment is a ZIP (or an optionally signed JAR) that contains one or more files. Attachments are meant to * contain public static data which can be referenced from transactions and utilised from contracts. Good examples @@ -480,5 +501,3 @@ interface Attachment : NamedByHash { throw FileNotFoundException() } } - - diff --git a/core/src/main/kotlin/net/corda/core/messaging/CordaRPCOps.kt b/core/src/main/kotlin/net/corda/core/messaging/CordaRPCOps.kt index aba12670e0..d72a7a8f1c 100644 --- a/core/src/main/kotlin/net/corda/core/messaging/CordaRPCOps.kt +++ b/core/src/main/kotlin/net/corda/core/messaging/CordaRPCOps.kt @@ -3,6 +3,7 @@ package net.corda.core.messaging import com.google.common.util.concurrent.ListenableFuture import net.corda.core.contracts.ContractState import net.corda.core.contracts.StateAndRef +import net.corda.core.contracts.UpgradedContract import net.corda.core.crypto.CompositeKey import net.corda.core.crypto.Party import net.corda.core.crypto.SecureHash @@ -107,6 +108,20 @@ interface CordaRPCOps : RPCOps { @Deprecated("This service will be removed in a future milestone") fun uploadFile(dataType: String, name: String?, file: InputStream): String + /** + * Authorise a contract state upgrade. + * This will store the upgrade authorisation in the vault, and will be queried by [ContractUpgradeFlow.Acceptor] during contract upgrade process. + * Invoking this method indicate the node is willing to upgrade the [state] using the [upgradedContractClass]. + * This method will NOT initiate the upgrade process. To start the upgrade process, see [ContractUpgradeFlow.Instigator]. + */ + fun authoriseContractUpgrade(state: StateAndRef<*>, upgradedContractClass: Class>) + + /** + * Authorise a contract state upgrade. + * This will remove the upgrade authorisation from the vault. + */ + fun deauthoriseContractUpgrade(state: StateAndRef<*>) + /** * Returns the node's current time. */ diff --git a/core/src/main/kotlin/net/corda/core/node/services/Services.kt b/core/src/main/kotlin/net/corda/core/node/services/Services.kt index 645dbe43ee..7c3ea19bf0 100644 --- a/core/src/main/kotlin/net/corda/core/node/services/Services.kt +++ b/core/src/main/kotlin/net/corda/core/node/services/Services.kt @@ -7,7 +7,6 @@ import net.corda.core.toFuture import net.corda.core.transactions.TransactionBuilder import net.corda.core.transactions.WireTransaction import rx.Observable -import java.io.File import java.io.InputStream import java.security.KeyPair import java.security.PrivateKey @@ -143,7 +142,7 @@ interface VaultService { fun statesForRefs(refs: List): Map?> { val refsToStates = currentVault.states.associateBy { it.ref } - return refs.associateBy({ it }, { refsToStates[it]?.state }) + return refs.associateBy({ it }) { refsToStates[it]?.state } } /** @@ -164,6 +163,24 @@ interface VaultService { return updates.filter { it.consumed.any { it.ref == ref } }.toFuture() } + /** Get contracts we would be willing to upgrade the suggested contract to. */ + // TODO: We need a better place to put business logic functions + fun getAuthorisedContractUpgrade(ref: StateRef): Class>? + + /** + * Authorise a contract state upgrade. + * This will store the upgrade authorisation in the vault, and will be queried by [ContractUpgradeFlow.Acceptor] during contract upgrade process. + * Invoking this method indicate the node is willing to upgrade the [state] using the [upgradedContractClass]. + * This method will NOT initiate the upgrade process. To start the upgrade process, see [ContractUpgradeFlow.Instigator]. + */ + fun authoriseContractUpgrade(stateAndRef: StateAndRef<*>, upgradedContractClass: Class>) + + /** + * Authorise a contract state upgrade. + * This will remove the upgrade authorisation from the vault. + */ + fun deauthoriseContractUpgrade(stateAndRef: StateAndRef<*>) + /** * Add a note to an existing [LedgerTransaction] given by its unique [SecureHash] id * Multiple notes may be attached to the same [LedgerTransaction]. diff --git a/core/src/main/kotlin/net/corda/flows/AbstractStateReplacementFlow.kt b/core/src/main/kotlin/net/corda/flows/AbstractStateReplacementFlow.kt index 8d5e520b44..f19d30b623 100644 --- a/core/src/main/kotlin/net/corda/flows/AbstractStateReplacementFlow.kt +++ b/core/src/main/kotlin/net/corda/flows/AbstractStateReplacementFlow.kt @@ -16,26 +16,35 @@ import net.corda.core.transactions.WireTransaction import net.corda.core.utilities.ProgressTracker import net.corda.core.utilities.UntrustworthyData import net.corda.core.utilities.unwrap -import net.corda.flows.AbstractStateReplacementFlow.Acceptor -import net.corda.flows.AbstractStateReplacementFlow.Instigator /** * Abstract flow to be used for replacing one state with another, for example when changing the notary of a state. * Notably this requires a one to one replacement of states, states cannot be split, merged or issued as part of these * flows. - * - * The [Instigator] assembles the transaction for state replacement and sends out change proposals to all participants - * ([Acceptor]) of that state. If participants agree to the proposed change, they each sign the transaction. - * Finally, [Instigator] sends the transaction containing all signatures back to each participant so they can record it and - * use the new updated state for future transactions. */ abstract class AbstractStateReplacementFlow { - data class Proposal(val stateRef: StateRef, val modification: T, val stx: SignedTransaction) + /** + * The [Proposal] contains the details of proposed state modification. + * This is the message sent by the [Instigator] to all participants([Acceptor]) during the state replacement process. + * + * @param M the type of a class representing proposed modification by the instigator. + */ + data class Proposal(val stateRef: StateRef, val modification: M, val stx: SignedTransaction) - abstract class Instigator( + /** + * The [Instigator] assembles the transaction for state replacement and sends out change proposals to all participants + * ([Acceptor]) of that state. If participants agree to the proposed change, they each sign the transaction. + * Finally, [Instigator] sends the transaction containing all participants' signatures to the notary for signature, and + * then back to each participant so they can record it and use the new updated state for future transactions. + * + * @param S the input contract state type + * @param T the output contract state type, this can be different from [S]. For example, in contract upgrade, the output state type can be different from the input state type after the upgrade process. + * @param M the type of a class representing proposed modification by the instigator. + */ + abstract class Instigator( val originalState: StateAndRef, - val modification: T, - override val progressTracker: ProgressTracker = tracker()) : FlowLogic>() { + val modification: M, + override val progressTracker: ProgressTracker = tracker()) : FlowLogic>() { companion object { object SIGNING : ProgressTracker.Step("Requesting signatures from other parties") object NOTARY : ProgressTracker.Step("Requesting notary signature") @@ -45,7 +54,7 @@ abstract class AbstractStateReplacementFlow { @Suspendable @Throws(StateReplacementException::class) - override fun call(): StateAndRef { + override fun call(): StateAndRef { val (stx, participants) = assembleTx() progressTracker.currentStep = SIGNING diff --git a/core/src/main/kotlin/net/corda/flows/ContractUpgradeFlow.kt b/core/src/main/kotlin/net/corda/flows/ContractUpgradeFlow.kt new file mode 100644 index 0000000000..0e945a946a --- /dev/null +++ b/core/src/main/kotlin/net/corda/flows/ContractUpgradeFlow.kt @@ -0,0 +1,83 @@ +package net.corda.flows + +import co.paralleluniverse.fibers.Suspendable +import net.corda.core.contracts.* +import net.corda.core.crypto.CompositeKey +import net.corda.core.crypto.Party +import net.corda.core.transactions.SignedTransaction +import net.corda.core.transactions.TransactionBuilder +import net.corda.flows.AbstractStateReplacementFlow.Proposal +import net.corda.flows.ContractUpgradeFlow.Acceptor +import net.corda.flows.ContractUpgradeFlow.Instigator + +/** + * A flow to be used for upgrading state objects of an old contract to a new contract. + * + * The [Instigator] assembles the transaction for contract upgrade and sends out change proposals to all participants + * ([Acceptor]) of that state. If participants agree to the proposed change, they each sign the transaction. + * Finally, [Instigator] sends the transaction containing all signatures back to each participant so they can record it and + * use the new updated state for future transactions. + */ +object ContractUpgradeFlow { + @JvmStatic + fun verify(tx: TransactionForContract) { + // Contract Upgrade transaction should have 1 input, 1 output and 1 command. + verify(tx.inputs.single(), tx.outputs.single(), tx.commands.map { Command(it.value, it.signers) }.single()) + } + + @JvmStatic + fun verify(input: ContractState, output: ContractState, commandData: Command) { + val command = commandData.value as UpgradeCommand + val participants: Set = input.participants.toSet() + val keysThatSigned: Set = commandData.signers.toSet() + val upgradedContract = command.upgradedContractClass.newInstance() as UpgradedContract + requireThat { + "The signing keys include all participant keys" by keysThatSigned.containsAll(participants) + "Inputs state reference the legacy contract" by (input.contract.javaClass == upgradedContract.legacyContract.javaClass) + "Outputs state reference the upgraded contract" by (output.contract.javaClass == command.upgradedContractClass) + "Output state must be an upgraded version of the input state" by (output == upgradedContract.upgrade(input)) + } + } + + private fun assembleBareTx( + stateRef: StateAndRef, + upgradedContractClass: Class> + ): TransactionBuilder { + val contractUpgrade = upgradedContractClass.newInstance() + return TransactionType.General.Builder(stateRef.state.notary) + .withItems(stateRef, contractUpgrade.upgrade(stateRef.state.data), Command(UpgradeCommand(contractUpgrade.javaClass), stateRef.state.data.participants)) + } + + class Instigator( + originalState: StateAndRef, + newContractClass: Class> + ) : AbstractStateReplacementFlow.Instigator>>(originalState, newContractClass) { + + override fun assembleTx(): Pair> { + val stx = assembleBareTx(originalState, modification) + .signWith(serviceHub.legalIdentityKey) + .toSignedTransaction(false) + return Pair(stx, originalState.state.data.participants) + } + } + + class Acceptor(otherSide: Party) : AbstractStateReplacementFlow.Acceptor>>(otherSide) { + @Suspendable + @Throws(StateReplacementException::class) + override fun verifyProposal(proposal: Proposal>>) { + // Retrieve signed transaction from our side, we will apply the upgrade logic to the transaction on our side, and verify outputs matches the proposed upgrade. + val stx = subFlow(FetchTransactionsFlow(setOf(proposal.stateRef.txhash), otherSide)).fromDisk.singleOrNull() + requireNotNull(stx) { "We don't have a copy of the referenced state" } + val oldStateAndRef = stx!!.tx.outRef(proposal.stateRef.index) + val authorisedUpgrade = serviceHub.vaultService.getAuthorisedContractUpgrade(oldStateAndRef.ref) ?: throw IllegalStateException("Contract state upgrade is unauthorised. State hash : ${oldStateAndRef.ref}") + val proposedTx = proposal.stx.tx + val expectedTx = assembleBareTx(oldStateAndRef, proposal.modification).toWireTransaction() + requireThat { + "The instigator is one of the participants" by oldStateAndRef.state.data.participants.contains(otherSide.owningKey) + "The proposed upgrade ${proposal.modification.javaClass} is a trusted upgrade path" by (proposal.modification == authorisedUpgrade) + "The proposed tx matches the expected tx for this upgrade" by (proposedTx == expectedTx) + } + ContractUpgradeFlow.verify(oldStateAndRef.state.data, expectedTx.outRef(0).state.data, expectedTx.commands.single()) + } + } +} diff --git a/core/src/main/kotlin/net/corda/flows/NotaryChangeFlow.kt b/core/src/main/kotlin/net/corda/flows/NotaryChangeFlow.kt index f6cbd6f175..58ab8752e6 100644 --- a/core/src/main/kotlin/net/corda/flows/NotaryChangeFlow.kt +++ b/core/src/main/kotlin/net/corda/flows/NotaryChangeFlow.kt @@ -23,7 +23,7 @@ object NotaryChangeFlow : AbstractStateReplacementFlow() { class Instigator( originalState: StateAndRef, newNotary: Party, - progressTracker: ProgressTracker = tracker()) : AbstractStateReplacementFlow.Instigator(originalState, newNotary, progressTracker) { + progressTracker: ProgressTracker = tracker()) : AbstractStateReplacementFlow.Instigator(originalState, newNotary, progressTracker) { override fun assembleTx(): Pair> { val state = originalState.state diff --git a/core/src/test/kotlin/net/corda/core/contracts/DummyContractV2Tests.kt b/core/src/test/kotlin/net/corda/core/contracts/DummyContractV2Tests.kt new file mode 100644 index 0000000000..7a99210def --- /dev/null +++ b/core/src/test/kotlin/net/corda/core/contracts/DummyContractV2Tests.kt @@ -0,0 +1,31 @@ +package net.corda.core.contracts + +import net.corda.core.crypto.SecureHash +import net.corda.core.utilities.DUMMY_NOTARY +import net.corda.testing.ALICE_PUBKEY +import org.junit.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue + +/** + * Tests for the version 2 dummy contract, to cover ensuring upgrade transactions are built correctly. + */ +class DummyContractV2Tests { + @Test + fun `upgrade from v1`() { + val contractUpgrade = DummyContractV2() + val v1State = TransactionState(DummyContract.SingleOwnerState(0, ALICE_PUBKEY), DUMMY_NOTARY) + val v1Ref = StateRef(SecureHash.randomSHA256(), 0) + val v1StateAndRef = StateAndRef(v1State, v1Ref) + val (tx, signers) = DummyContractV2().generateUpgradeFromV1(v1StateAndRef) + + assertEquals(v1Ref, tx.inputs.single()) + + val expectedOutput = TransactionState(contractUpgrade.upgrade(v1State.data), DUMMY_NOTARY) + val actualOutput = tx.outputs.single() + assertEquals(expectedOutput, actualOutput) + + val actualCommand = tx.commands.map { it.value }.single() + assertTrue((actualCommand as UpgradeCommand).upgradedContractClass == DummyContractV2::class.java) + } +} diff --git a/core/src/test/kotlin/net/corda/core/flows/ContractUpgradeFlowTest.kt b/core/src/test/kotlin/net/corda/core/flows/ContractUpgradeFlowTest.kt new file mode 100644 index 0000000000..d8779aaa88 --- /dev/null +++ b/core/src/test/kotlin/net/corda/core/flows/ContractUpgradeFlowTest.kt @@ -0,0 +1,127 @@ +package net.corda.core.flows + +import net.corda.contracts.asset.Cash +import net.corda.core.contracts.* +import net.corda.core.crypto.CompositeKey +import net.corda.core.crypto.Party +import net.corda.core.crypto.SecureHash +import net.corda.core.getOrThrow +import net.corda.core.serialization.OpaqueBytes +import net.corda.core.utilities.Emoji +import net.corda.flows.CashFlow +import net.corda.flows.ContractUpgradeFlow +import net.corda.flows.FinalityFlow +import net.corda.node.utilities.databaseTransaction +import net.corda.testing.node.MockNetwork +import org.junit.After +import org.junit.Before +import org.junit.Test +import java.util.* +import java.util.concurrent.ExecutionException +import kotlin.test.assertEquals +import kotlin.test.assertFailsWith +import kotlin.test.assertTrue + +class ContractUpgradeFlowTest { + lateinit var mockNet: MockNetwork + lateinit var a: MockNetwork.MockNode + lateinit var b: MockNetwork.MockNode + lateinit var notary: Party + + @Before + fun setup() { + mockNet = MockNetwork() + val nodes = mockNet.createSomeNodes() + a = nodes.partyNodes[0] + b = nodes.partyNodes[1] + notary = nodes.notaryNode.info.notaryIdentity + mockNet.runNetwork() + } + + @After + fun tearDown() { + mockNet.stopNodes() + } + + @Test + fun `2 parties contract upgrade`() { + // Create dummy contract. + val twoPartyDummyContract = DummyContract.generateInitial(0, notary, a.info.legalIdentity.ref(1), b.info.legalIdentity.ref(1)) + val stx = twoPartyDummyContract.signWith(a.services.legalIdentityKey) + .signWith(b.services.legalIdentityKey) + .toSignedTransaction() + + a.services.startFlow(FinalityFlow(stx, setOf(a.info.legalIdentity, b.info.legalIdentity))) + mockNet.runNetwork() + + val atx = databaseTransaction(a.database) { a.services.storageService.validatedTransactions.getTransaction(stx.id) } + val btx = databaseTransaction(b.database) { b.services.storageService.validatedTransactions.getTransaction(stx.id) } + requireNotNull(atx) + requireNotNull(btx) + + // The request is expected to be rejected because party B haven't authorise the upgrade yet. + val rejectedFuture = a.services.startFlow(ContractUpgradeFlow.Instigator(atx!!.tx.outRef(0), DUMMY_V2_PROGRAM_ID.javaClass)).resultFuture + mockNet.runNetwork() + assertFailsWith(ExecutionException::class) { rejectedFuture.get() } + + // Party B authorise the contract state upgrade. + b.services.vaultService.authoriseContractUpgrade(btx!!.tx.outRef(0), DUMMY_V2_PROGRAM_ID.javaClass) + + // Party A initiates contract upgrade flow, expected to succeed this time. + val resultFuture = a.services.startFlow(ContractUpgradeFlow.Instigator(atx.tx.outRef(0), DUMMY_V2_PROGRAM_ID.javaClass)).resultFuture + mockNet.runNetwork() + + val result = resultFuture.get() + + listOf(a, b).forEach { + val stx = databaseTransaction(a.database) { a.services.storageService.validatedTransactions.getTransaction(result.ref.txhash) } + requireNotNull(stx) + + // Verify inputs. + val input = databaseTransaction(a.database) { a.services.storageService.validatedTransactions.getTransaction(stx!!.tx.inputs.single().txhash) } + requireNotNull(input) + assertTrue(input!!.tx.outputs.single().data is DummyContract.State) + + // Verify outputs. + assertTrue(stx!!.tx.outputs.single().data is DummyContractV2.State) + } + } + + @Test + fun `upgrade Cash to v2`() { + // Create some cash. + val result = a.services.startFlow(CashFlow(CashFlow.Command.IssueCash(Amount(1000, USD), OpaqueBytes.of(1), a.info.legalIdentity, notary))).resultFuture + mockNet.runNetwork() + val stateAndRef = result.getOrThrow().tx.outRef(0) + // Starts contract upgrade flow. + a.services.startFlow(ContractUpgradeFlow.Instigator(stateAndRef, CashV2().javaClass)) + mockNet.runNetwork() + // Get contract state form the vault. + val state = databaseTransaction(a.database) { a.vault.currentVault.states } + assertTrue(state.single().state.data is CashV2.State, "Contract state is upgraded to the new version.") + assertEquals(Amount(1000000, USD).`issued by`(a.info.legalIdentity.ref(1)), (state.first().state.data as CashV2.State).amount, "Upgraded cash contain the correct amount.") + assertEquals(listOf(a.info.legalIdentity.owningKey), (state.first().state.data as CashV2.State).owners, "Upgraded cash belongs to the right owner.") + } + + class CashV2 : UpgradedContract { + override val legacyContract = Cash() + + data class State(override val amount: Amount>, val owners: List) : FungibleAsset { + override val owner: CompositeKey = owners.first() + override val exitKeys = (owners + amount.token.issuer.party.owningKey).toSet() + override val contract = CashV2() + override val participants = owners + + override fun move(newAmount: Amount>, newOwner: CompositeKey) = copy(amount = amount.copy(newAmount.quantity, amount.token), owners = listOf(newOwner)) + override fun toString() = "${Emoji.bagOfCash}New Cash($amount at ${amount.token.issuer} owned by $owner)" + override fun withNewOwner(newOwner: CompositeKey) = Pair(Cash.Commands.Move(), copy(owners = listOf(newOwner))) + } + + override fun upgrade(state: Cash.State) = CashV2.State(state.amount.times(1000), listOf(state.owner)) + + override fun verify(tx: TransactionForContract) {} + + // Dummy Cash contract for testing. + override val legalContractReference = SecureHash.sha256("") + } +} diff --git a/core/src/test/kotlin/net/corda/core/flows/ResolveTransactionsFlowTest.kt b/core/src/test/kotlin/net/corda/core/flows/ResolveTransactionsFlowTest.kt index a2c6aeadbb..51b7679474 100644 --- a/core/src/test/kotlin/net/corda/core/flows/ResolveTransactionsFlowTest.kt +++ b/core/src/test/kotlin/net/corda/core/flows/ResolveTransactionsFlowTest.kt @@ -146,7 +146,7 @@ class ResolveTransactionsFlowTest { // DOCSTART 2 private fun makeTransactions(signFirstTX: Boolean = true, withAttachment: SecureHash? = null): Pair { // 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 { + val dummy1: SignedTransaction = DummyContract.generateInitial(0, notary, MEGA_CORP.ref(1)).let { if (withAttachment != null) it.addAttachment(withAttachment) if (signFirstTX) diff --git a/docs/source/contract-upgrade.rst b/docs/source/contract-upgrade.rst new file mode 100644 index 0000000000..f249ece091 --- /dev/null +++ b/docs/source/contract-upgrade.rst @@ -0,0 +1,72 @@ +Upgrading Contracts +=================== + +While every care is taken in development of contract code, +inevitably upgrades will be required to fix bugs (in either design or implementation). +Upgrades can involve a substitution of one version of the contract code for another or changing +to a different contract that understands how to migrate the existing state objects. State objects +refer to the contract code (by hash) they are intended for, and even where state objects can be used +with different contract versions, changing this value requires issuing a new state object. + +Workflow +-------- + +Here's the workflow for contract upgrades: + +1. Two banks, A and B negotiate a trade, off-platform + +2. Banks A and B execute a protocol to construct a state object representing the trade, using contract X, and include it in a transaction (which is then signed and sent to the Uniqueness Service). + +3. Time passes. + +4. The developer of contract X discovers a bug in the contract code, and releases a new version, contract Y. +And notify the users (e.g. via a mailing list or CorDapp store). +At this point of time all nodes should stop issuing states of contract X. + +5. Banks A and B review the new contract via standard change control processes and identify the contract states they agreed to upgrade, they can decide not to upgrade some contract states as they might be needed for other obligation contract. + +6. Banks A and B instruct their Corda nodes (via RPC) to be willing to upgrade state objects of contract X, to state objects for contract Y using agreed upgrade path. + +7. One of the parties ``Instigator`` initiates an upgrade of state objects referring to contract X, to a new state object referring to contract Y. + +8. A proposed transaction ``Proposal``, taking in the old state and outputting the reissued version, is created and signed with the node's private key. + +9. The node ``Instigator`` sends the proposed transaction, along with details of the new contract upgrade path it's proposing, to all participants of the state object. + +10. Each counterparty ``Acceptor`` verifies the proposal, signs or rejects the state reissuance accordingly, and sends a signature or rejection notification back to the initiating node. + +11. If signatures are received from all parties, the initiating node assembles the complete signed transaction and sends it to the consensus service. + + +Authorising upgrade +------------------- + +Each of the participants in the upgrading contract will have to instruct their node that they are willing to upgrade the state object before the upgrade. +Currently the vault service is used to manage the authorisation records. The administrator can use RPC to perform such instructions. + +.. container:: codeset + + .. sourcecode:: kotlin + + /** + * Authorise a contract state upgrade. + * This will store the upgrade authorisation in the vault, and will be queried by [ContractUpgradeFlow.Acceptor] during contract upgrade process. + * Invoking this method indicate the node is willing to upgrade the [state] using the [upgradedContractClass]. + * This method will NOT initiate the upgrade process. To start the upgrade process, see [ContractUpgradeFlow.Instigator]. + */ + fun authoriseContractUpgrade(state: StateAndRef<*>, upgradedContractClass: Class>) + + /** + * Authorise a contract state upgrade. + * This will remove the upgrade authorisation from the vault. + */ + fun deauthoriseContractUpgrade(state: StateAndRef<*>) + + + +Proposing an upgrade +-------------------- + +After all parties have registered the intention of upgrading the contract state, one of the contract participant can initiate the upgrade process by running the contract upgrade flow. +The Instigator will create a new state and sent to each participant for signatures, each of the participants (Acceptor) will verify and sign the proposal and returns to the instigator. +The transaction will be notarised and persisted once every participant verified and signed the upgrade proposal. diff --git a/docs/source/index.rst b/docs/source/index.rst index ae26b709a4..e9490ad7a3 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -105,6 +105,7 @@ Documentation Contents: network-simulator clauses merkle-trees + contract-upgrade .. toctree:: :maxdepth: 2 diff --git a/node/src/integration-test/kotlin/net/corda/node/services/RaftNotaryServiceTests.kt b/node/src/integration-test/kotlin/net/corda/node/services/RaftNotaryServiceTests.kt index beb04caf0d..28aee6bba3 100644 --- a/node/src/integration-test/kotlin/net/corda/node/services/RaftNotaryServiceTests.kt +++ b/node/src/integration-test/kotlin/net/corda/node/services/RaftNotaryServiceTests.kt @@ -58,7 +58,7 @@ class RaftNotaryServiceTests : NodeBasedTest() { private fun issueState(node: AbstractNode, notary: Party, notaryKey: KeyPair): StateAndRef<*> { return databaseTransaction(node.database) { - val tx = DummyContract.generateInitial(node.info.legalIdentity.ref(0), Random().nextInt(), notary) + val tx = DummyContract.generateInitial(Random().nextInt(), notary, node.info.legalIdentity.ref(0)) tx.signWith(node.services.legalIdentityKey) tx.signWith(notaryKey) val stx = tx.toSignedTransaction() diff --git a/node/src/main/kotlin/net/corda/node/internal/AbstractNode.kt b/node/src/main/kotlin/net/corda/node/internal/AbstractNode.kt index b5a79865c5..0287964988 100644 --- a/node/src/main/kotlin/net/corda/node/internal/AbstractNode.kt +++ b/node/src/main/kotlin/net/corda/node/internal/AbstractNode.kt @@ -260,6 +260,7 @@ abstract class AbstractNode(open val configuration: NodeConfiguration, false } startMessagingService(CordaRPCOpsImpl(services, smm, database)) + services.registerFlowInitiator(ContractUpgradeFlow.Instigator::class) { ContractUpgradeFlow.Acceptor(it) } runOnStop += Runnable { net.stop() } _networkMapRegistrationFuture.setFuture(registerWithNetworkMapIfConfigured()) smm.start() diff --git a/node/src/main/kotlin/net/corda/node/internal/CordaRPCOpsImpl.kt b/node/src/main/kotlin/net/corda/node/internal/CordaRPCOpsImpl.kt index 773b2c9965..b4bb235f74 100644 --- a/node/src/main/kotlin/net/corda/node/internal/CordaRPCOpsImpl.kt +++ b/node/src/main/kotlin/net/corda/node/internal/CordaRPCOpsImpl.kt @@ -2,6 +2,7 @@ package net.corda.node.internal import net.corda.core.contracts.ContractState import net.corda.core.contracts.StateAndRef +import net.corda.core.contracts.UpgradedContract import net.corda.core.crypto.CompositeKey import net.corda.core.crypto.SecureHash import net.corda.core.flows.FlowLogic @@ -102,6 +103,8 @@ class CordaRPCOpsImpl( override fun attachmentExists(id: SecureHash) = services.storageService.attachments.openAttachment(id) != null override fun uploadAttachment(jar: InputStream) = services.storageService.attachments.importAttachment(jar) + override fun authoriseContractUpgrade(state: StateAndRef<*>, upgradedContractClass: Class>) = services.vaultService.authoriseContractUpgrade(state, upgradedContractClass) + override fun deauthoriseContractUpgrade(state: StateAndRef<*>) = services.vaultService.deauthoriseContractUpgrade(state) override fun currentNodeTime(): Instant = Instant.now(services.clock) @Suppress("OverridingDeprecatedMember", "DEPRECATION") override fun uploadFile(dataType: String, name: String?, file: InputStream): String { diff --git a/node/src/main/kotlin/net/corda/node/services/vault/NodeVaultService.kt b/node/src/main/kotlin/net/corda/node/services/vault/NodeVaultService.kt index b0b899153b..32e7da4ecc 100644 --- a/node/src/main/kotlin/net/corda/node/services/vault/NodeVaultService.kt +++ b/node/src/main/kotlin/net/corda/node/services/vault/NodeVaultService.kt @@ -337,14 +337,27 @@ class NodeVaultService(private val services: ServiceHub) : SingletonSerializeAsT return Vault.Update(consumedStates, ourNewStates.toHashSet()) } - private fun isRelevant(state: ContractState, ourKeys: Set): Boolean { - return if (state is OwnableState) { - state.owner.containsAny(ourKeys) - } else if (state is LinearState) { - // It's potentially of interest to the vault - state.isRelevant(ourKeys) - } else { - false + // TODO : Persists this in DB. + private val authorisedUpgrade = mutableMapOf>>() + + override fun getAuthorisedContractUpgrade(ref: StateRef) = authorisedUpgrade[ref] + + override fun authoriseContractUpgrade(stateAndRef: StateAndRef<*>, upgradedContractClass: Class>) { + val upgrade = upgradedContractClass.newInstance() + if (upgrade.legacyContract.javaClass != stateAndRef.state.data.contract.javaClass) { + throw IllegalArgumentException("The contract state cannot be upgraded using provided UpgradedContract.") } + authorisedUpgrade.put(stateAndRef.ref, upgradedContractClass) } -} + + override fun deauthoriseContractUpgrade(stateAndRef: StateAndRef<*>) { + authorisedUpgrade.remove(stateAndRef.ref) + } + + private fun isRelevant(state: ContractState, ourKeys: Set) = when (state) { + is OwnableState -> state.owner.containsAny(ourKeys) + // It's potentially of interest to the vault + is LinearState -> state.isRelevant(ourKeys) + else -> false + } +} \ No newline at end of file diff --git a/node/src/test/kotlin/net/corda/node/services/NotaryChangeTests.kt b/node/src/test/kotlin/net/corda/node/services/NotaryChangeTests.kt index 3aef650af2..178758757f 100644 --- a/node/src/test/kotlin/net/corda/node/services/NotaryChangeTests.kt +++ b/node/src/test/kotlin/net/corda/node/services/NotaryChangeTests.kt @@ -150,7 +150,7 @@ class NotaryChangeTests { } fun issueState(node: AbstractNode, notaryNode: AbstractNode): StateAndRef<*> { - val tx = DummyContract.generateInitial(node.info.legalIdentity.ref(0), Random().nextInt(), notaryNode.info.notaryIdentity) + val tx = DummyContract.generateInitial(Random().nextInt(), notaryNode.info.notaryIdentity, node.info.legalIdentity.ref(0)) val nodeKey = node.services.legalIdentityKey tx.signWith(nodeKey) val notaryKeyPair = notaryNode.services.notaryIdentityKey @@ -178,7 +178,7 @@ fun issueMultiPartyState(nodeA: AbstractNode, nodeB: AbstractNode, notaryNode: A } fun issueInvalidState(node: AbstractNode, notary: Party): StateAndRef<*> { - val tx = DummyContract.generateInitial(node.info.legalIdentity.ref(0), Random().nextInt(), notary) + val tx = DummyContract.generateInitial(Random().nextInt(), notary, node.info.legalIdentity.ref(0)) tx.setTime(Instant.now(), 30.seconds) val nodeKey = node.services.legalIdentityKey tx.signWith(nodeKey) diff --git a/node/src/test/kotlin/net/corda/node/services/NotaryServiceTests.kt b/node/src/test/kotlin/net/corda/node/services/NotaryServiceTests.kt index 619a71e0c1..233b5df2c0 100644 --- a/node/src/test/kotlin/net/corda/node/services/NotaryServiceTests.kt +++ b/node/src/test/kotlin/net/corda/node/services/NotaryServiceTests.kt @@ -140,7 +140,7 @@ class NotaryServiceTests { } fun issueState(node: AbstractNode): StateAndRef<*> { - val tx = DummyContract.generateInitial(node.info.legalIdentity.ref(0), Random().nextInt(), notaryNode.info.notaryIdentity) + val tx = DummyContract.generateInitial(Random().nextInt(), notaryNode.info.notaryIdentity, node.info.legalIdentity.ref(0)) val nodeKey = node.services.legalIdentityKey tx.signWith(nodeKey) val notaryKeyPair = notaryNode.services.notaryIdentityKey diff --git a/node/src/test/kotlin/net/corda/node/services/ValidatingNotaryServiceTests.kt b/node/src/test/kotlin/net/corda/node/services/ValidatingNotaryServiceTests.kt index 2228443f9f..17f8b9996f 100644 --- a/node/src/test/kotlin/net/corda/node/services/ValidatingNotaryServiceTests.kt +++ b/node/src/test/kotlin/net/corda/node/services/ValidatingNotaryServiceTests.kt @@ -86,7 +86,7 @@ class ValidatingNotaryServiceTests { } fun issueState(node: AbstractNode): StateAndRef<*> { - val tx = DummyContract.generateInitial(node.info.legalIdentity.ref(0), Random().nextInt(), notaryNode.info.notaryIdentity) + val tx = DummyContract.generateInitial(Random().nextInt(), notaryNode.info.notaryIdentity, node.info.legalIdentity.ref(0)) val nodeKey = node.services.legalIdentityKey tx.signWith(nodeKey) val notaryKeyPair = notaryNode.services.notaryIdentityKey diff --git a/samples/raft-notary-demo/src/main/kotlin/net/corda/notarydemo/flows/DummyIssueAndMove.kt b/samples/raft-notary-demo/src/main/kotlin/net/corda/notarydemo/flows/DummyIssueAndMove.kt index 6858396298..70a688940b 100644 --- a/samples/raft-notary-demo/src/main/kotlin/net/corda/notarydemo/flows/DummyIssueAndMove.kt +++ b/samples/raft-notary-demo/src/main/kotlin/net/corda/notarydemo/flows/DummyIssueAndMove.kt @@ -14,7 +14,7 @@ class DummyIssueAndMove(private val notary: Party, private val counterpartyNode: val random = Random() val myKeyPair = serviceHub.legalIdentityKey // Self issue an asset - val issueTx = DummyContract.generateInitial(serviceHub.myInfo.legalIdentity.ref(0), random.nextInt(), notary).apply { + val issueTx = DummyContract.generateInitial(random.nextInt(), notary, serviceHub.myInfo.legalIdentity.ref(0)).apply { signWith(myKeyPair) } serviceHub.recordTransactions(issueTx.toSignedTransaction()) diff --git a/samples/simm-valuation-demo/src/main/kotlin/net/corda/vega/flows/StateRevisionFlow.kt b/samples/simm-valuation-demo/src/main/kotlin/net/corda/vega/flows/StateRevisionFlow.kt index 2da3cce5a3..417a6f1eb7 100644 --- a/samples/simm-valuation-demo/src/main/kotlin/net/corda/vega/flows/StateRevisionFlow.kt +++ b/samples/simm-valuation-demo/src/main/kotlin/net/corda/vega/flows/StateRevisionFlow.kt @@ -15,7 +15,7 @@ import net.corda.vega.contracts.RevisionedState */ object StateRevisionFlow { class Requester(curStateRef: StateAndRef>, - updatedData: T) : AbstractStateReplacementFlow.Instigator, T>(curStateRef, updatedData) { + updatedData: T) : AbstractStateReplacementFlow.Instigator, RevisionedState, T>(curStateRef, updatedData) { override fun assembleTx(): Pair> { val state = originalState.state.data val tx = state.generateRevision(originalState.state.notary, originalState, modification) From 288d70966845aefa690e3e4dd2a68467dd623408 Mon Sep 17 00:00:00 2001 From: Andrius Dagys Date: Thu, 9 Feb 2017 14:55:02 +0000 Subject: [PATCH 32/33] Include Merkle tree root hash in FilteredTransaction Remove no longer needed test. Make FilteredTransaction constructor private --- .../core/transactions/MerkleTransaction.kt | 18 +++++++------ .../core/crypto/PartialMerkleTreeTest.kt | 4 +-- .../net/corda/irs/api/NodeInterestRates.kt | 8 +++--- .../net/corda/irs/flows/RatesFixFlow.kt | 6 ++--- .../irs/testing/NodeInterestRatesTest.kt | 25 +++++-------------- 5 files changed, 24 insertions(+), 37 deletions(-) diff --git a/core/src/main/kotlin/net/corda/core/transactions/MerkleTransaction.kt b/core/src/main/kotlin/net/corda/core/transactions/MerkleTransaction.kt index 2cd6811dd3..a662a4a5e8 100644 --- a/core/src/main/kotlin/net/corda/core/transactions/MerkleTransaction.kt +++ b/core/src/main/kotlin/net/corda/core/transactions/MerkleTransaction.kt @@ -80,10 +80,12 @@ class FilteredLeaves( /** * Class representing merkleized filtered transaction. + * @param rootHash Merkle tree root hash. * @param filteredLeaves Leaves included in a filtered transaction. * @param partialMerkleTree Merkle branch needed to verify filteredLeaves. */ -class FilteredTransaction( +class FilteredTransaction private constructor( + val rootHash: SecureHash, val filteredLeaves: FilteredLeaves, val partialMerkleTree: PartialMerkleTree ) { @@ -99,26 +101,26 @@ class FilteredTransaction( val filteredLeaves = wtx.filterWithFun(filtering) val merkleTree = wtx.getMerkleTree() val pmt = PartialMerkleTree.build(merkleTree, filteredLeaves.calculateLeavesHashes()) - return FilteredTransaction(filteredLeaves, pmt) + return FilteredTransaction(merkleTree.hash, filteredLeaves, pmt) } } /** - * Runs verification of Partial Merkle Branch with merkleRootHash. + * Runs verification of Partial Merkle Branch against [rootHash]. */ @Throws(MerkleTreeException::class) - fun verify(merkleRootHash: SecureHash): Boolean { + fun verify(): Boolean { val hashes: List = filteredLeaves.calculateLeavesHashes() if (hashes.isEmpty()) throw MerkleTreeException("Transaction without included leaves.") - return partialMerkleTree.verify(merkleRootHash, hashes) + return partialMerkleTree.verify(rootHash, hashes) } /** - * Runs verification of Partial Merkle Branch with merkleRootHash. Checks filteredLeaves with provided checkingFun. + * Runs verification of Partial Merkle Branch against [rootHash]. Checks filteredLeaves with provided checkingFun. */ @Throws(MerkleTreeException::class) - fun verifyWithFunction(merkleRootHash: SecureHash, checkingFun: (Any) -> Boolean): Boolean { - return verify(merkleRootHash) && filteredLeaves.checkWithFun { checkingFun(it) } + fun verifyWithFunction(checkingFun: (Any) -> Boolean): Boolean { + return verify() && filteredLeaves.checkWithFun { checkingFun(it) } } } diff --git a/core/src/test/kotlin/net/corda/core/crypto/PartialMerkleTreeTest.kt b/core/src/test/kotlin/net/corda/core/crypto/PartialMerkleTreeTest.kt index b8b0b3bc9a..fa68ffb1d6 100644 --- a/core/src/test/kotlin/net/corda/core/crypto/PartialMerkleTreeTest.kt +++ b/core/src/test/kotlin/net/corda/core/crypto/PartialMerkleTreeTest.kt @@ -113,7 +113,7 @@ class PartialMerkleTreeTest { assertTrue(mt.filteredLeaves.timestamp != null) assertEquals(null, mt.filteredLeaves.type) assertEquals(null, mt.filteredLeaves.notary) - assert(mt.verify(testTx.id)) + assert(mt.verify()) } @Test @@ -131,7 +131,7 @@ class PartialMerkleTreeTest { assertTrue(mt.filteredLeaves.inputs.isEmpty()) assertTrue(mt.filteredLeaves.outputs.isEmpty()) assertTrue(mt.filteredLeaves.timestamp == null) - assertFailsWith { mt.verify(testTx.id) } + assertFailsWith { mt.verify() } } // Partial Merkle Tree building tests diff --git a/samples/irs-demo/src/main/kotlin/net/corda/irs/api/NodeInterestRates.kt b/samples/irs-demo/src/main/kotlin/net/corda/irs/api/NodeInterestRates.kt index aedf23af3f..cd40735fa3 100644 --- a/samples/irs-demo/src/main/kotlin/net/corda/irs/api/NodeInterestRates.kt +++ b/samples/irs-demo/src/main/kotlin/net/corda/irs/api/NodeInterestRates.kt @@ -79,7 +79,7 @@ object NodeInterestRates { @Suspendable override fun call() { val request = receive(otherParty).unwrap { it } - send(otherParty, service.oracle.sign(request.ftx, request.rootHash)) + send(otherParty, service.oracle.sign(request.ftx)) } } @@ -189,8 +189,8 @@ object NodeInterestRates { // Oracle gets signing request for only some of them with a valid partial tree? We sign over a whole transaction. // It will be fixed by adding partial signatures later. // DOCSTART 1 - fun sign(ftx: FilteredTransaction, merkleRoot: SecureHash): DigitalSignature.LegallyIdentifiable { - if (!ftx.verify(merkleRoot)) { + fun sign(ftx: FilteredTransaction): DigitalSignature.LegallyIdentifiable { + if (!ftx.verify()) { throw MerkleTreeException("Rate Fix Oracle: Couldn't verify partial Merkle tree.") } // Performing validation of obtained FilteredLeaves. @@ -219,7 +219,7 @@ object NodeInterestRates { // Note that we will happily sign an invalid transaction, as we are only being presented with a filtered // version so we can't resolve or check it ourselves. However, that doesn't matter much, as if we sign // an invalid transaction the signature is worthless. - return signingKey.signWithECDSA(merkleRoot.bytes, identity) + return signingKey.signWithECDSA(ftx.rootHash.bytes, identity) } // DOCEND 1 } diff --git a/samples/irs-demo/src/main/kotlin/net/corda/irs/flows/RatesFixFlow.kt b/samples/irs-demo/src/main/kotlin/net/corda/irs/flows/RatesFixFlow.kt index 917cc2b9f1..c35d913a6d 100644 --- a/samples/irs-demo/src/main/kotlin/net/corda/irs/flows/RatesFixFlow.kt +++ b/samples/irs-demo/src/main/kotlin/net/corda/irs/flows/RatesFixFlow.kt @@ -45,7 +45,7 @@ open class RatesFixFlow(protected val tx: TransactionBuilder, class FixOutOfRange(@Suppress("unused") val byAmount: BigDecimal) : Exception("Fix out of range by $byAmount") data class QueryRequest(val queries: List, val deadline: Instant) - data class SignRequest(val rootHash: SecureHash, val ftx: FilteredTransaction) + data class SignRequest(val ftx: FilteredTransaction) // DOCSTART 2 @Suspendable @@ -109,9 +109,7 @@ open class RatesFixFlow(protected val tx: TransactionBuilder, val partialMerkleTx: FilteredTransaction) : FlowLogic() { @Suspendable override fun call(): DigitalSignature.LegallyIdentifiable { - val wtx = tx.toWireTransaction() - val rootHash = wtx.id - val resp = sendAndReceive(oracle, SignRequest(rootHash, partialMerkleTx)) + val resp = sendAndReceive(oracle, SignRequest(partialMerkleTx)) return resp.unwrap { sig -> check(sig.signer == oracle) tx.checkSignature(sig) diff --git a/samples/irs-demo/src/test/kotlin/net/corda/irs/testing/NodeInterestRatesTest.kt b/samples/irs-demo/src/test/kotlin/net/corda/irs/testing/NodeInterestRatesTest.kt index afed9222a4..9d8608e719 100644 --- a/samples/irs-demo/src/test/kotlin/net/corda/irs/testing/NodeInterestRatesTest.kt +++ b/samples/irs-demo/src/test/kotlin/net/corda/irs/testing/NodeInterestRatesTest.kt @@ -137,12 +137,12 @@ class NodeInterestRatesTest { } } val ftx1 = wtx1.buildFilteredTransaction(::filterAllOutputs) - assertFailsWith { oracle.sign(ftx1, wtx1.id) } + assertFailsWith { oracle.sign(ftx1) } tx.addCommand(Cash.Commands.Move(), ALICE_PUBKEY) val wtx2 = tx.toWireTransaction() val ftx2 = wtx2.buildFilteredTransaction { x -> filterCmds(x) } assertFalse(wtx1.id == wtx2.id) - assertFailsWith { oracle.sign(ftx2, wtx2.id) } + assertFailsWith { oracle.sign(ftx2) } } } @@ -155,7 +155,7 @@ class NodeInterestRatesTest { // Sign successfully. val wtx = tx.toWireTransaction() val ftx = wtx.buildFilteredTransaction { x -> fixCmdFilter(x) } - val signature = oracle.sign(ftx, wtx.id) + val signature = oracle.sign(ftx) tx.checkAndAddSignature(signature) } } @@ -169,7 +169,7 @@ class NodeInterestRatesTest { tx.addCommand(badFix, oracle.identity.owningKey) val wtx = tx.toWireTransaction() val ftx = wtx.buildFilteredTransaction { x -> fixCmdFilter(x) } - val e1 = assertFailsWith { oracle.sign(ftx, wtx.id) } + val e1 = assertFailsWith { oracle.sign(ftx) } assertEquals(fixOf, e1.fix) } } @@ -189,7 +189,7 @@ class NodeInterestRatesTest { tx.addCommand(fix, oracle.identity.owningKey) val wtx = tx.toWireTransaction() val ftx = wtx.buildFilteredTransaction(::filtering) - assertFailsWith { oracle.sign(ftx, wtx.id) } + assertFailsWith { oracle.sign(ftx) } } } @@ -198,20 +198,7 @@ class NodeInterestRatesTest { val tx = makeTX() val wtx = tx.toWireTransaction() val ftx = wtx.buildFilteredTransaction({ false }) - assertFailsWith { oracle.sign(ftx, wtx.id) } - } - - @Test - fun `partial tree verification exception`() { - databaseTransaction(database) { - val tx = makeTX() - val wtx1 = tx.toWireTransaction() - tx.addCommand(Cash.Commands.Move(), ALICE_PUBKEY) - val wtx2 = tx.toWireTransaction() - val ftx2 = wtx2.buildFilteredTransaction { x -> filterCmds(x) } - assertFalse(wtx1.id == wtx2.id) - assertFailsWith { oracle.sign(ftx2, wtx1.id) } - } + assertFailsWith { oracle.sign(ftx) } } @Test From 98c30f6432e5935d7657096112d1989a897b9f97 Mon Sep 17 00:00:00 2001 From: Ross Nicoll Date: Fri, 3 Feb 2017 14:07:45 +0000 Subject: [PATCH 33/33] Remove CashFlow Remove the CashFlow flow, replacing it with CashFlowCommand which can be used for the use-cases with instructions passed around as an object. --- .../net/corda/client/CordaRPCClientTest.kt | 3 + .../net/corda/client/NodeMonitorModelTest.kt | 42 +++++++----- .../net/corda/client/mock/EventGenerator.kt | 8 +-- .../core/flows/ContractUpgradeFlowTest.kt | 4 +- .../corda/docs/IntegrationTestingTutorial.kt | 28 ++++---- docs/source/release-notes.rst | 3 + .../main/kotlin/net/corda/flows/CashFlow.kt | 67 ------------------- .../kotlin/net/corda/flows/CashFlowCommand.kt | 48 +++++++++++++ .../net/corda/node/internal/AbstractNode.kt | 3 - .../main/kotlin/net/corda/explorer/Main.kt | 35 +++++----- .../views/cordapps/cash/NewTransaction.kt | 20 +++--- .../net/corda/loadtest/tests/CrossCashTest.kt | 18 ++--- .../corda/loadtest/tests/GenerateHelpers.kt | 14 ++-- .../net/corda/loadtest/tests/SelfIssueTest.kt | 6 +- 14 files changed, 147 insertions(+), 152 deletions(-) delete mode 100644 finance/src/main/kotlin/net/corda/flows/CashFlow.kt create mode 100644 finance/src/main/kotlin/net/corda/flows/CashFlowCommand.kt diff --git a/client/src/integration-test/kotlin/net/corda/client/CordaRPCClientTest.kt b/client/src/integration-test/kotlin/net/corda/client/CordaRPCClientTest.kt index 10cb50a950..4d43730ea3 100644 --- a/client/src/integration-test/kotlin/net/corda/client/CordaRPCClientTest.kt +++ b/client/src/integration-test/kotlin/net/corda/client/CordaRPCClientTest.kt @@ -10,6 +10,9 @@ import net.corda.core.random63BitValue import net.corda.core.serialization.OpaqueBytes import net.corda.flows.CashIssueFlow import net.corda.flows.CashPaymentFlow +import net.corda.node.driver.DriverBasedTest +import net.corda.node.driver.NodeHandle +import net.corda.node.driver.driver import net.corda.node.internal.Node import net.corda.node.services.User import net.corda.node.services.config.configureTestSSL diff --git a/client/src/integration-test/kotlin/net/corda/client/NodeMonitorModelTest.kt b/client/src/integration-test/kotlin/net/corda/client/NodeMonitorModelTest.kt index 4735014709..d72dd4342b 100644 --- a/client/src/integration-test/kotlin/net/corda/client/NodeMonitorModelTest.kt +++ b/client/src/integration-test/kotlin/net/corda/client/NodeMonitorModelTest.kt @@ -19,7 +19,9 @@ import net.corda.core.node.services.StateMachineTransactionMapping import net.corda.core.node.services.Vault import net.corda.core.serialization.OpaqueBytes import net.corda.core.transactions.SignedTransaction -import net.corda.flows.CashFlow +import net.corda.flows.CashExitFlow +import net.corda.flows.CashIssueFlow +import net.corda.flows.CashPaymentFlow import net.corda.node.driver.DriverBasedTest import net.corda.node.driver.driver import net.corda.node.services.User @@ -48,7 +50,11 @@ class NodeMonitorModelTest : DriverBasedTest() { lateinit var newNode: (String) -> NodeInfo override fun setup() = driver { - val cashUser = User("user1", "test", permissions = setOf(startFlowPermission())) + val cashUser = User("user1", "test", permissions = setOf( + startFlowPermission(), + startFlowPermission(), + startFlowPermission()) + ) val aliceNodeFuture = startNode("Alice", rpcUsers = listOf(cashUser)) val notaryNodeFuture = startNode("Notary", advertisedServices = setOf(ServiceInfo(SimpleNotaryService.type))) @@ -93,12 +99,12 @@ class NodeMonitorModelTest : DriverBasedTest() { @Test fun `cash issue works end to end`() { - rpc.startFlow(::CashFlow, CashFlow.Command.IssueCash( - amount = Amount(100, USD), - issueRef = OpaqueBytes(ByteArray(1, { 1 })), - recipient = aliceNode.legalIdentity, - notary = notaryNode.notaryIdentity - )) + rpc.startFlow(::CashIssueFlow, + Amount(100, USD), + OpaqueBytes(ByteArray(1, { 1 })), + aliceNode.legalIdentity, + notaryNode.notaryIdentity + ) vaultUpdates.expectEvents(isStrict = false) { sequence( @@ -118,17 +124,17 @@ class NodeMonitorModelTest : DriverBasedTest() { @Test fun `cash issue and move`() { - rpc.startFlow(::CashFlow, CashFlow.Command.IssueCash( - amount = Amount(100, USD), - issueRef = OpaqueBytes(ByteArray(1, { 1 })), - recipient = aliceNode.legalIdentity, - notary = notaryNode.notaryIdentity - )).returnValue.getOrThrow() + rpc.startFlow(::CashIssueFlow, + Amount(100, USD), + OpaqueBytes(ByteArray(1, { 1 })), + aliceNode.legalIdentity, + notaryNode.notaryIdentity + ).returnValue.getOrThrow() - rpc.startFlow(::CashFlow, CashFlow.Command.PayCash( - amount = Amount(100, Issued(PartyAndReference(aliceNode.legalIdentity, OpaqueBytes(ByteArray(1, { 1 }))), USD)), - recipient = aliceNode.legalIdentity - )) + rpc.startFlow(::CashPaymentFlow, + Amount(100, Issued(PartyAndReference(aliceNode.legalIdentity, OpaqueBytes(ByteArray(1, { 1 }))), USD)), + aliceNode.legalIdentity + ) var issueSmId: StateMachineRunId? = null var moveSmId: StateMachineRunId? = null diff --git a/client/src/main/kotlin/net/corda/client/mock/EventGenerator.kt b/client/src/main/kotlin/net/corda/client/mock/EventGenerator.kt index 1eb97c5963..c343878cc4 100644 --- a/client/src/main/kotlin/net/corda/client/mock/EventGenerator.kt +++ b/client/src/main/kotlin/net/corda/client/mock/EventGenerator.kt @@ -5,7 +5,7 @@ import net.corda.core.contracts.* import net.corda.core.crypto.Party import net.corda.core.serialization.OpaqueBytes import net.corda.core.transactions.TransactionBuilder -import net.corda.flows.CashFlow +import net.corda.flows.CashFlowCommand import java.util.* /** @@ -64,7 +64,7 @@ class EventGenerator( val issueCashGenerator = amountGenerator.combine(partyGenerator, issueRefGenerator) { amount, to, issueRef -> - CashFlow.Command.IssueCash( + CashFlowCommand.IssueCash( amount, issueRef, to, @@ -76,7 +76,7 @@ class EventGenerator( amountIssuedGenerator.combine( partyGenerator ) { amountIssued, recipient -> - CashFlow.Command.PayCash( + CashFlowCommand.PayCash( amount = amountIssued, recipient = recipient ) @@ -84,7 +84,7 @@ class EventGenerator( val exitCashGenerator = amountIssuedGenerator.map { - CashFlow.Command.ExitCash( + CashFlowCommand.ExitCash( it.withoutIssuer(), it.token.issuer.reference ) diff --git a/core/src/test/kotlin/net/corda/core/flows/ContractUpgradeFlowTest.kt b/core/src/test/kotlin/net/corda/core/flows/ContractUpgradeFlowTest.kt index d8779aaa88..26182caa86 100644 --- a/core/src/test/kotlin/net/corda/core/flows/ContractUpgradeFlowTest.kt +++ b/core/src/test/kotlin/net/corda/core/flows/ContractUpgradeFlowTest.kt @@ -8,7 +8,7 @@ import net.corda.core.crypto.SecureHash import net.corda.core.getOrThrow import net.corda.core.serialization.OpaqueBytes import net.corda.core.utilities.Emoji -import net.corda.flows.CashFlow +import net.corda.flows.CashIssueFlow import net.corda.flows.ContractUpgradeFlow import net.corda.flows.FinalityFlow import net.corda.node.utilities.databaseTransaction @@ -90,7 +90,7 @@ class ContractUpgradeFlowTest { @Test fun `upgrade Cash to v2`() { // Create some cash. - val result = a.services.startFlow(CashFlow(CashFlow.Command.IssueCash(Amount(1000, USD), OpaqueBytes.of(1), a.info.legalIdentity, notary))).resultFuture + val result = a.services.startFlow(CashIssueFlow(Amount(1000, USD), OpaqueBytes.of(1), a.info.legalIdentity, notary)).resultFuture mockNet.runNetwork() val stateAndRef = result.getOrThrow().tx.outRef(0) // Starts contract upgrade flow. diff --git a/docs/source/example-code/src/integration-test/kotlin/net/corda/docs/IntegrationTestingTutorial.kt b/docs/source/example-code/src/integration-test/kotlin/net/corda/docs/IntegrationTestingTutorial.kt index 123c473e64..bc2ee289fd 100644 --- a/docs/source/example-code/src/integration-test/kotlin/net/corda/docs/IntegrationTestingTutorial.kt +++ b/docs/source/example-code/src/integration-test/kotlin/net/corda/docs/IntegrationTestingTutorial.kt @@ -10,7 +10,8 @@ import net.corda.core.node.services.ServiceInfo import net.corda.core.node.services.Vault import net.corda.core.serialization.OpaqueBytes import net.corda.core.toFuture -import net.corda.flows.CashFlow +import net.corda.flows.CashIssueFlow +import net.corda.flows.CashPaymentFlow import net.corda.node.driver.driver import net.corda.node.services.User import net.corda.node.services.startFlowPermission @@ -28,7 +29,10 @@ class IntegrationTestingTutorial { fun `alice bob cash exchange example`() { // START 1 driver { - val testUser = User("testUser", "testPassword", permissions = setOf(startFlowPermission())) + val testUser = User("testUser", "testPassword", permissions = setOf( + startFlowPermission(), + startFlowPermission() + )) val (alice, bob, notary) = Futures.allAsList( startNode("Alice", rpcUsers = listOf(testUser)), startNode("Bob", rpcUsers = listOf(testUser)), @@ -56,12 +60,12 @@ class IntegrationTestingTutorial { val issueRef = OpaqueBytes.of(0) for (i in 1 .. 10) { thread { - aliceProxy.startFlow(::CashFlow, CashFlow.Command.IssueCash( - amount = i.DOLLARS, - issueRef = issueRef, - recipient = bob.nodeInfo.legalIdentity, - notary = notary.nodeInfo.notaryIdentity - )) + aliceProxy.startFlow(::CashIssueFlow, + i.DOLLARS, + issueRef, + bob.nodeInfo.legalIdentity, + notary.nodeInfo.notaryIdentity + ) } } @@ -82,10 +86,10 @@ class IntegrationTestingTutorial { // START 5 for (i in 1 .. 10) { - val flowHandle = bobProxy.startFlow(::CashFlow, CashFlow.Command.PayCash( - amount = i.DOLLARS.issuedBy(alice.nodeInfo.legalIdentity.ref(issueRef)), - recipient = alice.nodeInfo.legalIdentity - )) + val flowHandle = bobProxy.startFlow(::CashPaymentFlow, + i.DOLLARS.issuedBy(alice.nodeInfo.legalIdentity.ref(issueRef)), + alice.nodeInfo.legalIdentity + ) flowHandle.returnValue.getOrThrow() } diff --git a/docs/source/release-notes.rst b/docs/source/release-notes.rst index 95a0e925ab..87f9ddcc79 100644 --- a/docs/source/release-notes.rst +++ b/docs/source/release-notes.rst @@ -9,6 +9,9 @@ Milestone 9 * API: * Pseudonymous ``AnonymousParty`` class added as a superclass of ``Party``. + * Split ``CashFlow`` into individual ``CashIssueFlow``, ``CashPaymentFlow`` and ``CashExitFlow`` flows, so that fine + grained permissions can be applied. Added ``CashFlowCommand`` for use-cases where cash flow triggers need to be + captured in an object that can be passed around. Milestone 8 ----------- diff --git a/finance/src/main/kotlin/net/corda/flows/CashFlow.kt b/finance/src/main/kotlin/net/corda/flows/CashFlow.kt deleted file mode 100644 index 2c921ee768..0000000000 --- a/finance/src/main/kotlin/net/corda/flows/CashFlow.kt +++ /dev/null @@ -1,67 +0,0 @@ -package net.corda.flows - -import co.paralleluniverse.fibers.Suspendable -import net.corda.core.contracts.Amount -import net.corda.core.contracts.Issued -import net.corda.core.crypto.Party -import net.corda.core.flows.FlowLogic -import net.corda.core.serialization.OpaqueBytes -import net.corda.core.transactions.SignedTransaction -import net.corda.core.utilities.ProgressTracker -import java.util.* - -/** - * Initiates a flow that produces an Issue/Move or Exit Cash transaction. - * - * @param command Indicates what Cash transaction to create with what parameters. - */ -class CashFlow(val command: CashFlow.Command, override val progressTracker: ProgressTracker) : FlowLogic() { - constructor(command: CashFlow.Command) : this(command, tracker()) - - companion object { - object ISSUING : ProgressTracker.Step("Issuing cash") - object PAYING : ProgressTracker.Step("Paying cash") - object EXITING : ProgressTracker.Step("Exiting cash") - - fun tracker() = ProgressTracker(ISSUING, PAYING, EXITING) - } - - @Suspendable - @Throws(CashException::class) - override fun call(): SignedTransaction { - return when (command) { - is CashFlow.Command.IssueCash -> subFlow(CashIssueFlow(command.amount, command.issueRef, command.recipient, command.notary)) - is CashFlow.Command.PayCash -> subFlow(CashPaymentFlow(command.amount, command.recipient)) - is CashFlow.Command.ExitCash -> subFlow(CashExitFlow(command.amount, command.issueRef)) - } - } - - /** - * A command to initiate the Cash flow with. - */ - sealed class Command { - /** - * A command to initiate the Cash flow with. - */ - class IssueCash(val amount: Amount, - val issueRef: OpaqueBytes, - val recipient: Party, - val notary: Party) : CashFlow.Command() - - /** - * Pay cash to someone else. - * - * @param amount the amount of currency to issue on to the ledger. - * @param recipient the party to issue the cash to. - */ - class PayCash(val amount: Amount>, val recipient: Party) : CashFlow.Command() - - /** - * Exit cash from the ledger. - * - * @param amount the amount of currency to exit from the ledger. - * @param issueRef the reference previously specified on the issuance. - */ - class ExitCash(val amount: Amount, val issueRef: OpaqueBytes) : CashFlow.Command() - } -} diff --git a/finance/src/main/kotlin/net/corda/flows/CashFlowCommand.kt b/finance/src/main/kotlin/net/corda/flows/CashFlowCommand.kt new file mode 100644 index 0000000000..067d2f991d --- /dev/null +++ b/finance/src/main/kotlin/net/corda/flows/CashFlowCommand.kt @@ -0,0 +1,48 @@ +package net.corda.flows + +import net.corda.core.contracts.Amount +import net.corda.core.contracts.Issued +import net.corda.core.crypto.Party +import net.corda.core.messaging.CordaRPCOps +import net.corda.core.messaging.FlowHandle +import net.corda.core.messaging.startFlow +import net.corda.core.serialization.OpaqueBytes +import net.corda.core.transactions.SignedTransaction +import java.util.* + +/** + * A command to initiate the Cash flow with. + */ +sealed class CashFlowCommand { + abstract fun startFlow(proxy: CordaRPCOps): FlowHandle + + /** + * A command to initiate the Cash flow with. + */ + class IssueCash(val amount: Amount, + val issueRef: OpaqueBytes, + val recipient: Party, + val notary: Party) : CashFlowCommand() { + override fun startFlow(proxy: CordaRPCOps) = proxy.startFlow(::CashIssueFlow, amount, issueRef, recipient, notary) + } + + /** + * Pay cash to someone else. + * + * @param amount the amount of currency to issue on to the ledger. + * @param recipient the party to issue the cash to. + */ + class PayCash(val amount: Amount>, val recipient: Party) : CashFlowCommand() { + override fun startFlow(proxy: CordaRPCOps) = proxy.startFlow(::CashPaymentFlow, amount, recipient) + } + + /** + * Exit cash from the ledger. + * + * @param amount the amount of currency to exit from the ledger. + * @param issueRef the reference previously specified on the issuance. + */ + class ExitCash(val amount: Amount, val issueRef: OpaqueBytes) : CashFlowCommand() { + override fun startFlow(proxy: CordaRPCOps) = proxy.startFlow(::CashExitFlow, amount, issueRef) + } +} \ No newline at end of file diff --git a/node/src/main/kotlin/net/corda/node/internal/AbstractNode.kt b/node/src/main/kotlin/net/corda/node/internal/AbstractNode.kt index 0287964988..f353c3996b 100644 --- a/node/src/main/kotlin/net/corda/node/internal/AbstractNode.kt +++ b/node/src/main/kotlin/net/corda/node/internal/AbstractNode.kt @@ -81,9 +81,6 @@ abstract class AbstractNode(open val configuration: NodeConfiguration, val PUBLIC_IDENTITY_FILE_NAME = "identity-public" val defaultFlowWhiteList: Map>, Set>> = mapOf( - CashFlow::class.java to setOf(CashFlow.Command.IssueCash::class.java, - CashFlow.Command.PayCash::class.java, - CashFlow.Command.ExitCash::class.java), CashExitFlow::class.java to setOf(Amount::class.java, PartyAndReference::class.java), CashIssueFlow::class.java to setOf(Amount::class.java, OpaqueBytes::class.java, Party::class.java), CashPaymentFlow::class.java to setOf(Amount::class.java, Party::class.java), diff --git a/tools/explorer/src/main/kotlin/net/corda/explorer/Main.kt b/tools/explorer/src/main/kotlin/net/corda/explorer/Main.kt index 130b09b933..b7e1712841 100644 --- a/tools/explorer/src/main/kotlin/net/corda/explorer/Main.kt +++ b/tools/explorer/src/main/kotlin/net/corda/explorer/Main.kt @@ -21,7 +21,9 @@ import net.corda.explorer.model.CordaViewModel import net.corda.explorer.model.SettingsModel import net.corda.explorer.views.* import net.corda.explorer.views.cordapps.cash.CashViewer -import net.corda.flows.CashFlow +import net.corda.flows.CashExitFlow +import net.corda.flows.CashIssueFlow +import net.corda.flows.CashPaymentFlow import net.corda.flows.IssuerFlow.IssuanceRequester import net.corda.node.driver.PortAllocation import net.corda.node.driver.driver @@ -107,8 +109,15 @@ class Main : App(MainView::class) { fun main(args: Array) { val portAllocation = PortAllocation.Incremental(20000) driver(portAllocation = portAllocation) { - val user = User("user1", "test", permissions = setOf(startFlowPermission())) - val manager = User("manager", "test", permissions = setOf(startFlowPermission(), startFlowPermission())) + val user = User("user1", "test", permissions = setOf( + startFlowPermission() + )) + val manager = User("manager", "test", permissions = setOf( + startFlowPermission(), + startFlowPermission(), + startFlowPermission(), + startFlowPermission()) + ) // TODO : Supported flow should be exposed somehow from the node instead of set of ServiceInfo. val notary = startNode("Notary", advertisedServices = setOf(ServiceInfo(SimpleNotaryService.type)), customOverrides = mapOf("nearestCity" to "Zurich")) @@ -178,34 +187,26 @@ fun main(args: Array) { // Party pay requests listOf(aliceRPC, bobRPC).forEach { eventGenerator.clientCommandGenerator.map { command -> - it.startFlow(::CashFlow, command) + command.startFlow(it) Unit }.generate(SplittableRandom()) } // Exit requests issuerGBPEventGenerator.bankOfCordaExitGenerator.map { command -> - issuerRPCGBP.startFlow(::CashFlow, command) + command.startFlow(issuerRPCGBP) Unit }.generate(SplittableRandom()) issuerUSDEventGenerator.bankOfCordaExitGenerator.map { command -> - issuerRPCUSD.startFlow(::CashFlow, command) + command.startFlow(issuerRPCUSD) Unit }.generate(SplittableRandom()) // Issuer requests issuerGBPEventGenerator.bankOfCordaIssueGenerator.map { command -> - issuerRPCGBP.startFlow(::IssuanceRequester, - command.amount, - command.recipient, - command.issueRef, - issuerNodeGBP.nodeInfo.legalIdentity) + command.startFlow(issuerRPCGBP) Unit }.generate(SplittableRandom()) issuerUSDEventGenerator.bankOfCordaIssueGenerator.map { command -> - issuerRPCUSD.startFlow(::IssuanceRequester, - command.amount, - command.recipient, - command.issueRef, - issuerNodeUSD.nodeInfo.legalIdentity) + command.startFlow(issuerRPCUSD) Unit }.generate(SplittableRandom()) } @@ -216,4 +217,4 @@ fun main(args: Array) { } waitForAllNodesToFinish() } -} \ No newline at end of file +} diff --git a/tools/explorer/src/main/kotlin/net/corda/explorer/views/cordapps/cash/NewTransaction.kt b/tools/explorer/src/main/kotlin/net/corda/explorer/views/cordapps/cash/NewTransaction.kt index fafdb48dd6..d26ad55c8f 100644 --- a/tools/explorer/src/main/kotlin/net/corda/explorer/views/cordapps/cash/NewTransaction.kt +++ b/tools/explorer/src/main/kotlin/net/corda/explorer/views/cordapps/cash/NewTransaction.kt @@ -28,7 +28,7 @@ import net.corda.explorer.model.ReportingCurrencyModel import net.corda.explorer.views.bigDecimalFormatter import net.corda.explorer.views.byteFormatter import net.corda.explorer.views.stringConverter -import net.corda.flows.CashFlow +import net.corda.flows.CashFlowCommand import net.corda.flows.IssuerFlow.IssuanceRequester import org.controlsfx.dialog.ExceptionDialog import tornadofx.Fragment @@ -87,7 +87,7 @@ class NewTransaction : Fragment() { } dialog.show() runAsync { - val handle = if (it is CashFlow.Command.IssueCash) { + val handle = if (it is CashFlowCommand.IssueCash) { myIdentity.value?.let { myIdentity -> rpcProxy.value!!.startFlow(::IssuanceRequester, it.amount, @@ -96,7 +96,7 @@ class NewTransaction : Fragment() { myIdentity.legalIdentity) } } else { - rpcProxy.value!!.startFlow(::CashFlow, it) + it.startFlow(rpcProxy.value!!) } val response = try { handle?.returnValue?.getOrThrow() @@ -110,9 +110,9 @@ class NewTransaction : Fragment() { Alert.AlertType.ERROR to response.message } else { val type = when (command) { - is CashFlow.Command.IssueCash -> "Cash Issued" - is CashFlow.Command.ExitCash -> "Cash Exited" - is CashFlow.Command.PayCash -> "Cash Paid" + is CashFlowCommand.IssueCash -> "Cash Issued" + is CashFlowCommand.ExitCash -> "Cash Exited" + is CashFlowCommand.PayCash -> "Cash Paid" } Alert.AlertType.INFORMATION to "$type \nTransaction ID : ${(response as SignedTransaction).id}" } @@ -127,7 +127,7 @@ class NewTransaction : Fragment() { } } - private fun dialog(window: Window) = Dialog().apply { + private fun dialog(window: Window) = Dialog().apply { dialogPane = root initOwner(window) setResultConverter { @@ -136,10 +136,10 @@ class NewTransaction : Fragment() { when (it) { executeButton -> when (transactionTypeCB.value) { CashTransaction.Issue -> { - CashFlow.Command.IssueCash(Amount(amount.value, currencyChoiceBox.value), issueRef, partyBChoiceBox.value.legalIdentity, notaries.first().notaryIdentity) + CashFlowCommand.IssueCash(Amount(amount.value, currencyChoiceBox.value), issueRef, partyBChoiceBox.value.legalIdentity, notaries.first().notaryIdentity) } - CashTransaction.Pay -> CashFlow.Command.PayCash(Amount(amount.value, Issued(PartyAndReference(issuerChoiceBox.value, issueRef), currencyChoiceBox.value)), partyBChoiceBox.value.legalIdentity) - CashTransaction.Exit -> CashFlow.Command.ExitCash(Amount(amount.value, currencyChoiceBox.value), issueRef) + CashTransaction.Pay -> CashFlowCommand.PayCash(Amount(amount.value, Issued(PartyAndReference(issuerChoiceBox.value, issueRef), currencyChoiceBox.value)), partyBChoiceBox.value.legalIdentity) + CashTransaction.Exit -> CashFlowCommand.ExitCash(Amount(amount.value, currencyChoiceBox.value), issueRef) else -> null } else -> null diff --git a/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/CrossCashTest.kt b/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/CrossCashTest.kt index 0dd578a95e..e9b53de537 100644 --- a/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/CrossCashTest.kt +++ b/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/CrossCashTest.kt @@ -14,7 +14,7 @@ import net.corda.core.messaging.startFlow import net.corda.core.serialization.OpaqueBytes import net.corda.core.toFuture import net.corda.flows.CashException -import net.corda.flows.CashFlow +import net.corda.flows.CashFlowCommand import net.corda.loadtest.LoadTest import net.corda.loadtest.NodeHandle import org.slf4j.LoggerFactory @@ -29,18 +29,18 @@ private val log = LoggerFactory.getLogger("CrossCash") */ data class CrossCashCommand( - val command: CashFlow.Command, + val command: CashFlowCommand, val node: NodeHandle ) { override fun toString(): String { return when (command) { - is CashFlow.Command.IssueCash -> { + is CashFlowCommand.IssueCash -> { "ISSUE ${node.info.legalIdentity} -> ${command.recipient} : ${command.amount}" } - is CashFlow.Command.PayCash -> { + is CashFlowCommand.PayCash -> { "MOVE ${node.info.legalIdentity} -> ${command.recipient} : ${command.amount}" } - is CashFlow.Command.ExitCash -> { + is CashFlowCommand.ExitCash -> { "EXIT ${node.info.legalIdentity} : ${command.amount}" } } @@ -146,7 +146,7 @@ val crossCashTest = LoadTest( interpret = { state, command -> when (command.command) { - is CashFlow.Command.IssueCash -> { + is CashFlowCommand.IssueCash -> { val newDiffQueues = state.copyQueues() val originators = newDiffQueues.getOrPut(command.command.recipient, { HashMap() }) val issuer = command.node.info.legalIdentity @@ -156,7 +156,7 @@ val crossCashTest = LoadTest( queue.add(Pair(issuer, quantity)) CrossCashState(state.nodeVaults, newDiffQueues) } - is CashFlow.Command.PayCash -> { + is CashFlowCommand.PayCash -> { val newNodeVaults = state.copyVaults() val newDiffQueues = state.copyQueues() val recipientOriginators = newDiffQueues.getOrPut(command.command.recipient, { HashMap() }) @@ -183,7 +183,7 @@ val crossCashTest = LoadTest( recipientQueue.add(Pair(issuer, quantity)) CrossCashState(newNodeVaults, newDiffQueues) } - is CashFlow.Command.ExitCash -> { + is CashFlowCommand.ExitCash -> { val newNodeVaults = state.copyVaults() val issuer = command.node.info.legalIdentity val quantity = command.command.amount.quantity @@ -209,7 +209,7 @@ val crossCashTest = LoadTest( execute = { command -> try { - val result = command.node.connection.proxy.startFlow(::CashFlow, command.command).returnValue.getOrThrow() + val result = command.command.startFlow(command.node.connection.proxy).returnValue.getOrThrow() log.info("Success: $result") } catch (e: FlowException) { log.error("Failure", e) diff --git a/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/GenerateHelpers.kt b/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/GenerateHelpers.kt index ffeb83ea45..34a324b95a 100644 --- a/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/GenerateHelpers.kt +++ b/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/GenerateHelpers.kt @@ -8,7 +8,7 @@ import net.corda.core.contracts.PartyAndReference import net.corda.core.crypto.AnonymousParty import net.corda.core.crypto.Party import net.corda.core.serialization.OpaqueBytes -import net.corda.flows.CashFlow +import net.corda.flows.CashFlowCommand import java.util.* fun generateIssue( @@ -16,12 +16,12 @@ fun generateIssue( currency: Currency, notary: Party, possibleRecipients: List -): Generator { +): Generator { return generateAmount(0, max, Generator.pure(currency)).combine( Generator.pure(OpaqueBytes.of(0)), Generator.pickOne(possibleRecipients) ) { amount, ref, recipient -> - CashFlow.Command.IssueCash(amount, ref, recipient, notary) + CashFlowCommand.IssueCash(amount, ref, recipient, notary) } } @@ -30,19 +30,19 @@ fun generateMove( currency: Currency, issuer: AnonymousParty, possibleRecipients: List -): Generator { +): Generator { return generateAmount(1, max, Generator.pure(Issued(PartyAndReference(issuer, OpaqueBytes.of(0)), currency))).combine( Generator.pickOne(possibleRecipients) ) { amount, recipient -> - CashFlow.Command.PayCash(amount, recipient) + CashFlowCommand.PayCash(amount, recipient) } } fun generateExit( max: Long, currency: Currency -): Generator { +): Generator { return generateAmount(1, max, Generator.pure(currency)).map { amount -> - CashFlow.Command.ExitCash(amount, OpaqueBytes.of(0)) + CashFlowCommand.ExitCash(amount, OpaqueBytes.of(0)) } } diff --git a/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/SelfIssueTest.kt b/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/SelfIssueTest.kt index f957bb0d5c..e856f08913 100644 --- a/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/SelfIssueTest.kt +++ b/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/SelfIssueTest.kt @@ -13,7 +13,7 @@ import net.corda.core.getOrThrow import net.corda.core.messaging.startFlow import net.corda.core.toFuture import net.corda.flows.CashException -import net.corda.flows.CashFlow +import net.corda.flows.CashFlowCommand import net.corda.loadtest.LoadTest import net.corda.loadtest.NodeHandle import org.slf4j.LoggerFactory @@ -23,7 +23,7 @@ private val log = LoggerFactory.getLogger("SelfIssue") // DOCS START 1 data class SelfIssueCommand( - val command: CashFlow.Command.IssueCash, + val command: CashFlowCommand.IssueCash, val node: NodeHandle ) @@ -64,7 +64,7 @@ val selfIssueTest = LoadTest( execute = { command -> try { - val result = command.node.connection.proxy.startFlow(::CashFlow, command.command).returnValue.getOrThrow() + val result = command.command.startFlow(command.node.connection.proxy).returnValue.getOrThrow() log.info("Success: $result") } catch (e: FlowException) { log.error("Failure", e)